{"_id":"@pvermeer/dexie-encrypted-addon","_rev":"50-ea0ce1a198f6f2c4db879f2ce0c88c76","name":"@pvermeer/dexie-encrypted-addon","dist-tags":{"next":"1.0.9","latest":"3.0.0","beta":"4.0.0-beta.0"},"versions":{"1.0.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"eba30b012a0acf41d271e5e326fa6f20c0227992","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.0.tgz","fileCount":20,"integrity":"sha512-/VmLvXmHzpMLceZpUIDe5idmeCWTaQFxt0T+EekFGMwVO5Iy1DriifP9jCurGBsEOGmjEvGoD4MWYHQjUgtMFQ==","signatures":[{"sig":"MEQCIE3pQUoYdM2LUVmSb7YcguVPQpwQ6V6eiNgoEfUdqteJAiA/YblhM3KdcrPUai73gDP9To0Rjt6Xxd7NegbJiR98Bg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1455110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeIMx9CRA9TVsSAnZWagAA9RYQAI3ZwmIUPZ5/Xr7gkNOb\ny+8DbcDCVaPRva7xQxtrV62x443lVCp6T0gp76GANBJChLZf1qysMxGdd5d9\nMxj9nQo9v8lsAiKouNOKcITziwzPFfvIEI6KIyf7Y47lJw4yPxbI8Q4o0UuR\nlLb0INBpk5LpF3uTAqX5u5x44+C8/MwhqXNlowF8kXzLL+0/DSnJSBYZvkPk\nkmGGqXS2nJm+gFUzLvY3WjJETjGLe2Rck2zIaaDksuNRgeukDXWernQQ0u4j\nlBXrgQNfeBOvjK80sFjEW1qSrv/k1xMPtRmm6y78sdq1ie4c2fnwBjnLbADR\ns/L0JzSf3ODqf+jLT+XQ5ke6dPd+uz3NDLe6qu+r3CUmr9LRgt4FBQ0dHfUJ\nE/cN37idBF2PCpRn1OhNjWvcCWJL+8xHjSwtGCFVKdn3JdOq0MT5WddP4koe\ncFHVJ7p4OxnfFUp+bS6C1/jFcRnMqhwRSSV7RpK7U43t6dmYT/v2D/R4R0gv\ng1Fc75GG17PttDbyD7/1pQ/siPcWhWLl+C0eh4meKlLO5jJw+z69U2UdAMY6\nkyx/W7HRO1aoPrjJNGdnKCIwA93YJl/i3QzWdTRBWPwjxL0OJhG8AbS5ZQeM\nSiBB8BvQUy6koeq08XaIRjn6zuYif+7QHUMhhOiuoZYZC4l/XtmMXXhuouAQ\nk1Hd\r\n=i+9p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is master; then npm run test; fi","commit-msg":"if git-branch-is master; then commitlint -E HUSKY_GIT_PARAMS; fi"}},"module":"dist/es6/index.js","gitHead":"50dbc647a125c6d7d49e2b8a0c6d74c6fb556bf1","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/","build:es6":"tsc -p src/tsconfig.json -m es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"jasmine --require=ts-node/register --config=test/jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Testing","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","webpack-node-externals":"^1.7.2","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","karma-jasmine-html-reporter":"^1.5.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.0_1579207805251_0.1578828801485057","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.2":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.2","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"38cb15951d88e58ccee1033a8223bbe763738e33","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.2.tgz","fileCount":21,"integrity":"sha512-/eddU4DpHW29g1IxMst9cmxn2DQonN83Sz6UCdV5WkadbhUl/rv1u0QIY/paIbrJ2VaE82aoL48q1KB+U/gRKQ==","signatures":[{"sig":"MEUCIQDb7Dpd+iIf3y5ZjnRrOk6GANrMirIwdiurEpgaWbYqqwIgJItO1c7ncgDt1qolNV9m6laIOEiFLZUJNUuEvFxPRvI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1455999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeIPIYCRA9TVsSAnZWagAAptUP/Rgd2hbpFzFT4stxXHB1\n4BrWkhacfAYtLcFtuFU9Y61mEWeKWmWI6aYwFtbguA8/SyI/3xZ+jbSOGPLm\nBGGMCZCzMGCd6bM4szX5X7h4sUBWlyV1Q4KWLpuuU+3Cz48gp28xlti16tuM\nvkpWzmi+dIK0BerIvy+lhPssOCVK2U0APIc4y90xH2IsWLqnnYO1ITN9UY4k\nBICMW0FURpAFx9+Mul/CXlAE5recLmiJWgb/ZjjIoqeq7rRDdM80OGv+rWXY\nNUyuTsJlAx0J5ltPISI4jcLs9CjxIudVikzhLe6tMn6XlZiy7HWm0Sz2w79v\ndWvGoiucVXTn9YYG0xoem27JE5nOPgKaRTUJEf2BzT5suMzF8s2lIK6I1wI7\nR2SzPlSIC0yQObXqaNeMu3Ihlut9xIvV7oPVOwuupmx9agecHXkn97Iy4qwu\nGbGsBbDdH34OPN4wXIdmV7kMo3I95CaRwlIPuX/6NPjXeaoiHoLyZfIfozSd\nU948muMGv1PB3VOLnHzH6vVJe0oA3O4H3ZQlCrRsp/0t3d0gSpy3udb2a8Ao\npR1gUhe44oEDCBtQ0ImTU2InuW4DY7e243PHzfUg0EVAWsu9kMcjpdPKhHIS\nt7Q2Tz5lrsIB/NMUPTnICtyd/nLjeJhL532FmQnsjPzwCo4lQi/5gJe5X+HC\nlVFL\r\n=WMZz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is master; then npm run test; fi","commit-msg":"if git-branch-is master; then commitlint -E HUSKY_GIT_PARAMS; fi"}},"module":"dist/es6/index.js","gitHead":"1fdeae5fa70276e3ee0ba0c18f683784d7ef506e","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/","build:es6":"tsc -p src/tsconfig.json -m es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"jasmine --require=ts-node/register --config=test/jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.4","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.0","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","webpack-node-externals":"^1.7.2","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","karma-jasmine-html-reporter":"^1.5.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2","@jedmao/semantic-release-npm-github-config":"^1.0.9"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.2_1579217431621_0.1909618589899269","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.3","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"b4d37948a8f568b5a97e50b3ce48e00abc4f52fd","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.3.tgz","fileCount":22,"integrity":"sha512-8mmlAF4ATxvDaX28r34gyilcoglywPSsDMZxVfe847dUgAm0Nle9DfKiFdbMmeS4UT4tyv6qDoiRMnvlKsP0uQ==","signatures":[{"sig":"MEYCIQCUtWZ7tolXmwE/6qwMKeacfo3lsRu0M0g/AqHbuvec+gIhAOTMkFkTEz7mk8kEKytoPkSlwx8l5sKkeyyIT7BrE1mc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1104201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeIcM4CRA9TVsSAnZWagAArawP/04944qXtxTaFFPItlpQ\n1jnPCSs0hgra27lsU6C2V4fn7CNQMBirRp1srBvNb4ahwu86quG/mGBvQBPj\nBOvslaSH78XmhecnhTRAHGVnfDHyoXwl1GC7qVvxSCY2cm0vEXT97uxVNBeP\nPs+KIYPAmHZvpN9RMz52kpyYzGl2ahly1ZH+4QbM+2JoElkyYBWmOQO3DhKj\nTfwsnqjo3DzNVyHfCqBDMMNo2t4NeHp/vZ0ZT4nqisqcvp58TIy6jAaqsmYG\n3m2e4L8nKMJKUWgmn8pQlcnJZQZ7AYLIXJoaVL3uYJT+1261RpElLYZcRXbR\nhH5npQJLD1ul3L3KphXoSeHQ1+fET7EAqBGA2EHd+GCXrHkKP190QsuGPqK8\no0Xlj1J/0y92egAp7gN+sryTQRS7nKSslbXUXSD3kmUU7q6HXUyTjoI5GUqW\nhdiUEiJrAhBtWACdSvKv2DVc4QDPidh4kaKojnwvJGg9ARAawX75S37V99ae\nrg+b8V6+FSnJuwIt5zlvd9OqyrJHgEJuy3zNl+85cuqve6hafFiA8oo7uKhk\nlOA7zQRBW6X1JAd5E2CKf3zJqdiTdWR4UyWMiW0tXnqF/ou5i7AFZ5Zo6j4n\n2ZVzU5Apm+iRVr/xdpU2T6EHafTtd4xWDooCzINgb5pr5iGxndManlmn7MmF\ngd0t\r\n=F1zd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","gitHead":"6a4874fe86e08c6bcab54ec49fb84b6fa71ec876","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/","build:es6":"tsc -p src/tsconfig.json -m es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"jasmine --require=ts-node/register --config=test/jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","karma-jasmine-html-reporter":"^1.5.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2","@jedmao/semantic-release-npm-github-config":"^1.0.9"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.3_1579270967055_0.22103282975494287","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.4":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.4","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"5c729b7654ae321accd8659aba739d4eee15c0c8","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.4.tgz","fileCount":22,"integrity":"sha512-xf6Zwwl+YxCAg3VNxFbA8IjUHCdSc/GaefRhU1NxUa7E1npbJiur0S3yvK7EuWHVUWFbe4xdaggngKxE+Y2pOQ==","signatures":[{"sig":"MEQCIG0X2eDb55JfHbWvINzDHWHwbOFBv5uLEEDS3ieSAPR2AiB147VHnO4FgVs1iH9/2lvTlAtgVzRQQG9rl7ZNVg7IBA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436271,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJbjtCRA9TVsSAnZWagAAPooP/j88xfufDJSJBYi0fVlV\nmQ+gnkkgAh9rko6UbiadSNHvWWtNG8SMvENitKtBYUtPzdRcOZamRUDoCsSW\nBH/4cfIdpbVLFGtUh1Ubd4PjpJK22KQKqbHKJzQKrmt26WCAM36sskiZzHd9\nG640Enh70SvQH4WOByqwEifaJf38eLcUpFGnzepJWB4Vw26MXNb7KEBZfr9H\nbuSvimbxVmCDXQrDwLYYO9i4NyJTUUr1uTtnxRqkJYHAzJYIPGxv9EBI/N8/\nL4o1C53Gms2VZqF2lmzpBYXEsb7EsRUp/0ZqBVZWwC6MnddLll3bj7Q2zCp/\nMsaHwv3MbjPcTb/MX0mI/YV9vwZSFCeiEBbluDAWp8T6hNCxwiAMAqXE2efL\nlPY9+hI6d52NFPFuO6fPJDyFiKCodpIS6Gqw+G8L8/ybOlQ01wpk14SOf7bn\nJ19ORYWz6bjhuHODcQDa3bmJgT0Ar16UT28ISF6YJ8h59FuJ8vxl596EKaJf\n6BC3Xp/S1Sk1ZaL8Okz1+/Ft4irYvrw7Z6AlKDE3qKohiBqQa9uxY22++gjB\nx8DkfjVSKmfJqesakHXFFJnYaqdlbEukA57T4wWlMK6YcHd81aTE3QGswPJl\nQkYLX+LWfGTXo+E0UW3/1PIrZDPyvs+ekRm/RWE/d6V/PqjH3hI0muLXntn/\noFiC\r\n=48Uv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","gitHead":"117fe0a120bd6282a7c450e8272625a2c39d7107","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2","@jedmao/semantic-release-npm-github-config":"^1.0.9"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.4_1579530476573_0.1028347411963979","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.5":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.5","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.5","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"582f0467be07bbe58980ef2820ecd53b0d43477d","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.5.tgz","fileCount":22,"integrity":"sha512-+gSZCqzFUutsC/hk04mA1VEay1QdVreTfzeXvpxR4645Tjkl7DwQZ6TjLj585xqipUO2TQUHqNE9SY7cJrNFWA==","signatures":[{"sig":"MEYCIQCAxGtszs1TsBNhEKK7pPFE3vmx3j4gxCeXv/rVUnoFHwIhAOFn5aBVIoARI8lUyZYC9zq58x8HSKDi4rHLTm8NHgUC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJc21CRA9TVsSAnZWagAAmVUP/39FaZ9SML/Oa5FmeSHh\noWvoi4MP32YljKDypZH3oW2aJ1F4hr3Xc8GoO1tfn3NKQBYRTaR73ep4UF5A\nmhAfnHOfgeqWBZn4xGy5wjk2DAaZx+pkcVYz54MaeT+govlS/oz99qsjujdQ\nbgPZpAwCZBpPNBbIE3uWJYSM3buVCO0tznP5cN1EFaC3yink2wmrb+ogFjgx\no+kxyPBY3ngW0JhoVpSJVb/OkMUVUCqrpa10LrQTkCKFXwrb1oofG6c4WSJA\nknoRP4C1mQhekmOOQLTn8kj6p8Dxn8zWn5KKVaOqwiyUZLMTc/CFvbzdKGPI\nwJNj9NEIOeDf31KEYp8tlXDNEMhxrUBjfOqjn9b/gaBSCBINyyilljeE6HT+\n5Ji1+9kxHGwJBrXcan9g8nPLrykO+ZaAoWjuE9ZByTAPOOLf1LgGZRPDvGbc\nnKr7fE5Upbc/BmYTkbTr64/k4evfTY1EAUQ6LGVNF4T8fjOexukvutpxZN98\n/OVazyC6B5ryDTVgIuSieGhQa6rDCaL3HiQbh4rpT9gSA2F3jBfSqFED499p\nIg4N0FCFr05XtdmRnUDPNOoJksCVebmZMcyjpW0bwzCWsTzUF49vLY08WXbw\noGFX/kWcdeovKdinJ7BMPU4U34XCNXUTI5oerIKisK2TgxF1hXeIbsiM//2P\no/eC\r\n=l7rI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","gitHead":"61de6cbfb35109c6af983d6722799297ee437486","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","git-branch":"^2.0.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2","@jedmao/semantic-release-npm-github-config":"^1.0.9"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.5_1579535797353_0.6687656793632286","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.6":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.6","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.6","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"af2e7604c62615a3637a5c374262bf7edc36b544","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.6.tgz","fileCount":22,"integrity":"sha512-fNL2lxCrWIbBvIPKxGKUl6OSu1p0/Yv0g9SeOlH56kK2MgyJ8aYmT9I/4m4Ro2ZvljKLeMf4Z5FPD5RSXK2ahA==","signatures":[{"sig":"MEQCIBv3v2AAJFsFyKZhAIjEzsrpVqwMsjXejeeYreBxxqIwAiAQvJWfzZ5FL2l7UjxmRD4vO1wQXXTA2M8p9FPXrb1GGw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJdbpCRA9TVsSAnZWagAA3agP/23ITrsL6jZOlGjykpPD\nwa7s2wLjMLi35JZaAcuaCZSrOoFQ7bDOmTXrWCGMKevOQ92LGqWE9thVcoPO\ndbouvFAdFNbMB77a43oXc5GMp8/YKIqOtFs8OlVbP3aubnFGPCkDvmCy8dlu\nV+c0bZym4Tb14ucvY7PSc06Y3N2EGvloHXEhY4LfqHj6zRvK7ecQKxpLcRvu\nodGIn/AJh0e+C2qi6SbFu0zSDaX0R7ldj+Z6YT+4bvulx8aHw02VUYkZ/1x4\n/xKU0RaAQX9wWjoIQYmspgiOzIwnVOQGPP7w921/1tg7kwkTAMHxbmSSXV9q\nUTvVvv3rNVR5BgKBaIynaCtQA4JSRyzpEXnrusvcJhPXU7qkioMYnGnK73AD\nXAJyn7s32TkG7G4eNoQx+DuQOd4dXVizKyt53L6HTlywxtHYJeLYPT1Gy3Ad\nP8C7odg7pSwgN2e7EkHaQLEI/HIIu0zx7jml998bkAdR+ecqVis4aSehhcTc\n5ArTSyv37Ovq1+Qgrd+g7ZPIiUdXy/qf1DasR/QIaszDfKWGbCWwD5UYXRO7\nXCd2zROMwJFWc0gavfmw0alhdIZLGCOOZxMpwmGJXRwPbajhVCntVWf2ZguR\n4SybU2jf8YIEBHDyRbm5Y+QzKnCA2WHKHF0pjVaJozzv6C6fxNHML2RttNU5\n4XuA\r\n=eG9/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nBy default immutablity is applied to all creation and update methods via overrides.\nDexie does not do this by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c89f5e70489eb25522520b63bedbae69618d9b13","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","git-branch":"^2.0.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2","@jedmao/semantic-release-npm-github-config":"^1.0.9"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.6_1579538152799_0.041146675997154825","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.7":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.7","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.7","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"cc6004f198088a5726312c697cede892cde8ecb0","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.7.tgz","fileCount":22,"integrity":"sha512-OtTJ48L+L8W4R8MRnxxO/5k5NR20129GPtdIQi6vbubM9M3xm/eSzgFUrZ5eLhH7XV82LcvJBmkmvdBoAxhNTg==","signatures":[{"sig":"MEQCIHGzWM9EYdTsWD6Mk0DM+rvsmL9yAKvbC2jMUgxR+yyhAiAeYQMGLFMQLKwvwYdmbQeq1LPMSyMp2335/600U6dHlg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJe7pCRA9TVsSAnZWagAAAUoP/3m71oi99+7IKDc1+4tQ\ntjzkx1Tq8/3ZEZK5Q65/wmN6/rfx71VyK2anONpVnYR+ZbLd1db2OwqXsaXz\nlaXDo+V6VKHfcEU3UsJJZCIwrdFa7BVBlRDee0/4RfsNNQ6ob/uugF0Svp+C\n5sozf8u9pV/f+PMBWm8G1WKQRnxJk9Xjebco/Vg5flzhERmua2x0IWxyRhF9\n4xwiWmV0fO0ZhhfibWqd/baVGJu8pFDeRqWN6GH/E8tV7UzrlponVg/Qd+SL\nJGr9vlHEHW6p+X6Z6O/6Mc3gAeoTuHl+kBON2ToZx9J1qkLp7oDHb8KnHX/a\nWyap3lCbc4VxmJaLehhO25bEp0bIPUnle3tQ+lSyFkxuv1nOvLj87wJf1v+w\nt5BOsvuG3htfZAaWPzbFnU1oVnnRipr4jsjONKhIeT42ZTLHBrzeZ9rQMyV5\nR+aAjQFSIOvymw+PcjbhjNiKghiP+jIi4mesrZ61lDtc7RrtRu/tjt1QpE29\nMvOaY1nx7u9yaIx6EMSo7P8B0XwsBugIo6NVIMBZFqXZL+GTUtToWOTv6LVZ\nOZbjpm9tS6FkTq6n9GgkHCXR9E+PMbsEefhnZTt12CueDrAVOG6oGP6HowwU\nhSn+U6hNpsP+2uMOvNCvjMkd/OhTcDmhSBDLGa8qiVT0qsedj6gG1K5ghxcJ\nEI9H\r\n=1YVX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nBy default immutablity is applied to all creation and update methods via overrides.\nDexie does not do this by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"5eed5259fdbe6684c39a50f8d0bb8bf6bdf27e17","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.7_1579544296842_0.33087568780844867","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.8":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.8","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.8","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"c13833b2642163da6c26ddaea1db3cce243123d1","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.8.tgz","fileCount":22,"integrity":"sha512-G2EjNmGLKnO/p+Lbrv2T1ESRKcMW/O/JuVmNFd7wdxId2O91tAr3pon2HRsGiqK0wu/1EAOx8ZuFAURZOFwmSA==","signatures":[{"sig":"MEYCIQDTTCs2u9yqVdWiKWI2VZ+6hgJN2gvUrFvqyq4U53SPmAIhAOU0HcIRnQ0SKFFp+C4Qh1hiCBGoPfiRK0p59x06ClT2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJfJeCRA9TVsSAnZWagAA7KAP/jmo3YKlM5qDDWj2MJx3\n0nxo0P5BWd5gHhO6o4oOkBI0kBw9y1jxNEW2qkY+4PWIRX1CaG15Itfkt8Qo\n717NNahOtSSERPONhn+c5xUsgxzpOdLXk7hC1OyE5xeXnNGrFzTraIlcwPrY\nxaLXXMjtA7BfLCxp9oHX+KUnH7TZcymga2m0gYgZiO43w0OJy/OuelistkTo\nf69deD/KEL2CKvZZdTvXCe4vbtk6sudfG+IXCnTzMyPeI3GrwiIex3FNUdEL\n4B5rjcc6bZWKNlK8be4UMY8kKb8KtV2EljYJhxxSH6WYi1dz7j/zI9gwt8um\njVH/KyL85uwRIQQka51ktcY7KJxCcZYrYc+Su09L2OzLD5x2jx+gmx549+gX\ngdwKBZGI0KIwpmUkkxn2w7fXIHBgUFvN6FnoBmlMGZKMyXnepZc7PnjSnK3y\nsyjsU5F3iGxbmVRvKyHaTxk/C8ViFtDb8feuUJHl5Gph7I3OvkSsxHC7igu7\nqE17S6sK4rNAzyuzoY2DHHCVeNNRANlnWXGtT3jUEYZKf0j/XkSqxnk2sT/q\nLt2Fc8hYj7VKGvqe0t4hdC5wO/WZEaZ+CjnqqKLieqJmPg21Kv7XikQJ3xPH\nG/zibtoacLhOgwuatepRSuLoB3cc2m4mzJzFdLnUwn3WUM0cA7voUaqlJZDk\n+YPb\r\n=vXlE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nBy default immutablity is applied to all creation and update methods via overrides.\nDexie does not do this by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"39b91e28170a233346cf8ae555f2d8500b570901","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.8_1579545182380_0.8630097824573142","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.9":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.0.9","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.0.9","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"96fc0d224523803f97492f76320dfe3a2ede4c74","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.0.9.tgz","fileCount":22,"integrity":"sha512-2A2tOZq8X1HjjqoEQOTw/KWWKO+xEj6+YTAGnzyoVO2O6OBn8Xxlbv8qoq6LX/a/2XN/TNdnLJM/tpWQf4Bl7w==","signatures":[{"sig":"MEYCIQC3M1QA9GCahEYiUM9MreqdQdd1X29H1H5W/iNvbF31VgIhALh3UrGQ9e3INFetyh2mEyOCVWo7SriU1UjXen7VuCb4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJfgACRA9TVsSAnZWagAAvJwP/0MR/zjQgmMHx7YcugPo\nESuCUpVLfVy3iFN22ud9XrXtbIShgpEBwzuwQlH+6HwrNMfzJLIe+fEBIntg\niwRpD2a2xmGBXhc7E88yJEFYuGL02i3uEiWCxgKSdtbnwG7cHYYYv4gydOt3\nKdTdVs25NtrO+qx6xvmVYJ+XSo7QBOLO3mpo22PmjN1WYSXERnL7H67rjsJz\n10cTo8OrnmkHhJjVZ/LNpfZzsIv2wfg26HFq06bvZX5PjulG9Cn3UNAH0Sll\njbckMPjAWnnw6yyhzEQQ/xGSTyTFvsWvuk6obHXF7Q94ul5WYKY9l1Xlv+CL\nFXXUjLRbDhXNzuTAW3mIDRC0VZxxUOJ85994ACxXIuBQ+AKDzZilx0vz6wtN\nphtAAiEsKv79yvLnSm9p9OKH/K3mtYnjVMdYZNyoMJmOIlPHSloovN3I2ALa\nOJ5ia8ROdaoVpFszaPq2ZKA+KmLWm31uaPP7ZJJYd+CVrbmRjckdSCCd1k/L\nroJ9fqeP/VbkjQw8MFwqdwDP3LZte8OFTYPqp31RiVewteLWaXjxNwQNCtIg\n4wRsxcq3foaNdsA8hc7Iju3DGXfnldpLWyX22fgPGcOIdUw7nZB9lkYMBAGt\nWyoiyEBDYfDwVj65MSEAd0AAQJ4/PF3LH7+T5MDBFNykANcddadaIEr1wlnc\n4kiK\r\n=eC1s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nBy default immutablity is applied to all creation and update methods via overrides.\nDexie does not do this by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"6209fb777e4965d5d362d3167df524e134a59e75","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"lodash":"^4.17.15","tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.0.9_1579546623654_0.3575563784034541","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.0-beta.1":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.1.0-beta.1","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.1.0-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"31792e33577906ee3977a5cb7940b4b3ec5bf7cb","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.1.0-beta.1.tgz","fileCount":20,"integrity":"sha512-p0uZj+jww25FwT/XAtEMN6pH2WrA6Ne8GAqKpUwUMjPsFxgie7LJLI/l0wJXrNqppgzXLgVecbpaLW2pJHPhdA==","signatures":[{"sig":"MEQCICfg4IeHZBxR+11jCEtY9i1nGyWkn9UbC2bjK43fnq3XAiBZLLM21SwikvPh6HbgGj/llkusqOQQ6LTnOnkRvdq4EA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":427316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKCM3CRA9TVsSAnZWagAAMXIP/ihZMzDyhvk9wYTO6rXk\nPbk4qwi2ua7cThNaLCsE18zbJWIVMraCklYrBNQkgbMEM/5q4bTYYtaXRyFU\nU65yyu23OxB0TMMeXWW8ykSkv3AP7zWVTVf+EP89Y//XhmaTdDAgebXplyNp\nF/diaem2yGuqLQK0Am6cbyrWmI3n7dpaWShWy+EVcBD0DBw0GVLWAITcZDHC\nPdgmfCsETVlPvTyquDt081zWFGzgOuz1HKeEXk4zqXeRI0ZuF4Jq4UNh0RcY\ncibywzNR02UWIcK/V0LJBJVbTM9TZoeZ+0CpxsQTUKilppA0fm8AYC22FeqM\nqAer4ib3Ehgm0N4E/Npih6qEtDxt0UEouPfQ4beF7YOKCwdiY3W3iutZ11br\n6adtuM7yvP6H9FXZcRNK/I8UIOHr7GbFVwSgxv8SYAwtYhlmqfTAm9Rth2gb\nJOrUFpzOGlfDGVTEaefoWTxlmTWVLQcikDchuTEY2ItWtTIQ0+IYuaq1Uk0F\n5RqUHgVB1tlVgakb+84CvKuFOtUDYf+OOjSJujNyYAhLMes9+fxYc5UaKAAh\n1260YIx3V1OJUrAIrc9jMh5VO3rhi9o5w5UyB9coxhgRNgRZf5ZQRhyfwuig\ndzG112MnNxWltF4zUk14dRtgth/TGXDFNLBBrawHCJOCUIf577iDYJs7i+od\noxve\r\n=PrOr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/next.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"7484074f495b0cb032728200f30499718f7a81cb","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.1.0-beta.1_1579688758989_0.9643239253934084","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.0-beta.2":{"name":"@pvermeer/dexie-encrypted-addon","version":"1.1.0-beta.2","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@1.1.0-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"3a4d7dc97b444251142ef5f8bb0945557ae684ac","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-1.1.0-beta.2.tgz","fileCount":20,"integrity":"sha512-yAdAH5A2hsEnhr84u9LMgDni2Znhfe8GLMbK0p3jrczaMBquhG+gIS/9gsXzQlkgTAe/KfWcGn6tME499o/gKw==","signatures":[{"sig":"MEUCIQCiFMg5Yt1hK3acPsfgyZsymBgekRK4NBBAjq6Sy0LrKwIgO75SiKb9E/OYs07p0mJog1wC7mPSqRf98gFrY6pvBrw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":427930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeLsvvCRA9TVsSAnZWagAAsJsP/2XV6vbJFlcsRDrEdSDI\nywVlyxAg0uKMys4YD/NNb/m9E/xO+dUZeoy1V8cGsLvuVKjUzdle8FPIjQ0D\nZFRp0d0ZnVtSJ8zv3wee/3W7MHSZi5TFVPLDr+CyqYnonTQipAWGqu160wjl\nOkkylp40CAKH5iAsw9RVBLR1w4gFA7K07+h32vJxhh9nhUuYeLNoLp+Oxqxa\npcRo/XYyzjLLln4Tu7KuiKPwypqbP2QPpPZAHhCgb6zbCsrWW1po1kRKosVk\nSR4lr5VIrcyU5c4+OETRoYxYLQWbTl+X9lFsCpxf7/kzmqjvWOLIQHFqRMUU\nNEngDZglMC1qBBFQ5PPmOtfaV6YYFEq7RPacf27UzoHFlJPLLpwxNcUEanuk\n7gKCu1PD62AesX3u79pleVwEBjn4zU+IVFemI0z5AmupeiWOXaKWQZpg94N4\nGYu6DtcaDF9qsDOPcRcgO43HedLkMcmPPsAFUIfFF5FzaVbYHPJlrOREsKHL\napVNJIxcSnqWxt/AqpbHbCdXStkyL4SP9/Qo2PqAq4DxtEZV0BZObfzKMdrx\n6z9v8FgqYXKNhkFZfQP/Bb7TAofq0iQ2bUAwmWLys48w5kSLbJNZ5roBimVl\nyPhUWD36LHXF+WGDkbAg+iqgo3IzgN9YC/4HVJ3IdtXWTf++6+01oTDlvDrT\n/fjZ\r\n=QxWA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/next.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"47ac40487981e5ccd9811bf30f3fde9bdd42ec72","scripts":{"lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.14.1","dependencies":{"tweetnacl":"^1.0.1","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@types/webpack":"^4.41.2","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.21","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^16.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","jasmine-spec-reporter":"^4.2.1","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.1","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_1.1.0-beta.2_1580125167304_0.16034436831324106","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.1":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.1","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"857b98b626013ea70283cf9048b8ba9408cc0ba0","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.1.tgz","fileCount":24,"integrity":"sha512-tcGUSw4Z0aG3CjckbV4Ul0h9azC2boTfBrQtxET9InfSeAKWqN92Z0Gy3Qn5X+dtDWrXCJ8Jlq33Xj5+MTwmsg==","signatures":[{"sig":"MEUCIBCuzB93pVKfsK7p4d6tZdIrxzc6CTMtY2YRoCThZrQaAiEAzytf9JIG9PGmzyzZB3hHjj5683i8XwuqJdMPds8hT1s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZlOXCRA9TVsSAnZWagAAN5wQAI2jqTbKBdgyUX9qCUiY\n6EYmwdfNjAdaBmIvMaBfdr+pdt3AG1JE4wQRW2co8D1GpxeZWwf9ACmPaQLz\nGrO6/UaqaRmgDeWbGxsk83kpWM+a4c4p28IpBpKcRpEq9oy6LK1Ih7oedmWU\nq29iXcOGkEboxKFJW4kiAuB7y2jKHuZWUL1gWWtQX2ul1XfPMGKncjPw/lUp\nOqXU8oQeWpApS8837rX6lUInwpagXPwtJ4yyMRO8zMhtg3B1Zc30LlwyKahq\np8rDXfRp2D2Jf4l+FALifhV7aonPTWDFxQT8nwSqZtCy7IqPigSrAcs5siFk\nWph/d66gehW+TQkAnpT/VeznYKjPkpY0jQNLjCgeKJK9Y7n0JMGRqkOgGEw5\nlJM/8tB0ldMNkyeJqm8y7jPZ9SquuWh9dt2gVWn2V921obSBWMCb1B610I4n\ncaab2Rj/asjglf6AF85mT4uJFEzIYvzMx62wiOfAVHb1tly3To70eTMpZsIE\nuYEjrMrijGhoEouYXL+IHWzyPi7my32eQkSKTPkq2LqNyLYzFX9u8rSkQae1\nx/iEP5ZrHzkyXo7J6cHOwitYmsAOuTmUqG7M0nEFDDIk3jybmjvbXPZCuGrj\ns1nigzo7LE1jYMgGJ6geCY7F/53xhWTGFr5mByJXMFvWfXPV5SAcF7dlJOxe\nvgGK\r\n=b2ke\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/next.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"59630d67686bb33a7029eb0d89d32aa2bb100cf3","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.13.6","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tweetnacl":"^1.0.3","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/karma":"^3.0.8","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.8","@commitlint/cli":"^8.3.5","@ngtools/webpack":"^8.3.25","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.2","@angular/compiler":"^8.2.14","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.1_1583764374721_0.04314518900212372","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.2":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.2","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"9d849589320266335a0ae55f9990df0493c36aa9","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.2.tgz","fileCount":32,"integrity":"sha512-/CCmW9X/UgnggkcoH+5HtqgPpN4fdXbQEGwUDd6J/z0pY9Sh9WL5KyNqjooLxm8vaERygZV4da3Nr+DhUMmDoQ==","signatures":[{"sig":"MEQCIEm3ympDBFWOs7WOInxUFVoEagMqTTwqZG6eKArSeUlpAiA8QyVq2ETnRDsCpBH8ykP2b0BU6niRIBlx3AOSYdcpFQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":139578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb1bnCRA9TVsSAnZWagAA37sQAKMKwAj3gHLkVUO6HQwX\nqmTa/7pzxEJnNd5qzKmNiVDTmQB6/n1qS07IXhHFdeSIa2+89lXpTIXzvFqD\nY8lACv+ipyzeWwg72nmUh5dj4hNsv5L+EFJWOR2NdIQtO7i4bdZAQoCuJb0v\nBiMA6P9r7fMyxWZVlk2ZvF+qDpSfWs940dlxrUUh69CKLnrCoQ33zkpTOL8Q\noePLoMrbTYaarpjPZ2AbuM8P+bk1e8rWQfDb7iVCG604ljYzbatlRF3f6UfR\nrDW3bXtfGqvm7K3q1X2oO98w9ZdsO+bC15R0J4O34pmXZUJSyTcCbEpw30zT\nnuxqQcrmx+jmwG2V10ALi+wNcIPY5TtMJIZNU+PmdGbqyicZtB2l6Cn1Ko/s\niZgtdjxnBppP3X8kaY9DOg9mDNCWlSAsw6iJgtjKeuwjSx8EUXiYJ9b3Ekmp\nOqg6VQCWb2hnjxwMzCHBAILeuAL8NUbDtCWooWe7vIKxFKKVU2RuGU8j1Y6N\nyVz1AQFaJweMZzYF+j4e0Bk10L0v+QXk5CLknkss3Ki5QNlroiMe0KWN8KaA\nnAGUjqTEQx59enxqXDh0gyii2aoONcYu0MBV/tKqGiBsVS1AcWVfFHuP65G3\nbE23ArgS50Hvoa8tRmvtIdFT4sU1IG0Lb0fGUpDz8kyoTjEXy9KwRS6i43ET\nNx7c\r\n=3xqk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie Encrypted Addon (rc)\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/next.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Encrypt your data the Dexie way!\n\nPlugin is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"24d6ad93c064e9befc7120d9ec6a0049a062363b","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.14.2","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.2","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.2_1584355046387_0.730369337160276","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.3":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.3","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"6117a44791bb4d082a3e1cfb0537c4672ec8ba48","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.3.tgz","fileCount":32,"integrity":"sha512-z1/8m1pCqJHXvG+iNP8mulBskC1CATZECgo+MzG1FAUZM6x4nActqHoIZsE78lXRDOn5IhLiHmbx6Na20+ePYQ==","signatures":[{"sig":"MEQCIGxLAL666z8YE8ydKGmPzRGI3qNzE+/KrdSGw+o53mz9AiBTOqorPmCruN6AkmqCEDmQsWN/4mqDpFQDIZB2BwIOMQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":140653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec3/GCRA9TVsSAnZWagAA6WkP/3+xniWzZ58Bo7oivAZE\nJzvV/ZMc7dnoIAdV3TxoxP9f4azk7AZHLw6VUhRmPGbVN86RzXxPWlaUF9xS\n6edkxgfdnPRxXfFs4bQmBSUcT7n4Y574gLFyBAj5JDAyuYyUljVrcZvsM0Z8\npflg7fOUSKiCUH1Z8Q8KNpCeZxqB4d5KPY/7taJFvAFoteO5QY9nC9nE96/r\nZdEWD4Xloq9mgmb3gLMTWrkWT82gCzhKvVfHQRHae3eR4XBEyIcDNdJxW8bw\nKZWf/t2sAlMBtLrelxpxDWlCaTQ4m6VvXnYYQd5Sj2cUDOTiSGAW/nDTiYEj\n4DNs2/cRN+Wvq1IynxnZxZp6KJh1YzYcxKmwWLTKA867Z/qwBcjzg0obRssx\nxKjShjhDGL9dwuCNRhWDurRcnUKbVdBKY7ANP0SmZCWihYjcCoS5QP72Y9x7\nrwOQPjYQJ0wYcRp5VF7E7O/6nR1Ur7+zPrdqtGERz4dYRAPm0cNi8yOfaIbV\ndquzpW3GTfeGwMRlNDChGcY4Q+IskITNGuB/tQT7j5uFwS8OeSOAVmgd2hYY\n/UyT/eC8vWDv8d68wKHjc4axnPjM+lw9RgVbqSREyw8dvf4Eij+PUz2Kw272\nm+iVsL2TC0IQl1dovfFEZhnVDBKzfChtngDkA1Jc5E8HOn3Tv/1a1GKTx8fy\nZUVc\r\n=EF6a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"f8949e4dcbac35d2b6a5ea772f6bb7a957fb4f54","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.14.2","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.2","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.3_1584627654495_0.4299542059474244","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.4":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.4","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"11f793ff48524100d7f3739402860e7dfeb1f23b","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.4.tgz","fileCount":45,"integrity":"sha512-IaMmQeaaC4BLn0y1Mkwr+bFk3pXG3bbwzSb1bjBrlk6Noazn0ScnowFRicS0pm86AEy9VPLUNBm2zoVLb+5D5g==","signatures":[{"sig":"MEQCIF4E2bRJ2asSnfEctGmk8shYrSOcCJ4GIiLlchkHjGWgAiAlqjzGZM8sSglAJbxpZoOpvS2ky4JCf095WMzYle5/zA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeLRMCRA9TVsSAnZWagAAYeIQAJ3xi+5hA4o6oSWi4y30\npZyMUTx7ud5OC27KPlFJorMfarVLFwIHqyyE3dcOnnDeONbw/3iiCCyUZ10z\n2Y89ge8qO7yKuIc9sqEbp0gIEJ8ODkJnHGft/xAZjc0VbbK/x6gWRJzh7tWy\njBAIc2VaxRYRucHJZ8RDEcml2vqels7LixYswJpYHkChmsOUM7QeXoMub/NR\nW1zDRnon9a7e9MRFANaSUcsI0BR4vvAy9P2dcJ6NoQGUSRahIWDB5cgfs10m\npAqWOsgm8Nt4qCGkwF+QoP7Z1lmFWc1eZv5QpM2651tE44l9YT/Ung/ffThm\nkfiP7390NI1P2dyic+FM5/AACh/BUZUJFdxc8Hyi1pNytTAsVGr6XL9Ou7H0\ncZ/b2kp+pwvtSBpbsrNY6oJBRr5PmzeDFJpkqhZvJfZ+UAhZxXrvJNJ/ayIo\npqQWOObXzr3V7hBkQy7MXhV0uFj9RwtD1z/519bkNtB84hpMNQ2K32jmKcpk\njwD0LTRm0e81walhyqEg+cW2+ZBW9YCmNjGAVPFLMWWjhCjzNkkojG3mtBTD\nJrRiN1w8DB8AkIxbodH/kVYn6zz5To2xXv1o+La7ej/R3p1DnGIhcBHylWI9\ntKOB6hOWr6u5AN7KSBxkhya/AR6mLfSt64eopbupIxMrQSdJ9F7anSHecn1L\nO439\r\n=yqvh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"a196bdc3bbfd04c581fef163b1c18c527e49f17f","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.14.2","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.1"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.2","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.4_1584968780254_0.43218875668180257","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.5":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.5","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.5","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"29a35ee817ea29673f9d9f66017075e241821823","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.5.tgz","fileCount":45,"integrity":"sha512-R2V1fSIDI1x1pyHQAcveh/fEUC0OsnLBOGB0OcNUi2VvQ4aSGOnZYDfZfbLZgnE+iC1Hswdj28W8gFg2WdIBxQ==","signatures":[{"sig":"MEUCIGu4h50I+D/1w30heo01Px3mK0LynYPHl70MjlhZKbmrAiEAzv98PHJBdmyQgqsSfyGatqTplB4ly5NXTdehG5q+LNs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":148018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkDfbCRA9TVsSAnZWagAASugP/3iYhYkWdbv8DfC6Hy8x\nlhFWe1nRQXrIc3nO4NjtDfWbeymt558t7ZGQELN4IV2GgdxAkV/9fWPb1ZuM\neSdj1Gn9vThNqfII+8J6BTw9dsPy+X4nRCZhAyNyoT3FDwholaFZB8Mugj3Y\nf/5cYL9xAep+//PE746teR7IOk4iUd7R1p0fPURQZV8q2gzuGi9EDFfkeNFk\nEUMwlCA588QaF3NZgbrb43MUVzVYl33DXsi7s/JeNpx/5/MMzziosDLwCFEq\nxWhL5hr0Yi8Hql1tJvOuTVWqhz1KyXieYXVL1wYQwfw4l/8jsjY0DFXajjpa\ng3JeJrS4BVLJgxnomUL10+8MgwMJZN8kH0npKFCXkdPFWz1O9YwunzV2eDIq\nuCeMP69TYgLB1mbFJo9bqlXJwlTHlQCkan38eXXzaeLqSGtb8Pmh6tQB962W\neR+QHKkMSNz/SSHpXUPr1fGkBg28csDs5A8VYMQ8Kap2HponP0B5eTaQxkSS\nMXXj7qdM0FFitV7Glz0kzrynzsXAje7b4d1TvqCP1koYZau61WjBIxgASW3l\n4pLqk+wItodi6MwvpmKI19RaIRU9dX3XXbHmtMoj3hdpDU2jRILF76KRlNt1\nHqJu7nAp4X2aNVkskhpYzFnJbAtpHoHIp33tPXn7rLGowsNVX13FafJePUuS\nQbcZ\r\n=L/h4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"e89463eeaecc79b3d4d1c95c871b73742ecbc6c0","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run clean:test && npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/*","prepare":"patch-package","build:es6":"tsc -p tsconfig.es6.json","clean:test":"rimraf -rf reports/*","docker:dev":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev up --build --abort-on-container-exit","test:karma":"karma start test/karma.conf.js","docker:test":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test; docker-compose -f deployments/docker/docker-compose.test.yml -p test down","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","docker:build":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build; docker-compose -f deployments/docker/docker-compose.test.yml -p build down","test:jasmine":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","docker:test:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test","build:es6:watch":"tsc -p tsconfig.es6.json --watch","docker:build:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build","docker:dev:down":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev down","docker:dev:karma":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma run -p 9339:9229 test-karma; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma down","semantic-release":"semantic-release","test:karma:debug":"karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","docker:dev:jasmine":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine run -p 9229:9229 test-jasmine; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine down","test:jasmine:debug":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node-dev --inspect=0.0.0.0:9229 --transpile-only --clear --respawn --rs --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles:watch":"webpack --config webpack.config.js --watch","build:esm-es5:watch":"tsc -p tsconfig.esm-es5.json --watch"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.14.8","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"12.19.0","dependencies":{"tslib":"^1.14.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.7"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^3.0.0","faker":"^4.1.0","husky":"^4.3.0","is-ci":"^2.0.0","karma":"~4.4.1","is-wsl":"^2.2.0","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.6.1","nodemon":"^2.0.4","ts-node":"^8.10.2","webpack":"^4.44.2","cross-env":"^7.0.2","is-docker":"^2.1.1","lodash-es":"^4.17.15","ts-loader":"^6.2.2","is-windows":"^1.0.2","typescript":"^3.9.7","@babel/core":"^7.11.6","ts-node-dev":"^1.0.0-pre.63","webpack-cli":"^3.3.12","@types/faker":"^4.1.12","@types/is-ci":"^2.0.0","@types/karma":"^3.0.9","babel-loader":"^8.1.0","jasmine-core":"^3.6.0","@types/lodash":"^4.14.162","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","patch-package":"^6.2.2","@babel/runtime":"^7.11.2","@types/jasmine":"^3.5.14","tsconfig-paths":"^3.9.0","@commitlint/cli":"^8.3.4","@types/lodash-es":"^4.17.3","semantic-release":"^17.1.2","@babel/preset-env":"^7.11.5","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.4.0","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"^4.0.0-0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^2.0.0","license-webpack-plugin":"^2.3.0","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.9.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.4","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.6","@babel/plugin-transform-runtime":"^7.11.5","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.5_1603287003301_0.2027985894653852","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.6":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.6","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.6","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-encrypted-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-encrypted-addon/issues"},"dist":{"shasum":"82cadd52c296224b120b8ad42a03296559de7f15","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.6.tgz","fileCount":45,"integrity":"sha512-l1keWECO3vQGTXJU/K6OxMmtTi/OAouDJpNikga0wFZ0F0ofasQwAIZz7CBiFDUoKcrMjMa+ieonTwxLRmfE2Q==","signatures":[{"sig":"MEYCIQDFsn9cso8qE9h1YgAXkxXnWMQQrpqZqG1JaoDTpwIteAIhAIffscoXwjp8g5IKyTiySGmlN1ahu+ZI/nPo3Kcui4r3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":144150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJful0jCRA9TVsSAnZWagAADOMQAJ4Ntt55HTCCEyOlcZFn\nCXP3ys6u4+x3bIEeltuafB12MfjoHJQHCHBxXqEv2nKE63SGdvxslQwbgpXE\nOuCqyR1XMWQw6xbZz6NL95Y9Fhb546vpSrMRdIBOxIGiTEUJhaasXFfZ2hHF\n77igW2/VX8w1XnbvZUXRRRNB3mVHnc8z7rFHQhJY3/mxMlb//qHlEApxw9Kp\nRIpye9/8WwbFNtceufOGeQqMfdtLwhxRdWV6gTPvBbrt979gRfJn0myKdf9u\nS+44ryj7qhPPu8wA9WxBSlx4Nc0JyNgVsOef1x8GJp8tAbE5EXbSyUPqDiQy\nOJkZ7elOEDnpJ+QNFjFx09vsQega/7jA2HImhZiKPcQUROA65r81i77A5H1t\n5W62s3e0mEs1r5/aTsHmRYytHQdi68VYC9k1zXdBU6wCw7yHshS0U/hFMPDe\n6d4Xi16l7hRZrkrQNBvVE2Wko+dGj1LUAMbTlM7MHK3YSKNvUKVJhH4XqbPm\nLpP/ivJlThQ8yHIjVbfSVQvj81B9fCDsfAegbH/6LPlqosouOzro3gSKtIYY\nT2HzWvvyP3YuBliduWvHE6bEMOKz4bEfIQvFvDBlAyLOVAU0lMBKddJ7AaTI\nm31rh6HNq+Ia6UJDL2lWHKU2me+oON4XlLV8MErD4GGq7vdSNOeQcfuM2WRD\n23Zq\r\n=uA2/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-encrypted-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-encrypted-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via ![npm (prod) dependency version (scoped)](https://img.shields.io/npm/dependency-version/@pvermeer/dexie-encrypted-addon/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to add it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"dc81dd9e3b783e2664082a9e9f51ce01dec25e5d","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run clean:test && npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/*","prepare":"patch-package","build:es6":"tsc -p tsconfig.es6.json","clean:test":"rimraf -rf reports/*","docker:dev":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev up --build --abort-on-container-exit","test:karma":"karma start test/karma.conf.js","docker:test":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test; docker-compose -f deployments/docker/docker-compose.test.yml -p test down","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","docker:build":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build; docker-compose -f deployments/docker/docker-compose.test.yml -p build down","test:jasmine":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","docker:test:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test","build:es6:watch":"tsc -p tsconfig.es6.json --watch","docker:build:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build","docker:dev:down":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev down","docker:dev:karma":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma run -p 9339:9229 test-karma; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma down","semantic-release":"semantic-release","test:karma:debug":"karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","docker:dev:jasmine":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine run -p 9229:9229 test-jasmine; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine down","test:jasmine:debug":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node-dev --inspect=0.0.0.0:9229 --transpile-only --clear --respawn --rs --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles:watch":"webpack --config webpack.config.js --watch","build:esm-es5:watch":"tsc -p tsconfig.esm-es5.json --watch"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-encrypted-addon.git","type":"git"},"_npmVersion":"6.14.8","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"14.15.1","dependencies":{"tslib":"^1.14.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^0.10.1","@stablelib/base64":"^0.7.2","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.8"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"dexie":"^3.0.0","faker":"^4.1.0","husky":"^4.3.0","is-ci":"^2.0.0","karma":"~4.4.1","is-wsl":"^2.2.0","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.6.1","nodemon":"^2.0.4","ts-node":"^8.10.2","webpack":"^4.44.2","cross-env":"^7.0.2","is-docker":"^2.1.1","ts-loader":"^6.2.2","is-windows":"^1.0.2","typescript":"^3.9.7","@babel/core":"^7.11.6","ts-node-dev":"^1.0.0-pre.63","webpack-cli":"^3.3.12","@types/faker":"^4.1.12","@types/is-ci":"^2.0.0","@types/karma":"^3.0.9","babel-loader":"^8.1.0","jasmine-core":"^3.6.0","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","patch-package":"^6.2.2","@babel/runtime":"^7.11.2","@types/jasmine":"^3.5.14","tsconfig-paths":"^3.9.0","@commitlint/cli":"^8.3.4","semantic-release":"^17.1.2","@babel/preset-env":"^7.11.5","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.4.0","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"^4.0.0-0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^2.0.0","license-webpack-plugin":"^2.3.0","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.9.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.4","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.6","@babel/plugin-transform-runtime":"^7.11.5","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.6_1606049059390_0.8763159127950402","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.7":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.7","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.7","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"f87c7050539d58391c25f46515873e000e97b38c","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.7.tgz","fileCount":19,"integrity":"sha512-3mP9jp7v8rk3w10rqkfCI4B+fegvCRQDh3/7GNKoHOrvuvMkawG7dKou29HcDcPJKBoJxYGIPeIcwOOE4+DJsw==","signatures":[{"sig":"MEUCIGxRLJ1ILe7ix/y7vVcJzmluTxuKiN5Ih1I1iHm0N9afAiEA9KT/fZhd8PvT6VDdEpu0ZffXOc9Pyt+xtcM9CJ3mudQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":624173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmotnCRA9TVsSAnZWagAAQu8P/jMwDDQpfs/Wo6XyaYIs\nmEkh0Wh8dHlziiBng3Ijjm4CW6ifmgj50TxUCPV6Hv5mbekKvSkrtTlHsqss\neqUWMBK+NFBBNL2+lMLJ7DovDGXbL6MiyzWRlMdNbYsy4WMlXAgW7v+c/AsV\nDU07gybsTGb9m0FvQCbzlGDySiZnRlzuzZktw/p14oyZmoaxVpoOZ/RYvxIx\nLtgUbgh/grlXNd9t9YMJZX1NQFRWk91pI9xN0r0C+6QTGHL6CA6IAvqRfulS\n8nMS/9/ASefTtMpl9eB0eVONjyBimQ7zuxx0VihEaseRIJuzgMMeFZHTK4F3\n8/RpRakegAWemUC/2xoe4I+d3nE9R7TUvru9qxaAqjVgQtBzm+TPdt9RIE7y\nZdE25j4gxUIvDd+3lTrbc3rE0gn4QmHQDu0aIPHe1mQ/jd62Bp5jaTwp4YFc\nVPb+mLL5HnjkWVYTMeD2W2gkgsgs2SUXquTTF/eIOMLIqgRRUo9/VzDPNxv3\nNBI8Jfhnv/nI3ryOX70ZHu/6xX/QVHPTalhPfO5SqNu5o7yVA9vzo3R3FdZo\ntoPdbnjBOFzosmgfH5oXca3BmakaLgsT2fHzPHleeKiJvkGvGx80oDGMS+Gg\nsSCrbDRq5x0s0JuT1KVc7c0sle8SvEDMe5iw73V8VNZeI2n/MU/hXwc276QT\nmKi+\r\n=l18a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"3025a056e027ca1d53c30f8c5ba2d2df8337c17c","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.7_1637518183317_0.30252664224804904","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.8":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.8","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.8","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"e1315ccd70e7e23f663d811f60a7936e0410bd6b","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.8.tgz","fileCount":19,"integrity":"sha512-XOO9qgJ8S4/9dI2xaa41V2e7uC+5cVuVAKNMGuyXsndgidaS4cxiFZ5gk+tuJgojUlIPPKcqyVQIbpYPkQKS7Q==","signatures":[{"sig":"MEUCIQDvFoO6B54tzSm40R78a+zmzm3Up6JnN53Jz7W8jwjmSAIgUhhqh+ItBt+SqatCxw5FGP4d3CvnzpxeKr6b+1wvIZc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":629619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzxu9CRA9TVsSAnZWagAABH4QAIuo2VWo33wQAI0kyRXH\nIVffpFiPWhzelEp4RFoxguYCCmqbvew8l8Vd+qC4QlbhQWlKH3SHbKtepNqz\nG5QNr8ffPnMluPsg18DYlVwcJxicu3adYX0eUr3iRmdfAqHI6ivBxv7wIN0O\nfgnWy0lz/eiLU841SzvrElwZ451WHoJuV8HQBIIbxQn/LNmE/VLhL7wImlws\nri/oDPaMpfzZZJVjq1soc6Lk8VZoTu9IoqyApGdZ8w4lZ264WaDyN+UfhLpn\nsPAerSJqjVvsZt/Wyl3+Gom9HnYbFBkVJVM4MUByEt/m0MLa+ry3s6be6BKA\ndhgWRSVQCMdPsmp8wDVFBZAzBaWYkDDD90BOPjrd2PyFd1LZ92EVa0xb5ffM\njL820HfgGHG/T9R34w7LjV32dHy+8/DTYJ6Rm6OFHGnf+jNUqGTg59DPbhz+\nRjCAqONn+zI24wt6eIR9hlq2uzX0RlnoysXz9rNtFwMF1MjjI2zgym+yizlB\nYyyRt/9gHh36una2Wga144bKXjo8G20Pmt+ej1tvKg+p7BTe8ai9cIJ7abXC\n/zSoF9q/Sr4nxU573OXi3CipbBSmPr+yMR6GE1US01xZ08+wXXE3RIYmkRMH\n+KF4e9Sn3nwfQHq6j3n4UagBNzURPVeuPSv0SZHXv2QjNa5FTDhHUgc0CoSB\nNIjR\r\n=xx3r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"d1c9351b384e4b1dea2764be5ec8814866487e99","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.8_1640963005009_0.46840601141995","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.9":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.9","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.9","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"dfcc618d7a5da43f09e164d200a2aed429230cf6","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.9.tgz","fileCount":19,"integrity":"sha512-BZw412/fFC2PKlm9EM7f5xRytYwA9JqFVl6GhBjGmF8Cez1ec3y6HRwN/uC4/HYROCz9SU3OTF6OlVYReI8TPQ==","signatures":[{"sig":"MEYCIQCnXpowqB+/ig1xcTVk24Lx8Kkf6uq7VV1Bwtu+Yn1XfgIhAKj4a8r9NR/F9DjgAU6fvOPbQx9MV6gxBxn05QzW1War","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":630139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0IeeCRA9TVsSAnZWagAAqOgQAJvYQbI968SLnwQ38jxT\n5Q1qRZ0v69RIHzVL7y6jBxVTqBkwIoS/La69zjuc0TXHm8IqT2bhgZnpmtHR\nhfhXDmMrpIQhFS0FgukSCBTSzcpV6gzypuBV5w92TaEsuBX1O56j11ic8s1G\nAWFXx1M4G2MMZtqzrSSjYxPVZ0HFyb5U5WarJdiA0UpXxoCUerQclSFHWIfP\nhb2Ji13wNLDOGx50+1obTfx0/VWCDi0dWNEadaIcwyBiFb1DfbfR5Hki3f6Z\ncpojtTwZkODQh+QEvmLsodNH2fjxKVIJmIcjqSVPN+ottd86xVxf+t3borlk\nkyAlWEdpNSqY6T+KCNGKfjMFF2mCr5OVSVTXvU3r/GCUxHZalvBENtbXyBm1\nIx363dBFIY4U0xCyvHDFV5FuRNQOe2f52gctWKnS8I5wWxq7sg2UMPXeOfqd\nCs4QyugdFd6mgRWqqG4dq9+GaC+ecNG6KNXK2QEvQXgo38ieHHyz4FVh5mn8\nUqXlID29Ad/1Q3to+o5gU70AQepW5jdtCH80QW0cE2O5v7RTHwLM+phuOURf\npWiT57RmOkO7snOEFk1/TO29Gq22l+l1X7GgZOHuWqm3vkLFy89n2BTrShdN\nVWs1w05gfeYQC4BMfyYw6tLFbUDrY2CqFXlrbLbLtSgML+Rci7LH6a75sMQW\nWJmJ\r\n=igLM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"61d65f071c0c8924825419f164d6b300b3bc7f45","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.9_1641056157915_0.5031540573907263","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.10":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.10","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.10","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"4f5800511bc7c58cbdcac78f536b1ab9cac75163","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.10.tgz","fileCount":19,"integrity":"sha512-TNkkaTnkoIPxsgBw7IqCDp8gi9ObodU9XguhIunRpTpRSMbG6Mfi1J33lXHY8UBHhIWd33iRLh62C01+gqIeMA==","signatures":[{"sig":"MEUCIQCFWsER/zchjDuosTZA1VRk5bKkWrb8iVbRwPHzBDA2ewIgU5UFGdvss/Z9S5XdASoG4NSge2XTHI1CjmNKw1roPys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":630756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0dc4CRA9TVsSAnZWagAAYXIP/1CUAs+prhkZ8xEc7AN5\nwivz8djiWyk43a0v5e+SJZMacZLyZnvYuwir07oDHFYa8xAFP/7jZiCIyBu/\n92aclwe/VvR/ZcdHcfVnGdX+JS5lu5c+X3kC5+9gYcr8swb4R2g3KbwnArFq\nxtSLWNJgJAilsICUnSvObl3x0nJEymKb5UE9WtP4ZpdoRnc4PI2XV84pV1BJ\nolq1lW7o7utsYHHhmJGsKqe5bbE5zQysiXYUIWBUSixCYvyCLAqecTCyaX4e\nz/b8WNa8YGd6L1oyoQKSsnwBEOzpgbQo83UckN1fgs9cDPGI8jWmndXn1pWo\nTc3Unq0elTx7nfalLii4r0FUUil+lk3xtH3gKQy4fkAScvqvxzyb/BXAjEXv\nnO2pS8k4RmclVexZ4b5H0yYylwLa0AHiXi42btdv9Wgqd4t44bHbeJaJ3qX+\nl1eSJlVefWIMiqcoAt+OJUGrOXeJ6A4W9/hjr16proeyeocN/0zSNno+vrhf\n0QJdDz0uLxrYxBCdpLLz3/m3c5Bgi1jmfWHQlPkkRindvlknoy4FZrkeEbjz\nrZq2VxJMLCkZrkMp4wYMMndclg9Z+4JWdouyUJjEZZphTQoCqP2VmuEfytwx\nYSs20oUOMlQA8ah4FqBj8p3HwAnJ9vMWZg8kVXn3Dhv5bu1tnKJoqbYefg3U\ndkxt\r\n=39Vq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    \n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"25eeb5af2bfb419a4527e64b0bb9a788fe880813","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.10_1641142071948_0.7464482486862871","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.11":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.11","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.11","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"c0cc11fc9f2933015ebc499c662b0ffcee15ca11","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.11.tgz","fileCount":19,"integrity":"sha512-cJ6Pd55jxTTrtK8dUpwIjvv6xVePHF0VM7sxBWeC4BtOz7MsE2rD4ykrqLeU6joA7pJG/DjvCuHBqihImE53KQ==","signatures":[{"sig":"MEQCIHEwSq98QMF9nqdskRW98kvzw0be408OABYXlgPtO28FAiBJtWO/YXRG5ZKsUs/3MFwDMnAutvmLhaZrUPPaZwjVEA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":631278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6uoiCRA9TVsSAnZWagAAAFEP/2R4X1/mBadj8+hh67uc\nJmrPFp8rS2mymJ9kAp5yvCeG1Z/Nv9YMT/6KHW3pb4MtwG1J7gZVRzvISOkW\n5IbjxWOAh3Lx7phsW0R+4IfhlzOr0NI0XxN321ryqBMBPQJo7qB95Vl6fmmp\nBae8pHm0m63Y9Hw/URWM+zeKO6IVWBg0a9tMldEFNyFn9BFLuIkiu1VtMHAI\npCVPibtLP2JBolt2oKu6KRjektOCz/em9dFuTr8VnnUUVfJCNc/At0jNuVZr\nXrPWJVMXegNQuaLcRBcWe/wnL33VSfD0BGn+W9Wow/q73VshaC0APSA+FXnV\nZjCsVjS5LWdTIxS8IH4v81Sdqdjnwp06hGUjCM+fcEzSs/l5ZxCVaz/cnRGg\nEqK9tG8hqOBZ2aTQ4qKoXYeGq/0BykCqO5mBConYHVfkXW+1cLMvPPwgcqTP\nmtnuqmPkwvw1jpRznXW496U/kftRgfK47+/xdmTbw2ZscvDDxJwGcQj6zo3Q\nbrBeej/bZuNM/N9N/MoEyic5Bb7YnqypHXNoKbqrqEyvs23mNF+OEDTQi8rv\nbS8UWYkqRLceiZ3vdM1HT+tpS511kYoVJ40K3wOfL+ZEsoYRmYHBza8QKkE9\n6jb1/k9nMs8ZBkoEESDAqfSuhs69DwMhYH12XLAggZvgCIIB7t5GFfItx0u0\nIIkr\r\n=O7Ki\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"2bca9b30c31a703238ac9fd883f844e0bcddfca0","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.11_1642785314354_0.9103088900132112","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.12":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.12","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.12","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"3f3de54b084d8ea238c4fd296bb566dcc77c8da6","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.12.tgz","fileCount":19,"integrity":"sha512-8lrW2C/gInEYU3Vtwwkl+dQ/bxa+hM0/Ic0SEEatUH5RW+99oyiKmWqPZo9OsSMtfcgxiId+cOE3OjJloptSxw==","signatures":[{"sig":"MEQCIBW4e4T/xI464LDv28uug8/Fh7FuzVkaOl9hwxW1oKEsAiAtz6DMXsxKCNek6zeK+462vuYppPHMJZvIXN5D0TSRog==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":631545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9VwACRA9TVsSAnZWagAACxkQAJCX/aJAcWmrZsJ6SBWm\nKlHguSYdh1QLXy5o+5mhnU/bk0oIxpXorYcBTBzY3v2kwnB6HXpmewW7z131\nnhOZX3PW6Ksln0q2Z7E2dbXuED+wtmOYXraAeriHjOs/C8Y2Tyhl1RKqwfU4\ngXsInZIlKsr3Tcoqvv+HJhOyzD6vUytYMtxSSY6wY7jt91bfuZ4APCWUs9Mu\npo7MHaW4tYLIeIneQVLV8p0sbW1AI42OSwP70C1FLg2KzNObyGa8B+hnbHAt\nNzgIH9HyQ6GwfhSEeXJIoJC0fY+XwAOdhkjhFelwOOFVt3TWiOZ/AgeA2tSb\nWc0rR5L/JYE2Djg6Qq8sOVjsopS03Q8mZY6LBud0fVrjcujjWR9vG0yiqvdS\nZG+GVgxdGK5JV2w+gttOferJ18aa5kngVZvPZPEBnAMbQU+Xx3Fp5FJTBpgm\nUWOBAeBfNgzES1t6ZGyJa65SRcJ2EY2HQ8wbGGqbBOi4uPr+1/70MLVz7FJE\n3N7Ca62C4dx/fWLKoeo2P4G0h+mwoo1ey8Yl09zeWTDZM+gKmdBFvxwT+X26\nEO8RPombEzoaMwpJLltPrXaYsDZTiMQzF1PNP367dO4VQ932xNZNQKC9cvFs\nTsxoGm9ct4cPUWkTYkz1CygF8J+GJGmA4kFcRiSoWhsnaNQeUZKd8hFDxxg2\nPQWD\r\n=SW1/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"8b66191c8ec95af9955325fdc4029e4818735f1e","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.12_1643469823928_0.28205545056844583","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.13":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.13","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.13","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"2a872cc74eb98ea0b65b9179c0f8c222bb507e8a","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.13.tgz","fileCount":9,"integrity":"sha512-42gGhjun5y5N4qsrS8FJap1odBmVfUXS4+ZLXinOy467IudhQfXpt4cBVnzZ9qX9PQLRyZGKu6csG9jZ2dqH9A==","signatures":[{"sig":"MEUCIQD74PiKIuG2HEJ67l6Vz8CjSCSjMLTkisxf5SmGezJdygIgG4YeeeG8O2lQuU4/nl7pXja016TX5aOZ+9/b2uFuVN8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":29212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+BJ+CRA9TVsSAnZWagAAxHMP/1JoiQJxDxdEdWC5D102\nR0g7VAVwpKvDRtnORVHPaH+6GGRKYEPgsvKADYdj+U6sMBHmG0b0iafd2FhH\nCPF0Jg87ygAvNARs1a5HTxrtwYXeek3Twa/wRr3yBJmylQn2ZPGaVHdckLVQ\no31ipJCILjo4S3uNbk0ux7Z4a0YgZ7G6t8RnVQ0SloH//Y+ST01UL+EuLs+J\nnMcrEY1F+BsRmhWBw02zq0nndW2109RbaW8IBmfM7yPmlT/sUlFZE0Uv7+e6\nLhCOiPoClHPNdD0b/RGNGuctDyErckKnUUJKs/sJlfHvBDmw6DVoWezHPbo3\ni1UxbgBJShvpy6MN5qJke/nTh041aIv0WH1OTDg96/n7rUdRA6s83EBoNSdz\nezS3Nnv4wFmixx2GokpMNi/bfs+5lSW1wfPs0gtn+sSD2HujW+3V88A8gKbV\n7IbTW7uR/BY7F9afVjnaIFfjaTKesmNavCN8YC2E5UmBsAThqM69sdaIFA31\nV1QUKcMnC+aaLbOTdsSmxGYtXAwedCQhl0IPO+KjQXWoWLDaBoDpHpxpZD2Q\nGTyxU44Z5iC//0DVe0ja2T4NqeCOcIAjTVoHewLngAvmAthP+zV4akdpIwVG\nixzRSgkcCJyKBRji6ShyALfVpHYLNedQRboc0Nfy1X0JvvRFkGGkXeFXZxlR\nNgdx\r\n=1Hm7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c1bc1930d1b59b86a4f059fda625e787b19f14ef","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.13_1643647614180_0.9569648087403972","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.14":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.14","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.14","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"5dc28b7d15b23518c9f82ca7737c977aca26479c","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.14.tgz","fileCount":19,"integrity":"sha512-X70O+mbk8qX2pPzQ+dd3361dtPVFoF27sS+vunU7wuRU9SL2q95NMp1/7/sQZxXZ5I0cRCDh7MdLSD0n1gATkA==","signatures":[{"sig":"MEQCIBjL+KYVhId2w1r5QOQoBTlrioA/ocNjPi4Yrc8w9LWWAiAvoT35liy1x9mkRKLyGDJ2NZXopbIEZMpnsbFZLqlQKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":632063,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+CJRCRA9TVsSAnZWagAAqz8P/0MA04daYVsiNUyaOuBj\nyd9ZxJ1o+k0l4bMzQn7UqjwqRH7xbAls71M6+QP/auuXO2y0Kwt+ofq2jTez\ngGm3Mud0EWiW+NN38n1UVrg0YUS16z2ucTMI+vyC60rETTdtV3MP64Js8APV\nHs3SMUa6r8rmeIXkfhnWqWgsTFNWWQ+4q8oQW47yq0UzZ+MkfIkK+M7QseEc\n/EtKizC1XzmrshayL/4IWQ3pIyc/Ln0IuC/fNw4S29jHAPFaq8N1qQtGYd3P\npQ43P79PCXW0E4kvYiqrLzZm2ifyGcpp3ha1QqCijYCI5Suimp84SoYeF6uR\nEUApES5qaHVuAy0oaOHHippC6C4zXg+WpyDALMHTN6CZuwD59iaxBwCyzoex\ntMeLKb/Y3xIZ40Dh5P7Dxc7IxJMsbaYBlJbnzFdlE/ud0Wtqh5D6nRsFF2/7\nyMIKKixyGqW1cqBOVyupNTzmSeJavWzwdL7VaA/lj13d7WBc9s7T25B0mxGQ\nd4lSTqdFvSA07kemlX+qW3TlrOhIC6zyrTd2DAUfOCuKeUiKhaPNYUwctb8o\nsmCTmauOn1q9E0OehrGHuhJPHR0ad03nFSR+ojgc/lBDWLR5JeQRGIzefq1Q\nsnj48Zom2dO4PiKGLoXfLkSMWtc1IDjBazJ9HSEf50gkEJGTEvoKuX0i0id1\n8anr\r\n=lfvd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"39fdadfbc48a62478b29653e6ec8aa561110bc57","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.13.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.14_1643651664667_0.9240858842030828","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.15":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.15","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.15","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"11c258e1f9464f5f24d03f5348aee9fc9ec6b3cf","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.15.tgz","fileCount":19,"integrity":"sha512-jxOgw/xulyOHgQFE4Sdn3ybJO8beL9wa2uC331kHPr13RbG/PcoEO0cB1ZT212oGjVvLnN5xPZixuqL34SHEuQ==","signatures":[{"sig":"MEQCIFio7m32WAtoB8FHn2RK0SWq8UvVIofJT9+20EyNz5ZlAiAsPLM5B1Jz/yzbenDYwC3lkOr5zB+QUkwRndGXKko28w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":635026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJ10uACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrnEw//SPRyUg9ujd79lKlRAPvmZQfauU2w9Xp3cwQIWjvk43sY81/x\r\nthD7/9NaOJkeZ7yE4P0jwnakcWd39jCkM1SmhfEI28eqJOHg4y0xpSFLMbFF\r\n+ynzhhSgPo72c6qBbp+6biSJacxvbZqF7f+ubOOkO2jx5LBtOqo6Y1Tdlrps\r\nFokhX9PDVWCs4TdqshO+ZiBGc0Y8KOmr1OO9Uz4RYdOOtIDjnAVoeT+G2UBd\r\nyrj42F7gp+Cw8peU8XtExed27S0Lol9FOfa5qt6zpKEg8GpEBJnnKCivx+Hj\r\nLBdaSBXLOroHKwb49FvV5+F5EbXyFnNnYjZlTPCmzRzLG3LBCkuRFyA7cCqk\r\nO4gtUQTnRjAvP6UGoQrNZH5BkFHT6NV3/vwulDy/CE4IwioLzhGel5QkyUW4\r\nOBcjRIV2PcVzB0sBRhvQe9XnK4GgDdNV/WBCCrUbEijlSV/0boPop+qDXTeL\r\nhl1RcILj8pb4Zw2cYg1HI/+g+r7IcoDi8fofM324OGVDo3Mf6RXwyyWs7LCC\r\niWX+MentIoiLdyfLoKS0jpd/JJRo4noEpWxd0MREnxTqn1ygw6XFcdeRytM+\r\nbtjDNYplFAnlalOyTEDD8I+L3fkVBYeLC8YBawPnAygCdHL8c4NwE/u9xJy+\r\nyxJJn0/wFjvknO0ksu3JJrv8XXAbgAwHc8Y=\r\n=a+Dc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting a raw document\nTo get a raw document, unaltered by reading hooks, a transaction can be used while setting `getRaw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.getRaw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. So no Class mapping or decrecyption will be performed on the document. Typing might also be not correct anymore.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"6b35034264d53ddfb17c7badcf409de3032d0cc9","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.14.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.15_1646746925810_0.5505571293084155","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.16":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.16","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.16","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"6410592c1d0d0afbc5d99d340cd2a23b890371fb","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.16.tgz","fileCount":19,"integrity":"sha512-J/tSspByFdCuy4+hjFdOcCFJbGmXNJ3tyaQxexG28I4NeojSlgJhklw9t4PyrN392hhR7LpNbl+W1+s5WTGTdw==","signatures":[{"sig":"MEUCIQCzbR0xndBkJskhs6k1QMlgX6e79NM4drlomUDtC/XLeQIgAYIlxgae+R/zrM+MFsYKPZjxy0ioaTL/HwO8GrNIP28=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":634795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKIsiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpfPQ//eHx5tE9M3Sa1NbhYO8E3OFAsPIPCQTKGtxfJIKvUTmxxcpIC\r\nVgBIrboEcd/8NtWTxnezC0LfzEA4d7Vz1ke+OoSzO8pW5KiESGUvqEoLhgPD\r\n61NtGNDRKP9O7kyb3rfJ3nssCZCUyi68T/YaUlsgLFpTLmGPx4uBQJLVGiPt\r\ntY88PtC2ezLZk735jRiu3AVQaqzS6ZQqJXOyJYNiAx5Qbv5fXdREWaIr3Cc2\r\nwltrlIRSspSj/1EzBNOX71wXU/X6UZxAylqrGic5lWhLyDJwUYyJja9E99hE\r\nSyn5Arf4wcot+90u2/GKkfJ7egnJ0naOqrfCh8i6udNwH1GFjVNP6NgzNw5O\r\nQVpSa86CX1d5SDh2F03hnsm3dXErLKeSpY+tlw+Vl5QsRNA3zVfXpLrHytOl\r\nLIXaXULMOMjahWcyrqvbSVhTk1Y9CrZCB42TMKZaMMCAAFD/uIWrL6iOPrVH\r\nXgB5Yv/+lHt0O8tyG1Ea+g4xt+dZKM1RNfXL8i9O+KtaBQp1bPq0Ph9ugO+x\r\n8Rw8S69DSTbM7qKHuYPRDO4dzZPYBuzIbqS8RKTMp/VBGjHz9+WXHE0pqI7I\r\nw3q60VYOWuyBPFVuJyBcMbD/b9LGibtu5z2ER/Lh8wwUWv4ff5HPOFuPGz1t\r\nKofO3uezWfBta13XhgYlNjV6hjXDVAxSVxQ=\r\n=SkTG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting a raw document\nTo get a raw document, unaltered by reading hooks, a transaction can be used while setting `getRaw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.getRaw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. So no Class mapping or decrecyption will be performed on the document. Typing might also be not correct anymore.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 SHA-512 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"dcb4ddfe2c5ee94d32269513d7fadcc12c409465","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.14.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.16_1646824226143_0.5541302598730731","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.17":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.0-beta.17","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.0-beta.17","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"ed021ae90b7c9ce503a8fa032536e35ac5465b07","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.0-beta.17.tgz","fileCount":19,"integrity":"sha512-dDHRWQ/ghamSM5tCQ0X1IUCdHRH9UVt6vRoMOzB+MTHnXbYIDDZZNMzgrJKNZGLIt3XdkW5p9adMSWqsgDgUiQ==","signatures":[{"sig":"MEUCIFfFfL0QEdF0SGiAyaZmU6bb4ZTw89yMbDC2P/MV3NAuAiEAnHlcG4wKOLkjekswBdUug63sxetrydBd8FR19pH64Y8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":638332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVAKcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpUbg/6AzL8OwvpXD88ArzHpdDHb9wN+B4asThYeeQUdZBOHLYYBecp\r\noaeFdDEqaTcPyO3QyJJdpVA12VhZXu6w3ide5OeveKiCtsvo/UQ9uYp5uo1Q\r\nlU7EAbC1aon2Bx/yRgr7UxSVRzaQi9FCtdKeqwTVfJ6dJAvQkiJNU6jxLXO2\r\n904/ZeJRyHSnQSMmoANVgUuhfRruIU2ErX7RFX8iqt/w7p6mb/eAcsKRrFs7\r\nHHMOJwsDwMJwAxR5AvSbN6bQtnaeBbDuemJPfatm3rBg4mLgOHkjCKABLKv+\r\n1dEk1DI/dLq9saQyC2riuc0HpeItyE81G9ai51lODVThlV8grudLj8Miij60\r\nHVk88+cQQ2DSvqZrIa/OM/JrM6uHswUZ16y23SNLC/Ayu+pMzrdbNyp2An8B\r\nUjowPMDpQI9eaQOc5GWLmDsa/epBKnOnei2dN3vWsYXz/8vlBYyTk0GxW5t8\r\nPAS/4tpq4A6EAT/EQaSuMVk0n0j/hHfjqFs246e/rrxwMGyZUiFMEPYsP458\r\nD1kdtEf7sn7nCHoEtxfVD4jqMQYlgRBm01qmOyFf/uRWkuf/7nYUL9FFmG0L\r\nj/+I35Y09IrdS7fEhfix0SNuw6OMIe4UOCz1t9kc+ukdQ8bWU11lvIIWskt9\r\nyko04NV8Q037OmR5xAVL5oH+d3dJuaSKqe4=\r\n=/XNI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting and setting a raw document\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.raw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 SHA-512 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"da2ad487eec137d3e7c3ed6f404756ffad1f2fc7","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.14.2","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.0-beta.17_1649672860047_0.033752111965742015","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.1":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.1","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"ddab590065dea31e3529b34110e98f61b07590c5","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.1.tgz","fileCount":19,"integrity":"sha512-8B2LvIbM1eZgrvpeY3gGRHTM/yiYVetpZYuqKxmQjTv2ysWKtVemsCJs+VaMfAThEW3TWR9KG5TEMkKGVLSPIw==","signatures":[{"sig":"MEUCIAv4kPEY+9DQ4zx3Mq/waLgOiVXDtrZjww9w+vMdEgaWAiEA2D6dUCKQd5eXYlBAavkpJc9usic9E98aNyGw08L9Nlg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":638809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2uGkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpp5A/+PoVomFPdSG4wdNeAToVFF690FjYFhI8//Opeg9i0KNyXhP7H\r\neDTrzbtO4VQ7TagYv+EACKTsbyP6I04n0kULfRLX+dmMkihBUSqS42Q2S+G8\r\nZcFj7JRrPjxKggKcmB6fMVcu5dvEj2MGzOA0JwineLjAbv0FmCnH9zfiMyuW\r\nAC06PlK3hMEsKMFKWbQ1I9seD5+210TO5O3yWrURSCM1WkkFIAyC6WZ0rtRe\r\nUNP5UeOpPKh5DZfSXtKiG3DgTmgis160iVfgo8HtYIDqZyXtTxYpnZnx2Vjo\r\nzpGSOqWWa3m3HTU+nynlVE1FrBpV+sMYuyXR1DCYkPiF4TPdUZEftPozUusL\r\n9zMk9m64PRfqcP6pLexZd82brpW0lVkgi9J13a89gNfdJcmltiR3pWOJxZ8k\r\nfNswXQLRvCtg5Vzh1UZWp/Gn3kq+J96v6z7RNARCTtf3vKO1S6KmBDJEcmSC\r\nbg4+IFT3Daek8pz8cyMBzs9o2P7t14+VG5tAWVbK2olVPDz2M4lOP02IlwCo\r\nRa05u+E7visOuTGxrWoIWOBGnMuB3AFM7wlmVJABu+g95nX7upd9mCVl5sTC\r\nuGoYSnCXCfvUi3/AcXb4WEU5vFp5Jp03hyyHA8kUhgntM3gUBveCboSdve9m\r\nfKlFH5/gjt0hhdFrr4RZyP5ZQmRfNy8xnPM=\r\n=g+3M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"e85919b74e555361b7ec6dba3ac7c33f65a56e1d","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.16.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.16.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.1_1658511780582_0.9582721716842202","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.2":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.2","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"7034fcfc3c902dedfe933891858fda65ee3cd7b8","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.2.tgz","fileCount":19,"integrity":"sha512-yy9BPE5NUcovHAIoDMP/m1OFl84VU5TYtnxqb6IRw4G3HliDPu5Qba4T+Z43FlUVnHtYOu3GBEw3gskm90TKzQ==","signatures":[{"sig":"MEQCIDAslAh+V9WSttAlfIurtd7cm75pLKHSKIdj1vLH4e1QAiBIlElcXb+AWdk8NQLnpvp4w/s0KZ43fudQ4llKghmOLA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":639051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2ulUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZ6A//Uyek2O3Rc44v9VmBZoKcGLRIUprFCuRrTQ2aHF0UgMgovJ0Z\r\nEwE1JvdVApEPNC5sCa5Q/VTUbCtIGiZ0EM9B6qAu9/CIzE7Jh93TBouiw1b0\r\nVmlwTL24Xm8jvvdHG4QY9aHr4o6PprxoZNkVEqg/Yyfa3/fRv9rbDQL9TV4I\r\noQra9cvLf2NEzD2ZyMCOrrfRHc8FHlHm9rIpk5B1oo3qEzp8SpxsOZ9+/lC9\r\naqf0mUI7m3io130EOUFuAXOipSOthB1bjCOgWmXbSwldP3e7OkTE0hH/5uz5\r\nskIFRIrfOSGqKDCbu6PAq0x4jPWsJ7iIOa+kn/G75/hQOBVAoy9w6Xw/SqFO\r\n91GHwMveO8Tg5plojSMZ8n9WAcgzaoZY07xYKHwGmNc92ww8TXjudtHSzXhb\r\ndjONRqMdGEiZsTYVUzHRJxHEywSqG45hFpCQgTDGo2ERIl8iN5WN0aiq7Tn/\r\n1V1FIMvaWg9aVTOsqW8qoKGS5tR2bBteBs2eGMXZ/vb86AhtBxK6CShgkLGn\r\nyk1STFOTtGBOiEu01TuBVdVvLmGEqrexHbYbENHN+iyKbhlZMYR7ymTVqiE3\r\n/aqvGDRkJM3HgfriqAIehB6DuocGIS0ycRBDxEIQ7Bls7v+on60R4Ikf7zP2\r\naaMabukxz8DJRxwrfFldPvlJJOgoj6sqKBQ=\r\n=EEDD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"2436153946c9c4caa88b5e80d00a3b0edbf7f82d","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.16.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"16.16.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.2_1658513748194_0.9722959383228325","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.3-beta.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.3-beta.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.3-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"72f8ccd8f0ccc874ada6a99b19c3edc7b93a333c","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.3-beta.0.tgz","fileCount":19,"integrity":"sha512-zLtYrlvvRYJIJeOKkDlKLAo7d50dude3lA1Hk//MHv0VqA79k2ddskF6Am/QYlqySx9PjEFVLf9UN+5aMz/ktQ==","signatures":[{"sig":"MEUCIQC5xw68wV57uAxeOhw5YlDgGUvR2s1HC1uoJ7WnAnPrQAIgQ8skofQAbGPBmzOzBWQINtyTrVcNNcwV1+snDrKtlNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":639462,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjaVCHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZRA//flwMEQsN0AJn0kLOrImRk+NSp5vwHK7WVisSM23ZA5VkqJDd\r\nWuq3H1UKmSiOuVQmKdTkvefyRr+LvXcI+J9cajGO72ejzLZDO4f+6R6/iWFP\r\nZImUPqryZui5K55PS3BDNXOM9imukuS+jNldj2G+nyffpYhoP/m4m2lSIm2P\r\nFvb9yWbR8pcmZvgN5viwbJt86UY4xo/M43lxmQXMjT47J6VahXjawjispExZ\r\noMiZJbousjKU85SJrjEN/MZiIfuxXuX3WLhMCgIw9f2K18adelQ1foC2LIYi\r\nY5ckymX3bx9CdAzcMYuMDcqszg9D7l9DHcIHErbJTruUtAoYmqtzDUMiWDOB\r\nD3nNv/qFinqRZKfwBFaEd6uGPHrA0OHvfnb2W/kN/EjmSKNJQYtBwiP8MXNT\r\nFq6EXEImStQjSrmVPketCFoTOLWLesoJaE3CweCB7XwVqt/5DR+30qgcDA9k\r\nUMKAxsi1aHyQsfAxxSM2a00SQmpICe+gTUX/4rtRI5Du7/iZRquT/8tcx0qG\r\nPabYs4pgaAlApCqjWJ6ARrs7y+qhMsU+TNuUAVgqORdoFipSNX+lQi0uOVre\r\naMQahN+AqrpQi2ObZMl3gl03KJJvNwVapjy7C4SNfuq+PfPdoZVtN0/f0Y2n\r\nSVvzjPw8PvTWuErQTQZ9Ny71QRQUPJfuuls=\r\n=PJAJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting and setting a raw document\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.raw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 SHA-512 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"ef7e7b21cfb0d3aea3712ad9f4b3879e73cfd99d","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.3-beta.0_1667846279280_0.021459456661764076","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.3-beta.1":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.3-beta.1","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.3-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"79b509331a94c66bfd4ffbf0e1c28b5d55b7a2a8","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.3-beta.1.tgz","fileCount":19,"integrity":"sha512-v0jqMmsrebCih1gLM8Fk412587HMcSkEAlxDpdPRq/GI6Qp7JN6ovS42NIv1P0HlmHGpr5bfL9JR3d36EzasPA==","signatures":[{"sig":"MEUCIFv8FOGVnAI/XrHKc8hNDu9OVFTKCnnL/TBXas7vZMtdAiEAh5PeQmohd6ZnFkC15fPFzkHRVOUhDHzZHCDsO6m9P4A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":639612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJja/H6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqDwQ/+JOHSydxclD7ndekF/rM5WfvG8aInTnbynL/zxNCQjJmJoKWd\r\nDu9PqUMMqcPW5JC9rss1OGE0sL/aAVEcFc4HjqmztSMsz4pecNBSP5nEddOJ\r\nDae46InCrLJAgarQRYefiTCeZN9dJ1GXhESCDTQM+k96tQt8F2PXRcyDClrF\r\npydRcV+/92jlYGJnCPfqjjCYHDCtfLmN4SvKHfRgx06jIU58VhYc5K1HSQcF\r\n0gTN7tVYe9NzQHl37S1gIYnb09eax+0iyPj/eebhgeVC4OTsbOBtvkuWy2E2\r\nO4BoK+82LvAYnEjZ0iQZ1dPBwXsORgfRMwJH8ikXjIpBXGy2Y5e+tJE8pYjT\r\nmJim/iS9HciQCUyQotS5FPCiNrq6wIi/myY+0pp8sY8oAVxbBU1eJo+hIhAT\r\nZW1UN8b0aYA5xaNLKWk824a2d0Y3il+Bp4MCY5jgcIjNDi5CXCikJcopl1rj\r\nFg6TkdD1KCTGUALiywf7lT3YDI5kXEAhVcJy5Wm1CfQoRLF7fL/BoBaFcfkG\r\nUNduXWASF0xyIGSGOPFWcpISToyQD3tlaeNJNMeN1Om4/Lcn8uzJ6lNHH+Wq\r\nle0BLCkxGimlIAMRahHciui/MAgCYID9nIP/G1AsKYiceFiDemv1XPBEvKGT\r\nmsw8qBzZzQIpv+BQ6lE+nBuBFg0QSxvQR/s=\r\n=dZFZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting and setting a raw document\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.raw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 SHA-512 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"bb51cb35be3f49e34e6dca67bac8ce6d312f0cf4","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.3.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2-beta.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.3-beta.1_1668018681935_0.020934155357400286","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.3-beta.2":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.3-beta.2","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.3-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"294386ebe569df1c05f8294285a5d5c399fa1432","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.3-beta.2.tgz","fileCount":19,"integrity":"sha512-AHltqToBqJZI85LkOoJ0ckqYrud/PYBhmCEtQZ2OR7eUEJ5Wvy9eHvi4auZVerigN9LhWwXAJWnfZLosHihTBA==","signatures":[{"sig":"MEQCIFfWTOXLkhlHVvYK288u7WRyMhliKOnDmfDPdITVsbY7AiAzVWokOUOS4OAkk5+JAzzojElHZKQIv+s0+FgvKXvTXQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":668436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjbtcUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2Zg//fTOQixBETDQc9ZARLDPFwPvMPcpGTzU9gLQ2tspaSW5mS+HW\r\nah8M9Ehl3mcIyUV/E8+4ehwmYWjOM01qRFnB/P9unzCtrMlkCOtozcYruBV+\r\n36tcP3VIRiIb5eg+Dpd3nHMR4T0QeYNbxm0ZcNNNY14eoeUjEScWfkyEaUhH\r\nzWT4KB4V7A+cNk2bEVSjETVAr63ZamPLxJQxtNeANy107BMZVaGayItzmrNv\r\nyzLTrzM1HoBTKJXtiwIUtKhg85givmdixPhFo1ZZucafjTFv3z8qWXMAHFMX\r\n05SlEUiPnoeNXT7nW4SC9JhdaNfq1i/Zt6aXS/baQq+OzW7VcAiviGq/5mLa\r\nuVYXHAMYW4q1Csg6xmV3Ga7MnZ/HYoaHu5ww0KmtBTY9AyNpWq/Z92kx72WU\r\nXBq+MsBLEXI4K1EiDDnhTPox44hO5xk397i/I4laluCUfw4pQkmtkQWZuBeJ\r\nCvgNp6mPL/MIEpDs6eYWpmcvhI5oXD5sgAUeaAOpVW+AdH3+3nvaUxk5tJge\r\nIw0k5L4CRXnUC04aoPRsrVWS/wPLIRRwsd77PJCerAJVa2x7y9esRdwjJv6K\r\n8As4fKSgtl41hha03hP+bXmqkT8rVxClWgn1WCcguVn/q6/io4aNcmV6OOOH\r\nxQKrAS5v3v/64PlqHTEclsMBeSG89oOiJBs=\r\n=66NL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting and setting a raw document\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.raw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 SHA-512 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"9f07ebc92a654d468b14a5eaf32043ddf4a3f6a9","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.0.3/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2-beta.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.3-beta.2_1668208404446_0.325598682362672","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.3-beta.3":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.3-beta.3","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.3-beta.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"f7f4c3157e62a65a8fd3683f1c8149d49c245ef1","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.3-beta.3.tgz","fileCount":19,"integrity":"sha512-1dqbLqoll0wXLOcnN1RdRBWASaHnJn0Zgysjfoi83Ew/YpAUDgwYHTN3j7MHLxIw92nVSm2mLY5nbVQzHEGbLA==","signatures":[{"sig":"MEQCIHC9lYC7eF6cHzn6hKJ2syBDKK/EERPsLfl8Zi7YRBNuAiBD/OV+ZnQlYYOU+6CmcHVvePhFQzxr6/n+k1mds/KLUQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":668797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjb7FGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqdOg//ZapgIMmjTs4o8PUFnPuUX4DJ9OcVE4L/CuQq0yiAmUTeD7Co\r\nviybzIrAVezN2cxSpkSNKUwvo9PIjNwYP8YdENqd8XYJbYOjc59t2b+ygD5F\r\nyotoulTzTSRcSbgeXige3XPVR0wtTeIZqGwHveJWzgnWPM5fSs10OYmbw+sH\r\n8+4zVfUf8xtY0g/HEdTazO87K80mMDcJZRVO9IuGh4XSu8/r4b7k5Yr79Lrv\r\nOZ4SyxCXr9oTmxCkKGDex1VVn0mvirrBeHrGiZX4LIn46PLrTjmurzV1Fo2Q\r\nVej5+fG6JigT/uwyh7dTAjxXZ9tMOVjSljr5jOH9WKlQIwA1Su82QqFnZsu7\r\nwzUHFstIJqF4ypUQC4w1sTvjlPugM1faLvfXZ3yKyIVc7w16R8IzKAnrjJfD\r\n3kAv8/Cj6NKj5ykP4RyAYfOLFLcSwwLIuH//2cxiwt7SknhMGHbghB6f50vI\r\n1NnXxzk+LJD3NLVkRPUQOP3e/tQl+ffnVQ+CIGE7UIJn09hGHPWICRjTjDZD\r\npcqwqeKQ/wOIi9saVSqkkHA1kdSNllfYj3B+NGZfVCi3P8jvyj4ZbOfGn7Aq\r\nDNqGoRMc6UnFRp4yP7Izg0q366w67xcaXJ5Z2RzA4HjEp8PrwCFNULRiDO+7\r\nCl8SsrIPxJRdtMPJGAO2bzTwrE0e8ZFdkHU=\r\n=mlI3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie Encrypted Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nAngular > 10\n----------------\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\nAs mentioned in the provided link add:\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\nDocumentation\n----------------\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\nSymbol | Description\n----- | ------\n$ | Encrypt this value (does not create an index)\n\\# | Only as first key: Hash the original document and create an index\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n```ts\nawait db.open();\n```\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n```ts\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean; // Default true\n}\n```\n*Setting this to false can lead to unexpected / weird behavior in your application*\n\n#### Getting and setting a raw document\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n```ts\nawait db.transaction('readonly', db.friends, async (transaction) => {\n    transaction.raw = true;\n    const friendRaw = await db.friends.get(id) as RawFriend;\n});\n```\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [encrypted.setOptions({ secretKey: secret })]\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { encrypted, Encryption } from '@pvermeer/dexie-encrypted-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string, secret?: string) {\n        super(name);\n        encrypted(this, { secretKey: secret });\n        this.version(1).stores({\n            friends: '#id, $name, $shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase', secret);\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n        <script>\n            // Generate a random key\n            const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret })]\n            });\n            db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes two exports:\n\n#### encrypted - addon function\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n    secretKey?: string;\n    immutable?: boolean;\n}\n/** \n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */ \nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */ \nnamespace encrypted {\n    function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n    readonly secret: string;\n    readonly secretUint8Array: Uint8Array;\n    /**\n     * Create a random key.\n     */\n    static createRandomEncryptionKey(): string;\n    /**\n     * Create a base64 SHA-512 hash string of the provided input.\n     * @param input Any non-circulair value.\n     */\n    static hash(input: any): string;\n    /**\n     * Encrypt any value.\n     * @param json Any non-circulair value.\n     */\n    public encrypt(json: any): string;\n    /**\n     * Decrypt values.\n     * @param json Any non-circulair value.\n     */\n    public decrypt(messageWithNonce: string): any;\n\n    constructor(secret?: string);\n}\n```\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"691289cc25c05870a56675e26c63eeee7df3d0cb","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.0.3/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2-beta.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.3-beta.3_1668264261900_0.5165281914922846","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.3-beta.4":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.3-beta.4","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.3-beta.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"5ed36ca39e1622c682b75fb4d3f7520808e702c7","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.3-beta.4.tgz","fileCount":19,"integrity":"sha512-m8QkXdgujeh3cCLWNCoiftMJiBlz2lEXzifUjMRzwwaUGAj8/awCJQsA50jeG+vMtUCl1vtX5KZd5uJ4jrvRUw==","signatures":[{"sig":"MEUCIHw385eL2bgdnQ45BHNSMTUe1rhMfW8sBW+2CG1a8L7sAiEAjHBN//8VO4V3U7RJ0hxrhhziaUZ29qi5pP/msN9nfHk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":680503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjoNPtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpL7A//ZDAsHze+Oytn33FpmHgD2ZZS3GT99uYTPxC7gnjvCwHC7lzh\r\nB+z9lFnPdymbwKtPzJ0FqCl/92wozlxae8OyUW5cr+gSZCFIxHPOAK8XHiu+\r\npzeRHRhHAMx7iPES/HECnLy08ty4iJZjXxu+E/Y7pHwH/U1h+y++PrHRjwzo\r\nBVoQf+nD7AEQasZaQlJCITbnpZNJhxPN7SE1ARRpN1Jq6zw97cjwWfTknNoA\r\nZrXHJlHcHQ0Qgy7lE4+WywhfR/5Gm8W9v3xzEUglABDNn3bPchtUSc6vCuWK\r\n5D+bL2/Aq9CECS+1gVItRMbyAcDu90R6dPjfM9LCLmTYDFZH6SiqEOaG3eaT\r\n1Da0s3ST+pFFjmuG6lWoYW9E5+k0d0FCrA1+6oSDWNHlcVxQ26H0N9hGMDcv\r\nPIdbYcfFIGJXaUMvFgA+IoSTr0wVSFcHofMqp5JIcqDltvFDEfaeq9pUO3Xu\r\nU1s8uKJYCPvmBEn/gJlrAvAVG7qb6rEp5pRTAteWA/9MdFi3442gl37S2iC5\r\nMZ83MsiXXrwb7bE11o4eBBGD94ovd2hDOd3T6Ej9o4WZQFHw8izNHna0j9yp\r\nT9jVwryjXxGk1T97C+l6mCVNjHVduOT1CmLOUzGeHpQaECnKQG94TiVU4g55\r\ntdN9692ipWAv3hwRGciyFHpIWre8eDCkoco=\r\n=2pdc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles te encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\n\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey?: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret?: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key\n      const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey?: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret?: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"e553f7f8912323c4c020cfdd6e34110be2b26469","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.12.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2-beta.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.3-beta.4_1671484397448_0.9820026726021791","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.3":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.3","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"ca04ce8a9e39f6e9e890027379678673a912f704","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.3.tgz","fileCount":19,"integrity":"sha512-RNl2idX5wg+xl1ekrByNgGUXgK++hJvifM7OPTBNiOFdLs2IzMHUfU+nLuKODKFZmA6nq9MeHXNRWoBJ3/e1lA==","signatures":[{"sig":"MEQCIEcVgt0A8Jcri50W7VqSdxgPg5WygmPFsAhFgexZd5+NAiAz/859eKSLoASKtZpBcf1VRWpcQEA0ggA+trQ3IKdfEg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":680736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrHU3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpoQw//X5ptqK6RoOtXXTsY2WqS6oqUVd9wmCXX1uvFGy2t+sijgrkb\r\n1nNlg/gWT6FdhUK+A31bCbdbDHzyQXNYkvBX3rgv69pE8ifmN5/oVWRhyIgP\r\nqIPmIXriEjSwzK5Oqofq6bZC6rmCHqsECftc424oKHQ1chKqqcdm2KvXos+i\r\nG8lePrXf95K7e43Bn4pOUJ81VPEsm1SMlwuYt2Ud5cBHRtDhKxFjpj98RB2x\r\nfzlr52LwGsjpcxgDxtnrSynO+LPoigDl9YlevKLueRqcmXo/LFr+Vku4Mwx5\r\nOE7jq7L3TkMO+Be7SIsedPCdyTNsbT1gz6aza2pV3dUgqC4dfr5ARhykZuIG\r\nWkG8YXQvoX8pGVfVtWRi0iaf7eBkmtAI4foQ2PlkbWbvcOMuek/iNDta78r7\r\nm0GJbUo7wvPiM33uc9s3Z6P2GAcBDDKrV834lXJV9mVgr70lg1vHl30uwjvk\r\nX3tbeAA7/DAkKEq3uEG8HFzBPRqgnLuh//noG8fx35oXwbJbt6VW3jPY88EC\r\nI6Q2Dwll4h+nI+F2BJvOZab4e+Z0q9Z77Pgx17YvCMp3i1o9qMKN1AWBOiRl\r\nM2WUVoY7+T139oQAXAyDuhrCIwHI0BcBefiBsBtbSwe5LiJlREGx3TfRnp5Q\r\nmyV7ImdAn2UCECa9/YNTztqQOtL1OBel2N4=\r\n=sPRb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"1a396be5b7eba70c9ad2020f74d8de8953859954","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.12.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.3_1672246583255_0.602227512262475","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.4":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.4","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"3c2374c17cad2932e5ad5df6f74af801e384411f","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.4.tgz","fileCount":19,"integrity":"sha512-LmNN31F6WPdDHyAXnRraPYAdOUePWHG8wvX4/cW9ihlfu0DCeNv9XCzdw1+7skSRk4xaP3yeBTHXEgN7ZWvXeg==","signatures":[{"sig":"MEQCIG/bfOFmeLBQKu2uOi21hInjEaHLTEofAjyJUz2F/rtGAiBpgxZiScOeG0eUQOQBbVQbvIFNj9lUUsOAGlWl86zMNA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":680977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvCJRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq9rA//S8IkYEjEsu4S4Vzmx4lUwLmaRzV4QwfqjHZMs37+TH4zS6YN\r\nF8mvQPRxswWs/zAyQ/7P1v0TSFaDuI352HPJRLjdeJNsjIWRUbX9p4x99b66\r\nIL42XkUk85ZmYH8cwgIdioe47nof/hiHpPizBxmTOm4el1q5wPa9oBztxuD5\r\nlFaGneRLEYsm7tw8ReGoS5oNcU4J3fELE2xnm+rgQhBgSbJJ/cSFTBe63Xtp\r\nADYFHS5mxrMwjm7V1kOU8tXNSoY68WR2cIzJvy37EcMVYxcBRbpA48/Zyswc\r\nOT3iwuWBXLCqJjkxrMq4tGTIypw3gZft/u14TOKzXqrmU0u7DJUhZKYZ84s1\r\nV3hksfN8e4laJcmqwOBjcJdmxZqsVaf3l0WpjgTGChEGbqEssn3bVADmH8LT\r\nAMiOy6/lW9X13L5fuqQrZKC+ANOls2+6eXmz5LDYlzNycudqnNk7fElUbECt\r\nYTCsIDDRVzLu2M5PqljHWxrdOEZQBEiRjsOg5qr4kxrpwEZ6q+WO9E8Pcwzt\r\nbuo4tfVSKZvpc2SK/Ol3t0yjIjp4jONhGVSKYBtVVFImj3kpC8imafQvUUSE\r\nTCEKxjXe66QzN2g40G71+eWDKKmZfyz9SM9u5DqOaTe2DyiCyMax7U0cQPMm\r\nLVZYVMnwJ6M5k65SeAS2/iZgXdEbSPVPM6w=\r\n=Cqvp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"6df0dc538f8e1116dc606fb3fb58a7c25b39a27b","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.12.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.4_1673273937207_0.7936537130160644","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.5-beta.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.5-beta.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.5-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"1f5c1715592211c32b54c2299b00c11084e69dd2","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.5-beta.0.tgz","fileCount":19,"integrity":"sha512-+dMnPTHRyVrHNEF9MIkGbj6W6bdrxQGD44J202xR21R5dfqX8nuzXzICOWYNWZBioR9J75gDLEnQBzeCEgFFjA==","signatures":[{"sig":"MEUCIApj3sfcDGoVj4CHlJ3ChVk0Rahg8HnIHBLlbLCB9dUsAiEAiCaXTc6/d4okMl2rAqMBzvXLshO0KfQzarexRfJoClI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":681245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyurTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQHhAAkWuaFJmiEswH3vhO3Bs9Gi2+NcgsbSQC18tkZQ4b+g32YY/+\r\n8FSem4/9DjnUwiU0koSyrYr+CLX4IggKwhyLvqE1qCFSDYJTtbZrHVrr0Iwz\r\n5uWL8OLvLzAVEaDLCG2GUPTElG8e6udduiG5nPPotPb0ZBvUJJVKcyO7bb3c\r\nsW05769oY82Q722UYrpbFP3VHn5rbY49C2WMbc06y6mtqDt1sar22EiPl9ET\r\nzqdWqFg3nXw8kJtHV0b76XKEoKzjeHPN+CexUOF4Xsytkhw8bXlOWfccgX/9\r\n3a62H+jV5wmVnXf58fIP7+N+qTyUh3vNv1jxJ63nKVGAUlmFK+ZyE2+lNFKV\r\nPxlhcgJg8ZeAJBPXM8AYstBncHrdtaor+M+ZRD67SELcY5FYrf6CdvPac82u\r\nmJIwLZjMj5MsQ5agB4kCQ+4E/dEA9yx9yx2LsiIKqJcXk0hzofo1+1G9+t2T\r\nYb/PcWMJtx9iug7L3q6LbFV9LYB9fIUuH7n/YfaE9ybPKP5+b7hz/3kz8chg\r\nnE7mjdjcZjo11tOmULDbZdv25WIB2u1XP9xNzegA/RmTvru4vAAgk592A1l2\r\nVAgHmb3Emak27sATJd6og5L4+BdrRVpwH3PVYMd6BeLuxchbw0NDSMPhixXt\r\nmg7fotyqhJ27vhPIAPzIqsi9TV1Xbe2He1k=\r\n=ApY7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\n\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey?: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret?: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key\n      const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey?: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret?: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"90a49c461df32f0bc5360f5e77c8a218689c7a74","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.3-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.5-beta.0_1674242771293_0.9541758262051103","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.5":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.5","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.5","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"539a4293f1b15179fb212c5a790e749191202649","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.5.tgz","fileCount":19,"integrity":"sha512-KWedAKa+H+eAoDqw3fx+OPPDY5R5i5jkolzwACZ1PXJ+KyvV23KxXuESEWCS/HoJohGIBimqEXb/DETY4Jm1mQ==","signatures":[{"sig":"MEQCIFigLssSFgLSxqgNG17hkXwUzYyb2T+TMF1u/G2f4aDOAiBSRY2KCAhSqXceaumht7ctFpwXcSLDBi64Rf6oi2P2Gw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":681478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj3n4iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9tg//dWZFTTu8rwTRZnWIWHvd9/07bMxn86c8A07LF6YnQAwnmBW8\r\nbftIm/gG9t+CXKMd6ysesd3HQIQ4fXtZXkYK51dj8uTiZAaJw7Op2UH21Lp0\r\nVX1aXY7eJmWeOYVP7pDHWsST8yyxdQHMwsKI1du0bGuXw0dU1BkDthJoLjcz\r\nGrd2UlLlGXyVr1Jpe6XhALzl/aKqJ9Y8cWR37UjQ+ZllNN770g4DzhWNJSTW\r\nyZRT7kaT4DgBA5Ju4tsD5pt4Sd6CcMWqNCdlScVO0SVsChEJugo+VR8FmMhr\r\nk2jf8tWFrDCNrvpKmjsmgPWKJ+/OeOxXw2o4AqKA+JWpDp6E4/3fHp0krBpS\r\nOQdq9OonGy9EpqAuyZ8PZ40cB4+kNF6Lq+fNCR4SBcsJzxKUFVLVRinx06ek\r\nRqlAhNekTfK/8UC2RZlhiqQV7p7/NI2bQWJ5MAG9FlxXJKkezpomOnp7DxYb\r\nYFPG6ihJ6vXmMP1iB6eqcFaB5rUHhk5RRpoF+LQz8ZhWQTdecJESCrWw7KWe\r\n2am8h095XPJDcc3hMeucDeeiJRXTtNsDjkvp5OejAa1lM4WhlkPwKrSGyi89\r\nHUPo3+S4MymC+qcOEvcCAYyuCUJDm+Ef+PzfIPsNjwFUHtkyrOPOcwipE+yB\r\n/k4vWUJ8X1EoMZMGkLip52enMst+4L3b/Rw=\r\n=mRP2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"802ec1261061e4f9517d8460512989e98506585e","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.5_1675525666369_0.5645807177774109","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.6-beta.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"2.0.6-beta.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@2.0.6-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"efc3de7c5f21723c17f6bc1fd1125f4ec7f72c59","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-2.0.6-beta.0.tgz","fileCount":19,"integrity":"sha512-WmavWSk4RP4SIAhcjUviMzGZrdU1OwZHKBbdHWNOOb6cm1G6NgXfeDBYv3ef/pcrWETaahg7gYeHgqhTgpUsuw==","signatures":[{"sig":"MEUCIQDrBoWh8EhDN6DOk3bvT+3wDnXoI1z/yemrzTPOR+9EqQIgXY6Rh0KCmHFxfip5kuJUFksPdd3hC+ShQJeHwX315IA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":681746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5+IqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrF3Q/9Gjgo8Y5NEKI22JobKdP8D7506rChzXWgBZuj4N52/FfSVQQt\r\n4cFn4MnWkV0LBsP3AyNW15ngIJrbqfqvy5s+09wl2gEqKgJARCwZNGGQo/C3\r\nP5+hX4NexjSRKYvxTfUbcGfdsMx7gTpd0ECmLtKtNIYdrpxqja++NHs4N+pF\r\nnxxBnfUKn6CBiQtdmgvTq+4t2HdXsnjzoJFO0iL1DhaVTT1rsddZZuNVzWx3\r\nwH3sY6eQsIlMQdR+CedFv9Es/q+JOV6DY0vHb/Ancx9jBUydIthjnWlhhbeF\r\neFYZC4WEGD+FExAO1ybNRb20+RrSW7QkyS3ia1xUlLJqnkf9L5LlER25XX6B\r\nCXNY5QbEt+CGLHkL/gydXYImESD/fPejeLArk5yn97x8XwZr3nSQQ/IKPOQy\r\ndsBtm9qKcZv8XnWjTPyfJch2W/hCEvqgyISQd5gnpYcoHTOEgbWQ+RNkpIcl\r\ngHpkJYyBe6VdWEER3H1B2gboXOfeEjuXpUE//kB5lwbJ66TYTox3n8aaDC2q\r\ntj+XgwKFSodlyQqv1aj5XPlXvCWxu5eypujYFLyr/BqnmhjhoYpbGVkihjPW\r\nb6aS0zkptIuGaX8kK+fxa3pQ7nCqad4AyynwQV6MyjeHtfdNu/pavEt94b9Z\r\nIHChCYS8VPJYCo60akB8OzMQAWTF6VKaJLQ=\r\n=JyZU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\n\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey?: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret?: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key\n      const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey?: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options?: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret?: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"6513bccedaba5af491f52aa2e9ad3de895bd3a01","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.14.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.14.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.4-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_2.0.6-beta.0_1676141098283_0.9702081773897562","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"3.0.0-beta.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"3.0.0-beta.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@3.0.0-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"1d17f1c743e5beb89e1a0ade628e924a8405c7ee","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.0-beta.0.tgz","fileCount":19,"integrity":"sha512-piZn5zcmEg6wsoKV1IXQTRUe3PLfFyi46OK/PCGa2o2KsTmgNwriDsE53x5JsFWZJVC2IdLUuLFsEtY6RNdC2A==","signatures":[{"sig":"MEYCIQDXSESl9k/trcYOwbs60d748iKEHDxYkBpsml3We00uugIhAKDRFNqqdF1gj8Y/s+p+r40NYiE91o5d/wEW60kqEtGe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":682492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj92//ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBdA/9HOfaBZOrEpRykrIXogJf2yg5zzQMgcMDxYt2a0soCtLuu4fd\r\nuqLx5gZZ4d0rWCyWK3MtWRYCFXnI6WiHCWA24FgaU9NGEQSnUkx/K2tTZPCC\r\nHxW6jO7DarR3xr7Dz3ctFSEmzH1+6LSSY3p44D38KXNx0ncQtygiufJQ6l2a\r\n83V7JkE802zXP9mJ+QbXNMyRDWYp4viWqOKw2BWdoLdyWAiaBwZaKGxYRvkm\r\nay2DOq8A1sif5JAyFXFygKus63/ySB+uyQqcVaW9OP4tmmHq3pfkMfsjptFV\r\nwPZqeTSbfxHIFXl/HH3jewOMH+kEXaZlRBKt+Ugm7JPNAXp88rSIH4d2MGFF\r\ntdmg0UVcoV+zs1+MwU4FWtrYLV9w66YO96+FSdMZjWswCP1jEycgvZ4tsaMI\r\nMm7mhcoa5LBBoF020CPIfEirN5zlJYMRQAxXW/6Jd9R/ftYJuWrA8jNdYOh2\r\nt5UPrk7xNqD2SHaguLhunpZcFUMtfA0h1BPwRqR7/0hUUOpTGmYsSkF8Pltc\r\nIwaEaRyF+hfODT7TyDrH0OYVNokjVKY/Thv4tpDkGGVQ/K9awLoT1/UKAhkq\r\nFbhMBzHyfueC3gKZkvIp73a7114O5MVGkCYBSaaI3CWnruYolflNLTGSExGj\r\nE7wa/rL9ywGWnBz53ciZ+DMYvfVKUrUMdV0=\r\n=HHO4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Wait for open\n\nAlways open the database yourself. Dexie does not wait for all hooks to be subscribed (bug?).\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Generate a random key\nconst secret = Encryption.createRandomEncryptionKey();\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key\n      const secret = DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"10497b597596b9f3fd897edcf4d7e5b15aca2ec0","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.14.1+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.14.1","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.4-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_3.0.0-beta.0_1677160447367_0.6231731883914382","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"3.0.0-beta.1":{"name":"@pvermeer/dexie-encrypted-addon","version":"3.0.0-beta.1","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@3.0.0-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"7fd6e2e1133536d3160e4d97626bfbd59361f549","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.0-beta.1.tgz","fileCount":21,"integrity":"sha512-l6EMkc+iZn5JvW8gWcIZDLdqYPA/o0zZmw7IdlNACGaiPIbUZoHrVlDkMRaZXiNz3THw+eUFxorNX9HdEQCtgQ==","signatures":[{"sig":"MEYCIQCbRrJDd7qX0sT55cUoBNTFEl3xOswZ3fxpBOtZpIVf/AIhAOy9B6gJq5nGBqzuYtDNVVk53Af61yZeUjxj0uM73QVg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":707715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkA1EuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpdgxAAgHnvi50xTimcja6/pLjNfgxw/VVJ0dE+x/vskkSqLHSkO2iu\r\nyYz+zHoYN82rpR3juHMJFmg/kBufTLA8say92QagEviICKCO1fwaXdfSjdbq\r\nLjbkuRSZOs0IUoS6DnP6Ov5OKokHaiKgcmaZOEsaJV6tTDsJyeCOMSxeMWrf\r\nfC8CxyA8CtT7CgZqzP9zckT99UtGsYayvtaPqUbDSxGv1WDMml4jbvmCEPmf\r\nPPHdVpKtIvUH5NURiE9rFVW2EKFSAn7SUlThNfCG0Zazg4r4IegwvZFXovpk\r\nPiF3O1V1bNokgDoPgW+pN13aLj7mrDLkZbFpo3a2i+c4vpSbjd24U2t01npc\r\n7410CFhDdtBy6bE/OqUiBz6RysRvxTtnXTBuZahSuEntKDaJX/DU3G4BBw2q\r\nlyKHzsSsEDPViD+YQNRNJV2+evNHPghMhPH9iZfG1IHRBZ2aIiw6p3bHp06m\r\nRcQwxFVhiLXehi35uT60fgxsDcjMuFNa4s7Ua0fuQGSFfinlbvgzVytwztBM\r\n2Odps+zhyNaXmNk8OzkISxD/2KcLexEqnTawNvoTn5PvvJlJtd54xj3m89Mn\r\nvDLxgVTy1mrYns5WW5IAf480jSSHguqEOxPnGfFpuBsCOLZVIhKZ1ruNZ10r\r\nKIIgx5Mhs57bCkM7xiTnHFH+16MirceZALg=\r\n=9z0Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Secret key\n\nOn first use of the database a new key can be generated with `Encryption.createRandomEncryptionKey()` on the exported `Encryption` class.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst newSecret = Encryption.createRandomEncryptionKey();\n\n// Save it somewhere secure\n```\n\nYou are responsible for saving this key somewhere secure and use it when opening the database. To keep it secure in your app you could:\n\n- provide it from a backend after user is logged in and / or is verified;\n- save it locally in an encrypted state that only the correct user can unlock (e.g. with a key based on the user's password or a separate password / pin).\n\nMake sure it's not persistent on the client! Watch out for serverless databases with persistence enabled (e.g. Google's Firebase with offline first strategy).\n\nProviding a different key than the initial key on database creation result in a `'Encryption key has changed'` error. To protect your database it cannot be openend until the correct key is provided.\n\n#### Wait for open\n\nAlways open the database yourself.\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key (only on first use the database)\nconst createNewSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\n// Generate a random key (only on first use the database)\nconst newSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key (only on first use the database)\n      const newSecret =\n        DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n      // Save this key somewhere secure and trusted to be used on reopening the database\n\n      const secret = \"[key fetched from a secure location]\";\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"577c2166919c581701d15c7208f1925670b7aca4","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.14.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.14.2","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.4-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_3.0.0-beta.1_1677938989939_0.3083134098060447","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"3.0.0-beta.2":{"name":"@pvermeer/dexie-encrypted-addon","version":"3.0.0-beta.2","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@3.0.0-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"2874bedf057382bd6203b209915dba3c0669047b","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.0-beta.2.tgz","fileCount":21,"integrity":"sha512-lv2S5o/zUUvu+zU8y+3o1omVpERaKmeY0FMEMWhD8OCKEhfJJ5QmmXwF1Pg7bSKiBlZ87ikjPP7jR+wJePFpXg==","signatures":[{"sig":"MEUCIEUdvw2+89n4qoqJ1W0EiksjLcSeN5VTl9IDTzmjoghpAiEA0EU55wz1viyQn9rebG1tL9xDY0tO3orXAmkvzW2PBgU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":713032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkA3vZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrH4hAAk4H6r0wb2yE22PZrl1NXSNNQhBlR2mxbhvgl7rzp+TvPBgmM\r\nJVz85jZ8tYiD6OdfYllhqzDEP4tEFHR7vjPz0kfwrsSnw8A1oUIVJGQnyGDD\r\nJ7m94TkfhaFTSH1jbv6To+ZlRZdvTy0RX6ahzIHZev+9/egXTLMHQhMM3Yau\r\nNXMKcs05EHbMifacnpq566FWmZxQnkDsB1BOJQK1qtXBWpcQl57JxG9A+8dU\r\nhF8q/KLdKeC/EyQj9LaiJryni1Un9fgMxn+16CydMvijLvjvXWRvp63Y4hMl\r\nLg04HfDoCowyI42QM8rJDTljCoVmwJShjoF35WzVuiS6tpj0dqeRiwneLira\r\nUuZrP7ghBLL5xfXDeTX2qDd5n88dfqekO8xhv3/cZA+CDj5tOyFqi3YcrG//\r\nMPn6VI4zMVM3ZFNVzoWF1GUDcUyX2YPexUPrBaLOq8EgLGH/5R86fimqfyTW\r\nNduB6VPn6J5nKPvEaVzNG755pDIqjgmFZJK7Q2p8kQF7LokbUSSc4X3O62Rm\r\nuJ76pZPHPmB3raHAKn2xIiDUBETRpe4W+4QGVqTUMy84ONHVWiW8U/AmcKdJ\r\nCnb2j6srKgVv3weiNZOVE1WLivh+ZTN17NbNUcblnhJd+bv2/DJwm7qUWyHb\r\ngQrWglEWTvE9gtEzsEn9wOA3BUAImuSP8IA=\r\n=Z4AG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Updating package\n\nUpdating the addon from major version 2 => \\* requires a Dexie version update. The addon needs to create an internal table to check if the encryption key has changed.\n\n```ts\ndb.version(2).stores({ friends: \"++id, $name, shoeSize\" }); // Provide full schema with all tables on upgrading to version 2\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Secret key\n\nOn first use of the database a new key can be generated with `Encryption.createRandomEncryptionKey()` on the exported `Encryption` class.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst newSecret = Encryption.createRandomEncryptionKey();\n\n// Save it somewhere secure\n```\n\nYou are responsible for saving this key somewhere secure and use it when opening the database. To keep it secure in your app you could:\n\n- provide it from a backend after user is logged in and / or is verified;\n- save it locally in an encrypted state that only the correct user can unlock (e.g. with a key based on the user's password or a separate password / pin).\n\nMake sure it's not persistent on the client! Watch out for serverless databases with persistence enabled (e.g. Google's Firebase with offline first strategy).\n\nProviding a different key than the initial key on database creation result in a `'Encryption key has changed'` error. To protect your database it cannot be openend until the correct key is provided.\n\n#### Wait for open\n\nAlways open the database yourself.\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Versioning\n\nAlways provide the full schema in `stores()`. This is because the addon derives what keys are encrypted from the the provided schema.\n\n**New versions also need to specify all tables!**\n\n```ts\ndb.version(2).stores({ friends: \"#id, $name, shoeSize\" }); // Always provide the full schema with all tables on version increase\n```\n\nWhen also an `upgrade()` is necessary and/or encrypted keys have changed the `Encrypted` class can be used to decrypt and encrypt data.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ndb.version(3)\n  .stores({ friends: \"#id, shoeSize, $firstName, $lastName\" })\n  .upgrade((tx) => {\n    const encryption = new Encryption(secretKey);\n    // Do upgrade work, see Dexie docs\n    // TODO add example\n  });\n```\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key (only on first use the database)\nconst createNewSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\n// Generate a random key (only on first use the database)\nconst newSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key (only on first use the database)\n      const newSecret =\n        DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n      // Save this key somewhere secure and trusted to be used on reopening the database\n\n      const secret = \"[key fetched from a secure location]\";\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"68f20ec69d31b955308ee5214038cad6ef464e06","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.14.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.14.2","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.4-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_3.0.0-beta.2_1677949913583_0.1358755276919914","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"3.0.0-beta.3":{"name":"@pvermeer/dexie-encrypted-addon","version":"3.0.0-beta.3","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@3.0.0-beta.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"5d91a0d80274d85aaa743316e47d693fa2d027dd","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.0-beta.3.tgz","fileCount":21,"integrity":"sha512-rz8Sgi57OaFcmWq6H5P2PHhKtrww8eAUTpYpHvQHop3ihJWoZFbS0TYudMYh/E48dZTB8wHAJLn3coytlSL9kA==","signatures":[{"sig":"MEUCIQD/2rVyl5TFnPtgl80O8QYzkMcZo1Osp+ZMHdj3nH7qxwIgXnmt1s5RjxcbMmQ8mKK9aGQhLysxSIdVSBdxVJ+vBTU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":713287},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Updating package\n\nUpdating the addon to major version 3 requires a database version update. The addon needs to create an internal table to check if the encryption key has changed.\n\n```ts\ndb.version(2).stores({ friends: \"++id, $name, shoeSize\" }); // Provide full schema with all tables on upgrading to version 2\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Secret key\n\nOn first use of the database a new key can be generated with `Encryption.createRandomEncryptionKey()` on the exported `Encryption` class.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst newSecret = Encryption.createRandomEncryptionKey();\n\n// Save it somewhere secure\n```\n\nYou are responsible for saving this key somewhere secure and use it when opening the database. To keep it secure in your app you could:\n\n- provide it from a backend after user is logged in and / or is verified;\n- save it locally in an encrypted state that only the correct user can unlock (e.g. with a key based on the user's password or a separate password / pin).\n\nMake sure it's not persistent on the client! Watch out for serverless databases with persistence enabled (e.g. Google's Firebase with offline first strategy).\n\nProviding a different key than the initial key on database creation result in a `'Encryption key has changed'` error. To protect your database it cannot be openend until the correct key is provided.\n\n#### Wait for open\n\nAlways open the database yourself.\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Versioning\n\nAlways provide the full schema in `stores()`. This is because the addon derives what keys are encrypted from the the provided schema.\n\n**New versions also need to specify all tables!**\n\n```ts\ndb.version(2).stores({ friends: \"#id, $name, shoeSize\" }); // Always provide the full schema with all tables on version increase\n```\n\nWhen also an `upgrade()` is necessary and/or encrypted keys have changed the `Encrypted` class can be used to decrypt and encrypt data.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ndb.version(3)\n  .stores({ friends: \"#id, shoeSize, $firstName, $lastName\" })\n  .upgrade((tx) => {\n    const encryption = new Encryption(secretKey);\n    // Do upgrade work, see Dexie docs\n    // TODO add example\n  });\n```\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key (only on first use the database)\nconst createNewSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\n// Generate a random key (only on first use the database)\nconst newSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key (only on first use the database)\n      const newSecret =\n        DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n      // Save this key somewhere secure and trusted to be used on reopening the database\n\n      const secret = \"[key fetched from a secure location]\";\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"69dd1ebb273ef8adc25561c48515ee918f88e228","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.16.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.16.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.4-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_3.0.0-beta.3_1684944285811_0.2682935182891868","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"3.0.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"3.0.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@3.0.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"87252e63ea8f6fe8ac73f6fa2b0e617d8354d56f","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.0.tgz","fileCount":21,"integrity":"sha512-GL4pUtkltLresqbdf28IIqgBl+K38ar3EbELG+LtsDOw0DCpt+0xFimx/MusEXxV3P4iBFPri5N8z/wYDUZxww==","signatures":[{"sig":"MEUCIQCWzbKVWL/2IGs5NSiA8XsgT7RW6/Fup+zIaBDNozu0ngIgPT+v5xj3dHtoODR3x6ObXZIPZJauJNGYBShToCRVgQI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":718659},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"2d91ce711d3d8f6cc2f63692fc5c88a6046c42c1","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.6.2/node@v18.16.0+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"18.16.0","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_3.0.0_1685013684545_0.7013227759894414","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"3.0.1-beta.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"3.0.1-beta.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@3.0.1-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"cd635e3062c101592252f628a47d02d87d5702ec","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.1-beta.0.tgz","fileCount":21,"integrity":"sha512-DSQyuleUMiapQw81m8IJVv8n46OfBnfU5iNokg9pCaz8pPxW2MLQ+XVz4OdczQkryc6zOniJsJwKB2/UVAamew==","signatures":[{"sig":"MEYCIQDWIdZN05vA/3INxqRX6FcokJ+cWGj7CcWRN//R0+YsSgIhAO8D9XGb7CPvNycpDqpWwu1IBWvxpakPQXF6k3v7jJ4m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":718822},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Updating package\n\nUpdating the addon to major version 3 requires a database version update. The addon needs to create an internal table to check if the encryption key has changed.\n\n```ts\ndb.version(2).stores({ friends: \"++id, $name, shoeSize\" }); // Provide full schema with all tables on upgrading to version 2\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Secret key\n\nOn first use of the database a new key can be generated with `Encryption.createRandomEncryptionKey()` on the exported `Encryption` class.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst newSecret = Encryption.createRandomEncryptionKey();\n\n// Save it somewhere secure\n```\n\nYou are responsible for saving this key somewhere secure and use it when opening the database. To keep it secure in your app you could:\n\n- provide it from a backend after user is logged in and / or is verified;\n- save it locally in an encrypted state that only the correct user can unlock (e.g. with a key based on the user's password or a separate password / pin).\n\nMake sure it's not persistent on the client! Watch out for serverless databases with persistence enabled (e.g. Google's Firebase with offline first strategy).\n\nProviding a different key than the initial key on database creation result in a `'Encryption key has changed'` error. To protect your database it cannot be openend until the correct key is provided.\n\n#### Wait for open\n\nAlways open the database yourself.\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Versioning\n\nAlways provide the full schema in `stores()`. This is because the addon derives what keys are encrypted from the the provided schema.\n\n**New versions also need to specify all tables!**\n\n```ts\ndb.version(2).stores({ friends: \"#id, $name, shoeSize\" }); // Always provide the full schema with all tables on version increase\n```\n\nWhen also an `upgrade()` is necessary and/or encrypted keys have changed the `Encrypted` class can be used to decrypt and encrypt data.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ndb.version(3)\n  .stores({ friends: \"#id, shoeSize, $firstName, $lastName\" })\n  .upgrade((tx) => {\n    const encryption = new Encryption(secretKey);\n    // Do upgrade work, see Dexie docs\n    // TODO add example\n  });\n```\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key (only on first use the database)\nconst createNewSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\n// Generate a random key (only on first use the database)\nconst newSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key (only on first use the database)\n      const newSecret =\n        DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n      // Save this key somewhere secure and trusted to be used on reopening the database\n\n      const secret = \"[key fetched from a secure location]\";\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"bd8be8ffe3c0f38734770351dff7deafe944145b","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.6.2/node@v20.12.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^1.2.0-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_3.0.1-beta.0_1714381974217_0.2508806199011617","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"4.0.0-beta.0":{"name":"@pvermeer/dexie-encrypted-addon","version":"4.0.0-beta.0","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-encrypted-addon@4.0.0-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"826b56b9f3978d71997314b6ec392377b8e0b278","tarball":"https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-4.0.0-beta.0.tgz","fileCount":21,"integrity":"sha512-flrVO/QmU4ltnRPaCjcMpdwSc5vt+rv0369Yz5bzk+bII3i5c9W/EIZaTsJCf9WtxIgZsNc5+0AT97QrYwqnDQ==","signatures":[{"sig":"MEQCIBYgNP7Tm+SiBC4Vt3cEwFe9GVH9eXc+VGm8TTRNLZ9DAiAhtEnSY+0ZyFUsBzlB0K8OUeiCAbUPWjZsYVbNPrE08w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":719255},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie Encrypted Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-encrypted-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-encrypted-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-encrypted-addon\n```\n\n#### Dexie.js\n\nDexie Encrypted Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Updating package\n\nUpdating the addon to major version 3 requires a database version update. The addon needs to create an internal table to check if the encryption key has changed.\n\n```ts\ndb.version(2).stores({ friends: \"++id, $name, shoeSize\" }); // Provide full schema with all tables on upgrading to version 2\n```\n\n## Angular > 10\n\nAngular now checks for CommonJS or AMD dependencies optimazations. This will give to following warning:\n\n```\nWARNING in /<your path>/node_modules/@pvermeer/dexie-encrypted-addon/dist/esm-es5/encryption.class.js depends on 'tweetnacl'. CommonJS or AMD dependencies can cause optimization bailouts.\nFor more info see: https://angular.io/guide/build#configuring-commonjs-dependencies\n```\n\nAs mentioned in the provided link add:\n\n```\n\"build\": {\n  \"builder\": \"@angular-devkit/build-angular:browser\",\n  \"options\": {\n     \"allowedCommonJsDependencies\": [\n        \"tweetnacl\"\n     ]\n     ...\n   }\n   ...\n}\n```\n\nto your angular.json file.\nThe [tweetnacl package](https://www.npmjs.com/package/tweetnacl) handles the encryption and is not bundled in the main npm package (it is bundled in the min version) so it will be updated on patches.\n\n## Documentation\n\n#### Encrypt your data the Dexie way!\n\nAddon is written to be as easy to use as Dexie.js itself.\n\n#### Added Schema Syntax\n\n| Symbol | Description                                                       |\n| ------ | ----------------------------------------------------------------- |\n| $      | Encrypt this value (does not create an index)                     |\n| \\#     | Only as first key: Hash the original document and create an index |\n\n```ts\nconst friend = '#id, $name, age';\n{\n    id: 'hashed id', // Indexed\n    name: 'some encryption string', // Not indexed\n    age: 34, // Indexed\n    shoeSize: 42 // Not indexed\n}\n```\n\nUsing **$** on your keys will encrypt these keys.\n\nUsing **#** on the first key will hash this key with the document on creation.\nThis will create an unique primary key based on the document itself and will update or create the key on the document itself.\n\n#### Secret key\n\nOn first use of the database a new key can be generated with `Encryption.createRandomEncryptionKey()` on the exported `Encryption` class.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key\nconst newSecret = Encryption.createRandomEncryptionKey();\n\n// Save it somewhere secure\n```\n\nYou are responsible for saving this key somewhere secure and use it when opening the database. To keep it secure in your app you could:\n\n- provide it from a backend after user is logged in and / or is verified;\n- save it locally in an encrypted state that only the correct user can unlock (e.g. with a key based on the user's password or a separate password / pin).\n\nMake sure it's not persistent on the client! Watch out for serverless databases with persistence enabled (e.g. Google's Firebase with offline first strategy).\n\nProviding a different key than the initial key on database creation result in a `'Encryption key has changed'` error. To protect your database it cannot be openend until the correct key is provided.\n\n#### Wait for open\n\nAlways open the database yourself.\n\n```ts\nawait db.open();\n```\n\nTo help with this, the option 'autoOpen' has been disabled.\n\n#### Indices\n\nEncrypted values will not be indexed. IndexedDB does not support index based on encryption.\nDoing where() calls would mean the whole collection has to be read and decrypted (unless someone has a better idea? PR's are always welcome :D).\nImplementing this yourself would be more performend when also modeling the database to support this.\n\n#### Versioning\n\nAlways provide the full schema in `stores()`. This is because the addon derives what keys are encrypted from the the provided schema.\n\n**New versions also need to specify all tables!**\n\n```ts\ndb.version(2).stores({ friends: \"#id, $name, shoeSize\" }); // Always provide the full schema with all tables on version increase\n```\n\nWhen also an `upgrade()` is necessary and/or encrypted keys have changed the `Encrypted` class can be used to decrypt and encrypt data.\n\n```ts\nimport { Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ndb.version(3)\n  .stores({ friends: \"#id, shoeSize, $firstName, $lastName\" })\n  .upgrade((tx) => {\n    const encryption = new Encryption(secretKey);\n    // Do upgrade work, see Dexie docs\n    // TODO add example\n  });\n```\n\n#### Immutable\n\nDexie does not do immutability by default.\nThis is recommended so your original input object does not change after encrypting values or hashing the primary index key.\n\nBy default immutablity is applied to all creation and update methods via overrides via `@pvermeer/dexie-immutable-addon` [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-immutable-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-immutable-addon).\nThe immutable addon is loaded with this addon so you don't have to provide it.\n\nThis behavior can be disabled via the options object provided to the addon:\n\n```ts\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean; // Default true\n}\n```\n\n_Setting this to false can lead to unexpected / weird behavior in your application_\n\n#### Getting and setting a raw document\n\nTo get or set raw document, unaltered by hooks, a transaction can be used while setting `raw` to `true` on the `transaction` object:\n\n```ts\nawait db.transaction(\"readonly\", db.friends, async (transaction) => {\n  transaction.raw = true;\n  const friendRaw = (await db.friends.get(id)) as RawFriend;\n});\n```\n\nAll read actions in the transaction will return a raw document as saved in the db. All set actions will save the document as is. So no Class mapping or decryption / encryption will be performed on the document.\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\n// Generate a random key (only on first use the database)\nconst createNewSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [encrypted.setOptions({ secretKey: secret })],\n});\ndb.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { encrypted, Encryption } from \"@pvermeer/dexie-encrypted-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string, secret: string) {\n    super(name);\n    encrypted(this, { secretKey: secret });\n    this.version(1).stores({\n      friends: \"#id, $name, $shoeSize, age\",\n    });\n  }\n}\n\n// Generate a random key (only on first use the database)\nconst newSecret = Encryption.createRandomEncryptionKey();\n// Save this key somewhere secure and trusted to be used on reopening the database\n\nconst secret = \"[key fetched from a secure location]\";\nconst db = new FriendDatabase(\"FriendsDatabase\", secret);\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js>.\n\nAddon is export as namespace DexieEncryptedAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include DexieEncryptedAddon (always after Dexie, it's a dependency) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-encrypted-addon@latest/dist/dexie-encrypted-addon.min.js\"></script>\n\n    <script>\n      // Generate a random key (only on first use the database)\n      const newSecret =\n        DexieEncryptedAddon.Encryption.createRandomEncryptionKey();\n      // Save this key somewhere secure and trusted to be used on reopening the database\n\n      const secret = \"[key fetched from a secure location]\";\n\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [\n          DexieEncryptedAddon.encrypted.setOptions({ secretKey: secret }),\n        ],\n      });\n      db.version(1).stores({ friends: \"#id, $name, $shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes two exports:\n\n#### encrypted - addon function\n\n```ts\n/**\n * @secretKey Your previously saved secret.\n * @immutable Set to false to disable immutable state on document creation and updates.\n */\ninterface EncryptedOptions {\n  secretKey: string;\n  immutable?: boolean;\n}\n/**\n * @method setOptions(string) Set options and return the addon.\n * @param options Set secret key and / or immutable create methods.\n * @returns The secret key (provided or generated)\n */\nfunction encrypted(db: Dexie, options: EncryptedOptions): string;\n/**\n * Namespace to set options and return the addon function when used in (ES2016 / ES7)\n */\nnamespace encrypted {\n  function setOptions(options: EncryptedOptions): string;\n}\n```\n\n#### Encryption - class\n\n```ts\n/**\n * Class with cryptic methods\n */\nclass Encryption {\n  readonly secret: string;\n  readonly secretUint8Array: Uint8Array;\n  /**\n   * Create a random key.\n   */\n  static createRandomEncryptionKey(): string;\n  /**\n   * Create a base64 SHA-512 hash string of the provided input.\n   * @param input Any non-circulair value.\n   */\n  static hash(input: any): string;\n  /**\n   * Encrypt any value.\n   * @param json Any non-circulair value.\n   */\n  public encrypt(json: any): string;\n  /**\n   * Decrypt values.\n   * @param json Any non-circulair value.\n   */\n  public decrypt(messageWithNonce: string): any;\n\n  constructor(secret: string);\n}\n```\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c319825809c3ece9f5e1083564b84b0cf9a1bcf4","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.6.2/node@v20.12.2+x64 (linux)","description":"Addon for Dexie.js database to add encryption","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tslib":"^2.4.1","tweetnacl":"^1.0.3","@stablelib/utf8":"^1.0.1","@stablelib/base64":"^1.0.1","@pvermeer/dexie-immutable-addon":"^2.0.0-beta.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"dexie":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-encrypted-addon_4.0.0-beta.0_1714411340381_0.1046369728571448","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2020-01-16T20:50:05.220Z","modified":"2024-12-14T10:46:06.658Z","1.0.0":"2020-01-16T20:50:05.426Z","1.0.1":"2020-01-16T22:27:10.966Z","1.0.2":"2020-01-16T23:30:31.764Z","1.0.3":"2020-01-17T14:22:47.739Z","1.0.4":"2020-01-20T14:27:56.726Z","1.0.5":"2020-01-20T15:56:37.455Z","1.0.6":"2020-01-20T16:35:52.946Z","1.0.7":"2020-01-20T18:18:16.939Z","1.0.8":"2020-01-20T18:33:02.592Z","1.0.9":"2020-01-20T18:57:03.857Z","1.1.0-beta.1":"2020-01-22T10:25:59.128Z","1.1.0-beta.2":"2020-01-27T11:39:27.459Z","2.0.0-beta.1":"2020-03-09T14:32:54.915Z","2.0.0-beta.2":"2020-03-16T10:37:26.596Z","2.0.0-beta.3":"2020-03-19T14:20:54.646Z","2.0.0-beta.4":"2020-03-23T13:06:20.554Z","2.0.0-beta.5":"2020-10-21T13:30:03.644Z","2.0.0-beta.6":"2020-11-22T12:44:19.572Z","2.0.0-beta.7":"2021-11-21T18:09:43.471Z","2.0.0-beta.8":"2021-12-31T15:03:25.206Z","2.0.0-beta.9":"2022-01-01T16:55:58.145Z","2.0.0-beta.10":"2022-01-02T16:47:52.136Z","2.0.0-beta.11":"2022-01-21T17:15:14.636Z","2.0.0-beta.12":"2022-01-29T15:23:44.152Z","2.0.0-beta.13":"2022-01-31T16:46:54.346Z","2.0.0-beta.14":"2022-01-31T17:54:25.089Z","2.0.0-beta.15":"2022-03-08T13:42:06.049Z","2.0.0-beta.16":"2022-03-09T11:10:26.389Z","2.0.0-beta.17":"2022-04-11T10:27:40.274Z","2.0.1":"2022-07-22T17:43:00.938Z","2.0.2":"2022-07-22T18:15:48.398Z","2.0.3-beta.0":"2022-11-07T18:37:59.499Z","2.0.3-beta.1":"2022-11-09T18:31:22.235Z","2.0.3-beta.2":"2022-11-11T23:13:24.663Z","2.0.3-beta.3":"2022-11-12T14:44:22.091Z","2.0.3-beta.4":"2022-12-19T21:13:17.709Z","2.0.3":"2022-12-28T16:56:23.459Z","2.0.4":"2023-01-09T14:18:57.411Z","2.0.5-beta.0":"2023-01-20T19:26:11.511Z","2.0.5":"2023-02-04T15:47:46.620Z","2.0.6-beta.0":"2023-02-11T18:44:58.521Z","3.0.0-beta.0":"2023-02-23T13:54:07.674Z","3.0.0-beta.1":"2023-03-04T14:09:50.152Z","3.0.0-beta.2":"2023-03-04T17:11:53.802Z","3.0.0-beta.3":"2023-05-24T16:04:46.109Z","3.0.0":"2023-05-25T11:21:24.764Z","3.0.1-beta.0":"2024-04-29T09:12:54.422Z","4.0.0-beta.0":"2024-04-29T17:22:20.545Z"},"bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"author":{"name":"PVermeer"},"license":"MIT","homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","keywords":["dexie","dexie.js","indexeddb","database","encryption","encrypted"],"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"description":"Addon for Dexie.js database to add encryption","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"readme":"","readmeFilename":""}