├── .gitignore ├── index.js ├── input.js ├── package-lock.json ├── package.json └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | *.swp 3 | .DS_Store 4 | style.css 5 | public/stylesheets/style.css 6 | fake/ 7 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var hyperdb = require("hyperdb") 2 | var discovery = require("discovery-swarm") 3 | var swarmDefaults = require("dat-swarm-defaults") 4 | var readInput = require("./input.js") 5 | var minimist = require("minimist") 6 | 7 | var args = minimist(process.argv.slice(2)) 8 | 9 | if (!args.db) { 10 | console.error("error: need --db flag!\nexamples:\n\tnode index.js --db \n\tnode index.js --db my.db") 11 | return 12 | } 13 | 14 | var disableAutoAuth = args.noautoauth ? true : false 15 | console.log("auto authorization is:", disableAutoAuth ? "off" : "on") 16 | 17 | // check if args.key was provided in the cli using --key 18 | var db = args.key ? 19 | // join an existing hyperdb where args.key comes from providing index.js with --key 20 | hyperdb(args.db, args.key, { valueEncoding: "utf-8", reduce: (a, b) => a }) : 21 | // or create a new original hyperdb, by not specifying a key 22 | hyperdb(args.db, { valueEncoding: "utf-8", reduce: (a, b) => a }) 23 | 24 | db.on("ready", function() { 25 | console.log("db ready!\ndb key is\n\t", db.key.toString("hex")) 26 | console.log("local key is\n\t", db.local.key.toString("hex")) 27 | readInput(db) 28 | var swarm = setupSwarm(db) 29 | }) 30 | 31 | // join a discovery swarm, connecting this hyperdb instance with others over DHT & DNS 32 | // this step is essential to have your database changes propagate between your db and that of others 33 | function setupSwarm(db) { 34 | var dbstr = db.key.toString("hex") 35 | var swarm = discovery(swarmDefaults({ 36 | id: dbstr, 37 | stream: function(peer) { 38 | return db.replicate({ // TODO: figure out what this truly does 39 | live: true, 40 | userData: db.local.key 41 | }) 42 | } 43 | })) 44 | console.log("looking for peers using swarm id\n\t", dbstr) 45 | 46 | swarm.join(dbstr) 47 | 48 | // emitted when a new peer joins 49 | swarm.on("connection", (peer) => { 50 | if (disableAutoAuth) { 51 | return 52 | } 53 | // initiate auto-authorization: 54 | // use the local key from the peer, stored in their userData, to authenticate them automatically 55 | // (thanks substack && JimmyBoh https://github.com/karissa/hyperdiscovery/pull/12#pullrequestreview-95597621 ) 56 | if (!peer.remoteUserData) { 57 | console.log("peer missing user data") 58 | return 59 | } 60 | try { var remotePeerKey = Buffer.from(peer.remoteUserData) } 61 | catch (err) { console.error(err); return } 62 | 63 | db.authorized(remotePeerKey, function (err, auth) { 64 | console.log(remotePeerKey.toString("hex"), "authorized? " + auth) 65 | if (err) return console.log(err) 66 | if (!auth) db.authorize(remotePeerKey, function (err) { 67 | if (err) return console.log(err) 68 | console.log(remotePeerKey.toString("hex"), "was just authorized!") 69 | }) 70 | }) 71 | }) 72 | // return the swarm instance 73 | return swarm 74 | } 75 | -------------------------------------------------------------------------------- /input.js: -------------------------------------------------------------------------------- 1 | var readline = require("readline") 2 | 3 | function readInput(db) { 4 | var rl = readline.createInterface({ 5 | input: process.stdin, 6 | output: process.stdout, 7 | terminal: false 8 | }) 9 | 10 | function logResult(err, result) { 11 | if (err) { console.error("hyperdb failed with", err) } 12 | if (arguments.length >= 2) { console.log(result) } 13 | } 14 | 15 | var pattern = (/\.(\w*)\s*(.*)/) 16 | rl.on("line", function(line) { 17 | var match = pattern.exec(line) 18 | if (!match) return 19 | var cmd = match[1] || "" 20 | var arg = match[2] || "" 21 | if (cmd === "put") { 22 | var [key, value] = arg.split("=") 23 | db.put(key, value, logResult) 24 | } else if (cmd === "get") { db.get(arg, logResult) 25 | } else if (cmd === "auth") { db.authorize(Buffer.from(arg, "hex"), logResult) 26 | } else if (cmd === "local") { console.log("local key is\n\t", db.local.key.toString("hex")) 27 | } else if (cmd === "db") { console.log("db key is\n\t", db.key.toString("hex")) 28 | } else if (cmd === "registered") { db.authorized(Buffer.from(arg, "hex"), logResult) } 29 | }) 30 | } 31 | module.exports = readInput 32 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hyperdb-examples", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "array-lru": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/array-lru/-/array-lru-1.1.1.tgz", 10 | "integrity": "sha1-DH4bTgIq4Wb/HoRIxZXzGB/NMzc=" 11 | }, 12 | "atomic-batcher": { 13 | "version": "1.0.2", 14 | "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", 15 | "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" 16 | }, 17 | "bencode": { 18 | "version": "1.0.0", 19 | "resolved": "https://registry.npmjs.org/bencode/-/bencode-1.0.0.tgz", 20 | "integrity": "sha512-N+VOSP5MkoX+xgnp6Y056iCY5TmCZg9rgPNPQe0bIiXchxYFP4vs/Tf0dTdQ+qQhP7HM2gvfFq+sUVjQsGy5Zw==", 21 | "requires": { 22 | "safe-buffer": "^5.1.1" 23 | } 24 | }, 25 | "bitfield-rle": { 26 | "version": "2.1.0", 27 | "resolved": "https://registry.npmjs.org/bitfield-rle/-/bitfield-rle-2.1.0.tgz", 28 | "integrity": "sha1-rinpOCp7pImN6fSLsj/TOMT73Pg=", 29 | "requires": { 30 | "varint": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "varint": { 34 | "version": "4.0.1", 35 | "resolved": "https://registry.npmjs.org/varint/-/varint-4.0.1.tgz", 36 | "integrity": "sha1-SQgpuULSSEY7KzUJeZXDv3NxmOk=" 37 | } 38 | } 39 | }, 40 | "bittorrent-dht": { 41 | "version": "7.10.0", 42 | "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-7.10.0.tgz", 43 | "integrity": "sha512-fvb6M58Ceiv/S94nu6zeaiMoJvUYOeIqRbgaClm+kJTzCAqJPtAR/31pXNYB5iEReOoKqQB5zY33gY0W6ZRWQQ==", 44 | "requires": { 45 | "bencode": "^1.0.0", 46 | "buffer-equals": "^1.0.3", 47 | "debug": "^3.1.0", 48 | "inherits": "^2.0.1", 49 | "k-bucket": "^3.3.0", 50 | "k-rpc": "^4.2.1", 51 | "lru": "^3.1.0", 52 | "randombytes": "^2.0.5", 53 | "safe-buffer": "^5.0.1", 54 | "simple-sha1": "^2.1.0" 55 | }, 56 | "dependencies": { 57 | "debug": { 58 | "version": "3.1.0", 59 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 60 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 61 | "requires": { 62 | "ms": "2.0.0" 63 | } 64 | } 65 | } 66 | }, 67 | "blake2b": { 68 | "version": "2.1.2", 69 | "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.2.tgz", 70 | "integrity": "sha1-aIDt3KNc/t6SxPsnJCITNPmJFFo=", 71 | "requires": { 72 | "blake2b-wasm": "^1.1.0", 73 | "nanoassert": "^1.0.0" 74 | } 75 | }, 76 | "blake2b-wasm": { 77 | "version": "1.1.7", 78 | "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", 79 | "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", 80 | "requires": { 81 | "nanoassert": "^1.0.0" 82 | } 83 | }, 84 | "buffer-alloc": { 85 | "version": "1.2.0", 86 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 87 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 88 | "requires": { 89 | "buffer-alloc-unsafe": "^1.1.0", 90 | "buffer-fill": "^1.0.0" 91 | } 92 | }, 93 | "buffer-alloc-unsafe": { 94 | "version": "1.1.0", 95 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 96 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 97 | }, 98 | "buffer-equals": { 99 | "version": "1.0.4", 100 | "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", 101 | "integrity": "sha1-A1O1T9B/2VZBcGca5vZrnPENJ/U=" 102 | }, 103 | "buffer-fill": { 104 | "version": "1.0.0", 105 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 106 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 107 | }, 108 | "buffer-from": { 109 | "version": "1.1.0", 110 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", 111 | "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" 112 | }, 113 | "bulk-write-stream": { 114 | "version": "1.1.4", 115 | "resolved": "https://registry.npmjs.org/bulk-write-stream/-/bulk-write-stream-1.1.4.tgz", 116 | "integrity": "sha512-GtKwd/4etuk1hNeprXoESBO1RSeRYJMXKf+O0qHmWdUomLT8ysNEfX/4bZFXr3BK6eukpHiEnhY2uMtEHDM2ng==", 117 | "requires": { 118 | "buffer-from": "^1.0.0", 119 | "inherits": "^2.0.1", 120 | "readable-stream": "^2.1.4" 121 | } 122 | }, 123 | "circular-append-file": { 124 | "version": "1.0.1", 125 | "resolved": "https://registry.npmjs.org/circular-append-file/-/circular-append-file-1.0.1.tgz", 126 | "integrity": "sha512-BUDFvrBTCdeVhg9E05PX4XgMegk6xWB69uGwyuATEg7PMfa9lGU1mzFSK0xWNW2O0i9CAQHN0oIdXI/kI2hPkg==", 127 | "requires": { 128 | "multistream": "^2.1.0" 129 | } 130 | }, 131 | "codecs": { 132 | "version": "1.2.1", 133 | "resolved": "https://registry.npmjs.org/codecs/-/codecs-1.2.1.tgz", 134 | "integrity": "sha512-SPnx+ZHXVJ0qTInRXmnxuyu8PDvSzvop5MXp1BOr/urFQI3yL2n5ewE755skTklF/hKVlWj8cinGxdR2gvLvTA==" 135 | }, 136 | "compare": { 137 | "version": "2.0.0", 138 | "resolved": "https://registry.npmjs.org/compare/-/compare-2.0.0.tgz", 139 | "integrity": "sha512-FXeLLVm09Uh7Updmmx2NCCRG2nMq+mdY3DR9PqhVeOrie3IFU+occFQoqziFkHlTUDw8mDgmdblIZ+J9tsSAUA==" 140 | }, 141 | "connections": { 142 | "version": "1.4.2", 143 | "resolved": "https://registry.npmjs.org/connections/-/connections-1.4.2.tgz", 144 | "integrity": "sha1-eJBIK/XHGvbFyhkr4xNq7XRCiq0=" 145 | }, 146 | "core-util-is": { 147 | "version": "1.0.2", 148 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 149 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 150 | }, 151 | "dat-swarm-defaults": { 152 | "version": "1.0.1", 153 | "resolved": "https://registry.npmjs.org/dat-swarm-defaults/-/dat-swarm-defaults-1.0.1.tgz", 154 | "integrity": "sha512-T2WlO7BVmN9USchefsP8entQiByIlJLGuzHLL9qEqOBkyKB8p0Y7XPWxP8dcL43+SkeoxU5NVe7O0bsi3xL8Jg==", 155 | "requires": { 156 | "xtend": "^4.0.1" 157 | } 158 | }, 159 | "debug": { 160 | "version": "2.6.9", 161 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 162 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 163 | "requires": { 164 | "ms": "2.0.0" 165 | } 166 | }, 167 | "discovery-channel": { 168 | "version": "5.5.1", 169 | "resolved": "https://registry.npmjs.org/discovery-channel/-/discovery-channel-5.5.1.tgz", 170 | "integrity": "sha512-EEmZQFE0PiOsJj7G3KVCwFGbYs4QchUvzA91iHtZ6HfkIqfBEDSTGLygJrUlY1Tr77WDV+qZVrZuNghHxSL/vw==", 171 | "requires": { 172 | "bittorrent-dht": "^7.10.0", 173 | "buffer-from": "^1.0.0", 174 | "debug": "^2.6.9", 175 | "dns-discovery": "^6.0.1", 176 | "pretty-hash": "^1.0.1", 177 | "thunky": "^0.1.0" 178 | } 179 | }, 180 | "discovery-swarm": { 181 | "version": "5.1.1", 182 | "resolved": "https://registry.npmjs.org/discovery-swarm/-/discovery-swarm-5.1.1.tgz", 183 | "integrity": "sha512-r38993qP/fcuAlNLSOwGZUps1inzNA4wXkIkv/piwFDseyIWNjYyk/4DHGxyf/bWMB86gPWIUdA6AhydkWmgdA==", 184 | "requires": { 185 | "buffer-equals": "^1.0.3", 186 | "connections": "^1.4.2", 187 | "debug": "^2.4.5", 188 | "discovery-channel": "^5.5.1", 189 | "length-prefixed-message": "^3.0.3", 190 | "pump": "^1.0.1", 191 | "to-buffer": "^1.0.1", 192 | "utp-native": "^1.7.0" 193 | } 194 | }, 195 | "dns-discovery": { 196 | "version": "6.1.0", 197 | "resolved": "https://registry.npmjs.org/dns-discovery/-/dns-discovery-6.1.0.tgz", 198 | "integrity": "sha512-Kl2tL2zuNR1w6SnsoRaqrOFm7gGP3/i/HzRXtyVBqaOq/5L1D2TUdViUAZ8e/NDbt+jQCJFWoaKCnmDC343usQ==", 199 | "requires": { 200 | "circular-append-file": "^1.0.1", 201 | "debug": "^2.6.9", 202 | "dns-socket": "^3.0.0", 203 | "lru": "^2.0.0", 204 | "minimist": "^1.2.0", 205 | "multicast-dns": "^7.0.0", 206 | "network-address": "^1.1.2", 207 | "pump": "^3.0.0", 208 | "speedometer": "^1.0.0", 209 | "unordered-set": "^1.1.0" 210 | }, 211 | "dependencies": { 212 | "lru": { 213 | "version": "2.0.1", 214 | "resolved": "https://registry.npmjs.org/lru/-/lru-2.0.1.tgz", 215 | "integrity": "sha1-+XmHHhYuP1yiVL5GhExT1MU2RUQ=", 216 | "requires": { 217 | "inherits": "^2.0.1" 218 | } 219 | }, 220 | "pump": { 221 | "version": "3.0.0", 222 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 223 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 224 | "requires": { 225 | "end-of-stream": "^1.1.0", 226 | "once": "^1.3.1" 227 | } 228 | } 229 | } 230 | }, 231 | "dns-packet": { 232 | "version": "4.2.0", 233 | "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-4.2.0.tgz", 234 | "integrity": "sha512-bn1AKpfkFbm0MIioOMHZ5qJzl2uypdBwI4nYNsqvhjsegBhcKJUlCrMPWLx6JEezRjxZmxhtIz/FkBEur2l8Cw==", 235 | "requires": { 236 | "ip": "^1.1.5", 237 | "safe-buffer": "^5.1.1" 238 | } 239 | }, 240 | "dns-socket": { 241 | "version": "3.0.0", 242 | "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-3.0.0.tgz", 243 | "integrity": "sha512-M0WkByoJ/mTm+HtwBQLsRJPe5uGIC/lYVOp+s6ZzhbZ5iq4GxjFyxYPQhB85dgCLvVb43aJQXHDC9aUgyKGc/Q==", 244 | "requires": { 245 | "dns-packet": "^4.1.0" 246 | } 247 | }, 248 | "end-of-stream": { 249 | "version": "1.4.1", 250 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 251 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 252 | "requires": { 253 | "once": "^1.4.0" 254 | } 255 | }, 256 | "flat-tree": { 257 | "version": "1.6.0", 258 | "resolved": "https://registry.npmjs.org/flat-tree/-/flat-tree-1.6.0.tgz", 259 | "integrity": "sha1-/KMM3bkAb7ZW6168ea6ydOf96e0=" 260 | }, 261 | "from2": { 262 | "version": "2.3.0", 263 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 264 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 265 | "requires": { 266 | "inherits": "^2.0.1", 267 | "readable-stream": "^2.0.0" 268 | } 269 | }, 270 | "hypercore": { 271 | "version": "6.17.1", 272 | "resolved": "https://registry.npmjs.org/hypercore/-/hypercore-6.17.1.tgz", 273 | "integrity": "sha512-fwBwdx3oaUsaKIRI3e1M78GikrH4EmS/lpbOmRlTnELdYUTIHAAt4qg8YtSbB8PtwiPujT9DjSU+VMj8jAQArQ==", 274 | "requires": { 275 | "array-lru": "^1.1.0", 276 | "atomic-batcher": "^1.0.2", 277 | "bitfield-rle": "^2.0.0", 278 | "buffer-alloc-unsafe": "^1.0.0", 279 | "buffer-equals": "^1.0.4", 280 | "buffer-from": "^1.0.0", 281 | "bulk-write-stream": "^1.1.3", 282 | "codecs": "^1.2.0", 283 | "flat-tree": "^1.6.0", 284 | "from2": "^2.3.0", 285 | "hypercore-crypto": "^1.0.0", 286 | "hypercore-protocol": "^6.4.1", 287 | "inherits": "^2.0.3", 288 | "inspect-custom-symbol": "^1.1.0", 289 | "last-one-wins": "^1.0.4", 290 | "memory-pager": "^1.0.2", 291 | "merkle-tree-stream": "^3.0.3", 292 | "pretty-hash": "^1.0.1", 293 | "process-nextick-args": "^1.0.7", 294 | "random-access-file": "^2.0.1", 295 | "sodium-universal": "^2.0.0", 296 | "sparse-bitfield": "^3.0.0", 297 | "thunky": "^1.0.1", 298 | "uint64be": "^2.0.1", 299 | "unordered-array-remove": "^1.0.2", 300 | "unordered-set": "^2.0.0" 301 | }, 302 | "dependencies": { 303 | "process-nextick-args": { 304 | "version": "1.0.7", 305 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 306 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 307 | }, 308 | "thunky": { 309 | "version": "1.0.2", 310 | "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", 311 | "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=" 312 | }, 313 | "unordered-set": { 314 | "version": "2.0.1", 315 | "resolved": "https://registry.npmjs.org/unordered-set/-/unordered-set-2.0.1.tgz", 316 | "integrity": "sha512-eUmNTPzdx+q/WvOHW0bgGYLWvWHNT3PTKEQLg0MAQhc0AHASHVHoP/9YytYd4RBVariqno/mEUhVZN98CmD7bg==" 317 | } 318 | } 319 | }, 320 | "hypercore-crypto": { 321 | "version": "1.0.0", 322 | "resolved": "https://registry.npmjs.org/hypercore-crypto/-/hypercore-crypto-1.0.0.tgz", 323 | "integrity": "sha512-xFwOnNlOt8L+SovC7dTNchKaNYJb5l8rKZZwpWQnCme1r7CU4Hlhp1RDqPES6b0OpS7DkTo9iU0GltQGkpsjMw==", 324 | "requires": { 325 | "buffer-alloc-unsafe": "^1.1.0", 326 | "buffer-from": "^1.1.0", 327 | "sodium-universal": "^2.0.0", 328 | "uint64be": "^2.0.2" 329 | } 330 | }, 331 | "hypercore-protocol": { 332 | "version": "6.6.4", 333 | "resolved": "https://registry.npmjs.org/hypercore-protocol/-/hypercore-protocol-6.6.4.tgz", 334 | "integrity": "sha512-9TU7P+uve0e5v1ZiBx70DFhkpepW4iNSGYlZthK+Unm0EbZ+Yppc6clH7JTffPBNUMSnDrE552MfXMilpCHZMw==", 335 | "requires": { 336 | "buffer-alloc-unsafe": "^1.0.0", 337 | "buffer-from": "^1.0.0", 338 | "inherits": "^2.0.3", 339 | "protocol-buffers-encodings": "^1.1.0", 340 | "readable-stream": "^2.2.6", 341 | "sodium-universal": "^2.0.0", 342 | "sorted-indexof": "^1.0.0", 343 | "varint": "^5.0.0" 344 | }, 345 | "dependencies": { 346 | "varint": { 347 | "version": "5.0.0", 348 | "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", 349 | "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" 350 | } 351 | } 352 | }, 353 | "hyperdb": { 354 | "version": "3.2.0", 355 | "resolved": "https://registry.npmjs.org/hyperdb/-/hyperdb-3.2.0.tgz", 356 | "integrity": "sha512-aZH6ktFURG7o+gYrx701vb4aSa6tEAmP7f08tC+/8on8VuEE6ZTqpnJRXZUZufAXSUfWpN3CCFazkCmy5YMb9g==", 357 | "requires": { 358 | "array-lru": "^1.1.1", 359 | "bulk-write-stream": "^1.1.3", 360 | "codecs": "^1.2.1", 361 | "compare": "^2.0.0", 362 | "hypercore": "^6.13.0", 363 | "hypercore-protocol": "^6.6.4", 364 | "inherits": "^2.0.3", 365 | "mutexify": "^1.2.0", 366 | "nanoiterator": "^1.1.0", 367 | "protocol-buffers-encodings": "^1.1.0", 368 | "random-access-file": "^2.0.1", 369 | "sodium-universal": "^2.0.0", 370 | "thunky": "^1.0.2", 371 | "unordered-array-remove": "^1.0.2", 372 | "unordered-set": "^2.0.0", 373 | "varint": "^5.0.0" 374 | }, 375 | "dependencies": { 376 | "thunky": { 377 | "version": "1.0.2", 378 | "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", 379 | "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=" 380 | }, 381 | "unordered-set": { 382 | "version": "2.0.1", 383 | "resolved": "https://registry.npmjs.org/unordered-set/-/unordered-set-2.0.1.tgz", 384 | "integrity": "sha512-eUmNTPzdx+q/WvOHW0bgGYLWvWHNT3PTKEQLg0MAQhc0AHASHVHoP/9YytYd4RBVariqno/mEUhVZN98CmD7bg==" 385 | }, 386 | "varint": { 387 | "version": "5.0.0", 388 | "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", 389 | "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" 390 | } 391 | } 392 | }, 393 | "inherits": { 394 | "version": "2.0.3", 395 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 396 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 397 | }, 398 | "ini": { 399 | "version": "1.3.5", 400 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 401 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 402 | "optional": true 403 | }, 404 | "inspect-custom-symbol": { 405 | "version": "1.1.0", 406 | "resolved": "https://registry.npmjs.org/inspect-custom-symbol/-/inspect-custom-symbol-1.1.0.tgz", 407 | "integrity": "sha512-vtI2YXBRZBkU6DlfHfd0GtZENfiEiTacAXUd0ZY6HA+X7aPznpFfPmzSC+tHKXAkz9KDSdI4AYfwAMXR5t+isg==" 408 | }, 409 | "ip": { 410 | "version": "1.1.5", 411 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 412 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" 413 | }, 414 | "isarray": { 415 | "version": "1.0.0", 416 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 417 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 418 | }, 419 | "k-bucket": { 420 | "version": "3.3.1", 421 | "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-3.3.1.tgz", 422 | "integrity": "sha512-kgwWqYT79rAahn4maIVTP8dIe+m1KulufWW+f1bB9DlZrRFiGpZ4iJOg2HUp4xJYBWONP3+rOPIWF/RXABU6mw==", 423 | "requires": { 424 | "buffer-equals": "^1.0.3", 425 | "inherits": "^2.0.1", 426 | "randombytes": "^2.0.3" 427 | } 428 | }, 429 | "k-rpc": { 430 | "version": "4.3.1", 431 | "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-4.3.1.tgz", 432 | "integrity": "sha512-mgAJZeFYbpP0xzJzmS0TQTYoFI0sjy3GnKFhg8wyboL+KvWg2WLaA2Oy9PthLPx2Rxz4WeBMk4y3MSOrDJ95FA==", 433 | "requires": { 434 | "buffer-equals": "^1.0.3", 435 | "k-bucket": "^4.0.0", 436 | "k-rpc-socket": "^1.7.2", 437 | "randombytes": "^2.0.5", 438 | "safe-buffer": "^5.1.1" 439 | }, 440 | "dependencies": { 441 | "k-bucket": { 442 | "version": "4.0.1", 443 | "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-4.0.1.tgz", 444 | "integrity": "sha512-YvDpmY3waI999h1zZoW1rJ04fZrgZ+5PAlVmvwDHT6YO/Q1AOhdel07xsKy9eAvJjQ9xZV1wz3rXKqEfaWvlcQ==", 445 | "requires": { 446 | "inherits": "^2.0.1", 447 | "randombytes": "^2.0.3" 448 | } 449 | } 450 | } 451 | }, 452 | "k-rpc-socket": { 453 | "version": "1.8.0", 454 | "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.8.0.tgz", 455 | "integrity": "sha512-f/9TynsO8YYjZ6JjNNtSSH7CJcIHcio1buy3zqByGxb/GX8AWLdL6FZEWTrN8V3/J7W4/E0ZTQQ+Jt2rVq7ELg==", 456 | "requires": { 457 | "bencode": "^2.0.0", 458 | "buffer-equals": "^1.0.4", 459 | "safe-buffer": "^5.1.1" 460 | }, 461 | "dependencies": { 462 | "bencode": { 463 | "version": "2.0.0", 464 | "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz", 465 | "integrity": "sha512-wr2HwwrUpfB5c68zmAudOltC7rZ1G0+lQOcnuEcfIM3AWAVnB3rHI3nlgd/2CWTfQ3w3zagKt89zni/M+VLZ8g==", 466 | "requires": { 467 | "safe-buffer": "^5.1.1" 468 | } 469 | } 470 | } 471 | }, 472 | "last-one-wins": { 473 | "version": "1.0.4", 474 | "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", 475 | "integrity": "sha1-wb/Qy8tGeQ7JFWuNGu6Py4bNoio=" 476 | }, 477 | "length-prefixed-message": { 478 | "version": "3.0.3", 479 | "resolved": "https://registry.npmjs.org/length-prefixed-message/-/length-prefixed-message-3.0.3.tgz", 480 | "integrity": "sha1-JFR01pq8BhTco2jcNaqAdJgqI6w=", 481 | "requires": { 482 | "varint": "^3.0.1" 483 | } 484 | }, 485 | "lru": { 486 | "version": "3.1.0", 487 | "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", 488 | "integrity": "sha1-6n+4VG2DczOWoTCR12z+tMBoN9U=", 489 | "requires": { 490 | "inherits": "^2.0.1" 491 | } 492 | }, 493 | "memory-pager": { 494 | "version": "1.1.0", 495 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz", 496 | "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==" 497 | }, 498 | "merkle-tree-stream": { 499 | "version": "3.0.3", 500 | "resolved": "https://registry.npmjs.org/merkle-tree-stream/-/merkle-tree-stream-3.0.3.tgz", 501 | "integrity": "sha1-+KBkdg0355eK1fn208EZpJT1cIE=", 502 | "requires": { 503 | "flat-tree": "^1.3.0", 504 | "readable-stream": "^2.0.5" 505 | } 506 | }, 507 | "minimist": { 508 | "version": "1.2.0", 509 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 510 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 511 | }, 512 | "mkdirp": { 513 | "version": "0.5.1", 514 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 515 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 516 | "requires": { 517 | "minimist": "0.0.8" 518 | }, 519 | "dependencies": { 520 | "minimist": { 521 | "version": "0.0.8", 522 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 523 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 524 | } 525 | } 526 | }, 527 | "ms": { 528 | "version": "2.0.0", 529 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 530 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 531 | }, 532 | "multicast-dns": { 533 | "version": "7.0.0", 534 | "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.0.0.tgz", 535 | "integrity": "sha512-BqB5TtIXHo+8gN33N1CA1clsvPsAJlnc6D49SzfQA0xq75cxj15g2y9NaRdf4x2u4v1P66PBC+Wg6YgPO5Bc/g==", 536 | "requires": { 537 | "dns-packet": "^4.0.0", 538 | "thunky": "^1.0.2" 539 | }, 540 | "dependencies": { 541 | "thunky": { 542 | "version": "1.0.2", 543 | "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", 544 | "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=" 545 | } 546 | } 547 | }, 548 | "multistream": { 549 | "version": "2.1.1", 550 | "resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz", 551 | "integrity": "sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==", 552 | "requires": { 553 | "inherits": "^2.0.1", 554 | "readable-stream": "^2.0.5" 555 | } 556 | }, 557 | "mutexify": { 558 | "version": "1.2.0", 559 | "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.2.0.tgz", 560 | "integrity": "sha512-oprzxd2zhfrJqEuB98qc1dRMMonClBQ57UPDjnbcrah4orEMTq1jq3+AcdFe5ePzdbJXI7zmdhfftIdMnhYFoQ==" 561 | }, 562 | "nan": { 563 | "version": "2.10.0", 564 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", 565 | "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", 566 | "optional": true 567 | }, 568 | "nanoassert": { 569 | "version": "1.1.0", 570 | "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", 571 | "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=" 572 | }, 573 | "nanoiterator": { 574 | "version": "1.2.0", 575 | "resolved": "https://registry.npmjs.org/nanoiterator/-/nanoiterator-1.2.0.tgz", 576 | "integrity": "sha512-Ybp8yZQDvjgqjrER+jlvZ2m/qzhK7gakNTKFDs84OLPrzsHcSbsFczJlNkDmyBlYldxFEO3JT3gwBWCN9nj8aQ==", 577 | "requires": { 578 | "inherits": "^2.0.3", 579 | "readable-stream": "^2.3.3" 580 | } 581 | }, 582 | "network-address": { 583 | "version": "1.1.2", 584 | "resolved": "https://registry.npmjs.org/network-address/-/network-address-1.1.2.tgz", 585 | "integrity": "sha1-Sqe/1D8D8LgclwKxPWqFjdsybz4=" 586 | }, 587 | "node-gyp-build": { 588 | "version": "3.4.0", 589 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.4.0.tgz", 590 | "integrity": "sha512-YoviGBJYGrPdLOKDIQB0sKxuKy/EEsxzooNkOZak4vSTKT/qH0Pa6dj3t1MJjEQGsefih61IyHDmO1WW7xOFfw==", 591 | "optional": true 592 | }, 593 | "once": { 594 | "version": "1.4.0", 595 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 596 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 597 | "requires": { 598 | "wrappy": "1" 599 | } 600 | }, 601 | "pretty-hash": { 602 | "version": "1.0.1", 603 | "resolved": "https://registry.npmjs.org/pretty-hash/-/pretty-hash-1.0.1.tgz", 604 | "integrity": "sha1-FuBXkYje9WvbVliSvNBaXWUySAc=" 605 | }, 606 | "process-nextick-args": { 607 | "version": "2.0.0", 608 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 609 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 610 | }, 611 | "protocol-buffers-encodings": { 612 | "version": "1.1.0", 613 | "resolved": "https://registry.npmjs.org/protocol-buffers-encodings/-/protocol-buffers-encodings-1.1.0.tgz", 614 | "integrity": "sha512-SmjEuAf3hc3h3rWZ6V1YaaQw2MNJWK848gLJgzx/sefOJdNLujKinJVXIS0q2cBQpQn2Q32TinawZyDZPzm4kQ==", 615 | "requires": { 616 | "signed-varint": "^2.0.1", 617 | "varint": "^5.0.0" 618 | }, 619 | "dependencies": { 620 | "varint": { 621 | "version": "5.0.0", 622 | "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", 623 | "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" 624 | } 625 | } 626 | }, 627 | "pump": { 628 | "version": "1.0.3", 629 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", 630 | "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", 631 | "requires": { 632 | "end-of-stream": "^1.1.0", 633 | "once": "^1.3.1" 634 | } 635 | }, 636 | "random-access-file": { 637 | "version": "2.0.1", 638 | "resolved": "https://registry.npmjs.org/random-access-file/-/random-access-file-2.0.1.tgz", 639 | "integrity": "sha512-nb4fClpzoUY+v1SHrro+9yykN90eMA1rc+xM39tnZ5R3BgFY+J/NxPZ0KuUpishEsvnwou9Fvm2wa3cjeuG7vg==", 640 | "requires": { 641 | "mkdirp": "^0.5.1", 642 | "random-access-storage": "^1.1.1" 643 | } 644 | }, 645 | "random-access-storage": { 646 | "version": "1.3.0", 647 | "resolved": "https://registry.npmjs.org/random-access-storage/-/random-access-storage-1.3.0.tgz", 648 | "integrity": "sha512-pdS9Mcb9TB7oICypPRALlheaSuszuAKmLVEPKJMuYor7R/zDuHh5ALuQoS+ox31XRwQUL+tDwWH2GPdyspwelA==", 649 | "requires": { 650 | "inherits": "^2.0.3" 651 | } 652 | }, 653 | "randombytes": { 654 | "version": "2.0.6", 655 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", 656 | "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", 657 | "requires": { 658 | "safe-buffer": "^5.1.0" 659 | } 660 | }, 661 | "readable-stream": { 662 | "version": "2.3.6", 663 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 664 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 665 | "requires": { 666 | "core-util-is": "~1.0.0", 667 | "inherits": "~2.0.3", 668 | "isarray": "~1.0.0", 669 | "process-nextick-args": "~2.0.0", 670 | "safe-buffer": "~5.1.1", 671 | "string_decoder": "~1.1.1", 672 | "util-deprecate": "~1.0.1" 673 | } 674 | }, 675 | "rusha": { 676 | "version": "0.8.13", 677 | "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz", 678 | "integrity": "sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=" 679 | }, 680 | "safe-buffer": { 681 | "version": "5.1.2", 682 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 683 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 684 | }, 685 | "signed-varint": { 686 | "version": "2.0.1", 687 | "resolved": "https://registry.npmjs.org/signed-varint/-/signed-varint-2.0.1.tgz", 688 | "integrity": "sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=", 689 | "requires": { 690 | "varint": "~5.0.0" 691 | }, 692 | "dependencies": { 693 | "varint": { 694 | "version": "5.0.0", 695 | "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", 696 | "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" 697 | } 698 | } 699 | }, 700 | "simple-sha1": { 701 | "version": "2.1.1", 702 | "resolved": "https://registry.npmjs.org/simple-sha1/-/simple-sha1-2.1.1.tgz", 703 | "integrity": "sha512-pFMPd+I/lQkpf4wFUeS/sED5IqdIG1lUlrQviBMV4u4mz8BRAcB5fvUx5Ckfg3kBigEglAjHg7E9k/yy2KlCqA==", 704 | "requires": { 705 | "rusha": "^0.8.1" 706 | } 707 | }, 708 | "siphash24": { 709 | "version": "1.1.1", 710 | "resolved": "https://registry.npmjs.org/siphash24/-/siphash24-1.1.1.tgz", 711 | "integrity": "sha512-dKKwjIoTOa587TARYLlBRXq2lkbu5Iz35XrEVWpelhBP1m8r2BGOy1QlaZe84GTFHG/BTucEUd2btnNc8QzIVA==", 712 | "requires": { 713 | "nanoassert": "^1.0.0" 714 | } 715 | }, 716 | "sodium-javascript": { 717 | "version": "0.5.5", 718 | "resolved": "https://registry.npmjs.org/sodium-javascript/-/sodium-javascript-0.5.5.tgz", 719 | "integrity": "sha512-UMmCHovws/sxIBZsIRhIl8uRPou/RFDD0vVop81T1hG106NLLgqajKKuHAOtAP6hflnZ0UrVA2VFwddTd/NQyA==", 720 | "requires": { 721 | "blake2b": "^2.1.1", 722 | "nanoassert": "^1.0.0", 723 | "siphash24": "^1.0.1", 724 | "xsalsa20": "^1.0.0" 725 | } 726 | }, 727 | "sodium-native": { 728 | "version": "2.1.6", 729 | "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-2.1.6.tgz", 730 | "integrity": "sha512-vfovcNlU8C93SbeNoGSAdW5zVOTlrh1sTy+TzdC2FhDTE/IUK6j4ML5gdr/qziLz4XRT4EQWJvbFzql6CAAH/A==", 731 | "optional": true, 732 | "requires": { 733 | "ini": "^1.3.5", 734 | "nan": "^2.4.0", 735 | "node-gyp-build": "^3.0.0" 736 | } 737 | }, 738 | "sodium-universal": { 739 | "version": "2.0.0", 740 | "resolved": "https://registry.npmjs.org/sodium-universal/-/sodium-universal-2.0.0.tgz", 741 | "integrity": "sha512-csdVyakzHJRyCevY4aZC2Eacda8paf+4nmRGF2N7KxCLKY2Ajn72JsExaQlJQ2BiXJncp44p3T+b80cU+2TTsg==", 742 | "requires": { 743 | "sodium-javascript": "~0.5.0", 744 | "sodium-native": "^2.0.0" 745 | } 746 | }, 747 | "sorted-indexof": { 748 | "version": "1.0.0", 749 | "resolved": "https://registry.npmjs.org/sorted-indexof/-/sorted-indexof-1.0.0.tgz", 750 | "integrity": "sha1-F8dC/3zxh+L1mhXfm4HxemLOCJk=" 751 | }, 752 | "sparse-bitfield": { 753 | "version": "3.0.3", 754 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 755 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 756 | "requires": { 757 | "memory-pager": "^1.0.2" 758 | } 759 | }, 760 | "speedometer": { 761 | "version": "1.1.0", 762 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.1.0.tgz", 763 | "integrity": "sha512-z/wAiTESw2XVPssY2XRcme4niTc4S5FkkJ4gknudtVoc33Zil8TdTxHy5torRcgqMqksJV2Yz8HQcvtbsnw0mQ==" 764 | }, 765 | "string_decoder": { 766 | "version": "1.1.1", 767 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 768 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 769 | "requires": { 770 | "safe-buffer": "~5.1.0" 771 | } 772 | }, 773 | "thunky": { 774 | "version": "0.1.0", 775 | "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", 776 | "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=" 777 | }, 778 | "to-buffer": { 779 | "version": "1.1.1", 780 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 781 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" 782 | }, 783 | "uint64be": { 784 | "version": "2.0.2", 785 | "resolved": "https://registry.npmjs.org/uint64be/-/uint64be-2.0.2.tgz", 786 | "integrity": "sha512-9QqdvpGQTXgxthP+lY4e/gIBy+RuqcBaC6JVwT5I3bDLgT/btL6twZMR0pI3/Fgah9G/pdwzIprE5gL6v9UvyQ==", 787 | "requires": { 788 | "buffer-alloc": "^1.1.0" 789 | } 790 | }, 791 | "unordered-array-remove": { 792 | "version": "1.0.2", 793 | "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", 794 | "integrity": "sha1-xUbo+I4xegzyZEyX7LV9umbSUO8=" 795 | }, 796 | "unordered-set": { 797 | "version": "1.1.0", 798 | "resolved": "https://registry.npmjs.org/unordered-set/-/unordered-set-1.1.0.tgz", 799 | "integrity": "sha1-K6fvMW7dC5WQzFR8dPdqLxZP7Mo=" 800 | }, 801 | "util-deprecate": { 802 | "version": "1.0.2", 803 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 804 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 805 | }, 806 | "utp-native": { 807 | "version": "1.7.1", 808 | "resolved": "https://registry.npmjs.org/utp-native/-/utp-native-1.7.1.tgz", 809 | "integrity": "sha512-FSs76hQZsSsdI4YeePxb5SQoWmHxDRznImGiAN905O1svyHvcoQ3hYptu3Y9hPxRHeB3lHzJR5KRZy0Byj7qqg==", 810 | "optional": true, 811 | "requires": { 812 | "nan": "^2.5.1", 813 | "node-gyp-build": "^3.0.0", 814 | "readable-stream": "^2.2.2" 815 | } 816 | }, 817 | "varint": { 818 | "version": "3.0.1", 819 | "resolved": "https://registry.npmjs.org/varint/-/varint-3.0.1.tgz", 820 | "integrity": "sha1-nT9T4DbAqxIACnS8LSTL8JOlgdk=" 821 | }, 822 | "wrappy": { 823 | "version": "1.0.2", 824 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 825 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 826 | }, 827 | "xsalsa20": { 828 | "version": "1.0.2", 829 | "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.0.2.tgz", 830 | "integrity": "sha512-g1DFmZ5JJ9Qzvt4dMw6m9IydqoCSP381ucU5zm46Owbk3bwmqAr8eEJirOPc7PrXRn45drzOpAyDp8jsnoyXyw==" 831 | }, 832 | "xtend": { 833 | "version": "4.0.1", 834 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 835 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 836 | } 837 | } 838 | } 839 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hyperdb-examples", 3 | "version": "1.0.0", 4 | "description": "get started using hyperdb", 5 | "main": "index.js", 6 | "dependencies": { 7 | "dat-swarm-defaults": "^1.0.1", 8 | "discovery-swarm": "^5.1.1", 9 | "hyperdb": "^3.2.0", 10 | "minimist": "^1.2.0" 11 | }, 12 | "devDependencies": {}, 13 | "scripts": { 14 | "test": "echo \"Error: no test specified\" && exit 1" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/cblgh/hyperdb-examples.git" 19 | }, 20 | "keywords": [ 21 | "hyperdb", 22 | "dat", 23 | "cblgh", 24 | "p2p" 25 | ], 26 | "author": "cblgh", 27 | "license": "ISC", 28 | "bugs": { 29 | "url": "https://github.com/cblgh/hyperdb-examples/issues" 30 | }, 31 | "homepage": "https://github.com/cblgh/hyperdb-examples#readme" 32 | } 33 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # hyperdb-examples 2 | a small example on how to get up and running with [hyperdb](https://github.com/mafintosh/hyperdb) 3 | 4 | #### `npm install && node index.js --db db1` 5 | then in another terminal window, using the key that is printed under `db key is`, write 6 | #### `node index.js --db db2 --key ` 7 | where `` is the key that was printed above 8 | 9 | if you want to disable [auto-authorization](https://github.com/cblgh/hyperdb-examples/blob/master/index.js#L50-L69), add the `--noautoauth` flag to the above 10 | 11 | ## Commands 12 | there's a small cli (see [input.js](https://github.com/cblgh/hyperdb-examples/blob/master/input.js)) for interacting with the hyperdb. use it as follows 13 | 14 | #### `.db` 15 |     print out the db key 16 | #### `.local` 17 |     print out the local feed's key 18 | #### `.get ` 19 |     print out the information stored at `key` 20 |     `.get hello` 21 | #### `.put =` 22 |     store `value` under `key` in the database 23 |     `.put hello=world` 24 | #### `.registered ` 25 |     check if `key` is authorized to write to the database 26 | #### `.auth ` 27 |     authorize `key` to write to the database 28 | 29 | ## References 30 | * [mafintosh/hyperdb](https://github.com/mafintosh/hyperdb) dat's distributed scalable database, see the full api 31 | * [jimpick/dat-shopping-list](https://github.com/jimpick/dat-shopping-list) an interactive web demo using hyperdb by way of [hyperdrive#hyperdb-backend](https://github.com/mafintosh/hyperdrive/tree/hyperdb-backend) 32 | * [substack/chatmesh](https://github.com/substack/chatmesh/) a cli chat client built on hyperdb 33 | --------------------------------------------------------------------------------