{"_id":"stone-soup","_rev":"33-ed743586c9c4e8142c0b6a3335ed8ab6","name":"stone-soup","dist-tags":{"latest":"8.0.0","beta":"8.0.0-beta.0"},"versions":{"1.0.0":{"name":"stone-soup","version":"1.0.0","description":"","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/*.test.js build/test/browser-run.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/addresses.test.js","test-base32":"tap -Rspecy --no-bail --jobs=1 build/test/base32.test.js","test-bytes":"tap -Rspecy --no-bail --jobs=1 build/test/bytes.test.js","test-characters":"tap -Rspecy --no-bail --jobs=1 build/test/characters.test.js","test-checkers":"tap -Rspecy --no-bail --jobs=1 build/test/checkers.test.js","test-crypto-driver-chloride":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-chloride.test.js","test-crypto-driver-node":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-node.test.js","test-crypto-driver-tweetnacl":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-tweetnacl.test.js","test-crypto-driver-compat":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-compat.test.js","test-crypto-drivers":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-*.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"9509152b9efed4a8bd207ad5e861393b11dea908","_id":"stone-soup@1.0.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-yYOcxmVyEwF4YTFkWSPHCZJQuuFMsmGWAQHHhL8o7oop/yP1sghConA3M02nW6MT/rrqC8tG57QZ2y+FhF0k2w==","shasum":"c92cd62828db9cbe22f052fb1dc9feadc542dff4","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-1.0.0.tgz","fileCount":69,"unpackedSize":2199818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggkIOCRA9TVsSAnZWagAAQWwP/1rC99hU/TsKvUv0j/D+\n9h9waExB6Pq3HErht6QL0Bgubhh8STxYkWNYgHFuH8ZVUP1VtGHOkNCfNBFG\nc1GVKB+cwMnfwCd+hoSCKGIFEaL2WVfx62cPH7gdvW1kO5ZDcj8AeVLAzj5x\nD6Q4WBdwp1ODWPQtZxiOkD8eXR8b30t7fUiAjfdADoKTIQtDLiSeE0ls/WTL\nj4smFwuZZkJTsYmMvA0z4wYsfP0zm9cxpfQg+sp6wnT1Ss5v4fHWQAHb8JqW\nDdWsrDRwa6Z2e0FnRJljBEVvAJ1ouqdBhabNy+eXDyqElIYP17AIMnEUry8E\n/TS2l76x1BP9/RULzSiFVQpRAppRHELgVvN0gb/6sTQ7n6MePxjLTJU+ro19\niMZmM71TnM6BS3ujbwBqktF4nc3UrtshekEsdML7IOi8rPoPSGcMzUwV2IJz\n64VbVw1HyfC31xNt3pJ1MzitxfVb32INTcCkvrwyAjmJw0233PNPbptjpZYx\nj7qE3RdfrrqFg/PAjdMNZW+2JxwPIgdez3RxmxtsMP16g1kQ/FfhihgVvSJH\nZPFNdXrw0nLPQQ4ZRapu+i5pYtr3FZBKm/JI62BfGOk9noH7tHcG1eW8QQDx\nVKC2CkzdXvdud2UYhcGexGzCud6K2IfgugoSUUn29wo8nwptdvrZ7zJyHvdZ\nh9bP\r\n=i+JW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD786MfNRkSmlB6CdsjDRjbF2UYXtaDiF4Q/Lw2jmLgmAIgAS6kE8jdwM2gIMVJ3WH8pz+/EIKkutuUl67jrmxHar0="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_1.0.0_1619149326240_0.11391442385839667"},"_hasShrinkwrap":false},"2.0.0":{"name":"stone-soup","version":"2.0.0","description":"","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/*.test.js build/test/browser-run.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/addresses.test.js","test-base32":"tap -Rspecy --no-bail --jobs=1 build/test/base32.test.js","test-bytes":"tap -Rspecy --no-bail --jobs=1 build/test/bytes.test.js","test-characters":"tap -Rspecy --no-bail --jobs=1 build/test/characters.test.js","test-checkers":"tap -Rspecy --no-bail --jobs=1 build/test/checkers.test.js","test-crypto-driver-chloride":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-chloride.test.js","test-crypto-driver-node":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-node.test.js","test-crypto-driver-tweetnacl":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-tweetnacl.test.js","test-crypto-driver-compat":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-compat.test.js","test-crypto-drivers":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-*.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"47897f59aa305d2cbff84953b2ac1f41796b787b","_id":"stone-soup@2.0.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-retG8u2uDsSsEjcS5w3wn+JaLL/AiZ2aTPKwT3F/dYm/F9joaW8poMtbYnCA7163I9FKQGJPeJOA2fUAcytXyw==","shasum":"68babb6ece0b4a5dcc02f14ff1bf4dd70a4c0654","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.0.0.tgz","fileCount":60,"unpackedSize":1322916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggkvwCRA9TVsSAnZWagAAZoUQAIbI8BwMPNUVp4LhJbZ8\n4FQRbrK5t5QgSeE4tyDd4epQP9j62OdSu3A4nNzOvHU7ZFc0mXzspNFdlEE+\nGcOARFRXn2Ygd4d+L2kMKb39AdAVOTOhIE2ZgwNXBOcIcBKr3dX1R1gMv4Wv\nnmcIAV3kmpQtpGQmCD2rVxMqUUFMNi7YQEgi9JwzmDPtphD084/ygnWe9uG3\n597ec2rxY3zy0EC0j4mELyq20s5Hutw6BG0RU4qJdHT8Sy330KCHlu/07J1R\npr3ut4CiXUOmiWc+92ajEicep01Ps6EkbLNBPLO5ib5CYUDBj3d9YOIxrRT+\n8NPrSLpQkD+ixo0mg9eDIb3eAQ2DrA1QCf5v9pgozB5wvWxZ3JnXZT2UN68q\nisW/eeu4GZNAp2Z0cjgxYCELkBMZuMzreYBp2zdg12oXHerv5j81O4hXm/PB\ntOiW2RDYXzMBmx1kuXZKD7175l8IK59+4O/9nJkQGdOeoncVCqP5iiEa8Jrs\nmr7/eEYXrkRt0CgSLgPXL73MI6oWt4Q+71ts0h1NQhZ02ttm/Q+HcZqnMGds\nj6capi0oxxWgw7plWpN0xFtAym2Q6nqz1dhKto1gxUf0h6IS+zy/zYrixbIk\n+WjhrPsJE2Y14RI9i2ICcQ04MXR1XfTS4vJ+ztVG7imcJWes6UW97/QH1PDp\nqiLX\r\n=1SGI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiQaGi3QjigXC/uyINdjdQwxtrgsFHoR9pFw3ySOkTowIgS6O9IVI2kfFXx4wokMOruaO1nPgVkG+SYxtOYiIPWng="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.0.0_1619151856425_0.3029071531440741"},"_hasShrinkwrap":false},"2.0.1":{"name":"stone-soup","version":"2.0.1","description":"","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/*.test.js build/test/browser-run.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/addresses.test.js","test-base32":"tap -Rspecy --no-bail --jobs=1 build/test/base32.test.js","test-bytes":"tap -Rspecy --no-bail --jobs=1 build/test/bytes.test.js","test-characters":"tap -Rspecy --no-bail --jobs=1 build/test/characters.test.js","test-checkers":"tap -Rspecy --no-bail --jobs=1 build/test/checkers.test.js","test-crypto-driver-chloride":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-chloride.test.js","test-crypto-driver-node":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-node.test.js","test-crypto-driver-tweetnacl":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-tweetnacl.test.js","test-crypto-driver-compat":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-compat.test.js","test-crypto-drivers":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-*.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"bbc47bd2671520e701ac84181cafb1ff84630d62","_id":"stone-soup@2.0.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-EJZkzKeUuHcl9YoLBTGiyaKMrPqkTlo0Ba0o7fhDu1KoIyfeoq2uyysJaFyIrpfSvqREGtxKjuLzScOiKkUmKw==","shasum":"cfba6a956cbfde7985a74bc83d7e773c959cb761","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.0.1.tgz","fileCount":60,"unpackedSize":1322756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggv1zCRA9TVsSAnZWagAAZ08P/1Jg5MKYCTN7N6SAkDEr\n1R+2xqnIxmbNApSuPdpCN/uFxFoSYG1AAK4WyeKohvmlYDsgFlfUTwU6aYst\nySJdRwvHCBDWRkIXxDipTU95xqhapCxxhNiE9WjEbCl3URIUnYK9y3WBb/t8\ngpskCz/cQU7asSXO4hhRv+C/ay/bZs7qwPkzii1J3nnYZRxTddkvEvEACb2m\ns6LGLAh0msOngHdueZFfzdv1CHP/g+2qJ14j07AgFRB3Pnizk6qSrNpXIvOR\nD5vXYoiRihE71M21Mnb45OBLlsC4JEWU+m9vFF5VyX9TOYHaV6qAeOHHa39Z\nzOqLSuQRvDNYOGNoF61/IN8pcm9n0j7hzbLKvbqqBGh9/s9KhM9DUe7kiYB1\n9iAm2iToG87D8xgEbUbsrew6ogaauQg03U01Pidw97PSHR3wi+7+YeGqS61d\nWvPlSvG1Bm7i2TybVJS2XOtf84sCQcXTTwi1QZwVlHoIYwFB1TSodXGoI1TG\nv1Ow4FPmvKyTeE0FovZlCKki1CADTnBYzmtYUjEaS3W5SAk/VQbvsH1n30Pn\nwiAbT+uOJ/p3lcZsswdof89vPPm5bmCFUFyMyGyiEXOI0BvMZAfhHbK8B5EG\nEHkeJ5svTujjShZC7et1W6eKIP3Wev/BKxwusyZbtQkHdyjLix8BTOAXKzUZ\nYjzL\r\n=MjiX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7N5UWsMhfmZt2i2T5cnV5APCZubinkxvvKQ2URncd8QIhAK8y4kLVscD7GvR2svwOQyLTw77BfIeT2ShBdyKrY+nH"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.0.1_1619197299270_0.11203361895467823"},"_hasShrinkwrap":false},"2.1.0":{"name":"stone-soup","version":"2.1.0","description":"","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/*.test.js build/test/browser-run.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/addresses.test.js","test-base32":"tap -Rspecy --no-bail --jobs=1 build/test/base32.test.js","test-bytes":"tap -Rspecy --no-bail --jobs=1 build/test/bytes.test.js","test-characters":"tap -Rspecy --no-bail --jobs=1 build/test/characters.test.js","test-checkers":"tap -Rspecy --no-bail --jobs=1 build/test/checkers.test.js","test-crypto-driver-chloride":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-chloride.test.js","test-crypto-driver-node":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-node.test.js","test-crypto-driver-tweetnacl":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-tweetnacl.test.js","test-crypto-driver-compat":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-compat.test.js","test-crypto-drivers":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-*.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"5cccc3c87507852610b323d0bb3dcb5f1f257caa","_id":"stone-soup@2.1.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-hzFa7sEKBzEXLvGUMvs3V9TcxTsYjx02T0cTs9iInZu3MbUdAutwWH13YOvhZFzozF9D8AoTugpXy2qpBIbVgQ==","shasum":"9c65fae043a9ee9ce4b1167d14cf735de8326617","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.1.0.tgz","fileCount":60,"unpackedSize":1324221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggzcBCRA9TVsSAnZWagAAzQ8QAJc8ySYwAbF4vp3Q+sTY\nfOnd6c06u7BPRsghwf5nIs+dj3WlqcU4bmx8dzDQPqAHMh47Cg44V+4qXREs\nqOvDCQT9UxOnkGMZ90f5OzgUBI6bx3njxgkm/NqZKe8WA/TA62GOBNR93Fnp\njbMumd33BngV+mxa4nTHjjrqGz0Q6fFinHvsHwwo3oUknG/Q60CifolI6tdx\nj5ZjxVX9CHhVjRxEv6ubZDBLoT72eKMlzDDNchxjrqluCoGW4abPOeuSAvJu\npbth59umW1SDoxdpl6R6qGU8u3qdmYe0QK76/2wDEdrBS1/WmY2uJkFvLDXz\ne3wDLrxiWgSEzSeilcohyAP56QFhW81dDDcmGfJRTHSiYNg0qIwK9RN6tjpJ\nxoKPgazUaF0yc4bCgqnsJ/ii03yXGhnynR8gtQkN5chiwrMBgp0VaSXqPM4D\nGF9GV2ElK/SV4reD9T1TtyosRsNWOvGwtXqF5jqVTF91xXuX+9ujK+iaSxsN\nlLpsLL9ZidtqSB+TC6c9W4+ijnR4QpbUPbqfLpHWDEAMptJvVSla7wqmuNNb\nib4A+g52MmXsafCTs+3DecEMTRODqTCM7rnhrY2/0LgmEvMTVP6DD+YqhViN\n1iI2nMif6tmHwJES96sip3xS7Iv2sEQa8Ou8pW33G1+5634PqJbO3M/78arJ\nablP\r\n=uMMR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmA9JdN6PCESZ5BEtoXdxWnc0vT0b9Woc6IRCIHbMA6QIhAPPuliQKS9gXqdAb5lz4jFiVX8j7wIy7V+0GPXXWN9an"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.1.0_1619212032300_0.3748768468236614"},"_hasShrinkwrap":false},"2.1.1":{"name":"stone-soup","version":"2.1.1","description":"","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/*.test.js build/test/browser-run.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/addresses.test.js","test-base32":"tap -Rspecy --no-bail --jobs=1 build/test/base32.test.js","test-bytes":"tap -Rspecy --no-bail --jobs=1 build/test/bytes.test.js","test-characters":"tap -Rspecy --no-bail --jobs=1 build/test/characters.test.js","test-checkers":"tap -Rspecy --no-bail --jobs=1 build/test/checkers.test.js","test-crypto-driver-chloride":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-chloride.test.js","test-crypto-driver-node":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-node.test.js","test-crypto-driver-tweetnacl":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-tweetnacl.test.js","test-crypto-driver-compat":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-compat.test.js","test-crypto-drivers":"tap -Rspecy --no-bail --jobs=1 build/test/crypto-driver-*.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"d7bb204821df59eef7c89345be975758b6dec751","_id":"stone-soup@2.1.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-TW8+HY1veYE8dz65E+kisFyDBwUaenkDkZ9ysLTh4GZ4Iij3B3jHfQXIkeYjkch4zoV7AxT6cnDSbxS/ZFaOyw==","shasum":"af42d6d568e70e8fd83a9f2501a47cada6d3cecc","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.1.1.tgz","fileCount":60,"unpackedSize":1324276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgg0JqCRA9TVsSAnZWagAATI0P+wUhxknfHsct+R/SgsE/\n8HQndRrk4A6xnUPnLt7vzNEsZ9TLcPlPSY45Scz40I4/6STu1E+EcK98V4bc\nT/eQyye0yZtiPoQqeiOLsfkexgtSy/fQfxU+w9VjMRze6bfEdAb8FTPDWyKM\nJDEx+j4N20mS65OlPw6Z/M9ZZnmY94L6sy/UnKTeazHdy/iiPehKuLJxJ0b4\nB7Jv0Bbto0fn1RUokTOzC7Cey1PkSP8vjbcPI8xDvbeRWVS1vHSN4esu7NkC\nCsByBCHV7aU2ueVP3wp0QegvbcpTKscK/gF95zOVqrs55+yktBKsA3YQvt2m\nO/8zqZyDGXQiyGbeGW89aw8G3pTB5BcFb69mjoXGozGE927yErYb2YKSW247\nhtfhxySCsx0nH2RBoJw+Aut9QpijM0b43mRYjSBx9gu36MdkXtitJNhfU3Sr\nlh/iKfe/U/JxfTtA8VK47U6V8aGRs5TLSZqu50tMG68kJZ/sxbmmZOzGTgWB\nHQLYWISpIKezYT1PlNIv1bvHvaI8yM9wzarRV2ZnVMfbNx/yGLF2YDOgLVA7\ntY1+QB6YIdextsh8fmZaSpSOA6GHYn/G7CHeY9PCqYoVBwRGAHrPKS3eKPes\nff94DVa+J4XIUi08847ubKJYizSmNHFIuqqiMnoKVnrqA2r460lKgJUEFljc\nOTIv\r\n=HgOz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/mPxJKGgeizLs2GMo33aDxki9kV4KJQ+9SZEl9XmRCgIhANeHruaUCGJKbQa16CVquqP0FBGh0Lmnzg6PYdt9XIG5"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.1.1_1619214953755_0.10585000399867805"},"_hasShrinkwrap":false},"2.1.2":{"name":"stone-soup","version":"2.1.2","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","print-platform-support":"yarn clean && yarn build && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"0dc7a6cb4b08015c73855144399cb032508d8df3","_id":"stone-soup@2.1.2","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-xS7W/FydHVO3poqHqNoF+m1/2Sj5ybFYF8n3t8l1BBjmQBWLVXMQfbuZNCNwzigdHPgfMlBUxyYCBrtQ9zjVyg==","shasum":"005c9e885f9dbd4831c158a3b53f5510aefd06b8","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.1.2.tgz","fileCount":64,"unpackedSize":861741,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghyLcCRA9TVsSAnZWagAAK4UP/0w9pPx7MUV1jmRdbcma\ndWzupMoQ5tL5kD7am7zda8q0s+jBxuwdWCilqWsporN26qAu68Ah3DN9y0y+\nOZ8wsKBvhUI2IAwP+CcMQBk1JE+LtsSYeFgdFGPlbcuztKuELMj9hRb2Hzy/\n/JRbEPpZ78Tzyn2c7L3b15FWDu/qiDss+HAkKnhWulSZEpS7dFfZqIQ1IAIX\nooHF6XOvmutcrjV3nNxOcTVxtR/BODDjfOHsvMHbrcIc8UcGdJGpwhpM53x1\n/TkgjQ8UUmFtLuUfN/dJ/+s8bupN2wqQj+pwSkQ/krzwwzGVaYqESDVO61Vf\nHw4X8mUiAi64NLNo8Hrshelk/ufAlkhLoVYY2rEaDm+TWGGyeIWavQnaIy2f\nrCWzj/j1EiJ6IFKVN7e8VDZ62YwOf4wqiFch7MfmgLeB8XiQHIfnKz+UltWj\nfjlJPTnc9Wi/0E172I+Ni66YDO0CO1QDFsGWo88fp6LWr/niKAnBwZLMwCyk\nshKe5SfVl3WLN0JvYlSu+XpzRmt/blh+q4riXUx4E4V6Jr/bWS9n4EtoH+UB\nz2/1iVlKrkVZoeumWKOFSrAA541qWbEuPqM5mshe4sOLqgmfSvHOcgySeJ4M\nB5clh75rkHE3mj6XKCgSCVLomCN/tsERVKKzZtukv+ZM0sRnndXMY7TyhzPF\n28Yc\r\n=2OR3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDfmn2YEOdjIMiRKsQGuFrUaUzkE8xNBeG4a/Qk5LpSjAiBg7gjJdmlBGmxYi5OAtOj4h19UlRiYqRWyNoDr7z6VSg=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.1.2_1619469020325_0.31256803657026877"},"_hasShrinkwrap":false},"2.1.3":{"name":"stone-soup","version":"2.1.3","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","print-platform-support":"yarn clean && yarn build && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"browser-or-node":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"bb51c478f2926446dfd00fed904a3efc5fdcc7c3","_id":"stone-soup@2.1.3","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-WoDLDseZNSGxMQjos4phSFQSPXrIuyxXq5dh+R7OLyZxLSGqwL93MVBgt1HKvk8ZXSoirjMjP+6X+DtvrQTusg==","shasum":"9b1bcc69cefa33ed8f2be0ff2fc69ef722a247fa","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.1.3.tgz","fileCount":63,"unpackedSize":173734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh2/SCRA9TVsSAnZWagAAVbwP/04FEV3PSsA86XTMiMG2\nmlfroczJIx8NPCj6oF4ogKx5AwMx26yjdBiB21jtMjZrVyf1ygiRiC2t4IIK\nM6lxgICgo2vGPzjh61Hj7KU24Ehpf4+NarEBxTqDGcySgm20f1W48i1+Wiv7\nhq9B6MMQkr6UCYKkUf9c5yxqqI6ztP6WDyq/aP7p6sFFQXBVRlXDK4QPA1Zz\nzwpCsm+9Q0dknSXRP9X5ZreyxyT1VhQ9BPrEo9K4zqZ7E3fDCYOzGZt9nFLG\nCI8jeprzepYSGQhElymAcjiy9xer5ab1zaTNt7fibZ5Cfw/LD0WeAHZb2DXz\n0zvTPq9n+JRT0So5bNzJUAbMqmglL8COCNj2vPoUQ/yE/TxefE9KchthVdk6\nXnNW99VA9P42oc+gGqwnTmfKxn5qzoRjlfLMuhoUe1VapFnn3sJUhvmvel4D\nB9D7Uy6R4amsp9g1N9KjGxIeVvxVtpunB449R6k3iyY0fiUL0S2lJQQ17cia\nhnU7gyF7Rl1+Wvg9A0mpDbQi8ODvtfogVJvsPWsxlRIyGTJkqNhNQs7vgjRP\nUoGyE/Bgl5QD6wwMyTH4vcNwqd4ZjYFszbbC5n0e6fD9/lDqkVu8dIDNy0vV\nmYuGj6hfRqFMiuJzRHwGq0Sj+8jbLmP2H/mQ1fR+XadQyts8kBcXkGf2rgHf\nCc6+\r\n=UwGQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIIYp6jDwd824Q+wooi0XJE6V8UX0zvabwX3ZKgQ9CmgIhAI1oVnD+GH2OJt6nif783iU3hizfsrCTQKVDofTLoGPt"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.1.3_1619488721742_0.6714726832566669"},"_hasShrinkwrap":false},"2.1.4":{"name":"stone-soup","version":"2.1.4","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","print-platform-support":"yarn clean && yarn build && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","tweetnacl":"^1.0.3"},"gitHead":"5338dbc69f0890e2391ac2ebb63f978e9cb9aae1","_id":"stone-soup@2.1.4","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-yjA4TcTfVRyr7BLQFTX+nsA+JqZK82Vfz29TOkIeKPMleiIvKMaTQJ8m0MuEIWq6uJ4+/as5b9sAdhvSPxy2mw==","shasum":"7ea5fb983096efa2e0a2ac347a45877f43d941af","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-2.1.4.tgz","fileCount":63,"unpackedSize":174183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiZ/GCRA9TVsSAnZWagAAorgQAIdSuWn2B7Rscr1U9gWd\nAzEhAZ7rwGibOISl8KpoJYyKqG8pZIwccjXWQMnTl0nn5VCTSgEx4cSTYY2D\nfW+4yqIYJ9L3CkIW0cXb/Mkk/P4czUbcI8KlhHvoFy19qllDlsBpkHVuFN1M\nOmyW6KM7aTWEmxRUZPOgw8WOFRRpfbXfkByCNQIws0W5HsyN7j4wvOZON6wS\nfK4uTlDhI8A/69+rRPuZ0gNoaV7sDc1Ta2LsPNcUC7zr6PD050Pv33Wzs7eD\ngG5XDQFWjWlCBprX6MFY2jLHbI9L1mHOlTgwTRp3BJEPdG64pmG6K9kJiljT\notz/KLZdKV7h5oqgbEhhlRhCS6QF1vkGC1Kc9GC5qYh5zOOmV6xXsfhZ1+IR\n+MGNeIxmOyrZZLORDMVuLoPD00K6UoYvcz2lvFzx8OO4tpGxm/VMFDXqk03V\nyVWOMwq/nUcY5vFhS869vFizqwd/4Nia1rNHeZSB9PwswQ7kV16Z0NKcI8Xo\ntlNxzKaI0sDeiKYBVPVdm4BQunYRTmSdFgUS4WIl5mvb4vL1JIZ5qN4tfYOn\nsRL8tUPR9GQ3KTFOGweS/Geq5D6tejv1hcjK9RIB5BT33OM6J1dBGDZqxZCm\n9PyF44nJdM1gfqvD1ry1CdVZo3aXTg8WswLjgchDy4sSZh2fUoBBehMw7Kvx\n4ZdA\r\n=ZMeP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiLliuv3vEGgXrr9kN/wEW3OcrjaEkRpU1dZYvkTuavQIhAPqyKkMFoESYmoeVoxid+MjgMFNeSkJfRzKezjtddks+"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_2.1.4_1619632069530_0.8197534065847578"},"_hasShrinkwrap":false},"3.0.0":{"name":"stone-soup","version":"3.0.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"build/index.js","types":"build/index.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests","build":"tsc","clean-build-test":"yarn clean && yarn build && yarn test","print-platform-support":"yarn clean && yarn build && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn build-and-test","prepublishOnly":"yarn clean && yarn build","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","superbus":"^1.1.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"cd4347a4d820fd7d0d2cd832a0da97a9dae2843f","_id":"stone-soup@3.0.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-YjGhtnZwGX/Tzj5P798Yi7eMl1P2HNYUHS/+d7nhCWOg5BZhCPx3zKeqylENFfD+9Vr76zPwNzOroXef4YAH3w==","shasum":"4de3c37d4d7a5613a2ecb8b89ad03b1b396984a1","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-3.0.0.tgz","fileCount":65,"unpackedSize":178448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgijq+CRA9TVsSAnZWagAA9D4QAIcG6kR9pWc5DPxktEOP\nhtfPfJVUNpBA1MHEABaVwmKCskCltBi6W3RY31+wmPx/geTyYZFlpVVDQmZh\n1FCZOe1pV9cXLGLFzlFjcY1UsRvICS61nSifuZyFlDe+XaJ9pVvWH1m4JMyq\nRz+qqMa9YoaOCZfvpR2xDNf+m9zWAHamaWUqUtdlF/aieYXiONW0dtNLSsvq\ncK8Tejp+gIbpR168Lyo0TnrXNrQqMhGBBxaKQ0/4b7rMme+LGQVGY1/opgUK\ns0CApp5xuxHDL/Cs+o29fS7KXj+MPnPMzBK7SQqdNFY6B1MV5hveR113WRp4\nw7+rL8x208dboWmz+ZDB5kW2FyQyEy3C0dNYFK/REkOHhBSoOMAnOgHuYdW2\ndYc+czjo75aaepGbSJ9ZhULy5/tt6iCknsiMqdr+jkd9c6ScrxObUvwQjsmY\nq+Alj85DwPJOdfuQleyaUctWuJhw7qTCWUcyJH9I8DLAojfGCrgnV/oV91lv\nNXzcunheGY+a5gVFKFY1h5zcvzJcoIzgp2esxV4EhW2wr0G8Hr264bhZEImF\nb1Grdl8SKX+gVh/60TrnwCxIEGR6Xj++U+PSfNQYlLzWcV0cxRQI3GnXhVEU\neSYPWO5nphpKJ69tWZwIU2snH2vgLGYECWYtVLDGdsPGUWHnyq3XuFIFflJM\nGBqw\r\n=dmYn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEiaFzrFKaakppN3ohF554p0kuv2W/dlpN4V501Y1IiAiAxH7rI7B9anX1AVsDYC04y7Q3GvTq+/us6WplU2QrMLg=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_3.0.0_1619671741558_0.56738639670993"},"_hasShrinkwrap":false},"4.0.0-beta.0":{"name":"stone-soup","version":"4.0.0-beta.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-tsc":"tsc","build-types":"dts-bundle-generator --config dts-bundle.config.json","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build-tsc && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-and-test","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.41","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.13","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","superbus":"^1.2.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"readme":"# Stone Soup\n\n**WIP** April 2021\n\nThis is a reimplmenetation of [Earthstar](https://github.com/earthstar-project/earthstar), either an experiment or a fresh rewrite.\n\n## Log control\n\nUse this global setting in your app code:\n\n```ts\nimport {\n    LogLevel,\n    setDefaultLogLevel,\n    setLogLevel\n} from './util/log';\n\nsetDefaultLogLevel(LogLevel.None);  // set overall log amount\nsetLogLevel('main', LogLevel.Info);  // or customize a certain part of the logs\n```\n\nThe available levels are:\n```ts\nenum LogLevel {\n    None = -1,\n    Error = 0,  // default\n    Warn = 1,\n    Log = 2,\n    Info = 3,\n    Debug = 4,  // most verbose\n};\n```\n\n⏳ Soon you will also be able to use this environment variable, but we're not sure how it will interact with the above settings.\n\n```\nEARTHSTAR_LOG_LEVEL=3 yarn start\n```\n\n## Multi-platform support\n\nWe aim to support:\n* browser\n* node 10, 12, 14, 16\n* deno (⏳ eventually, not started yet)\n\n### Buffers and Uint8Arrays\n\nWe use Uint8Arrays throughout the code to maximize platform support.  Some of the node-specific drivers use Buffers internally but the Buffers are converted to Uint8Arrays before leaving those drivers.\n\nFor convenience, variables that hold Uint8Arrays are called \"bytes\", like `bytesToHash` instead of `uint8ArrayToHash`.\n\n`util/bytes.ts` has a bunch of helper code to do common operations on Uint8Arrays and to convert them back and forth to strings and to Buffers.\n\n### Platform-specific drivers\n\nThere are two parts of stone-soup which are swappable to support different platforms or backends: `ICryptoDriver` and `IStorageDriverAsync`.  Everything else should work on all platforms.\n\nCrypto drivers:\n* `CryptoDriverChloride` -- only in browser\n* `CryptoDriverNode` -- only in node 12+\n* `CryptoDriverTweetnacl` -- universal\n\nStorage drivers:\n* `StorageDriverAsyncMemory` -- univeral\n* `StorageDriverLocalStorage` -- browser (⏳ coming soon)\n* `StorageDriverSqlite` -- node (⏳ coming soon)\n\nUsers of this library have to decide which of these drivers to import and use in their app.  Hopefully your app is using some build system that does tree-shaking and will discard the unused drivers.\n\n### Platform-specific tests\n\nThe tests are split into folders:\n* `test/universal/*.test.ts` -- tests that run everywhere\n* `test/browser/*.test.ts` -- tests that only run in browsers\n* `test/node/*.test.ts` -- tests that only run in node\n\nAnd also\n* `test/shared-test/code/*.shared.ts` -- collections of tests that are imported and run by the actual test files, mostly used to test drivers and invoked by the platform-specific tests\n\nThe platform-specific tests import these files to get access to the appropriate drivers:\n* `test/browser/platform.browser.ts` -- exports an array of drivers that work in browsers\n* `test/node/platform.node.ts` -- drivers that work in node\n* `test/universal/platform.universal.ts` -- drivers that work everywhere\n\nWhen we run tests in different platforms, we do this (except the `run-tests-somehow` command is actually different on each platform):\n\n* In node: `run-tests-somehow build/test/universal/*.test.js build/test/node/*.test.js`\n* In browser: `run-tests-somehow build/test/universal/*.test.js build/test/browser/*.test.js`\n\n### To see an up-to-date list of drivers for different platforms\n\nThis data comes from `platform.*.ts`.\n\n```sh\nyarn print-platform-support\n```\n\n```\nCRYPTO DRIVERS\n  UNIVERSAL:\n    CryptoDriverTweetnacl\n  BROWSER ONLY:\n    CryptoDriverChloride\n  NODE ONLY:\n    CryptoDriverNode\n\n  BROWSER + UNIVERSAL:\n    CryptoDriverChloride\n    CryptoDriverTweetnacl\n  NODE + UNIVERSAL:\n    CryptoDriverNode\n    CryptoDriverTweetnacl\n\nSTORAGE DRIVERS\n  UNIVERSAL:\n    StorageDriverAsyncMemory\n  BROWSER ONLY:\n  NODE ONLY:\n\n  BROWSER + UNIVERSAL:\n    StorageDriverAsyncMemory\n  NODE + UNIVERSAL:\n    StorageDriverAsyncMemory\n```\n\n### Building the library for multiple platforms\n\nCurrently we use `tsc` to build typescript from `/src/*` into javascript in `/build/*`.  This may change to esbuild in the future.\n\nRight now everything is in a single package, `stone-soup`.\n\n⏳ Soon we will have subpackages, and your app will do this:\n\n```ts\n// soon...\nimport { MostThings } from 'stone-soup';\nimport { NodeStuff } from 'stone-soup/node';\n```\n\n## Source code dependency chart\n\nA --> B means \"file A imports file B\".\n\nFor readability this hides `/test/` and `/util/`.\n\n![](depchart/depchart-main.png)\n\nAnd again with 3rd party dependencies as brown boxes with dotted lines:\n\n![](depchart/depchart-deps.png)\n\nRun `yarn depchart` to regenerate this.  You'll need graphviz installed.\n\n## Splitting `IStorage` into `Storage` and `StorageDriver` classes\n\nThink of this as `IStorageNiceAPIFullOfComplexity` and `IStorageSimpleLowLevelDriver`.\n\nI want to make it easier to add new kinds of storage so I'm splitting IStorage into two parts:\n\nThe Storage does:\n* the complex annoying stuff we only want to write once\n* `set():` sign and add a document\n* `ingest():` validate and accept a document from the outside\n* user-friendly helper functions, getters, setters\n* an event bus that other things can subscribe to, like QueryFollowers\n\nThe StorageDriver does:\n* simple stuff, so we can make lots of drivers\n* query for documents (this is actually pretty complicated)\n* maintain indexes for querying (hopefully provided by the underlying storage technology)\n* simple upsert of a document with no smartness\n\nPossibly even you can have multiple Storages for one Driver, for example when you're using multiple tabs with indexedDb or localStorage.\n\n## \"Reliable indexing / streaming\"\n\nThis shows an implementation of the \"reliable indexing\" idea discussed in [this issue](https://github.com/earthstar-project/earthstar/issues/66).\n\n### The problem\n\nWe have livestreaming now, over the network and also to local subscribers, all based on `onWrite` events.\n\nIf you miss some events, you can't recover -- you have to do a full batch download of every document.\n\nEvents also don't tell you what was overwritten, which you might need to know to update a Layer or index.\n\n### The solution: `localIndex`\n\nEach Storage keeps track of the order that it receives documents, and assignes each doc a `localIndex` value which starts at 1 and increments from there with every newly written doc.\n\nThis puts the documents in a nice stable linear order that can be used to reliably stream, and resume streaming, from the Storage.\n\nWhen we get a new version of a document, it gets a new `localIndex` and goes at the end of the sequence, and the old version vanishes, leaving a gap in the sequence.  It's ok that there are gaps.\n\nThe `localIndex` is particular to a certain IStorage.  It's kept in the `Doc` object but it's not really part of it; it's not included in the signature.  It's this IStorage's metadata about that document.  When syncing, it's sent as one of the \"extra fields\" [(newly added to the specification)](https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/#extra-fields-for-syncing), observed by the receiving peer, then discarded and overwritten with the receiving peer's own latest `localIndex` number.\n\n### Use cases\n\n1. Streaming sync between peers, which can be interrupted and resumed\n1. Layers and indexes that use a QueryFollower to subscribe to changes in a Storage.  These might store their indexes in localStorage, for example, and would therefore want to resume indexing instead of starting over from scratch.\n1. React components that need to know when to re-render\n\nFor use cases where the listener will never have any downtime, they don't really need to be able to resume, they can just listen for events from the Storage instead and it may be more efficient.  For example a React component could listen for events about a particular document instead of making a whole QueryFollower that has to go through every single change to find changes to that particular document.\n\n### Properties of the `localIndex` sequence\n\nThe docs, sorted by `localIndex` on a particular peer, have these properties:\n\n**Properties**\n\n1. The docs are in a stable order that does not change, except:\n1. Newly added or changed docs go at the end, increasing the highest `localIndex` by 1.\n1. When a doc is updated (same author and same path, but newer timestamp), we discard the old version.  So we leave a gap in the sequence where the old verison used to be, and the new version goes on the end of the sequence.\n1. The first doc has a `localIndex` of zero, unless it was later changed, in which case there will be a gap at zero.\n\nWhy do all this?  The goal is to be able to catch up to changes since the last time we looked at a Storage.  We can do that by remembering the highest `localIndex` we saw last time, and now getting all the docs later than that in the sequence.  We always read this sequence from old to new (in increasing order of `localIndex`.\n\nThere are not really any other nice properties about this sequence:\n\n**Downsides**\n\n1. The `localIndex` order is not sorted by `path`, `timestamp`, `author`, or any other useful property.  The order is jumbled because docs can be received in any order during a sync, perhaps with multiple other peers simultaneously, perhaps some using Sync Filters to only get some docs...\n1. The order is different on every peer (that's why it's \"local\").\n1. The history docs for a certain path will be in a jumbled order in the `localIndex` sequence.  The Latest doc for a path can be before or after the other history docs.  User of QueryFollowers will need some bookeeping to remember which version is the Latest for each path, if they care (e.g. if it's being used as an index and not just a sync mechanism between peers).\n1. When a doc is modified and the old one is deleted, leaving a gap, you do not get notified about the gap.  There is no pointer back to the gap, or anything.  Users of QueryFollowers are expected to have some kind of index so they can notice that the new doc overwrites the old one, and delete the old one.\n1. When an ephemeral doc expires, it leaves a gap in the sequence but nothing is added to the end of the sequence.  Users of QueryFollowers are expected to pay attention to expiration dates and delete ephemeral docs themselves.  We may also add an event on the Storage when a doc expires, but you could miss this event if you were not listening at that moment, so you'll still have to check for your own expired docs from time to time.\n1. QueryFollowers should always progress in the direction of increasing `localIndex`.  (They can start at 0, or the latest number, or anywhere in between).  This makes it simple to keep track of where to resume next time.  However this means we always process the oldest-received docs first, but the user probably cares more about the recently-received docs.\n    * It would be possible with fancier bookeeping to make QueryFollowers that track which intervals of the sequence they've visited, so they can work from newest-to-oldest.  But sometimes the oldest-received docs are the most important (like usernames)...\n\n### Querying by `localIndex`\n\nThis lets you easily resume where you left off.  You can get batches of N docs at a time if you want, using the `limit` option.\n\n```ts\nstorage.getDocsSinceLocalIndex(\n    startAt: LocalIndex,\n    limit?: number): Doc[];\n```\n\nThis is also how you tell a QueryFollower where to start in the sequence.  QueryFollowers ignore the `limit` property though.\n\n(You can also still look up documents by path in the usual old way.)\n\n### QueryFollowers: Reliable streaming locally, to subscribers or indexes\n\nThe old `onWrite` events are gone.  Now, there's now a new way to subscribe to a Storage: with a `QueryFollower`.  A query follower is like a pointer that moves along the sequence of documents, in order by `localIndex`, running a callback on each one, if it matches the given query.\n\nThis is a Kafka or Kappa-db style architecture.\n\nYou could use this to build an index or Layer that incrementally digests the content of an IStorage without ever missing anything, even if it only runs occasionally.  It just resumes from the last `localIndex` it saw, and proceeds from there.\n\nCurrently QueryFollowers are always blocking -- they hold up the entire Storage until they catch up, and when a new doc is ingested everything waits until the QueryFollowers have finished running.\n\nA QueryFollower has one async callback that it runs on each doc in sequence.  It never allows that callback to overlap with itself, e.g. it waits to finish one doc before moving along to the next.\n\nAn IStorage may have many QueryFollowers.  They will run in parallel with each other, while the IStorage waits for them all to finish.\n\n### Starting query followers at the beginning or the end\n\nYou can start a QueryFollower anywhere in the sequence: at the beginning (good for indexes and Layers), or at the current most recent document (good for live syncing new changes).\n\nYou do this by setting the `startAt: {localIndex: 123}` property of the query.\n\n### Reliable streaming over the network, when syncing\n\n(Not implemented in this code yet)\n\nWhen we send docs over the network we will send the `localIndex` to help the other side track where they are in our own sequence.  The other side will then discard the property and put their own `localIndex` on the document when they store it.\n\nPeers will remember, for each other peer, which is the latest `localIndex` they've seen from that peer, so they can resume syncing from there.\n\nThis is similar to how append-only logs are synced in Scuttlebutt and Hyper, except our logs have gaps.\n\n## Slightly different querying\n\nQuerying has been made more organized -- see the Query type in `types.ts`.  It looks a bit more like an SQL query but the pieces are written in the order they actually happen, so it's easier to understand.\n\nThe order is:\n* history (all or latest only)\n* orderBy\n* startAt (continue from a certain point)\n* filter - the same options, timestamp, pathStartswith, etc etc\n* limit\n\nAlso, the `cleanUpQuery` function is fancier and will also figure out if the query will match `all`, `some`, or `nothing` documents.  This helps with optimizations elsewhere.\n\n## Problems left to solve\n\n* Ephemeral documents disappear without leaving a trace, do we need events for that?\n* An IStorage might significantly change or start over, by deleting most of its local documents and choosing a different sync query.  Then we'd need to tell subscribers and peers that we're effectively a different IStorage now.\n  * localIndex could be a tuple `[generation, localIndex]` where generation is an integer that increments on each big change like that\n  * or give each IStorage a UUID which gets randomly changed when big changes happen.  This would be helpful for other reasons too (to prevent echoing back documents to the storage that just gave them back to us, we need to track who gave them to us)\n* Syncing by `localIndex` doesn't work very well when you also have a sync query, because you have to scan the entire sequence to find the couple of docs you care about.  We probably still want another way of efficient syncing that goes in path order and uses hashing in some clever way, sort of like a Merkle tree but not.\n\n## Other small improvements\n\n* The `Document` type is now named `Doc` to avoid collision with an existing built-in Typescript type\n\n## Silly new vocabulary ideas\n\nVery tentative idea to rename Earthstar to Stone Soup.\n\nIt's probably a bad idea to use cute names, but:\n\n```\nEarthstar       Stone Soup\n\nWorkspace       Soup?\nAuthor          Chef?\nStorage         Bowl, Pot, Cauldron, Crockpot, Saucepan\nDocument        Doc\nPub\nPeer / Node     \n```\n","readmeFilename":"README.md","gitHead":"6ab273657aa48061ebeec1311ae321e478aa5b62","_id":"stone-soup@4.0.0-beta.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-RAbg3HUqs3yyhgUdhBtpREw8kqG+O7MVYkNVcS3v27xl4ceye5C+obmB/4l0RoSzf3eb+KyVg/DdS1FOvjaCyg==","shasum":"d2781e2e3bc9bc5811c182040f98526b73c78f07","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-4.0.0-beta.0.tgz","fileCount":20,"unpackedSize":332268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgivu7CRA9TVsSAnZWagAAOaUQAIP17F4yex126fNAePQb\nd+8GaowlzoPOUlITSX6hAEtvosp5VqNjLPJMaui3fe/CzuwZeoQMj/1uhj6t\nRqCjnX+SZYi68Utwk2+XsAVPC/vzQEfcZ6F3vGogy0/hVQDTA5wmismtXYuf\n6kmfERXONOMGs26KonOX7NBZvr+r+9CnsZBiu73mMwmDUpLxeldsadUhNrxj\nNAOd+jOlV5CvVDg40rXR87twXTOQUz1sDJQ0yHEDNgbpdoiwvE1140TFfDRx\nPJz+g7pNun+KEp7hfycjh4mkHk38qLKBGj0bCc4Wd7r1Ght9RYdkazTuGfU0\n4tP3Fl2NXstleStiK4wXS9CRl8hGWhDW/j+upx5M+FJ/3e0nStUI5JITJqt8\nkTafAhO0Bwj4KdPMwOAH/nYC+2SLWxGBSfo36IbU5ir8TxPZc/WnlxfWuso4\na7nYX+jLEUA/hQW2E2qnY3M0IudN0Ruam4S1t10xSX53R+NIBuqtTgN8MxQ1\nrKPXzMGy1HP+acUhPVM6OJPXL4tTMLa1Lbeupjvp8UAeqDdU5wIsqM+yQ2WC\n6D3L56hyYoOtFSW64zgQ8JPvnU2Zfd1h14YwtFd8Yg2ePNrKCIMohP9N4p1b\nnKkNxYBMcFe/eBtGU0kRF8xLaHw6Yw1H/+G/1knI/WGL9n7BK+nOL57rTmTv\n2nFy\r\n=QUAT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGJSlsY1xW9l9GF6ENwyv1hBhfjnPj0fhwe/lsdmBE9QIhAJDKcdEEY5WxI7+Q6Cq1MWxTQc0SMYBEV7AVog0tiIAx"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_4.0.0-beta.0_1619721147113_0.21160879479347372"},"_hasShrinkwrap":false},"4.1.0-beta.0":{"name":"stone-soup","version":"4.1.0-beta.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-tsc":"tsc","build-types":"dts-bundle-generator --config dts-bundle.config.json","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build-tsc && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-and-test","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.16","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","superbus":"^1.2.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"readme":"# Stone Soup\n\n**WIP** April 2021\n\nThis is a reimplmenetation of [Earthstar](https://github.com/earthstar-project/earthstar), either an experiment or a fresh rewrite.\n\n## Log control\n\nUse this global setting in your app code:\n\n```ts\nimport {\n    LogLevel,\n    setDefaultLogLevel,\n    setLogLevel\n} from './util/log';\n\nsetDefaultLogLevel(LogLevel.None);  // set overall log amount\nsetLogLevel('main', LogLevel.Info);  // or customize a certain part of the logs\n```\n\nThe available levels are:\n```ts\nenum LogLevel {\n    None = -1,\n    Error = 0,  // default\n    Warn = 1,\n    Log = 2,\n    Info = 3,\n    Debug = 4,  // most verbose\n};\n```\n\n⏳ Soon you will also be able to use this environment variable, but we're not sure how it will interact with the above settings.\n\n```\nEARTHSTAR_LOG_LEVEL=3 yarn start\n```\n\n## Multi-platform support\n\nWe aim to support:\n* browser\n* node 10, 12, 14, 16\n* deno (⏳ eventually, not started yet)\n\n### Buffers and Uint8Arrays\n\nWe use Uint8Arrays throughout the code to maximize platform support.  Some of the node-specific drivers use Buffers internally but the Buffers are converted to Uint8Arrays before leaving those drivers.\n\nFor convenience, variables that hold Uint8Arrays are called \"bytes\", like `bytesToHash` instead of `uint8ArrayToHash`.\n\n`util/bytes.ts` has a bunch of helper code to do common operations on Uint8Arrays and to convert them back and forth to strings and to Buffers.\n\n### Platform-specific drivers\n\nThere are two parts of stone-soup which are swappable to support different platforms or backends: `ICryptoDriver` and `IStorageDriverAsync`.  Everything else should work on all platforms.\n\nCrypto drivers:\n* `CryptoDriverChloride` -- only in browser\n* `CryptoDriverNode` -- only in node 12+\n* `CryptoDriverTweetnacl` -- universal\n\nStorage drivers:\n* `StorageDriverAsyncMemory` -- univeral\n* `StorageDriverLocalStorage` -- browser (⏳ coming soon)\n* `StorageDriverSqlite` -- node (⏳ coming soon)\n\nUsers of this library have to decide which of these drivers to import and use in their app.  Hopefully your app is using some build system that does tree-shaking and will discard the unused drivers.\n\n### Platform-specific tests\n\nThe tests are split into folders:\n* `test/universal/*.test.ts` -- tests that run everywhere\n* `test/browser/*.test.ts` -- tests that only run in browsers\n* `test/node/*.test.ts` -- tests that only run in node\n\nAnd also\n* `test/shared-test/code/*.shared.ts` -- collections of tests that are imported and run by the actual test files, mostly used to test drivers and invoked by the platform-specific tests\n\nThe platform-specific tests import these files to get access to the appropriate drivers:\n* `test/browser/platform.browser.ts` -- exports an array of drivers that work in browsers\n* `test/node/platform.node.ts` -- drivers that work in node\n* `test/universal/platform.universal.ts` -- drivers that work everywhere\n\nWhen we run tests in different platforms, we do this (except the `run-tests-somehow` command is actually different on each platform):\n\n* In node: `run-tests-somehow build/test/universal/*.test.js build/test/node/*.test.js`\n* In browser: `run-tests-somehow build/test/universal/*.test.js build/test/browser/*.test.js`\n\n### To see an up-to-date list of drivers for different platforms\n\nThis data comes from `platform.*.ts`.\n\n```sh\nyarn print-platform-support\n```\n\n```\nCRYPTO DRIVERS\n  UNIVERSAL:\n    CryptoDriverTweetnacl\n  BROWSER ONLY:\n    CryptoDriverChloride\n  NODE ONLY:\n    CryptoDriverNode\n\n  BROWSER + UNIVERSAL:\n    CryptoDriverChloride\n    CryptoDriverTweetnacl\n  NODE + UNIVERSAL:\n    CryptoDriverNode\n    CryptoDriverTweetnacl\n\nSTORAGE DRIVERS\n  UNIVERSAL:\n    StorageDriverAsyncMemory\n  BROWSER ONLY:\n  NODE ONLY:\n\n  BROWSER + UNIVERSAL:\n    StorageDriverAsyncMemory\n  NODE + UNIVERSAL:\n    StorageDriverAsyncMemory\n```\n\n### Building the library for multiple platforms\n\nCurrently we use `tsc` to build typescript from `/src/*` into javascript in `/build/*`.  This may change to esbuild in the future.\n\nRight now everything is in a single package, `stone-soup`.\n\n⏳ Soon we will have subpackages, and your app will do this:\n\n```ts\n// soon...\nimport { MostThings } from 'stone-soup';\nimport { NodeStuff } from 'stone-soup/node';\n```\n\n## Source code dependency chart\n\nA --> B means \"file A imports file B\".\n\nFor readability this hides `/test/` and `/util/`.\n\n![](depchart/depchart-main.png)\n\nAnd again with 3rd party dependencies as brown boxes with dotted lines:\n\n![](depchart/depchart-deps.png)\n\nRun `yarn depchart` to regenerate this.  You'll need graphviz installed.\n\n## Splitting `IStorage` into `Storage` and `StorageDriver` classes\n\nThink of this as `IStorageNiceAPIFullOfComplexity` and `IStorageSimpleLowLevelDriver`.\n\nI want to make it easier to add new kinds of storage so I'm splitting IStorage into two parts:\n\nThe Storage does:\n* the complex annoying stuff we only want to write once\n* `set():` sign and add a document\n* `ingest():` validate and accept a document from the outside\n* user-friendly helper functions, getters, setters\n* an event bus that other things can subscribe to, like QueryFollowers\n\nThe StorageDriver does:\n* simple stuff, so we can make lots of drivers\n* query for documents (this is actually pretty complicated)\n* maintain indexes for querying (hopefully provided by the underlying storage technology)\n* simple upsert of a document with no smartness\n\nPossibly even you can have multiple Storages for one Driver, for example when you're using multiple tabs with indexedDb or localStorage.\n\n## \"Reliable indexing / streaming\"\n\nThis shows an implementation of the \"reliable indexing\" idea discussed in [this issue](https://github.com/earthstar-project/earthstar/issues/66).\n\n### The problem\n\nWe have livestreaming now, over the network and also to local subscribers, all based on `onWrite` events.\n\nIf you miss some events, you can't recover -- you have to do a full batch download of every document.\n\nEvents also don't tell you what was overwritten, which you might need to know to update a Layer or index.\n\n### The solution: `localIndex`\n\nEach Storage keeps track of the order that it receives documents, and assignes each doc a `localIndex` value which starts at 1 and increments from there with every newly written doc.\n\nThis puts the documents in a nice stable linear order that can be used to reliably stream, and resume streaming, from the Storage.\n\nWhen we get a new version of a document, it gets a new `localIndex` and goes at the end of the sequence, and the old version vanishes, leaving a gap in the sequence.  It's ok that there are gaps.\n\nThe `localIndex` is particular to a certain IStorage.  It's kept in the `Doc` object but it's not really part of it; it's not included in the signature.  It's this IStorage's metadata about that document.  When syncing, it's sent as one of the \"extra fields\" [(newly added to the specification)](https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/#extra-fields-for-syncing), observed by the receiving peer, then discarded and overwritten with the receiving peer's own latest `localIndex` number.\n\n### Use cases\n\n1. Streaming sync between peers, which can be interrupted and resumed\n1. Layers and indexes that use a QueryFollower to subscribe to changes in a Storage.  These might store their indexes in localStorage, for example, and would therefore want to resume indexing instead of starting over from scratch.\n1. React components that need to know when to re-render\n\nFor use cases where the listener will never have any downtime, they don't really need to be able to resume, they can just listen for events from the Storage instead and it may be more efficient.  For example a React component could listen for events about a particular document instead of making a whole QueryFollower that has to go through every single change to find changes to that particular document.\n\n### Properties of the `localIndex` sequence\n\nThe docs, sorted by `localIndex` on a particular peer, have these properties:\n\n**Properties**\n\n1. The docs are in a stable order that does not change, except:\n1. Newly added or changed docs go at the end, increasing the highest `localIndex` by 1.\n1. When a doc is updated (same author and same path, but newer timestamp), we discard the old version.  So we leave a gap in the sequence where the old verison used to be, and the new version goes on the end of the sequence.\n1. The first doc has a `localIndex` of zero, unless it was later changed, in which case there will be a gap at zero.\n\nWhy do all this?  The goal is to be able to catch up to changes since the last time we looked at a Storage.  We can do that by remembering the highest `localIndex` we saw last time, and now getting all the docs later than that in the sequence.  We always read this sequence from old to new (in increasing order of `localIndex`.\n\nThere are not really any other nice properties about this sequence:\n\n**Downsides**\n\n1. The `localIndex` order is not sorted by `path`, `timestamp`, `author`, or any other useful property.  The order is jumbled because docs can be received in any order during a sync, perhaps with multiple other peers simultaneously, perhaps some using Sync Filters to only get some docs...\n1. The order is different on every peer (that's why it's \"local\").\n1. The history docs for a certain path will be in a jumbled order in the `localIndex` sequence.  The Latest doc for a path can be before or after the other history docs.  User of QueryFollowers will need some bookeeping to remember which version is the Latest for each path, if they care (e.g. if it's being used as an index and not just a sync mechanism between peers).\n1. When a doc is modified and the old one is deleted, leaving a gap, you do not get notified about the gap.  There is no pointer back to the gap, or anything.  Users of QueryFollowers are expected to have some kind of index so they can notice that the new doc overwrites the old one, and delete the old one.\n1. When an ephemeral doc expires, it leaves a gap in the sequence but nothing is added to the end of the sequence.  Users of QueryFollowers are expected to pay attention to expiration dates and delete ephemeral docs themselves.  We may also add an event on the Storage when a doc expires, but you could miss this event if you were not listening at that moment, so you'll still have to check for your own expired docs from time to time.\n1. QueryFollowers should always progress in the direction of increasing `localIndex`.  (They can start at 0, or the latest number, or anywhere in between).  This makes it simple to keep track of where to resume next time.  However this means we always process the oldest-received docs first, but the user probably cares more about the recently-received docs.\n    * It would be possible with fancier bookeeping to make QueryFollowers that track which intervals of the sequence they've visited, so they can work from newest-to-oldest.  But sometimes the oldest-received docs are the most important (like usernames)...\n\n### Querying by `localIndex`\n\nThis lets you easily resume where you left off.  You can get batches of N docs at a time if you want, using the `limit` option.\n\n```ts\nstorage.getDocsSinceLocalIndex(\n    startAt: LocalIndex,\n    limit?: number): Doc[];\n```\n\nThis is also how you tell a QueryFollower where to start in the sequence.  QueryFollowers ignore the `limit` property though.\n\n(You can also still look up documents by path in the usual old way.)\n\n### QueryFollowers: Reliable streaming locally, to subscribers or indexes\n\nThe old `onWrite` events are gone.  Now, there's now a new way to subscribe to a Storage: with a `QueryFollower`.  A query follower is like a pointer that moves along the sequence of documents, in order by `localIndex`, running a callback on each one, if it matches the given query.\n\nThis is a Kafka or Kappa-db style architecture.\n\nYou could use this to build an index or Layer that incrementally digests the content of an IStorage without ever missing anything, even if it only runs occasionally.  It just resumes from the last `localIndex` it saw, and proceeds from there.\n\nCurrently QueryFollowers are always blocking -- they hold up the entire Storage until they catch up, and when a new doc is ingested everything waits until the QueryFollowers have finished running.\n\nA QueryFollower has one async callback that it runs on each doc in sequence.  It never allows that callback to overlap with itself, e.g. it waits to finish one doc before moving along to the next.\n\nAn IStorage may have many QueryFollowers.  They will run in parallel with each other, while the IStorage waits for them all to finish.\n\n### Starting query followers at the beginning or the end\n\nYou can start a QueryFollower anywhere in the sequence: at the beginning (good for indexes and Layers), or at the current most recent document (good for live syncing new changes).\n\nYou do this by setting the `startAt: {localIndex: 123}` property of the query.\n\n### Reliable streaming over the network, when syncing\n\n(Not implemented in this code yet)\n\nWhen we send docs over the network we will send the `localIndex` to help the other side track where they are in our own sequence.  The other side will then discard the property and put their own `localIndex` on the document when they store it.\n\nPeers will remember, for each other peer, which is the latest `localIndex` they've seen from that peer, so they can resume syncing from there.\n\nThis is similar to how append-only logs are synced in Scuttlebutt and Hyper, except our logs have gaps.\n\n## Slightly different querying\n\nQuerying has been made more organized -- see the Query type in `types.ts`.  It looks a bit more like an SQL query but the pieces are written in the order they actually happen, so it's easier to understand.\n\nThe order is:\n* history (all or latest only)\n* orderBy\n* startAt (continue from a certain point)\n* filter - the same options, timestamp, pathStartswith, etc etc\n* limit\n\nAlso, the `cleanUpQuery` function is fancier and will also figure out if the query will match `all`, `some`, or `nothing` documents.  This helps with optimizations elsewhere.\n\n## Problems left to solve\n\n* Ephemeral documents disappear without leaving a trace, do we need events for that?\n* An IStorage might significantly change or start over, by deleting most of its local documents and choosing a different sync query.  Then we'd need to tell subscribers and peers that we're effectively a different IStorage now.\n  * localIndex could be a tuple `[generation, localIndex]` where generation is an integer that increments on each big change like that\n  * or give each IStorage a UUID which gets randomly changed when big changes happen.  This would be helpful for other reasons too (to prevent echoing back documents to the storage that just gave them back to us, we need to track who gave them to us)\n* Syncing by `localIndex` doesn't work very well when you also have a sync query, because you have to scan the entire sequence to find the couple of docs you care about.  We probably still want another way of efficient syncing that goes in path order and uses hashing in some clever way, sort of like a Merkle tree but not.\n\n## Other small improvements\n\n* The `Document` type is now named `Doc` to avoid collision with an existing built-in Typescript type\n\n## Silly new vocabulary ideas\n\nVery tentative idea to rename Earthstar to Stone Soup.\n\nIt's probably a bad idea to use cute names, but:\n\n```\nEarthstar       Stone Soup\n\nWorkspace       Soup?\nAuthor          Chef?\nStorage         Bowl, Pot, Cauldron, Crockpot, Saucepan\nDocument        Doc\nPub\nPeer / Node     \n```\n","readmeFilename":"README.md","gitHead":"f30e2475dbd1f176f35d305cd9b3e8851125bdf3","_id":"stone-soup@4.1.0-beta.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mENUVtEs9MZP8MSGDLoKjSogLCnWAGCugdR9Ky5Hb/A4lv2uXskx0Dz/NR0wOMLU+5vh2/LsKASgJihcfStOwA==","shasum":"1db8916b3a27d732edc44c118818702ee9b8c28d","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-4.1.0-beta.0.tgz","fileCount":20,"unpackedSize":342661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi03UCRA9TVsSAnZWagAABuUQAJgNOKglxZp/myQ0i8r4\n5UmLSUstZlsKMiNPC0+yP6yDdilny40ks1cGdhCEb6wxHhfRGephtUdqdMjV\nQzQ89kXz/4H1KgH57iIfVQQE8mn7CISkIEuDXL9xjxcWaKJxOMS6FsNpxNHX\nFrOjulOd5eg/wI8YI3E+TkuKD3+kFayr7xISVYnZg/L5C8RwAaBMku6INuPl\nj56v+CPXzmWJzcOWzN5b5z/k9DE+Ek4RlUXysPStiqh8ULMCynMmw8UPl4sg\nV/Nxcr/Ew0kjsVY1WJR1/FhO7r6dor6t4tqOK5NsWFNnDcypeavihKeR615b\na3dlfkDnulQO68mg87bXVc93wZE5lZ8QpvBDiScYhyWBJCyJfW4oBuK3LaeR\ndh8unGQSo+o5v2dp+w3hMi272S4km6uSFsmPySa4bYBGvYb05IHGFpDeowoC\nYp7kaU6pLh5/VDo3twlT3i4WbDwNOSn3Swgmu/TyuGrZ2AeqZ+BoMIwgcImA\nz/J2aiEldv7Ufs4LMTcxm09d3wjrAOofhz4j5rqEv33X1lJTlQeVBLGev0Ne\nnrzY4fAh8V4bGmRhfsJLUfbjmeoqzfBmvxStO360xr9aanNHxJ1s2tKadQAa\nn2+IIzKeXYn4M6qMwEGP5nAufVSFsxQQSajOK7TOvA/o3fXcabLmrDrDc3V0\nvmxN\r\n=zXGf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIhFqYvdea018RtNRzMxn6dokZ41s/ShtfZuGVKEO1wAiEArvNsPbR075bRDRkvJgqVfoZNAxLjarMGymiYfKrZ6e0="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_4.1.0-beta.0_1619742163908_0.3805383356377181"},"_hasShrinkwrap":false},"4.1.0":{"name":"stone-soup","version":"4.1.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-tsc":"tsc","build-types":"dts-bundle-generator --config dts-bundle.config.json","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.js","browser-run":"cat browserify-tests/bundle.js | browser-run | tap-spec","test-in-browser":"yarn clean && yarn build-tsc && yarn browserify && yarn browser-run","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-and-test","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.16","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","superbus":"^1.2.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"d45faa19e03d604c59ea39764b8018531f64a323","_id":"stone-soup@4.1.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-6eIHSryHTmAzjgO2Ovqxh6EuI3lR4QrATduQSyJuoYSeYCJJ+Rbaf19FuJqWJqxM7vtwnyF3S1WR1s5++pQsMQ==","shasum":"228bb381fe6c41b166772d0bb9719d9964e358c5","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-4.1.0.tgz","fileCount":19,"unpackedSize":341942,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi05PCRA9TVsSAnZWagAAuWoP/02WXkNv/4KrxNu/R/Af\nIequg0LBhiS+JA0WZNE8d0Y8BbJGb4uKjafbyGTNodmSLdhfBtj+Dfr0IKbr\nMQ4lv8fggLxykGEMoxinmyAfPHQRZSyiON2mqtb36c4AcUvPX6v6OYiMD2y5\nPD64gzNvGeqGX5iFiGWnBL/dFjQLtlpbcIaw8btSHcGOR6h/x7fH0qYQrHg6\nhmrhstjA6P6ScNvcmSLgIQ1q0RmE9DNO2xozHtQu9OGUUfcF4iXaRDwQK3i6\n+v0uKt+WX/kKRyUu9eqVoLDVXOFoiUozRtW7TtfR6UvP4w42YNFVygPDNRIj\ntIVYjUs+SriTdjITZ2MiOHhZvUZuCXd9MU67/oCb+d2f5+3EgkIaQb3ZcWhk\nqRojp1j3KsVlgoTSucowQ1cZsUHo7jj7pT4rJbnfGNdZUfPDWFK5mDYolhXl\nfexY4/HBdWN8MuqZGmpLkWEct2iSjaDMoWhfsvlYBSoahb5upd0OYcD8JcbZ\n7zSds2xIv7zSVprUyx2KzqCIF+3NSgSt5p8gTo4V35zFjbqDmEXnkoEHEwWS\nK1fI1KarZUzCCv3beNvWRbEEZX/rChNGcMDNIZ2fuHXkHhFjEszdBDTnbMQD\nyoo1vkPxndvq3PUuZkqo443VHTqpB5qWpFWoUpJCIJNapU0wiJtpb8UTtgQJ\na49g\r\n=t+oY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA9+u2jqqgjco58zOZHtJKlcHDz/M91lwxeP4i/jWOyxAiAMEPG3j3B6EBl7E0LwaYdxMfCbIqauiTm/lDzYeZKS8A=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_4.1.0_1619742286630_0.8982734532636389"},"_hasShrinkwrap":false},"5.0.0":{"name":"stone-soup","version":"5.0.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-tsc":"tsc","build-types":"dts-bundle-generator --config dts-bundle.config.json","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-and-test","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.16","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.0","superbus":"^1.2.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"3a49b63b2333538f68fefad2c4dc889af46e07c6","_id":"stone-soup@5.0.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-tJCqWVnSIgCpbJwBTsbqLi/2Y5HMvXN5U5+dwf8tIxM08Rja7uMWvTivlNc/OerGbfQhJJveeifGvrHz4iMGqw==","shasum":"54d4c5738d2b604ce8dacd48fc97c84b11398a1f","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.0.0.tgz","fileCount":19,"unpackedSize":350002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjzj2CRA9TVsSAnZWagAAKocP/RhHDaAl6KxByAtEfwtj\ngvjne8MtrSRsJlqJISJz/HeJaiol4aFzRZoqDrQKPk9uCP/3iwFuKeE8zx9K\nxNPedWARe/4IEOLQkZsHfcjGJuGoUTOnT3rHurRQm2wyV+xI1IOVBS4JQE1t\nK0qAME3lNlQ7W2hTyQO6rbJwkRtHjfXODgRIZJzrXaGv2yMklP6VeH8iXx3a\nx7EQOJ9KIG9RK/WqcYdbC8I2duqz2tF0RnO8qj8P14tyOfamdioyEn9GeqRB\nRb3bY10P3zoK8ljxSEikrtehK3OsHd7ifFwOn9ifZhCA94vz2MsqH464KSGd\naRUhfBxvM9CIK/h3FkK+iDTMvFh2rucHLTsC6D/y/L6aRgqljvSnztk/+LX/\n3YmRjVTF33RMy1Z9FtnPlq26Y4yPCggd+BOtTaM2INgB368guUGQbwAT/u3W\nprr2jZoO1AH1XHJAIyf0A8eXmzqPdHm2Nec585Qg6O+Fuc00FkTULW8Hnmm0\nWi7b28A4AeuNo3blfWks3t5dcJCFO+nhqzhFcXOCo2tL1DqlcJWYgp4H42li\nRGrlSGImUs72T+F0rjIcfD23c9wkYTaoPjQzHMNGZZp+ArrDcm3ViHVwnO+R\n5/3VBi77+8HivSOpCLmUaPLSGVbMuIdsZZUM3HfvfaDy9s42mLSNVycNssLq\nVpLl\r\n=szX3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpZ5Wa81SObgUMuDhx8Fv/6LPcnhykAU1dQsCohdp14AiEAiXj/DFqMv8cXjut8T+0C2Mc5MNowkymKwqrb3LROwp0="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.0.0_1619998966189_0.5727277392390178"},"_hasShrinkwrap":false},"5.0.1":{"name":"stone-soup","version":"5.0.1","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-tsc":"tsc","build-types":"dts-bundle-generator --config dts-bundle.config.json","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-and-test","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^1.2.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"2caebb32bf15e37022f55ba53a03f680cb00a5d3","_id":"stone-soup@5.0.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-jHesRwrO8Jz/4LChy147Z20WeEfwBfGPjoP0tPtmCuuPIdnKB55ebnd5X1AZnGc1xosEPjwlfr8B4Trq7OfeGQ==","shasum":"f2613977bac62fee9b9190e75e99b7427d83de6c","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.0.1.tgz","fileCount":19,"unpackedSize":350002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkDh1CRA9TVsSAnZWagAAKPgP/RE5j7yH3UTwtSd5Hslk\nslcijerkOZUy9NceXajefF3SAJBahha/VIyxMpQ3325+AThw364PgtNjG5Ey\nxs9GHg7NICEPHuAG8Vs+K0fyDfDp/oG+e5NFzdu5XnEXgEWRUJc9hAEUQhdn\n3KsJcsSL3s/s+mHiOzIerimeHmULhkrhDQ/Qg1OnLb7vGdGEnefecylwn7mF\n8UQ4N7SLz9exHppOQl0LubTXinf3Np0Td65iRa6RCt+D6EqrSz0EjYcwA3Ci\nNRT3VbwT0U6Kj+VS5KRFyle1xYIsVkamHBpDaCM8ljPRpLYrZswBifmtDGLU\n4LYRW8KlPPOgYPOnWXeEX+aMUxoUVlpuHd/IP9nZG1HxILgpoQ9L5g6CT4Nb\n61QmyjxeaOWJeNCw3Evx1V20/2NihAUE8XxSKSMrkIKVUjfYTs53mVOYAmS4\nmcp32QBmLVG5hAGxkhTWgcJ/usug7hb5aygpBisQtf7mpv6orPR7fAx3FKSZ\nGZwxTF08KYpKKwGb7vJmeM4YxKcLFVzCYt3lmwVqHf4Muf/Gnr27c98cmP1o\ndXO9WoD67M1TzKEjHcwMrzuBNeXKTI/LQ+9YrCszmd6KzFwDtnl7h2cSD4Qv\nLPqdX/C6+Eu/BM8kmqzel9klvzgb4qXgutFHAs2raIMgm95A/7QgG6rYb6X2\nO5zB\r\n=bZU/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGI10zuGMchhy69GCS+8AxvDlwQZkYufKNj81gJnIfeHAiAXMX+Tz7lenScXCUPCRwIQ+9P8kAMr6X0WVjJOsz70Bg=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.0.1_1620064372561_0.6630481709236125"},"_hasShrinkwrap":false},"5.0.2":{"name":"stone-soup","version":"5.0.2","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-tsc":"tsc","build-types":"dts-bundle-generator --config dts-bundle.config.json","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test2":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","test-addresses":"tap -Rspecy --no-bail --jobs=1 build/test/universal/addresses.test.js","test-bytes-and-buffers":"tap -Rspecy --no-bail --jobs=1 build/test/universal/bytes.test.js build/test/universal/buffers.test.js","test-compare":"tap -Rspecy --no-bail --jobs=1 build/test/universal/compare.test.js","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-and-test","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-deps":"depchart  `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts `find src | grep '/test/'` `find src | grep '/util/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^1.2.0","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"275a3facf418ef939ee617d924fae461607b9198","_id":"stone-soup@5.0.2","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-2L2FHWpTHxpUJn8bGfybfNYcXoAe8fOHznNJk4CfV/DASOfPAwNLJ/D/ZGG6ctWqKdmLZ0/8Omlvu8j9hdI/BA==","shasum":"594cd1cfbfd00e913f4dc14873de676a3f1580ff","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.0.2.tgz","fileCount":19,"unpackedSize":353666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkEW/CRA9TVsSAnZWagAAhYwP/0CL72fzXYPsLod91OMo\nOvPQJNyhp0xarNL1VS4pIh5L8VirtTeT0Hb6mJe3agQkWHIApTiXHkJzyOlc\nBd4mgWF77RosJ8kEMY8T1AC5Jff3r0nnC8lKBz1FB/5lR9azdebQutFfswnH\nwOFRuZuOLcRTIDJKsXKFse++XBFdXWlE5o7M1fzwE7gpFdUk+YPzLIr0b6LA\nPKe4l8ECc4KweXTD31qwHgNBPaxY8910Bf5CZi+POeVY13nDBSZTEayoWkBb\nuzDLOor1Ey5qH+54bzNxnas3CRYSS32ZfPQv6ZWA/s7A+aZ6gZnSjLqWUAL3\nTfMsbTkzGf5st5iRCBzLzl7MVbjqhagz9vx1aR2EfZ0snFXKbGiE+K8kdmmF\nSfHuf41p91byRXK6J10uFGFQiUOQ7cEPJJF8PTbADWRFlHETY/NB0+k/6n+a\nvVelsF1VWovnMn9I7dy3wFbLI/ToCCkey1fsWFMfscy+0uFxEpEpM1CRFoQx\nKoS30TgA3oGfeLqZQEtibI9pVD9ncRgX2sPDWSu2t5Me6DViDOHnun2WJExM\n8O5WZPL903hV/w1xHvTCfpM3P1G7/FlLsErqC4DMHHsiFF11MdyvHDsEgYyM\nKBkr2qpla4yKmsVi1T38ZPYZV9HnMBILS8LjWwwUqoBdk4KmEyLZWPI1FcL+\nw7kW\r\n=wvrR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2O6TfnroKc3wWFgJYjRthCcr31xj3ANyadPLqvbDzMAiBymU1kWAVsswb8qCVWpY9xTaS5WNoFMbOHQSwMEzhnFQ=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.0.2_1620067774873_0.8029494098963808"},"_hasShrinkwrap":false},"5.1.0":{"name":"stone-soup","version":"5.1.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"28abb22f1023afeebd5c6c42ad512da8347b24b0","_id":"stone-soup@5.1.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Ctm5y+rHlVNHRZ8/Bqx+V0jrnqYLX+krB2k0707P/fKl1CJb00opnDgt1uj1b619g5itGpkV72WsqoyFQl1MZg==","shasum":"994d9a1630c136bacb468d1d2a632a1101c28d63","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.1.0.tgz","fileCount":20,"unpackedSize":600613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnXpACRA9TVsSAnZWagAAeAUP/04xnV9pSjHsW8IGDkGs\nMo52s80Md3bilJXIwhDBVE3rEErGETPbOuCiXUuK3WhF1TNOg34E0LW1Od3l\nPlaDowhI9QOyfap81i1nJcRUqrFZc2f5l7Ar6gkzA5QwDaBoebzgkvNbnYLn\nYdbM6Ge6TJxwQ4wezT4htwGF3WGx2qeF+p7ZSnE1W1q1bbZvKOcPGglUn+NV\nXRAwHyLmjsQTjPt1kfZJlhFxm3unuNM2m8BAn5ZzU3902c0IjflCttdaBtC0\nw36cqPTqvfdffk1NTcUlDw8jV7/K5FIcwiiZwTkH8YhxKLDvfWGSQ7CNQ029\nn+5ak09EnmElarJPBnpsXt1RvtuXCMUpUufm7IY+WO5XNzBeEJ82nWDnCqyo\nO1baRfckwoGFkYX8NtBn+N54C0LCJ30h5CxkD0h+HzhvAF4yca2FgCWtmHPY\nqo/jRVthFQMVHEcrG1hkp8/fNeKko/YPRaM8koJAk4D7mnAo4CWC4Zf3WO+6\nT/5bDCQKygd2raLtrWHUT5g1v9cPr8IihpHR453jCFb6I2JzC5maWJGMW5zc\nSwidujhirXrjkz2aN/tqbx+no04YxNJTU7Q/YHjnSsa0CEyDt3Fp5eH+4qUW\nWD2X3m5BATa6FjO5MYu6SawRLQPDMxod5BBp0geVy5ydmq+zoFoijBN5LDRx\nt7lO\r\n=m83r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEWyies4hUwKkhUHBr26bGFriDgfiAMtBjaxEDL5Q2fgIgdhKsCXFHghQEyZ6mwTB60cXJ18aTKjTlHVqs9lmyRTg="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.1.0_1620933184188_0.6827096888705309"},"_hasShrinkwrap":false},"5.1.1":{"name":"stone-soup","version":"5.1.1","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"d2dc5e9f7f9eaac2b392c1580883a1ad12ef35f8","_id":"stone-soup@5.1.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JFSrmUWKYrJbGc0JANFmetFbv9AcOUras2+YtzFiGdO9MjDncEaWQhQuVqx4rTaGG+u/o56SsVeI8GyF6x/l4Q==","shasum":"5ffaf2580ef6ec267e3b5f50139838e7dcc62d3f","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.1.1.tgz","fileCount":19,"unpackedSize":369837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnXsCCRA9TVsSAnZWagAAmcQQAItnFSUDizgsfg110rV+\nFq4r4XdTVLeC7MvlIgw1hfhkL4ODX3a8QkecsXggXknl/WkvTlHERzQcHN2K\nEG2EaREqdK3YPaVhjd4wLNenyjDiQpVrh0fh/ji7NtPN1mPpVAt9Dl2gZN+U\npT/2EpdhgWmSBN/WcgzuMsd/rog/n5HGJFiiwsA28aZnHjMXHTiUh1ZjIjh5\nBQP8uRjpwcR69iXsnC+bTGSttyDIN7qMUOp/UQBXg9GLbWnmgRrgImiSThwu\np/IR+HI5cEjZ3UikM7FKcgMYnD+ck7YPcoNffFsZgdR+1FCKjx6ijXOGrZ6Y\negRPbyK9iMU94fiT/jWnEfmH3Sv8V6OanVYEhLdXOTreuaH08zkjIFjV20B5\nOp2EvRcKPMOzne59fHQYsp3oDqqGz6JWRMkUjJA2mBlgcwse2A811JbyzPeS\nCk4lzpLZxGgjdHBQ/Na1Dd0t4ZNQIFLBM9hGMxxToKxhXBf8JDrc/2I0P+ig\nz+HVLoVa0+zHDi5++VG6Ajd0X1stV/mHbHbh8fBUP4wG6bk3bxxHIwYUjXnl\nvqKUY+6csEb40nKKQ6v0geEOsPhH/ipYwyW0n7GoBXhnD0vO0De2wI8apbir\npObIfPQojB9ewU1Sl3NnflNP/WbvkITmD30C18ydz9hFRt1KVhdpRRG+V452\nz/ah\r\n=kTx2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuln+IHXsoHELczMukxft5LVPVLxJDeofR8P7BDlJrMwIgbf0v6rVXxMlS7NKvDR2TFks8yyr9Yij/kPKdf0Nv68A="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.1.1_1620933377666_0.03272707847748757"},"_hasShrinkwrap":false},"5.1.2":{"name":"stone-soup","version":"5.1.2","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"8d8391cb29ae6f2efa85fed82273a4cbc152013f","_id":"stone-soup@5.1.2","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-m2xaBIKgwRnTZAt8qylMMjhO2sVoU7WFUN2nOhkPe+w6USW1/I3m2wB1WU4u/6iCXSHhkXbILvEp2I6uUnnJlA==","shasum":"10e921c75c49a29744378a9658b456ef3cb41ace","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.1.2.tgz","fileCount":19,"unpackedSize":370484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgoryuCRA9TVsSAnZWagAAoT4P/Ru7u+PPQtIqRXVIwRV2\nYrhJt6I2GAsCqAjHVDfuFXJvmegbaHoRpjE+luOdYS0weqtkcy0bh6W4n/bW\nuHu4q1iSV5OhNUc4l6KCVbGS7F10fDOz4ZWmzJ41tlRLMbZMxaXeOAX40iJU\nKi2NcXg3ZCKDiUUZjcGhPQYtojva/TWmd8rLENnZKKu4DRAFY6McRGS/0Xsn\n82SL0WgsqP5uiTTEajEcZgNWL9rEouND0dBGm2XxLvHdfdtFTwYMUk4hBvMw\n0Gf/0Dcdq1TO0lwaPOfqtFSGifFsrgSE5aDkjpKA+9VskFZjJDlUp0/Cr9mm\nlpM8bnwV41iHx2L9BdDeDiOQjr+juiQ6aJ0tLjQYffJm0oHCS9t7zEaTkYqq\nO7hsCVRGaC9TnICFW3F0jP7nVBqIp72iCXkXxhQFkrY8jLISBGPLQ+7aFr+p\nWhEizJJischXNp2nUSMNJUAfd/3Dm30jH8aC3j0/nJz6XXigDtD/yvWx7+4Z\npDnfxKRZt/BdvNRc/8bQ+EBKr/Gfg9EDRpgLw8hnLl/N5+AjzBF+MB0ZMc0a\nHHBHaXDV7S+vkkgE4hDk0ZHdzA0AmHublgo0bUiwazyproAF1qiS6lX73oAT\n0Dloe0viqNw/GE/poUenh5D+O5B4QlkF4er8zGhglI/wSyFd72gvjcVC8NtI\nh6Oa\r\n=fmNK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuGLA6nKMDbcPL7h1O5hORTtUlfygacTU5anCNKO8pWAiBIyTDxoRYHQr8N8f7qpMluFIP9Lf68oaRJ0ZzofwCzNg=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.1.2_1621277870253_0.9030648822124856"},"_hasShrinkwrap":false},"5.1.3":{"name":"stone-soup","version":"5.1.3","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"f5c9925da4e2f14d3e75615b689e56aa09789676","_id":"stone-soup@5.1.3","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/1nOxmNQ7sO3iSOOnF/Nr7ICth5oLgwXLBfuOD5wauA6B/uKfut/yaz/hW5MFIbfCBPjSDPFVHPlxGYzyugDQg==","shasum":"66855118ebf17aedbb2f594f174212aadd20d32b","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-5.1.3.tgz","fileCount":19,"unpackedSize":370484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpE5oCRA9TVsSAnZWagAAT5YP/0Z7aE/1yKacmlrX+g6Q\nHYOolQbupfBolBQdgeounv1pSv1kTngawCNrH2ar1Dm+HSlBQ5hsmQ7jCGkz\n9umG/TQLzp1q8A1Ynh3a8KJGA4fzKVjYx4EjKgoh90vsr/M7qhn9f2LjidNG\ngZqxzgOk4qTBF0wHV4hOC3qhG5tCtwiimsXcyTjYP2DyGVTp4SonK0TrDXME\nUJuKan/okYAWPwW3ghaLqLwQ9v3LF3VBO1jdoxZC4poaUmpOPWYmO869sAN8\nyqczpiVEPOnyPrjQvjwJkfheU7rxtC6o+lxYu1RGWxk1XNcScWxVqPhPhCE6\na+56rH90WCb8Z7QE/tgn9fd/FgdYKoeKSxQ5DZ7JMssokitXE3V30xu3BOYp\ndIt7L6cR5nxn7iPkpclcH7TcPs9jZ790BxTxCC0axxjWVbl7lPW/dVArKxpN\n7ueGsNTzi9WNTTCY+z6xNrEFceJQUMfoDsy4UEbtzRK+gQ2JC2uO6lzhVrYk\nsEo+ULjVLd24jhnIrbEx0pzviKeiufqS3mAj2B0ZrJSq5vXPIiUst3IX9v3k\n8MDD8B7DFUTA81W72k+1ughvJEhJbaip50Ajw6pvThyXdEuGdN6t+4RmyZ1B\ngvRgx8lx7yBSoRFzwyvCb2hglKhj12eNma1m92WFSJlA8UzdycZFru1iOp2q\nH/LB\r\n=AZfl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5HR5mKNJt38q0cRUYIFDfwXTIgzust8VQZSte77QkGQIhAMevdVa4nZpwBlCnvlLHiLuPA8T310sGYlpWCt3RPsbi"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_5.1.3_1621380711502_0.002807518081133553"},"_hasShrinkwrap":false},"6.0.0":{"name":"stone-soup","version":"6.0.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"d38903d88fed43675b7565f7217fcfbe6b98db0e","_id":"stone-soup@6.0.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-KwOs5kU1WWg+eGgScFDAdqpvR//ijiQYgmE65YLZ4j8ZYyv6B+YXX6uUaM58/lWlJ8BXBxAyRiKiIHFpfs4Y3A==","shasum":"6fde10b1ff12da21c256bf4368a2337c844fdc3e","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.0.0.tgz","fileCount":19,"unpackedSize":483941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpeOgCRA9TVsSAnZWagAAUR4QAJN3b48TbEAfDiNMoWjL\n4wXBnRWOMYu6Kl9/M/JNHSL2+vXWqRpVE08RdrQiJYwhiUuFwSLnKeAIDMkG\n9Y2RtcgHLYd6AzdqkbjVNUQBQQhApWhghC2l7kNefzO4lx/dYvp9+eUVnFlP\n9HRZJxy8OO5qv2O+5PnYmQ/IAjTxd0UAmohCqFAxOShy/dnIZJlYWP6g2b0k\n3S56VpMtTVwLxrY6NAdWOcXVinrb4p1n3MHsS2uMPfEMC+2domOsbL0jQiFH\noyb7RUbxcevGMgN2st/Zh0xPnwk6+nDI+3otr4SmDVy8JQhWGIoYqcZ8f/Dh\nWQCVzNRZWFePx2fPjz1tvay6aKcRzlS0pS9zP/rRDGqKQskTMyPXFyf1sj7G\n///cu2hfDHQ8EzALBAcMQ24/HqBoH8OyFcYXCF3RmsZwgZbWfVdahmEIiVmb\nj68OZZp3EgYMw+5i17joPsavAfAdL+xclwGcYlvF7II5PhoKr2ZkZzeJIAKx\nLuGjImLy6h/wsBvOQa4kihO88xAeFuwcRE95BIav/V08r/K+5laEZuXfDO2n\nZl4bGEpmTRxjyCm3xQe10mlYMaCFcSWBPN34NArNnTq9TNZhrH/grkAS7+My\nttfpCP2IV6b8adwj+ThjPUqU9EprScZ32Gi7uqwhXwMgumgtBfbvpTn3e+RF\nWZ0z\r\n=JDcg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/1lsr05mKaMC8VnL+CkMpNdZPk866ewfNig3wqJjY1QIgemPc67W8yFjR2Qb2eZZSPkrbmeDTbr8RsuuihuUp0so="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.0.0_1621484447915_0.09592325187444373"},"_hasShrinkwrap":false},"6.1.0":{"name":"stone-soup","version":"6.1.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"2196d889a2e12cb316932459a461d46c403f6152","_id":"stone-soup@6.1.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-H/jdT++o6cakSzpZbARSDBnts3JxoMrCRZSgxYpyYfb6IaJL905x41NfkdybdwDjkaSe52FNAduidUh0Yk0rRA==","shasum":"24784e477700b84ceffee21f8e93ccce9f517bed","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.1.0.tgz","fileCount":19,"unpackedSize":480335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpem3CRA9TVsSAnZWagAAXNcP/0FF2WWlNS4YDh+uzfKo\nk7VxRqAhBrTZ1OFWcwc42HWGNb/iPm3x6TEjBr8ky7ObqiGM6f9xeuXeSZkM\n7DSjXUQKOSw1K3DJB41RId5jQMX6thy4DQ+lqRQgMNaMKQhSgZwEqj4NqjiC\nDOYOcJeFn9yY77OKiFFZndfb1hWijrl6K6i8ScztKAGjceySj3Nny/pWTXiD\nh5Mse0y8TmDnO/fvt/CiMnxoWPjKWnQE2MCMuxVLpZtvQq6RiiQsILO5be7C\nB3sKpIMW8+caIZ21uHkXEKs/UPhtE5pwIs9u7JSaZauBI+2z9EsRHoNqOyW5\nIL+e/PFHdyUyUZZZoKIbOM0+/yjcGhpncULt4iBHM+Qqq3alfaH6WtP+3/I+\nHJ4WSjNYyuhVBdUVzf054lsJIl6G8h7hsQzuORrn0bqqxsRHS11VhXV9mmpL\nsX1/2cMm5IFvpbbCsqcYufkO4kBSz3KRR88Bc2/r3JwA02I5Cwl2pUFd8/IL\nLQIjXbtY5L9TRqUBJisCA6DkDzXlV/G9VMJRCodUp0IDyLN7+2aJHETld7mw\nOX6CVOycX3zoDa7k5jkhNZ39hx8oeWUm1zpKnEJU7pKns5nKlox9srZNUQ7q\nmEap9jfzFKZrS0/aCVgzN9PrpvE1CxFzM4xYT2AIAQ7lkC7cMhWRNv1YRI43\n2k9X\r\n=5PGE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTl+EWMwdUkch/PXW1v0ee2uE6ELntojSWXrF9ysbXkQIgfnv3abfQhOPMXarOVlq96MbuOa2y19BMrjwTEsPAkZQ="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.1.0_1621486006833_0.4233004230261599"},"_hasShrinkwrap":false},"6.1.1":{"name":"stone-soup","version":"6.1.1","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"e86409d2de4117970aa812e7dee080ada8707b5c","_id":"stone-soup@6.1.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-jacBClEBRMdpVXgI9tBFLDpA8trEGUwYvQ9fVwJ/oiVV48OJPkqYFxO2j+n8+kMFhsT73k+2qNzjCqYksh8SmQ==","shasum":"34a3ac033786eeaf3a435c1a3b2742d9db2838f3","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.1.1.tgz","fileCount":19,"unpackedSize":463739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqDk2CRA9TVsSAnZWagAAsr8P/3e5Y2LV2y8+ENMYK4Em\nV5XV3XaLVgU2BFk9J2C89UOM05BpM8gL4eonJUb2VUbT+uwwnc/V6Lzn4nFK\nicQ0XpeZLSDl6/1ubFw8DDPOhfkbtLewU8q3E78mDk0EviFlC21JvJpL2LCm\nhxfvexSohQfDWKz6mrwEHAaLAyOiPIQ1bgjA0fSZTFrJTHrIRFppx8x1JQRx\na7R34ZhXHnOphdokFeoGB0Z6JFZKirBux9OMicCpSezSohOJuIwgyPHCeZjj\nsicdEw4u7E9GGMA8VX+/qEbY6U4RZNyyuBEAOkoMy/RPuUBGhYYq+MwrPRXA\nJpKipVYGi5GsUq3frBnr5v1jH6SnK8/PNiDPMYLdgujr4hO7OcGzVHHGp57A\nOybi2Dta/rlPEE8XIuIEq2cJ/r3aI32hgbcUJSYAzSTQD2pgEAOIH4RknJzI\nnPHOOV8Z0d70HcyWtxTBu02KiwL22c7WoyjqOoWdxktoPaWuGfleny87ShfN\neWOdKAsUGQuxFSqElTlnwsR1WU4u/QQBPEmc23Qmjq4jQ5QB1r6SU4KDMyja\n9Jo8urH9q+DL/OzN35acuYFTXJmJaNBXnVHLNh5nkTKFxtlAYC0foJifxD8T\nYCoBdxXOvDmyIBx9td0OBT3MAMY23tJCnBydO5hgZ81qzI03C+OAi4V74k7P\nVNkl\r\n=nXUR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDFNq67T1XeTVDAE7f5hOpPVSqARMIyVzL5fhAWXJEXwIhAL11POT6smcZihyylJDQDtJYd2hqgWxp/AomoEVc2N/O"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.1.1_1621637430101_0.0451079509204968"},"_hasShrinkwrap":false},"6.1.2":{"name":"stone-soup","version":"6.1.2","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.0","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^2.0.2","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"bec57281a585f16072be8901e2de3d9bac6e563a","_id":"stone-soup@6.1.2","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-P4XcdqYLFALSpeSMWVxB0x/RSrXYGo7BjVs3Nr6rGs/0ogUUHpGrRKqELyHd0xEnSrhYwtGI6fpGxpwVCpFDtg==","shasum":"80cad7d8ba369ff49e51eaeb49963016934d4a9a","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.1.2.tgz","fileCount":19,"unpackedSize":455555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrCAECRA9TVsSAnZWagAArdoP+wUU3TxC4Ah7U0UCM4z9\n3wKcVdNSzEoZuoWAZMZXpt3Tm2IiJd1biPdp1Zns6C5xzAy9CsML+H6ZkRa1\nIUHXEBYVD/3yJye1MqA8SDYyK+FVOIytR1X8P6bexx7wjQzdrmk7QzoX0G76\n9q70XMuHtpnX+vtefBvfEjeJWRxvs381THUIkbN35QzqUhfZLoOgR1WpQTFO\nDWwZbhCTgw7l1RlS4C+B6C8iDv2nQJ9O/ewRfudg+b2s9qRwSbbUDRiB97kx\nvUsm/c/q+6/Ht/FjBVkOgDMBTkWAB0yTTjZ5adYV0GRoVUY/oIMOV3xqPa1f\nhME5ybZ1sfmZ9IxaSslLpe2nC2UDUUUnott9aY2NGEzFsJl75Fs8G8ky38DI\nWelOl6YirOOS5Lb37C60kMnfPJNk/cg+tE3iFo1vU6jJFjQdadQlu/CJW45l\nvmwwk0F+B7vufR7XJth0V2ibb5kDhGSQkmGU1doAhHWSKJlYPVN8gM97lxUK\nXuFi4huegZvxGq40PReHem9J6ypjmskcgsGNlkYu+cTD2nw5EukSbZTHTYlD\nIrpxwVr3aXpyolemAxa7MvXwUVffLa0I1PeaX6cnLJ6MzEbXPOJk5dLu2eLz\nqRlcOJe0YJFX4EDM2vim6jM/dPshp6RUJjr4yAUKLSWPuq+TPnY+sWdepPo+\ntMr2\r\n=aX98\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDorddPaAnTi1Oa3NbpX8A5Lwx7z3Sq5rM1o5PBzJl7YQIhAKZ4ra4r6aOd/e61EncP/jeo1ok8OWMy7PZMWJ9OwPdx"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.1.2_1621893123542_0.8152351039776262"},"_hasShrinkwrap":false},"6.1.3":{"name":"stone-soup","version":"6.1.3","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^3.0.0","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"33bc611b7c7a57f2060620ad36c54806f3733547","_id":"stone-soup@6.1.3","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-O2K7ZemuaGxa0k4SEevU0sOy1jDkDaP/nDpq4y4T3i4fyB8V+WHTodAKQSOQXxKsxQBQKPXvegVGz1RvelUJxA==","shasum":"4f7587d31f924a5c66f13abd86f95033140a7404","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.1.3.tgz","fileCount":14,"unpackedSize":446831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsUZ+CRA9TVsSAnZWagAAB8wP/2BEo4sDjBgJYhSLyBiD\nZPiQPymGNOoesWAvaKJNMBP/5NyQ7K5LO1dqgLBboNE5Q6Njp/w/7PHwBfLJ\nvxcDIrlYQ1CioOSaIZK7LmY/Bs7nrwuTeBRIVydAOlzwFJnJCv+1FpvqR/bT\naGOjuPTPRUSmaGhSgh72hIA9z7WF59AHRk8Oo7bK0gyDMt94tIBJQVjS7NRM\nvAJsiDh79uPBycou/ahRsiobN+0/vMXkdA4hfRJO3MsnYUPuM8bxVwp6o7+o\nQa+Z06r0i3IFZ9QKWMswwNthhrAoVPAy4OxYR6+z1Qps0tvUa583OE3YO09L\n4hNyrQH0DqYpQ3NcFB8gbmhSnj4UqneGHfXrAZlr4/jOXD2mmoMtlGnC2N5E\nkyFyFrRisPP1wW6MC5j2B/DnGddXTc7e4+uTUmgdzcxAFt4BnGTXjUnD1suB\nqta/6IGYVQjf4W/YmBf2GsikJ/5SQuykuncCq5V2twdDDWrplzhl0FJKyXfM\nid3gVWiF4dPwT9wCymFIafRi7k4kCjvxYbxGxK781AVInJfbm9NHLWGndsnY\nFR6xWL2IKMxMUM3sJNE9NqohJ6QifuZxVPkN5hY4A9Imz5Q6ICHiy35uPymN\nok27b2EWuF1w9ObyIWhtmrjkDDXnTteXeREwf9jsDNyh3kwl74a0XTUw0YBD\ndAmq\r\n=nkjN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICSjqv3eLuygbVVocmLePMNTrtvGCbY/pvxu5P4kRkzPAiAzA8d4fZCT+pG5Q8fdPZsWxeTnI+MfeS77C22+D0HVgA=="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.1.3_1622230653294_0.7803407489618264"},"_hasShrinkwrap":false},"6.1.4":{"name":"stone-soup","version":"6.1.4","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests":"mkdir -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser":"yarn clean && yarn build-tsc && yarn browserify-tests && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test.node":"yarn test","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test":"tap --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test-verbose":"tap -Rspecy --no-bail --jobs=1 build/test/universal/*.test.js build/test/node/*.test.js","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^3.0.0","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"4e244ce82c1be86ee74db14b07564196fea6d748","_id":"stone-soup@6.1.4","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-OqP/rpDAwtEIXVELJ6RluBpVK1h1oS91W9GGjXL7pUJ3e45yYvQOCBhflzATVgrO4tO69yswJIpqGswPMHIkQA==","shasum":"b9a0b9934983cc3a3b3f2c7b8fb171e95a402b22","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.1.4.tgz","fileCount":14,"unpackedSize":446831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsUeXCRA9TVsSAnZWagAAhO8P/ihgiiYlr+Wnr4OCzJ5z\nSz0USXltkGFW+nKAFaiDHDpeuQ0/H4v6yrOS5jmmVhkidalHQ14YhdI47SXg\nZDj8WhsWz1DJuU5h3a6vzyGEcBmewsJ01Zku0KQPHh0+sJGwyHkASl9JCeA/\nrhdKeMdh2aYpdzhHxtr+dDdLCzpPZbTLCCFmnHynmrGNqq3aRHwb4M4V4SnJ\nW6GfGXdfYVzYBTc1/odyaw/kebSOoBkOrUodDD1onucuELsdLbeFV/DPuEOO\nqeLJB2DWae0PYumZrqhq5cDD9bFJAnXqBXSjw23Ky0BgHbpyMcV/51gpH7fC\nRQz6zAqRAXXcEbldMDJOAsXJ+rkbZX0gCbLuvsIiqpfZebCMamGYkOXnLwiq\npbGJZPau63HXFHFWO8BndwzjAFcv4Y8zxlErNw9EL7pTAUCyydxirKaATwz/\nq1ICl3rNjQRcnu//ztgUI+dClDfcKnCuFepmQ8F/mQUDFc8WO+zrbIOGzv+J\nYEEfM7Q6KqODfHleAhxXH3JUWysZ7Noc8meNQua2P3VTheZ/FWtiq/SrDliN\n9Bv5HWmUx2ANn+4Avz2huDyqeHDdqPNCZwyfbOWogZxBkjbDEXo+6N1tHfsN\nm1RXmaqreSCFKjc56XxsN5d04eagJYnrtleZx0ZXzAGTGX/V9HZhg1Fejd3L\n9vuv\r\n=6De3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBo3gIK1VEX5+Y4IhSDzMtQN9eECDRWlrzI5Yp0VGjSdAiEAywtCIp99eJuka8Ids1r3awKbd9LiRWn2TSVY7MKh+fw="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.1.4_1622230935364_0.6072421120641924"},"_hasShrinkwrap":false},"7.0.0":{"name":"stone-soup","version":"7.0.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests-all":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-old":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js                                       build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-improved":"mkdir -p browserify-tests && browserify                                                             build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser-all":"yarn      clean && yarn build-tsc && yarn browserify-tests-all      && yarn browser-run-tests","test.browser-old":"yarn      clean && yarn build-tsc && yarn browserify-tests-old      && yarn browser-run-tests","test.browser-improved":"yarn clean && yarn build-tsc && yarn browserify-tests-improved && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test":"yarn test.node-all","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test.node-all":"tap      --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js build/test/improved/*.node.test.js","test.node-old":"tap      --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test.node-improved":"tap --timeout=120 --no-bail                                                          build/test/improved/*.node.test.js","test-verbose":"yarn test -Rspecy --jobs=1","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap             -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap               -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap     -Rspecy --no-coverage --no-bail --jobs=1 build/test/node/query-follower.node.test.js","test-storage":"tap            -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap     -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^3.0.0","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"4584c9e68730b21dcaf54c9c1e9e8ee6efb54524","_id":"stone-soup@7.0.0","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-mW7Lw7Zws3V5WG6ValSuIhrxnupMWbGZ3XB9qjicRcl+f3WHPRrh57CItXyOwLnGbZy7MeNBgZQWMUkRq5ccXA==","shasum":"f5854a57c067b45608668ed3b77f516b001782aa","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-7.0.0.tgz","fileCount":14,"unpackedSize":511720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBTzSCRA9TVsSAnZWagAACh0P/2CYuQnSUaAtKurh+Cob\nGa2nHRClgCnBadCiHfGc2Cgy9a2nMfSf1sUCVDPCCo3EV+jXt/oBi0TiXl5g\nCKwS71eiZwv+1NXQhkJ7bdIhyAKxN6LrHhLPhTVffAZXa5p8h/5PruwZHJbj\nb3NzL99DAz/g3t725DZGzW4PT4K2oOr7KsRwgDQ5VVrbSuWO/5sEgM91LNc0\nHgrZPSF8gZVceLTf5/oMJVNTXBYB9O6IydGEVCRxSbXWEGsddzvwm1e5tHG6\ncErC51Opk/z8tln5xuBRkaL573FRlnNm9mma6Ex8o824mR6UzAbe9tk3/3PA\nkXv4p6fyzgKHNaC5ixZsWqBtr0pOB4b50x40Pp+s0e0hjHGdB3mBvP3wC2CR\nEx79irqu4okDzqNo6L8hfqGxH0RQ5IlN7+YlUJUoSA+DigZqdlHV1PdQ7w45\nssz8idfi6UcXZTRFw0uZnNJRoKrXGAYQNPO8P57wO7o5bThWCg7ZLrimC3u1\njEYIvK1EFlcoDVkPt9Egkh08CgvDxSoPe7DQIEHLfXiUUPtvFkMEnAxKKCFV\nq3LrdIbw86+rrqWdlolBo0nrq0uC15fo3kL+GExlVKhQFBiLs/+Cwv1lQOVe\ntXXbpzxsGJZy/SWyyt5OXZCQmhy5D+fjPBBIO5EhtTvgKcZ6I7HkmnkqNGaE\nhvts\r\n=ZyUj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZfQaCKhwHikr3f6Wd98atR8olysWa6WHGzoOCS6O4BAIgLKN6BWNURKx9ic+YEBm2/9EiSJe+eT6ZDzhcEdSjd30="}]},"_npmUser":{"name":"sgwil","email":"gwilym@me.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_7.0.0_1627733202361_0.1995776919826835"},"_hasShrinkwrap":false,"deprecated":"use 7.0.1 instead"},"6.2.0":{"name":"stone-soup","version":"6.2.0","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","browserify-tests-all":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-old":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js                                       build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-improved":"mkdir -p browserify-tests && browserify                                                             build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","test.browser-all":"yarn      clean && yarn build-tsc && yarn browserify-tests-all      && yarn browser-run-tests","test.browser-old":"yarn      clean && yarn build-tsc && yarn browserify-tests-old      && yarn browser-run-tests","test.browser-improved":"yarn clean && yarn build-tsc && yarn browserify-tests-improved && yarn browser-run-tests","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","test":"yarn test.node-all","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","test.node-all":"tap      --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js build/test/improved/*.node.test.js","test.node-old":"tap      --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test.node-improved":"tap --timeout=120 --no-bail                                                          build/test/improved/*.node.test.js","test-verbose":"yarn test -Rspecy --jobs=1","test-coverage":"yarn test --coverage-report=lcov","watch-test":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test-crypto":"tap             -Rspecy --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap               -Rspecy --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspecy --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap     -Rspecy --no-coverage --no-bail --jobs=1 build/test/improved/query-follower.node.test.js","test-storage":"tap            -Rspecy --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap     -Rspecy --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","prepublishOnly":"yarn clean && yarn esbuild","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"^4.2.4"},"dependencies":{"chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^3.0.0","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"2d1bd2c47dfe20f3aef5d1fcd2907b985ae9a712","_id":"stone-soup@6.2.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/LWI+u17T77czhRF47bgBGdeIDUChBIKLwPD7jnQmsFGzK9hwIwolxt80GU0mNXJRQeg7pkYDnj8Zz2ZXmTy5A==","shasum":"16e13c962b54cef1e7f34207dd84d34fb3eee9c1","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-6.2.0.tgz","fileCount":14,"unpackedSize":496900,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzhluAoF+m/my+9K8GOhtpPJT63+tdvEU+UkA8XIewlgIhAIvLeVIyLRIcsoPs46Wd3IqCI1UJZhAnxtYlTmad/FtG"}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_6.2.0_1633962556028_0.04687400095103955"},"_hasShrinkwrap":false},"7.0.1":{"name":"stone-soup","version":"7.0.1","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","browserify-tests-all":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-old":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js                                       build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-improved":"mkdir -p browserify-tests && browserify                                                             build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","test":"yarn test.node-all","test.watch":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test.browser-all":"yarn      clean && yarn build-tsc && yarn browserify-tests-all      && yarn browser-run-tests","test.browser-old":"yarn      clean && yarn build-tsc && yarn browserify-tests-old      && yarn browser-run-tests","test.browser-improved":"yarn clean && yarn build-tsc && yarn browserify-tests-improved && yarn browser-run-tests","test.node-all":"tap           -Rspec    --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js build/test/improved/*.node.test.js","test.node-old":"tap           -Rspec    --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test.node-improved":"tap      -Rspec    --timeout=120 --no-bail                                                          build/test/improved/*.node.test.js","test-verbose":"yarn test -Rspec --jobs=1","test-coverage":"yarn test --coverage-report=lcov","test-crypto":"tap             -Rspec --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap               -Rspec --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspec --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap     -Rspec --no-coverage --no-bail --jobs=1 build/test/improved/query-follower.node.test.js","test-storage":"tap            -Rspec --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap     -Rspec --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'","prepublishOnly":"yarn clean && yarn tsc && yarn esbuild && yarn test"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"~4.5.4"},"dependencies":{"@noble/ed25519":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^3.0.0","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"6c13e330796f344594512ac320d0468f98b7cac1","_id":"stone-soup@7.0.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Mz4JASDkQtlTonzujGh4SPqLQkxa/VtYcYAYL2FkbsmQKiBYzImrL0Qud9bu5ORq0r6ih8ICdF1HQfIDtfJa+g==","shasum":"4e5ce5b82eadbb86938752dbbe0684919b753807","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-7.0.1.tgz","fileCount":14,"unpackedSize":566122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2ct6CRA9TVsSAnZWagAAcQ4P/1XSpOlxxy/pfxprF59+\nj5jwdxBZpBZHPjk3OvdDbfYk5mnPrPScpyOdRwXF6YMufJe6zj5yaDSqdb74\nm/xKebjosRLqrvcb3fSLUSD2LWtMqiDkLQCTf3FESVzNSC46Kq3wZGVEygla\nUU6tbGu+j4VrXs9DzP0XT7/NzcGCUB7UY42/E0k7Vx3VhQAuafXcE65sCsPL\nKwJ767qj0OAC5gxbkR2RmZ1PqLGu5dw6rvJ91fbc8dyzha/SR3vdmvx07Tmc\nXkfn10BtxQjoVsyScpj8sx5v3Z5Z3L9Sd0K4DqqWm/qYwNK/0h2zYb0oAq4P\nxoz/kwR5jxcKXpRgg7EyJ72+wikk6kngclNOvgKkha54u4sf6aeafoPfXKDU\nu4SA3gykyIhw0BrT8dHw/54PwbltElW6YCgDxy5lc3GngCSRA7T2Gr9/UN1v\n5hubgXYMloJAqZRT3jThjMmnY63omUTnHjPfZFTiQI1E2BxtqTfXa7KulPKL\n03/7khR2OyMrQrQuEc+AJLe2sTUtiQ8/x6MXvWERo06jr9QmVlY2XhHdwG2t\n7ZQdlThXOMWbR6mtcU5eFvy7yJLyLGxjOU5RPaHVE6ItDJgZDB5kyOaOakL5\ntTgw/j3Kuen9LQBqqQoH/xta5BjGOxh1FLThVhS+vqY6ml80VsYFu8zaWeKl\ngOcS\r\n=fhxt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0AKGsFQeTZeF2tuaks/dmPW3SVfZijFF4WDUP/orJOgIgFf5IPmFUS5baZlLv02GM0Kz1fGQ5d3CutC+FDIo2e6U="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_7.0.1_1641663354209_0.6608856886233827"},"_hasShrinkwrap":false},"7.0.2":{"name":"stone-soup","version":"7.0.2","description":"**WIP** April 2021","repository":"","author":{"name":"Cinnamon","email":"cinnamon_bun_github@fastmail.com"},"homepage":"https://github.com/earthstar-project/stone-soup","license":"AGPL-3.0","main":"dist/earthstar.cjs","module":"dist/earthstar.js","types":"dist/types/universal.d.ts","browser":{"./build/index.js":"./build/index.browser.js","./build/crypto/crypto-driver-node.js":false,"tap":"tape"},"tap":{"nyc-arg":["--exclude=build/test/*/*.js"]},"exports":{".":{"types":"./dist/types/universal.d.ts","node":{"require":"./dist/earthstar.cjs","import":"./dist/earthstar.mjs"},"default":"./dist/earthstar.js"},"./browser":{"types":"./dist/types/browser.d.ts","default":"./dist/browser/browser.js"},"./node":{"types":"./dist/types/node.d.ts","require":"./dist/node/node.cjs","default":"./dist/node/node.mjs"}},"scripts":{"clean":"rm -rf build coverage .nyc_output browserify-tests node browser dist","esbuild":"rm -rf dist && node ./scripts/build.mjs && yarn build-types","build-types":"dts-bundle-generator --config dts-bundle.config.json","build-tsc":"tsc","clean-build":"yarn clean && yarn build-tsc","clean-build-test":"yarn clean && yarn build-tsc && yarn test","print-platform-support":"yarn clean && yarn build-tsc && node build/print-platform-support.js","start":"node build/example-app.js","benchmark.browser":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && yarn browserify-benchmark && yarn browser-run-benchmark | tee benchmark-results/benchmark.browser.txt","benchmark.node":"yarn clean && yarn build-tsc && mkdir -p benchmark-results && node --expose-gc build/test/node/*.benchmark.js | tee benchmark-results/benchmark.node.txt","browserify-tests-all":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-old":"mkdir      -p browserify-tests && browserify build/test/universal/*.test.js build/test/browser/*.test.js                                       build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browserify-tests-improved":"mkdir -p browserify-tests && browserify                                                             build/test/improved/*.browser.test.js build/test/browser-run-exit.js > browserify-tests/bundle.test.js","browser-run-tests":"cat browserify-tests/bundle.test.js | browser-run | tap-spec","browserify-benchmark":"mkdir -p browserify-tests && browserify build/test/browser/*.benchmark.js > browserify-tests/bundle.benchmark.js","browser-run-benchmark":"cat browserify-tests/bundle.benchmark.js | browser-run","test":"yarn test.node-all","test.watch":"onchange -i src/*.ts src/test/*.ts -- yarn clean-build-test","test.browser-all":"yarn      clean && yarn build-tsc && yarn browserify-tests-all      && yarn browser-run-tests","test.browser-old":"yarn      clean && yarn build-tsc && yarn browserify-tests-old      && yarn browser-run-tests","test.browser-improved":"yarn clean && yarn build-tsc && yarn browserify-tests-improved && yarn browser-run-tests","test.node-all":"tap           -Rspec    --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js build/test/improved/*.node.test.js","test.node-old":"tap           -Rspec    --timeout=120 --no-bail build/test/universal/*.test.js build/test/node/*.test.js","test.node-improved":"tap      -Rspec    --timeout=120 --no-bail                                                          build/test/improved/*.node.test.js","test-verbose":"yarn test -Rspec --jobs=1","test-coverage":"yarn test --coverage-report=lcov","test-crypto":"tap             -Rspec --no-bail --jobs=1 build/test/node/crypto.node.test.js","test-lock":"tap               -Rspec --no-bail --jobs=1 build/test/universal/lock.test.js","test-peer-client-server":"tap -Rspec --no-bail --jobs=1 build/test/node/peer-client-server.node.test.js","test-query-follower":"tap     -Rspec --no-coverage --no-bail --jobs=1 build/test/improved/query-follower.node.test.js","test-storage":"tap            -Rspec --no-bail --jobs=1 build/test/node/storage-async.node.test.js","test-storage-driver":"tap     -Rspec --no-bail --jobs=1 build/test/node/storage-driver-async.node.test.js","depchart-main":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --rankdir LR -o depchart/depchart-main --node_modules omit","depchart-no-types":"mkdir -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-no-types --node_modules omit","depchart-deps":"mkdir     -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` `find src | grep types.ts` --rankdir LR -o depchart/depchart-deps --node_modules integrated","depchart-loose":"mkdir    -p depchart && depchart `find src | grep .ts` --exclude src/print-platform-support.ts src/decls.d.ts src/index.ts src/index.browser.ts src/shims/*.ts src/entries/*.ts `find src | grep '/test/'` `find src | grep '/util/'` `find src | grep '/experimental/'` --loose --rankdir LR -o depchart/depchart-loose --node_modules omit","depchart":"yarn depchart-main & yarn depchart-deps & yarn depchart-loose & yarn depchart-no-types && echo 'done'","prepublishOnly":"yarn clean && yarn tsc && yarn esbuild && yarn test"},"resolutions":{"minimist":"^1.2.5"},"devDependencies":{"@earthstar-project/mini-rpc":"^2.1.0","@types/browser-or-node":"^1.3.0","@types/node":"^14.14.43","@types/tap":"^14.10.2","@types/tape":"^4.13.0","browser-run":"^10.1.0","browserify":"^17.0.0","depchart":"^1.2.0","dts-bundle-generator":"^5.9.0","esbuild":"^0.11.18","onchange":"^7.1.0","tap":"^14.11.0","tap-spec":"^5.0.0","tape":"^5.2.2","typescript":"~4.5.4"},"dependencies":{"@noble/ed25519":"^1.3.0","chalk":"^4.1.1","chloride":"^2.4.1","concurrency-friends":"^5.0.1","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","rfc4648":"^1.4.0","rfdc":"^1.2.0","sha256-uint8array":"^0.10.1","superbus":"^3.0.0","superbus-map":"^2.0.3","tslib":"^2.2.0","tweetnacl":"^1.0.3"},"gitHead":"04fb9e90a062f1ada01bb2791c20f2891408ea25","_id":"stone-soup@7.0.2","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-Uqb/1Y40/Idl+4XnZqCHLCK3Eq1Y92Jk/6uRxmU8pfYt2SXWd2JUdOACe3z/ABX+cSN53a3cJft6cNs6k71sqg==","shasum":"17f09169b3007c95556ab8f6b8e05c304687da18","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-7.0.2.tgz","fileCount":14,"unpackedSize":566522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2mJ2CRA9TVsSAnZWagAAGjYP/A5OI+GrRrUuxTmTg/+q\nl/KF0cc/o3ZkXD/siN0M00Zvj8I0v2XuDrYKJ+/sR4uZ0A0D1tmNt1neYJ7K\n1eZN5xUesu3JtJXaTMmapGeCUwv6mIr4ApiRZS6QBT3N9v98TM2Bxa3RXMza\n8H66ZBs3/3UozqePR5NWFx3PjTOCfk+mjjFz+EYqrxJKxlrD/EbnVmiy47cP\nkM9Rf1KK6ndVseM46TcahaYkc2F7F4cjQFLzJpU4Tz18t8dyaYtSwPm5YT9T\n9Gkp/zYEvVKT7pJXr6/FDOnfuM8xUP7f2pXxHelpEhtB2f1VJE+ADY+OT2Cv\nqDkVaTAw6SdgXxFnVgt1GBktKfJ7yx/URm3aaVXAHYvIN3aTHos36kz5K88u\nxrYbz7pzbHTo2pFWqfaHyx5C3SrYUfiWLJbRjmAE2l2/Uuyggrdd/PValsl1\nNrZD230Gy+bm5hQ+dSa3Q8yyuwvIf4VS/t91+PXQENjl3jihZ3uUCvVoqsKv\ntfL8v7TtrKHZmdbZxkSvWK7CjJV69UxP1Wc1rmQsCYrFerm9E0zHjfqk3gMs\nml4pkPXyHCcfjh23iCuYN/RfXCoP+uBxxtHfC4Qbx8SNrVI4LYqCm0rC433Z\ndPBM3THR4kocp4JizGuN6K6p2VkgEJQlEipLraFMcmgsmAI8aYQxkWDwh+mr\n7k2u\r\n=S99P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7+Ray9gVS6BaTV78cHi1ZLoWGdba+H8XqHeAyxTyMZQIgC3lF1kGImzKsuMijUET+XvbOlcQAW8N+BrX/DXygjJ8="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_7.0.2_1641702005829_0.738424018653723"},"_hasShrinkwrap":false},"8.0.0-beta.0":{"module":"./esm/mod.js","main":"./umd/mod.js","types":"./types/mod.d.ts","name":"stone-soup","description":"A distributed, syncable key-value database","license":"LGPL-3.0-only","repository":{"type":"git","url":"git+https://github.com/earthstar-project/stone-soup.git"},"bugs":{"url":"https://github.com/earthstar-project/stone-soup/issues"},"exports":{".":{"import":"./esm/mod.js","require":"./umd/mod.js","types":"./types/mod.d.ts"},"./src/entries/node.js":{"import":"./esm/src/entries/node.js","require":"./umd/src/entries/node.js","types":"./types/src/entries/node.d.ts"}},"scripts":{"test":"node test_runner.js"},"dependencies":{"@noble/ed25519":"1.4.0","chalk":"4.1.2","chloride":"2.4.1","concurrency-friends":"5.2.0","dbly-linked-list":"0.3.5","fast-deep-equal":"3.1.3","fast-json-stable-stringify":"2.1.0","rfc4648":"1.5.0","sha256-uint8array":"0.10.3"},"devDependencies":{"@types/node":"16.11.1","@deno/shim-deno-test":"~0.2.0","@deno/sham-weakref":"~0.1.0","@types/chloride":"2.4.0"},"version":"8.0.0-beta.0","gitHead":"0798e15d95bc0cbf422a6a3dded2de295d29b82a","readme":"ERROR: No README data found!","homepage":"https://github.com/earthstar-project/stone-soup#readme","_id":"stone-soup@8.0.0-beta.0","_nodeVersion":"16.13.1","_npmVersion":"8.3.0","dist":{"integrity":"sha512-mR4dOQWGly6GDCvtDP95WwxLOPcaNFcS4XR1YNtXUq47zEtquUB92jNRHsKV5Kr4ogPDF3NSIqd0fbDLOjo3hQ==","shasum":"81dd5d62aa99c2c24c8fc4c66b56bf1b74d2aa67","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-8.0.0-beta.0.tgz","fileCount":141,"unpackedSize":529485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4IEiCRA9TVsSAnZWagAAHiAQAJ9dJrN8lMyvZdbKLrCH\npuE+pZWg7QnyKJcCpKbnUqfRBn7MQpmQXvo7aqj6BrVaUrattOVecU/FPrKY\nG2GFEybf5Dr0t/fr1y1yI+bC8wnB3wKcbHCBpyovVDYCjhmO1471nsWtrsm7\n5oYEJ2C6GCsT7XEWi5uNyN/VB5qZDUGv+fLYXqAJqxvx4FnFyP4IScNysW2q\nQDRzuLiI8MWwDsBASaU7RuJDH07KeFY7VDmuoGKhnfcSXh7kW23PpyBUjfRl\nf73H4Mm9N0nL3UxNeLaPOfyWBbI7GOrMBfKpA4Ekur5VUZNgexuaOnhoD7OQ\nZdVC6IRftsZISB2e4+ytb9IcCrgHf9GawH4Yrt21kUp+m5Jk707KOSEu3I3F\ngO8ZNonQsN9xZ+hbpbAFPzwix3Gc9/3q4uOjps6+M6ChJW9IJ4e2iqT26Cmu\n4l1Z7P7bjBJ5V00v5HxzoamrTkEA+yuX4ab+yu7v9yEF8pCXr77enxczyAij\nr83Oh+MyAKNluN+WzvCjD6/W9UsPe2mZ1lgYT9VtiZkYN/EjXHNDOfFenwov\nz2gtJy2J1EDAclx3XNg1LjCdXbaxoR3XaAxBSa50MR6IuuXzOnE/Ndxf7uI0\nKsA7Ev0MvlnXLAybuFc71IEPRslngOtnezASrqhkkfK6dtg4MgVPVP0LhnCx\nupjy\r\n=kDUq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBIPMNesvcqCjGTE7JaTnuqZkLFpH9Io/ITUygAsvz20AiEAh6xZT5gVpATLCUIwtorJFj5zX0uhd416yqpiv8MbcDs="}]},"_npmUser":{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_8.0.0-beta.0_1642103074438_0.9589500388918639"},"_hasShrinkwrap":false},"8.0.0":{"module":"./esm/mod.js","main":"./umd/mod.js","types":"./types/mod.d.ts","name":"stone-soup","version":"8.0.0","description":"A distributed, syncable key-value database","license":"LGPL-3.0","repository":{"type":"git","url":"git+https://github.com/earthstar-project/stone-soup.git"},"bugs":{"url":"https://github.com/earthstar-project/stone-soup/issues"},"exports":{".":{"import":"./esm/mod.js","require":"./umd/mod.js","types":"./types/mod.d.ts"},"./src/entries/node.js":{"import":"./esm/src/entries/node.js","require":"./umd/src/entries/node.js","types":"./types/src/entries/node.d.ts"}},"scripts":{"test":"node test_runner.js"},"dependencies":{"@noble/ed25519":"1.4.0","chalk":"4.1.2","chloride":"2.4.1","concurrency-friends":"5.2.0","dbly-linked-list":"0.3.5","fast-deep-equal":"3.1.3","fast-json-stable-stringify":"2.1.0","rfc4648":"1.5.0","sha256-uint8array":"0.10.3"},"devDependencies":{"@types/node":"16.11.1","@deno/shim-deno-test":"~0.2.0","@deno/sham-weakref":"~0.1.0","@types/chloride":"2.4.0"},"homepage":"https://github.com/earthstar-project/stone-soup#readme","_id":"stone-soup@8.0.0","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-NVquXCvZP51cthu7E1wPLxN6D3fALA2f46o/Fw7JC45sOs488nUh1LO5+3YC5Jr5pjPx0HwjxQW3XbO8GmM79A==","shasum":"30b7b869815bf36429ae9709cb3e35cf9b755687","tarball":"https://registry.npmjs.org/stone-soup/-/stone-soup-8.0.0.tgz","fileCount":143,"unpackedSize":554067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6oxiCRA9TVsSAnZWagAANXQQAJub6VhAjg8PnHrvYtpO\nNC5wcA/WllNQIv6tUe8Ov7ka08qSH4yXzkg5JfvzLffMNLFBbhSHjyi+Hhr/\nicavSdreTDQoyP8t1+HgMLtMJtpQ+75CZUbz4+JNoIIzp1HXkH6LNvcgnS7N\nLva0+PbIKeVXJ272f7ftPW47ImX28v+LSOCfzd/dCyJwEMOxl3AeXKMEZaRc\nrZH4DxiHCRZ1pQT0Dsu9K//oKlrkTyIRhz6FGimqjkkozAqhakluaL0fLK+t\nUrOgvBFnU2yiJCsrAMMTluKPvD9ZMyMypH90FXlmoP8YGtdpeO41MHbjynGb\nde7fy6nc5DyZC+6FzokOW+dXcEvhbZS9bqbcPecUQPmUCWzYZZkcdTc+fLPS\n6n/XLHZXUF8NE/muBlBr6DtBp9k9BUNAToyY1hS9UlkYlFEnJNfBdYMHeU9C\nhscbSzmj3FIHpr2k/FDJkMxMBAYQPvqcMRkfI8cdWkgKj1lX3p1LuyBH/Ugp\nI3PQIiORFQBhQ84C9xzqNfZjy0fnzzOeczYPeKEShcaZt4vwLsJ9nu9/w23Q\nm83YlbGwQdfkyL60edLGRY5TC3bbAJwvBOEnDVZ+HAHro7iWrIMgqkDrMPjp\neR2PhRTVTqe9ZX6EwMFGigm61oKcsFa6qnuiJtHsDN2kUldsT+9qRQSbYTzB\n2433\r\n=Wjut\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/MFAxH/7betDoLgAeP4hMM7QfvWNvsKKDnYqq6OmKhgIhALuk1Hr3aO1wSd6t6LUzRpMBHUxoxH2v2d3+8zmcEfq5"}]},"_npmUser":{"name":"sgwil","email":"gwilym@me.com"},"directories":{},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stone-soup_8.0.0_1642761314290_0.1629993916825565"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-23T03:42:06.240Z","1.0.0":"2021-04-23T03:42:06.440Z","modified":"2022-05-18T18:27:14.198Z","2.0.0":"2021-04-23T04:24:16.544Z","2.0.1":"2021-04-23T17:01:39.493Z","2.1.0":"2021-04-23T21:07:12.588Z","2.1.1":"2021-04-23T21:55:54.056Z","2.1.2":"2021-04-26T20:30:20.516Z","2.1.3":"2021-04-27T01:58:41.923Z","2.1.4":"2021-04-28T17:47:49.690Z","3.0.0":"2021-04-29T04:49:01.713Z","4.0.0-beta.0":"2021-04-29T18:32:27.265Z","4.1.0-beta.0":"2021-04-30T00:22:44.036Z","4.1.0":"2021-04-30T00:24:46.836Z","5.0.0":"2021-05-02T23:42:46.363Z","5.0.1":"2021-05-03T17:52:52.679Z","5.0.2":"2021-05-03T18:49:34.999Z","5.1.0":"2021-05-13T19:13:04.401Z","5.1.1":"2021-05-13T19:16:17.953Z","5.1.2":"2021-05-17T18:57:50.462Z","5.1.3":"2021-05-18T23:31:51.641Z","6.0.0":"2021-05-20T04:20:48.135Z","6.1.0":"2021-05-20T04:46:47.047Z","6.1.1":"2021-05-21T22:50:30.226Z","6.1.2":"2021-05-24T21:52:03.753Z","6.1.3":"2021-05-28T19:37:33.663Z","6.1.4":"2021-05-28T19:42:15.547Z","7.0.0":"2021-07-31T12:06:42.746Z","6.2.0":"2021-10-11T14:29:16.146Z","7.0.1":"2022-01-08T17:35:54.440Z","7.0.2":"2022-01-09T04:20:06.097Z","8.0.0-beta.0":"2022-01-13T19:44:34.879Z","8.0.0":"2022-01-21T10:35:14.420Z"},"maintainers":[{"name":"cinnamon_npm","email":"cinnamon_npm@fastmail.com"},{"name":"rangermauve","email":"rangermauve@hotmail.com"},{"name":"sgwil","email":"gwilym@me.com"}],"homepage":"https://github.com/earthstar-project/stone-soup#readme","license":"LGPL-3.0","readme":"# Stone Soup - Earthstar v2\n\nThis is a re-implementation of [Earthstar](https://github.com/earthstar-project/earthstar), maintaining compatability with the data format (see the specification) but changing the Typescript API and the networking protocol.\n\n## Usage\n\nTo use in Deno, add the following:\n\n```ts\nimport * as Earthstar from \"https://setthisup.com/earthstar/mod.ts\"\n```;\n\nTo use with Node or apps built with NPM dependencies:\n\n`npm i stone-soup`\n\nAnd then import in your code:\n\n```ts\nimport * as Earthstar from \"stone-soup\";\n```\n\n### Platform-specific drivers\n\nThere are two parts of stone-soup which are swappable to support different platforms or backends: `ICryptoDriver` and `IStorageDriverAsync`.  Everything else should work on all platforms.\n\nCrypto drivers:\n* `CryptoDriverChloride` - only in browser, Node\n* `CryptoDriverNode` - only in Node\n* `CryptoDriverNoble` - universal\n\nStorage drivers:\n* `StorageDriverAsyncMemory` - univeral\n* `StorageDriverLocalStorage` - browser \n* `StorageDriverIndexedDB` - browser\n* `StorageDriverSqlite` - Node, Deno (⏳ coming soon)\n\nUsers of this library have to decide which of these drivers to import and use in their app. Hopefully your app is using some build system that does tree-shaking and will discard the unused drivers.\n\n## Development\n\n### Setup\n\nYou will need Deno installed. [Instructions for installation can be found here](https://deno.land/#installation). You may also want type-checking and linting from Deno for your IDE, which you can get with extensions [like this one for VSCode](https://deno.land/manual@v1.17.2/vscode_deno).\n\nTo check that you've got everything set up correctly:\n\n`make example`\n\nThis will run the example script at `example-app.ts`, and you will see a lot of colourful log messages from the app.\n\n### Scripts\n\nScripts are run with the `make` command.\n\n- `make test` - Run all tests\n- `make test-watch` - Run all tests in watch mode\n- `make fmt` - Format all code in the codebase\n- `make npm` - Create a NPM package in `npm` and run tests against it (requires Node v14 or v16 to be installed).\n- `make bundle` - Create a bundled browser script at `earthstar.bundle.js`\n- `make depchart` - Regenerate the dependency chart images\n- `make coverage` - Generate code test coverage statistics\n- `make clean` - Delete generated files\n\n### Orientation\n\n- The entry for the package can be found at `mod.ts`.\n- Most external dependencies can be found in `deps.ts`. All other files import external dependencies from this file.\n- Script definitions can be found in `Makefile`.\n- Tests are all in `src/test/`\n- The script for building the NPM package can be found in `scripts/build_npm.ts`\n\n### Uint8Arrays and Buffers\n\nWe use Uint8Arrays throughout the code to maximize platform support. Some of the node-specific drivers use Buffers internally but the Buffers are converted to Uint8Arrays before leaving those drivers.\n\nFor convenience, variables that hold Uint8Arrays are called \"bytes\", like `bytesToHash` instead of `uint8ArrayToHash`.\n\n`util/bytes.ts` has a bunch of helper code to do common operations on Uint8Arrays and to convert them back and forth to strings and to Buffers.\n\n### Platform-specific tests\n\nDrivers are tested against the runtimes they're intended for. When tests are run, they pull the correct scenarios from 'src/test/test-scenarios.ts', where the current runtime is inferred during runtime.\n\n### Classes\n\nThe `IStorageAsync` is the main star of the show.  Classes to the right are used internally for its implementation.  Classes to the left stack on top of an `IStorageAsync` to do extra things to it (subscribe to changes, cache data, etc).\n\nEach `IStorageAsync` holds the Docs for one Workspace.\n\n![](classes.png)\n\nNames starting with `I` are interfaces; there are one or multiple actual classes that implement those interfaces.\n\nThe orange classes are \"drivers\" which have multiple implementations to choose from, for different platforms (node, browser, etc).\n\nBlue arrows show which functions call each other.\n\nThick black arrows show which classes have pointers to other classes when they're running.\n\n### Source code dependency chart\n\nA --> B means \"file A imports file B\".\n\nFor readability this hides `/test/` and `/util/` and `*-types.ts`.\n\n![](depchart/depchart-no-types.png)\n\nAnd again with 3rd party dependencies as brown boxes with dotted lines, and including `*-types.ts`\n\n![](depchart/depchart-deps.png)\n\nRun `yarn depchart` to regenerate this. You'll need graphviz installed.\n\n### Publishing to NPM\n\n1. Run `make VERSION=\"version.number.here\" npm`, where `version.number.here` is the desired version number for the package.\n2. `cd npm`\n3. `npm publish`\n\n## Changes from Earthstar v1\n\n### Splitting `IStorage` into `Storage` and `StorageDriver` classes\n\nThink of this as `IStorageNiceAPIFullOfComplexity` and `IStorageSimpleLowLevelDriver`.\n\nI want to make it easier to add new kinds of storage so I'm splitting IStorage into two parts:\n\nThe Storage does:\n* the complex annoying stuff we only want to write once\n* `set():` sign and add a document\n* `ingest():` validate and accept a document from the outside\n* user-friendly helper functions, getters, setters\n* an event bus that other things can subscribe to, like QueryFollowers\n\nThe StorageDriver does:\n* simple stuff, so we can make lots of drivers\n* query for documents (this is actually pretty complicated)\n* maintain indexes for querying (hopefully provided by the underlying storage technology)\n* simple upsert of a document with no smartness\n\nPossibly even you can have multiple Storages for one Driver, for example when you're using multiple tabs with indexedDb or localStorage.\n\n### \"Reliable indexing / streaming\"\n\nThis shows an implementation of the \"reliable indexing\" idea discussed in [this issue](https://github.com/earthstar-project/earthstar/issues/66).\n\n#### The problem\n\nWe have livestreaming now, over the network and also to local subscribers, all based on `onWrite` events.\n\nIf you miss some events, you can't recover -- you have to do a full batch download of every document.\n\nEvents also don't tell you what was overwritten, which you might need to know to update a Layer or index.\n\n#### The solution: `localIndex`\n\nEach Storage keeps track of the order that it receives documents, and assignes each doc a `localIndex` value which starts at 1 and increments from there with every newly written doc.\n\nThis puts the documents in a nice stable linear order that can be used to reliably stream, and resume streaming, from the Storage.\n\nWhen we get a new version of a document, it gets a new `localIndex` and goes at the end of the sequence, and the old version vanishes, leaving a gap in the sequence.  It's ok that there are gaps.\n\nThe `localIndex` is particular to a certain IStorage.  It's kept in the `Doc` object but it's not really part of it; it's not included in the signature.  It's this IStorage's metadata about that document.  When syncing, it's sent as one of the \"extra fields\" [(newly added to the specification)](https://earthstar-docs.netlify.app/docs/reference/earthstar-specification/#extra-fields-for-syncing), observed by the receiving peer, then discarded and overwritten with the receiving peer's own latest `localIndex` number.\n\n#### Use cases\n\n1. Streaming sync between peers, which can be interrupted and resumed\n1. Layers and indexes that use a QueryFollower to subscribe to changes in a Storage.  These might store their indexes in localStorage, for example, and would therefore want to resume indexing instead of starting over from scratch.\n1. React components that need to know when to re-render\n\nFor use cases where the listener will never have any downtime, they don't really need to be able to resume, they can just listen for events from the Storage instead and it may be more efficient.  For example a React component could listen for events about a particular document instead of making a whole QueryFollower that has to go through every single change to find changes to that particular document.\n\n#### Properties of the `localIndex` sequence\n\nThe docs, sorted by `localIndex` on a particular peer, have these properties:\n\n**Properties**\n\n1. The docs are in a stable order that does not change, except:\n1. Newly added or changed docs go at the end, increasing the highest `localIndex` by 1.\n1. When a doc is updated (same author and same path, but newer timestamp), we discard the old version.  So we leave a gap in the sequence where the old verison used to be, and the new version goes on the end of the sequence.\n1. The first doc has a `localIndex` of zero, unless it was later changed, in which case there will be a gap at zero.\n\nWhy do all this?  The goal is to be able to catch up to changes since the last time we looked at a Storage.  We can do that by remembering the highest `localIndex` we saw last time, and now getting all the docs later than that in the sequence.  We always read this sequence from old to new (in increasing order of `localIndex`.\n\nThere are not really any other nice properties about this sequence:\n\n**Downsides**\n\n1. The `localIndex` order is not sorted by `path`, `timestamp`, `author`, or any other useful property.  The order is jumbled because docs can be received in any order during a sync, perhaps with multiple other peers simultaneously, perhaps some using Sync Filters to only get some docs...\n1. The order is different on every peer (that's why it's \"local\").\n1. The history docs for a certain path will be in a jumbled order in the `localIndex` sequence.  The Latest doc for a path can be before or after the other history docs.  User of QueryFollowers will need some bookeeping to remember which version is the Latest for each path, if they care (e.g. if it's being used as an index and not just a sync mechanism between peers).\n1. When a doc is modified and the old one is deleted, leaving a gap, you do not get notified about the gap.  There is no pointer back to the gap, or anything.  Users of QueryFollowers are expected to have some kind of index so they can notice that the new doc overwrites the old one, and delete the old one.\n1. When an ephemeral doc expires, it leaves a gap in the sequence but nothing is added to the end of the sequence.  Users of QueryFollowers are expected to pay attention to expiration dates and delete ephemeral docs themselves.  We may also add an event on the Storage when a doc expires, but you could miss this event if you were not listening at that moment, so you'll still have to check for your own expired docs from time to time.\n1. QueryFollowers should always progress in the direction of increasing `localIndex`.  (They can start at 0, or the latest number, or anywhere in between).  This makes it simple to keep track of where to resume next time.  However this means we always process the oldest-received docs first, but the user probably cares more about the recently-received docs.\n    * It would be possible with fancier bookeeping to make QueryFollowers that track which intervals of the sequence they've visited, so they can work from newest-to-oldest.  But sometimes the oldest-received docs are the most important (like usernames)...\n\n#### Querying by `localIndex`\n\nThis lets you easily resume where you left off.  You can get batches of N docs at a time if you want, using the `limit` option.\n\n```ts\nstorage.getDocsSinceLocalIndex(\n    startAt: LocalIndex,\n    limit?: number): Doc[];\n```\n\nThis is also how you tell a QueryFollower where to start in the sequence.  QueryFollowers ignore the `limit` property though.\n\n(You can also still look up documents by path in the usual old way.)\n\n### QueryFollowers: Reliable streaming locally, to subscribers or indexes\n\nThe old `onWrite` events are gone.  Now, there's now a new way to subscribe to a Storage: with a `QueryFollower`.  A query follower is like a pointer that moves along the sequence of documents, in order by `localIndex`, running a callback on each one, if it matches the given query.\n\nThis is a Kafka or Kappa-db style architecture.\n\nYou could use this to build an index or Layer that incrementally digests the content of an IStorage without ever missing anything, even if it only runs occasionally.  It just resumes from the last `localIndex` it saw, and proceeds from there.\n\nCurrently QueryFollowers are always blocking -- they hold up the entire Storage until they catch up, and when a new doc is ingested everything waits until the QueryFollowers have finished running.\n\nA QueryFollower has one async callback that it runs on each doc in sequence.  It never allows that callback to overlap with itself, e.g. it waits to finish one doc before moving along to the next.\n\nAn IStorage may have many QueryFollowers.  They will run in parallel with each other, while the IStorage waits for them all to finish.\n\n### Starting query followers at the beginning or the end\n\nYou can start a QueryFollower anywhere in the sequence: at the beginning (good for indexes and Layers), or at the current most recent document (good for live syncing new changes).\n\nYou do this by setting the `startAt: {localIndex: 123}` property of the query.\n\n### Reliable streaming over the network, when syncing\n\n(Not implemented in this code yet)\n\nWhen we send docs over the network we will send the `localIndex` to help the other side track where they are in our own sequence.  The other side will then discard the property and put their own `localIndex` on the document when they store it.\n\nPeers will remember, for each other peer, which is the latest `localIndex` they've seen from that peer, so they can resume syncing from there.\n\nThis is similar to how append-only logs are synced in Scuttlebutt and Hyper, except our logs have gaps.\n\n### Slightly different querying\n\nQuerying has been made more organized -- see the Query type in `types.ts`.  It looks a bit more like an SQL query but the pieces are written in the order they actually happen, so it's easier to understand.\n\nThe order is:\n* history (all or latest only)\n* orderBy\n* startAt (continue from a certain point)\n* filter - the same options, timestamp, pathStartswith, etc etc\n* limit\n\nAlso, the `cleanUpQuery` function is fancier and will also figure out if the query will match `all`, `some`, or `nothing` documents.  This helps with optimizations elsewhere.\n\n## Problems left to solve\n\n* Ephemeral documents disappear without leaving a trace, do we need events for that?\n* An IStorage might significantly change or start over, by deleting most of its local documents and choosing a different sync query.  Then we'd need to tell subscribers and peers that we're effectively a different IStorage now.\n  * localIndex could be a tuple `[generation, localIndex]` where generation is an integer that increments on each big change like that\n  * or give each IStorage a UUID which gets randomly changed when big changes happen.  This would be helpful for other reasons too (to prevent echoing back documents to the storage that just gave them back to us, we need to track who gave them to us)\n* Syncing by `localIndex` doesn't work very well when you also have a sync query, because you have to scan the entire sequence to find the couple of docs you care about.  We probably still want another way of efficient syncing that goes in path order and uses hashing in some clever way, sort of like a Merkle tree but not.\n\n## Other small improvements\n\n* The `Document` type is now named `Doc` to avoid collision with an existing built-in Typescript type","readmeFilename":"README.md","description":"A distributed, syncable key-value database","repository":{"type":"git","url":"git+https://github.com/earthstar-project/stone-soup.git"},"bugs":{"url":"https://github.com/earthstar-project/stone-soup/issues"}}