├── .babelrc ├── .eslintrc.js ├── .gitignore ├── .node_version ├── .nycrc ├── README.md ├── bootstrap.js ├── examples └── usage.js ├── index.js ├── package-lock.json ├── package.json ├── src ├── __test__ │ ├── gun-host.js │ └── index.js ├── certificate.js ├── gun-host.js ├── gun-promise.js └── server.js └── test └── index.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["env"] 3 | } 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'extends': 'google', 3 | 'parser': 'babel-eslint', 4 | 'rules': { 5 | 'env': { 6 | 'browser': false, 7 | 'es6': true, 8 | }, 9 | 'parserOptions': { 10 | 'sourceType': 'module', 11 | }, 12 | 'extends': [ 13 | 'eslint:recommended', 14 | 'google', 15 | ], 16 | 'keyword-spacing': ['error'], 17 | 'max-len': ['error', {'code': 140}], 18 | 'no-trailing-spaces': [ 19 | 2, 20 | {'skipBlankLines': true}, 21 | ], 22 | 'no-console': 0, 23 | 'indent': [ 24 | 'error', 25 | 2, 26 | ], 27 | 'linebreak-style': [ 28 | 'error', 29 | 'unix', 30 | ], 31 | 'quotes': [ 32 | 'error', 33 | 'single', 34 | ], 35 | 'semi': [ 36 | 'error', 37 | 'always', 38 | ], 39 | }, 40 | }; 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Gun 2 | data.json 3 | 4 | # Experiments 5 | lab 6 | 7 | # Logs 8 | logs 9 | *.log 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (http://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Typescript v1 declaration files 46 | typings/ 47 | 48 | # Optional npm cache directory 49 | .npm 50 | 51 | # Optional eslint cache 52 | .eslintcache 53 | 54 | # Optional REPL history 55 | .node_repl_history 56 | 57 | # Output of 'npm pack' 58 | *.tgz 59 | 60 | # Yarn Integrity file 61 | .yarn-integrity 62 | 63 | # dotenv environment variables file 64 | .env 65 | 66 | -------------------------------------------------------------------------------- /.node_version: -------------------------------------------------------------------------------- 1 | 6.11.5 2 | -------------------------------------------------------------------------------- /.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "src/**/*.js" 4 | ], 5 | "exclude": [ 6 | "src/**/__test__/*.js" 7 | ], 8 | "cache": true, 9 | "all": true 10 | } 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gun-host 2 | It is a lib to run [Gun](http://gun.js.org) host in Node.js 3 | 4 | 1. [Install](#install) 5 | 2. [Usage](#usage) 6 | 3. [Development](#development) 7 | 8 | # Install 9 | ``` 10 | npm install --save https://github.com/QXIP/gun-host 11 | ``` 12 | 13 | # Usage 14 | The example illustrates creating cluster node `sentinl`, adding a child node `hosts`, then adding `config.host` node as a child of `hosts`. 15 | 16 | ## Init and start host 17 | ``` 18 | const GunHost = require('gun-host'); 19 | 20 | const config = { 21 | enabled: true, 22 | name: 'sentinl', 23 | priority_for_master: 0, 24 | absent_time_for_delete: 86400, 25 | absent_time: 15, 26 | loop_delay: 5, 27 | cert: { 28 | selfsigned: true, 29 | valid: 10, 30 | key: null, // full sys path to pem key file 31 | cert: null, // full sys path to cert file 32 | }, 33 | gun: { 34 | port: 9000, 35 | host: '0.0.0.0', 36 | cache: 'data.json', 37 | peers: ['https://localhost:9000/gun'], 38 | }, 39 | host: { 40 | id: '123', 41 | name: 'velociraptor', 42 | priority: 0, 43 | node: 'hosts', 44 | }, 45 | }; 46 | 47 | const node = new GunHost({ 48 | peers: config.gun.peers, 49 | rootNodeName: config.name, 50 | }); 51 | 52 | const main = async function() { 53 | try { 54 | let resp = await node.start({ 55 | host: config.gun.host, 56 | port: config.gun.port, 57 | cache: config.gun.cache, 58 | cert: config.cert, 59 | }); 60 | console.log('1. Start server:', resp); 61 | 62 | resp = await node.add(`${config.host.node}.${config.host.id}`, config.host); 63 | console.log('2. Add node:', resp); 64 | 65 | resp = await node.get(config.host.node); 66 | console.log('3. Get node:', resp); 67 | } catch (err) { 68 | console.error(err); 69 | } 70 | }; 71 | 72 | main(); 73 | ``` 74 | Gun holds 75 | ``` 76 | root: { 77 | senitnl: {} 78 | } 79 | 80 | ``` 81 | ## Add/get data 82 | ``` 83 | const addData = async function() { 84 | try { 85 | resp = await node.add(`${config.host.node}.${config.host.id}`, config.host); 86 | console.log('2. Add node:', resp); 87 | 88 | resp = await node.get(config.host.node); 89 | console.log('3. Get node:', resp); 90 | } catch (err) { 91 | console.error(err); 92 | } 93 | }; 94 | 95 | addData(); 96 | ``` 97 | Gun holds 98 | ``` 99 | root: { 100 | setninl: { 101 | hosts: { 102 | '123': { 103 | id: '123', 104 | name: 'velociraptor', 105 | priority: 0, 106 | node: 'hosts', 107 | } 108 | } 109 | } 110 | } 111 | ``` 112 | ## Delete data 113 | ``` 114 | const delete = async function() { 115 | try { 116 | resp = await node.delete(`${config.host.node}.${config.host.id}`); 117 | console.log('4. Delete node:', resp); 118 | 119 | resp = await node.get(config.host.node); 120 | console.log('5. Check if node exists after removing', resp); 121 | } catch (err) { 122 | console.error(err); 123 | } 124 | }; 125 | 126 | delete(); 127 | ``` 128 | Gun holds 129 | ``` 130 | root: { 131 | setninl: { 132 | hosts: {} 133 | } 134 | } 135 | ``` 136 | # Development 137 | ## Install libs 138 | ``` 139 | npm install -g eslint eslint-config-google nyc 140 | ``` 141 | ## Test 142 | ``` 143 | npm run rest 144 | ``` 145 | ## Run examples 146 | ``` 147 | node examples/usage.js 148 | ``` 149 | -------------------------------------------------------------------------------- /bootstrap.js: -------------------------------------------------------------------------------- 1 | require('./examples/usage'); 2 | -------------------------------------------------------------------------------- /examples/usage.js: -------------------------------------------------------------------------------- 1 | const GunHost = require('../src/gun-host'); 2 | 3 | const config = { 4 | enabled: true, 5 | name: 'sentinl', 6 | priority_for_master: 0, 7 | absent_time_for_delete: 86400, 8 | absent_time: 15, 9 | loop_delay: 5, 10 | cert: { 11 | selfsigned: true, 12 | valid: 10, 13 | key: null, 14 | cert: null, 15 | }, 16 | gun: { 17 | port: 9000, 18 | host: '0.0.0.0', 19 | cache: 'data.json', 20 | peers: ['https://localhost:9000/gun'], 21 | }, 22 | host: { 23 | id: '123', 24 | name: 'velociraptor', 25 | priority: 0, 26 | node: 'hosts', 27 | }, 28 | }; 29 | 30 | const node = new GunHost({ 31 | peers: config.gun.peers, 32 | rootNodeName: config.name, 33 | }); 34 | 35 | node.start({ 36 | host: config.gun.host, 37 | port: config.gun.port, 38 | cache: config.gun.cache, 39 | cert: config.cert, 40 | }).then((resp) => { 41 | console.log('1. Start server:', resp); 42 | }).then(() => { 43 | return node.add(`${config.host.node}.${config.host.id}`, config.host); 44 | }).then((resp) => { 45 | console.log('2. Add node:', resp); 46 | }).then(() => { 47 | return node.get(config.host.node); 48 | }).then((resp) => { 49 | console.log('3. Get node:', resp); 50 | }).then(() => { 51 | return node.delete(`${config.host.node}.${config.host.id}`); 52 | }).then((resp) => { 53 | console.log('4. Delete node:', resp); 54 | }).then(() => { 55 | return node.get(config.host.node); 56 | }).then((resp) => { 57 | console.log('5. Check if node exists after removing', resp); 58 | }); 59 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./src/gun-host'); 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gun-host-2", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accept": { 8 | "version": "https://registry.npmjs.org/accept/-/accept-2.1.4.tgz", 9 | "integrity": "sha1-iHr1TO7lx/RDBGGXHsQAxh0JrLs=", 10 | "requires": { 11 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 12 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 13 | } 14 | }, 15 | "ammo": { 16 | "version": "https://registry.npmjs.org/ammo/-/ammo-2.0.4.tgz", 17 | "integrity": "sha1-v4CqshFpjqePY+9efxE91dnokX8=", 18 | "requires": { 19 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 20 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 21 | } 22 | }, 23 | "ansi-regex": { 24 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 25 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 26 | "dev": true 27 | }, 28 | "ansi-styles": { 29 | "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 30 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 31 | "dev": true 32 | }, 33 | "async-limiter": { 34 | "version": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 35 | "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=" 36 | }, 37 | "aws-sdk": { 38 | "version": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.192.0.tgz", 39 | "integrity": "sha1-QXDZCGvR8H51F8xHutN9EmduxSo=", 40 | "requires": { 41 | "buffer": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 42 | "events": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 43 | "jmespath": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", 44 | "querystring": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 45 | "sax": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 46 | "url": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 47 | "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 48 | "xml2js": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", 49 | "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz" 50 | } 51 | }, 52 | "b64": { 53 | "version": "https://registry.npmjs.org/b64/-/b64-3.0.3.tgz", 54 | "integrity": "sha1-Nq/u4Nk0XwRjh85t6KZwKv5btW4=" 55 | }, 56 | "babel-code-frame": { 57 | "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 58 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 59 | "dev": true, 60 | "requires": { 61 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 62 | "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 63 | "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" 64 | } 65 | }, 66 | "babel-core": { 67 | "version": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", 68 | "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", 69 | "dev": true, 70 | "requires": { 71 | "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 72 | "babel-generator": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", 73 | "babel-helpers": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 74 | "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 75 | "babel-register": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 76 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 77 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 78 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 79 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 80 | "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 81 | "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", 82 | "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 83 | "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 84 | "lodash": "4.17.5", 85 | "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 86 | "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 87 | "private": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 88 | "slash": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 89 | "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" 90 | } 91 | }, 92 | "babel-generator": { 93 | "version": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", 94 | "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", 95 | "dev": true, 96 | "requires": { 97 | "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 98 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 99 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 100 | "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 101 | "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 102 | "lodash": "4.17.5", 103 | "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 104 | "trim-right": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" 105 | }, 106 | "dependencies": { 107 | "jsesc": { 108 | "version": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 109 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", 110 | "dev": true 111 | } 112 | } 113 | }, 114 | "babel-helper-builder-binary-assignment-operator-visitor": { 115 | "version": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", 116 | "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", 117 | "dev": true, 118 | "requires": { 119 | "babel-helper-explode-assignable-expression": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", 120 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 121 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 122 | } 123 | }, 124 | "babel-helper-call-delegate": { 125 | "version": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", 126 | "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", 127 | "dev": true, 128 | "requires": { 129 | "babel-helper-hoist-variables": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", 130 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 131 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 132 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 133 | } 134 | }, 135 | "babel-helper-define-map": { 136 | "version": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", 137 | "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", 138 | "dev": true, 139 | "requires": { 140 | "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 141 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 142 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 143 | "lodash": "4.17.5" 144 | } 145 | }, 146 | "babel-helper-explode-assignable-expression": { 147 | "version": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", 148 | "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", 149 | "dev": true, 150 | "requires": { 151 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 152 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 153 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 154 | } 155 | }, 156 | "babel-helper-function-name": { 157 | "version": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 158 | "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", 159 | "dev": true, 160 | "requires": { 161 | "babel-helper-get-function-arity": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", 162 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 163 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 164 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 165 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 166 | } 167 | }, 168 | "babel-helper-get-function-arity": { 169 | "version": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", 170 | "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", 171 | "dev": true, 172 | "requires": { 173 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 174 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 175 | } 176 | }, 177 | "babel-helper-hoist-variables": { 178 | "version": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", 179 | "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", 180 | "dev": true, 181 | "requires": { 182 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 183 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 184 | } 185 | }, 186 | "babel-helper-optimise-call-expression": { 187 | "version": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", 188 | "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", 189 | "dev": true, 190 | "requires": { 191 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 192 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 193 | } 194 | }, 195 | "babel-helper-regex": { 196 | "version": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", 197 | "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", 198 | "dev": true, 199 | "requires": { 200 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 201 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 202 | "lodash": "4.17.5" 203 | } 204 | }, 205 | "babel-helper-remap-async-to-generator": { 206 | "version": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", 207 | "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", 208 | "dev": true, 209 | "requires": { 210 | "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 211 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 212 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 213 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 214 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 215 | } 216 | }, 217 | "babel-helper-replace-supers": { 218 | "version": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", 219 | "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", 220 | "dev": true, 221 | "requires": { 222 | "babel-helper-optimise-call-expression": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", 223 | "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 224 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 225 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 226 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 227 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 228 | } 229 | }, 230 | "babel-helpers": { 231 | "version": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 232 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", 233 | "dev": true, 234 | "requires": { 235 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 236 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" 237 | } 238 | }, 239 | "babel-messages": { 240 | "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 241 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 242 | "dev": true, 243 | "requires": { 244 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 245 | } 246 | }, 247 | "babel-plugin-check-es2015-constants": { 248 | "version": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", 249 | "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", 250 | "dev": true, 251 | "requires": { 252 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 253 | } 254 | }, 255 | "babel-plugin-syntax-async-functions": { 256 | "version": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", 257 | "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", 258 | "dev": true 259 | }, 260 | "babel-plugin-syntax-exponentiation-operator": { 261 | "version": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", 262 | "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", 263 | "dev": true 264 | }, 265 | "babel-plugin-syntax-trailing-function-commas": { 266 | "version": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", 267 | "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", 268 | "dev": true 269 | }, 270 | "babel-plugin-transform-async-to-generator": { 271 | "version": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", 272 | "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", 273 | "dev": true, 274 | "requires": { 275 | "babel-helper-remap-async-to-generator": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", 276 | "babel-plugin-syntax-async-functions": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", 277 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 278 | } 279 | }, 280 | "babel-plugin-transform-es2015-arrow-functions": { 281 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", 282 | "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", 283 | "dev": true, 284 | "requires": { 285 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 286 | } 287 | }, 288 | "babel-plugin-transform-es2015-block-scoped-functions": { 289 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", 290 | "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", 291 | "dev": true, 292 | "requires": { 293 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 294 | } 295 | }, 296 | "babel-plugin-transform-es2015-block-scoping": { 297 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", 298 | "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", 299 | "dev": true, 300 | "requires": { 301 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 302 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 303 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 304 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 305 | "lodash": "4.17.5" 306 | } 307 | }, 308 | "babel-plugin-transform-es2015-classes": { 309 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", 310 | "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", 311 | "dev": true, 312 | "requires": { 313 | "babel-helper-define-map": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", 314 | "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 315 | "babel-helper-optimise-call-expression": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", 316 | "babel-helper-replace-supers": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", 317 | "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 318 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 319 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 320 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 321 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 322 | } 323 | }, 324 | "babel-plugin-transform-es2015-computed-properties": { 325 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", 326 | "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", 327 | "dev": true, 328 | "requires": { 329 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 330 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" 331 | } 332 | }, 333 | "babel-plugin-transform-es2015-destructuring": { 334 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", 335 | "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", 336 | "dev": true, 337 | "requires": { 338 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 339 | } 340 | }, 341 | "babel-plugin-transform-es2015-duplicate-keys": { 342 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", 343 | "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", 344 | "dev": true, 345 | "requires": { 346 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 347 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 348 | } 349 | }, 350 | "babel-plugin-transform-es2015-for-of": { 351 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", 352 | "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", 353 | "dev": true, 354 | "requires": { 355 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 356 | } 357 | }, 358 | "babel-plugin-transform-es2015-function-name": { 359 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", 360 | "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", 361 | "dev": true, 362 | "requires": { 363 | "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 364 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 365 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 366 | } 367 | }, 368 | "babel-plugin-transform-es2015-literals": { 369 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", 370 | "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", 371 | "dev": true, 372 | "requires": { 373 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 374 | } 375 | }, 376 | "babel-plugin-transform-es2015-modules-amd": { 377 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", 378 | "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", 379 | "dev": true, 380 | "requires": { 381 | "babel-plugin-transform-es2015-modules-commonjs": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", 382 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 383 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" 384 | } 385 | }, 386 | "babel-plugin-transform-es2015-modules-commonjs": { 387 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", 388 | "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", 389 | "dev": true, 390 | "requires": { 391 | "babel-plugin-transform-strict-mode": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", 392 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 393 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 394 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 395 | } 396 | }, 397 | "babel-plugin-transform-es2015-modules-systemjs": { 398 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", 399 | "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", 400 | "dev": true, 401 | "requires": { 402 | "babel-helper-hoist-variables": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", 403 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 404 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" 405 | } 406 | }, 407 | "babel-plugin-transform-es2015-modules-umd": { 408 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", 409 | "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", 410 | "dev": true, 411 | "requires": { 412 | "babel-plugin-transform-es2015-modules-amd": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", 413 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 414 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" 415 | } 416 | }, 417 | "babel-plugin-transform-es2015-object-super": { 418 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", 419 | "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", 420 | "dev": true, 421 | "requires": { 422 | "babel-helper-replace-supers": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", 423 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 424 | } 425 | }, 426 | "babel-plugin-transform-es2015-parameters": { 427 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", 428 | "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", 429 | "dev": true, 430 | "requires": { 431 | "babel-helper-call-delegate": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", 432 | "babel-helper-get-function-arity": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", 433 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 434 | "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 435 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 436 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 437 | } 438 | }, 439 | "babel-plugin-transform-es2015-shorthand-properties": { 440 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", 441 | "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", 442 | "dev": true, 443 | "requires": { 444 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 445 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 446 | } 447 | }, 448 | "babel-plugin-transform-es2015-spread": { 449 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", 450 | "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", 451 | "dev": true, 452 | "requires": { 453 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 454 | } 455 | }, 456 | "babel-plugin-transform-es2015-sticky-regex": { 457 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", 458 | "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", 459 | "dev": true, 460 | "requires": { 461 | "babel-helper-regex": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", 462 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 463 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 464 | } 465 | }, 466 | "babel-plugin-transform-es2015-template-literals": { 467 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", 468 | "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", 469 | "dev": true, 470 | "requires": { 471 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 472 | } 473 | }, 474 | "babel-plugin-transform-es2015-typeof-symbol": { 475 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", 476 | "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", 477 | "dev": true, 478 | "requires": { 479 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 480 | } 481 | }, 482 | "babel-plugin-transform-es2015-unicode-regex": { 483 | "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", 484 | "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", 485 | "dev": true, 486 | "requires": { 487 | "babel-helper-regex": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", 488 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 489 | "regexpu-core": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz" 490 | } 491 | }, 492 | "babel-plugin-transform-exponentiation-operator": { 493 | "version": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", 494 | "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", 495 | "dev": true, 496 | "requires": { 497 | "babel-helper-builder-binary-assignment-operator-visitor": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", 498 | "babel-plugin-syntax-exponentiation-operator": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", 499 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" 500 | } 501 | }, 502 | "babel-plugin-transform-regenerator": { 503 | "version": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", 504 | "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", 505 | "dev": true, 506 | "requires": { 507 | "regenerator-transform": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz" 508 | } 509 | }, 510 | "babel-plugin-transform-strict-mode": { 511 | "version": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", 512 | "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", 513 | "dev": true, 514 | "requires": { 515 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 516 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" 517 | } 518 | }, 519 | "babel-polyfill": { 520 | "version": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", 521 | "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", 522 | "dev": true, 523 | "requires": { 524 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 525 | "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", 526 | "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz" 527 | } 528 | }, 529 | "babel-preset-env": { 530 | "version": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", 531 | "integrity": "sha1-oYtWTMm5r99KrleuPBsNmRiOb0g=", 532 | "dev": true, 533 | "requires": { 534 | "babel-plugin-check-es2015-constants": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", 535 | "babel-plugin-syntax-trailing-function-commas": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", 536 | "babel-plugin-transform-async-to-generator": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", 537 | "babel-plugin-transform-es2015-arrow-functions": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", 538 | "babel-plugin-transform-es2015-block-scoped-functions": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", 539 | "babel-plugin-transform-es2015-block-scoping": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", 540 | "babel-plugin-transform-es2015-classes": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", 541 | "babel-plugin-transform-es2015-computed-properties": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", 542 | "babel-plugin-transform-es2015-destructuring": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", 543 | "babel-plugin-transform-es2015-duplicate-keys": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", 544 | "babel-plugin-transform-es2015-for-of": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", 545 | "babel-plugin-transform-es2015-function-name": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", 546 | "babel-plugin-transform-es2015-literals": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", 547 | "babel-plugin-transform-es2015-modules-amd": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", 548 | "babel-plugin-transform-es2015-modules-commonjs": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", 549 | "babel-plugin-transform-es2015-modules-systemjs": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", 550 | "babel-plugin-transform-es2015-modules-umd": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", 551 | "babel-plugin-transform-es2015-object-super": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", 552 | "babel-plugin-transform-es2015-parameters": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", 553 | "babel-plugin-transform-es2015-shorthand-properties": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", 554 | "babel-plugin-transform-es2015-spread": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", 555 | "babel-plugin-transform-es2015-sticky-regex": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", 556 | "babel-plugin-transform-es2015-template-literals": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", 557 | "babel-plugin-transform-es2015-typeof-symbol": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", 558 | "babel-plugin-transform-es2015-unicode-regex": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", 559 | "babel-plugin-transform-exponentiation-operator": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", 560 | "babel-plugin-transform-regenerator": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", 561 | "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", 562 | "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 563 | "semver": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz" 564 | } 565 | }, 566 | "babel-register": { 567 | "version": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 568 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", 569 | "dev": true, 570 | "requires": { 571 | "babel-core": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", 572 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 573 | "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", 574 | "home-or-tmp": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 575 | "lodash": "4.17.5", 576 | "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 577 | "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" 578 | } 579 | }, 580 | "babel-runtime": { 581 | "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 582 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 583 | "dev": true, 584 | "requires": { 585 | "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", 586 | "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" 587 | }, 588 | "dependencies": { 589 | "regenerator-runtime": { 590 | "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 591 | "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", 592 | "dev": true 593 | } 594 | } 595 | }, 596 | "babel-template": { 597 | "version": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 598 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 599 | "dev": true, 600 | "requires": { 601 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 602 | "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 603 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 604 | "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 605 | "lodash": "4.17.5" 606 | } 607 | }, 608 | "babel-traverse": { 609 | "version": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 610 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 611 | "dev": true, 612 | "requires": { 613 | "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 614 | "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 615 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 616 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 617 | "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 618 | "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 619 | "globals": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 620 | "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 621 | "lodash": "4.17.5" 622 | } 623 | }, 624 | "babel-types": { 625 | "version": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 626 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 627 | "dev": true, 628 | "requires": { 629 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 630 | "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 631 | "lodash": "4.17.5", 632 | "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" 633 | } 634 | }, 635 | "babylon": { 636 | "version": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 637 | "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", 638 | "dev": true 639 | }, 640 | "balanced-match": { 641 | "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 642 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 643 | "dev": true 644 | }, 645 | "base64-js": { 646 | "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", 647 | "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=" 648 | }, 649 | "bluebird": { 650 | "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 651 | "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" 652 | }, 653 | "boom": { 654 | "version": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 655 | "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", 656 | "requires": { 657 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 658 | } 659 | }, 660 | "bounce": { 661 | "version": "https://registry.npmjs.org/bounce/-/bounce-1.2.0.tgz", 662 | "integrity": "sha1-47rGjHP9JW44CWVR78CfUEhzyMg=", 663 | "requires": { 664 | "boom": "https://registry.npmjs.org/boom/-/boom-7.1.1.tgz", 665 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz" 666 | }, 667 | "dependencies": { 668 | "boom": { 669 | "version": "https://registry.npmjs.org/boom/-/boom-7.1.1.tgz", 670 | "integrity": "sha1-UDkqTjQX6XHxrShiLCDoMidSYLs=", 671 | "requires": { 672 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz" 673 | } 674 | }, 675 | "hoek": { 676 | "version": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz", 677 | "integrity": "sha1-tx1A2UPQqV2gGVa1R/g8SltKNKw=" 678 | } 679 | } 680 | }, 681 | "brace-expansion": { 682 | "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 683 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", 684 | "dev": true, 685 | "requires": { 686 | "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 687 | "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 688 | } 689 | }, 690 | "browserslist": { 691 | "version": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", 692 | "integrity": "sha1-/jYWeu0bvN5IJ+v+cTR6LMcLmbI=", 693 | "dev": true, 694 | "requires": { 695 | "caniuse-lite": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000808.tgz", 696 | "electron-to-chromium": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz" 697 | } 698 | }, 699 | "buffer": { 700 | "version": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 701 | "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", 702 | "requires": { 703 | "base64-js": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", 704 | "ieee754": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", 705 | "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" 706 | } 707 | }, 708 | "call": { 709 | "version": "https://registry.npmjs.org/call/-/call-4.0.2.tgz", 710 | "integrity": "sha1-33b19R7o3Ui4VqyEAPfmnm1zmcQ=", 711 | "requires": { 712 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 713 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 714 | } 715 | }, 716 | "caniuse-lite": { 717 | "version": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000808.tgz", 718 | "integrity": "sha1-fXWbVRhSnqCLZwWhnnDb9AFij/w=", 719 | "dev": true 720 | }, 721 | "catbox": { 722 | "version": "https://registry.npmjs.org/catbox/-/catbox-7.1.5.tgz", 723 | "integrity": "sha1-xW9+jpVV0nwNwDipbvc+V9GGux8=", 724 | "requires": { 725 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 726 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 727 | "joi": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz" 728 | }, 729 | "dependencies": { 730 | "joi": { 731 | "version": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", 732 | "integrity": "sha1-Ulh/AtUri3XNsMdPCxZKGRoOH8I=", 733 | "requires": { 734 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 735 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 736 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 737 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 738 | } 739 | } 740 | } 741 | }, 742 | "catbox-memory": { 743 | "version": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-2.0.4.tgz", 744 | "integrity": "sha1-Qz4lWQLK9UIz0ShkKcj03xToItU=", 745 | "requires": { 746 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 747 | } 748 | }, 749 | "chalk": { 750 | "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 751 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 752 | "dev": true, 753 | "requires": { 754 | "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 755 | "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 756 | "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 757 | "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 758 | "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" 759 | } 760 | }, 761 | "charenc": { 762 | "version": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 763 | "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" 764 | }, 765 | "concat-map": { 766 | "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 767 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 768 | "dev": true 769 | }, 770 | "content": { 771 | "version": "https://registry.npmjs.org/content/-/content-3.0.6.tgz", 772 | "integrity": "sha1-nC4wHprlFe1lpLh314qlZZuxuAk=", 773 | "requires": { 774 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz" 775 | } 776 | }, 777 | "convert-source-map": { 778 | "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", 779 | "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", 780 | "dev": true 781 | }, 782 | "core-js": { 783 | "version": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", 784 | "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", 785 | "dev": true 786 | }, 787 | "crypt": { 788 | "version": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 789 | "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" 790 | }, 791 | "cryptiles": { 792 | "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 793 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 794 | "requires": { 795 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz" 796 | } 797 | }, 798 | "debug": { 799 | "version": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 800 | "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", 801 | "dev": true, 802 | "requires": { 803 | "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" 804 | } 805 | }, 806 | "detect-indent": { 807 | "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 808 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 809 | "dev": true, 810 | "requires": { 811 | "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" 812 | } 813 | }, 814 | "electron-to-chromium": { 815 | "version": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz", 816 | "integrity": "sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU=", 817 | "dev": true 818 | }, 819 | "escape-string-regexp": { 820 | "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 821 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 822 | "dev": true 823 | }, 824 | "esutils": { 825 | "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 826 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 827 | "dev": true 828 | }, 829 | "events": { 830 | "version": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 831 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" 832 | }, 833 | "globals": { 834 | "version": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 835 | "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", 836 | "dev": true 837 | }, 838 | "gun": { 839 | "version": "https://registry.npmjs.org/gun/-/gun-0.9.93.tgz", 840 | "integrity": "sha1-u61kiQaewiEQyG1LH8ksBnBDM+Y=", 841 | "requires": { 842 | "aws-sdk": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.192.0.tgz", 843 | "ws": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz" 844 | } 845 | }, 846 | "hapi": { 847 | "version": "https://registry.npmjs.org/hapi/-/hapi-16.6.2.tgz", 848 | "integrity": "sha1-aQVU/Jxcp60vgDC7/iHV5Yhs3BQ=", 849 | "requires": { 850 | "accept": "https://registry.npmjs.org/accept/-/accept-2.1.4.tgz", 851 | "ammo": "https://registry.npmjs.org/ammo/-/ammo-2.0.4.tgz", 852 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 853 | "call": "https://registry.npmjs.org/call/-/call-4.0.2.tgz", 854 | "catbox": "https://registry.npmjs.org/catbox/-/catbox-7.1.5.tgz", 855 | "catbox-memory": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-2.0.4.tgz", 856 | "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 857 | "heavy": "https://registry.npmjs.org/heavy/-/heavy-4.0.4.tgz", 858 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 859 | "iron": "https://registry.npmjs.org/iron/-/iron-4.0.5.tgz", 860 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 861 | "joi": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", 862 | "mimos": "https://registry.npmjs.org/mimos/-/mimos-3.0.3.tgz", 863 | "podium": "https://registry.npmjs.org/podium/-/podium-1.3.0.tgz", 864 | "shot": "https://registry.npmjs.org/shot/-/shot-3.4.2.tgz", 865 | "statehood": "https://registry.npmjs.org/statehood/-/statehood-5.0.3.tgz", 866 | "subtext": "https://registry.npmjs.org/subtext/-/subtext-5.0.0.tgz", 867 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 868 | }, 869 | "dependencies": { 870 | "isemail": { 871 | "version": "https://registry.npmjs.org/isemail/-/isemail-3.1.1.tgz", 872 | "integrity": "sha1-6EUP54/xtINH21mRIq3NBmi9krU=", 873 | "requires": { 874 | "punycode": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" 875 | } 876 | }, 877 | "joi": { 878 | "version": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", 879 | "integrity": "sha1-9nSJdTe2JemsPQt+FgTIKK2RPMs=", 880 | "requires": { 881 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 882 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-3.1.1.tgz", 883 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 884 | } 885 | }, 886 | "punycode": { 887 | "version": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", 888 | "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" 889 | } 890 | } 891 | }, 892 | "has-ansi": { 893 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 894 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 895 | "dev": true, 896 | "requires": { 897 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" 898 | } 899 | }, 900 | "heavy": { 901 | "version": "https://registry.npmjs.org/heavy/-/heavy-4.0.4.tgz", 902 | "integrity": "sha1-NskTNsAMz+hSyqTRUwhjNc0vAOk=", 903 | "requires": { 904 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 905 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 906 | "joi": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz" 907 | }, 908 | "dependencies": { 909 | "joi": { 910 | "version": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", 911 | "integrity": "sha1-Ulh/AtUri3XNsMdPCxZKGRoOH8I=", 912 | "requires": { 913 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 914 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 915 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 916 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 917 | } 918 | } 919 | } 920 | }, 921 | "hoek": { 922 | "version": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 923 | "integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0=" 924 | }, 925 | "home-or-tmp": { 926 | "version": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 927 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", 928 | "dev": true, 929 | "requires": { 930 | "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 931 | "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" 932 | } 933 | }, 934 | "ieee754": { 935 | "version": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", 936 | "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" 937 | }, 938 | "inert": { 939 | "version": "https://registry.npmjs.org/inert/-/inert-5.1.0.tgz", 940 | "integrity": "sha1-6fEw3DBHzNn/qmSxV7TBEUYRA10=", 941 | "requires": { 942 | "ammo": "https://registry.npmjs.org/ammo/-/ammo-3.0.0.tgz", 943 | "boom": "https://registry.npmjs.org/boom/-/boom-7.1.1.tgz", 944 | "bounce": "https://registry.npmjs.org/bounce/-/bounce-1.2.0.tgz", 945 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz", 946 | "joi": "https://registry.npmjs.org/joi/-/joi-13.1.2.tgz", 947 | "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz" 948 | }, 949 | "dependencies": { 950 | "ammo": { 951 | "version": "https://registry.npmjs.org/ammo/-/ammo-3.0.0.tgz", 952 | "integrity": "sha1-MPMi9woJBOruF4j00mxb4dctoYE=", 953 | "requires": { 954 | "boom": "https://registry.npmjs.org/boom/-/boom-6.0.0.tgz", 955 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz" 956 | }, 957 | "dependencies": { 958 | "boom": { 959 | "version": "https://registry.npmjs.org/boom/-/boom-6.0.0.tgz", 960 | "integrity": "sha1-mzbFKhKvqz8OVVNhMbf9UCGq0Mw=", 961 | "requires": { 962 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz" 963 | } 964 | } 965 | } 966 | }, 967 | "boom": { 968 | "version": "https://registry.npmjs.org/boom/-/boom-7.1.1.tgz", 969 | "integrity": "sha1-UDkqTjQX6XHxrShiLCDoMidSYLs=", 970 | "requires": { 971 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz" 972 | } 973 | }, 974 | "hoek": { 975 | "version": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz", 976 | "integrity": "sha1-tx1A2UPQqV2gGVa1R/g8SltKNKw=" 977 | } 978 | } 979 | }, 980 | "invariant": { 981 | "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 982 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", 983 | "dev": true, 984 | "requires": { 985 | "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" 986 | } 987 | }, 988 | "iron": { 989 | "version": "https://registry.npmjs.org/iron/-/iron-4.0.5.tgz", 990 | "integrity": "sha1-TwQszri5c480a1mqc0yDqJvDFCg=", 991 | "requires": { 992 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 993 | "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 994 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 995 | } 996 | }, 997 | "is-buffer": { 998 | "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 999 | "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" 1000 | }, 1001 | "is-finite": { 1002 | "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1003 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1004 | "dev": true, 1005 | "requires": { 1006 | "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" 1007 | } 1008 | }, 1009 | "isarray": { 1010 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1011 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1012 | }, 1013 | "isemail": { 1014 | "version": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 1015 | "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" 1016 | }, 1017 | "isexe": { 1018 | "version": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1019 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 1020 | }, 1021 | "items": { 1022 | "version": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 1023 | "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=" 1024 | }, 1025 | "jmespath": { 1026 | "version": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", 1027 | "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" 1028 | }, 1029 | "joi": { 1030 | "version": "https://registry.npmjs.org/joi/-/joi-13.1.2.tgz", 1031 | "integrity": "sha1-stsmAyPMf5Gfr6UeCeInW9CJqX4=", 1032 | "requires": { 1033 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz", 1034 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-3.1.1.tgz", 1035 | "topo": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz" 1036 | }, 1037 | "dependencies": { 1038 | "hoek": { 1039 | "version": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz", 1040 | "integrity": "sha1-tx1A2UPQqV2gGVa1R/g8SltKNKw=" 1041 | }, 1042 | "isemail": { 1043 | "version": "https://registry.npmjs.org/isemail/-/isemail-3.1.1.tgz", 1044 | "integrity": "sha1-6EUP54/xtINH21mRIq3NBmi9krU=", 1045 | "requires": { 1046 | "punycode": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" 1047 | } 1048 | }, 1049 | "punycode": { 1050 | "version": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", 1051 | "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" 1052 | }, 1053 | "topo": { 1054 | "version": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz", 1055 | "integrity": "sha1-N+SMMw7+rHhFOOCs0+YspeIx/no=", 1056 | "requires": { 1057 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz" 1058 | } 1059 | } 1060 | } 1061 | }, 1062 | "js-tokens": { 1063 | "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 1064 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 1065 | "dev": true 1066 | }, 1067 | "jsesc": { 1068 | "version": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 1069 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 1070 | "dev": true 1071 | }, 1072 | "json5": { 1073 | "version": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 1074 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 1075 | "dev": true 1076 | }, 1077 | "lodash": { 1078 | "version": "4.17.5", 1079 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", 1080 | "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" 1081 | }, 1082 | "loose-envify": { 1083 | "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 1084 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 1085 | "dev": true, 1086 | "requires": { 1087 | "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" 1088 | } 1089 | }, 1090 | "lru-cache": { 1091 | "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 1092 | "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", 1093 | "requires": { 1094 | "pseudomap": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1095 | "yallist": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" 1096 | } 1097 | }, 1098 | "md5": { 1099 | "version": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", 1100 | "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", 1101 | "requires": { 1102 | "charenc": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 1103 | "crypt": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 1104 | "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" 1105 | } 1106 | }, 1107 | "mime-db": { 1108 | "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.32.0.tgz", 1109 | "integrity": "sha1-SFs4SLAaPNpflotIgsB3HljglBQ=" 1110 | }, 1111 | "mimos": { 1112 | "version": "https://registry.npmjs.org/mimos/-/mimos-3.0.3.tgz", 1113 | "integrity": "sha1-uRCQcq03jCty9qAQHEPd+ys2ZB8=", 1114 | "requires": { 1115 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1116 | "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.32.0.tgz" 1117 | } 1118 | }, 1119 | "minimatch": { 1120 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1121 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 1122 | "dev": true, 1123 | "requires": { 1124 | "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 1125 | } 1126 | }, 1127 | "minimist": { 1128 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1129 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1130 | "dev": true 1131 | }, 1132 | "mkdirp": { 1133 | "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1134 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1135 | "dev": true, 1136 | "requires": { 1137 | "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" 1138 | } 1139 | }, 1140 | "ms": { 1141 | "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1142 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1143 | "dev": true 1144 | }, 1145 | "nigel": { 1146 | "version": "https://registry.npmjs.org/nigel/-/nigel-2.0.2.tgz", 1147 | "integrity": "sha1-k6GGb7DFLYc5CqdeKxYfS1x15bE=", 1148 | "requires": { 1149 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1150 | "vise": "https://registry.npmjs.org/vise/-/vise-2.0.2.tgz" 1151 | } 1152 | }, 1153 | "number-is-nan": { 1154 | "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1155 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1156 | "dev": true 1157 | }, 1158 | "os-homedir": { 1159 | "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1160 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1161 | "dev": true 1162 | }, 1163 | "os-tmpdir": { 1164 | "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1165 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1166 | }, 1167 | "path-is-absolute": { 1168 | "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1169 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1170 | "dev": true 1171 | }, 1172 | "pem": { 1173 | "version": "https://registry.npmjs.org/pem/-/pem-1.12.3.tgz", 1174 | "integrity": "sha1-sftci3najRgUbCf+55sNTd+ZBbM=", 1175 | "requires": { 1176 | "md5": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", 1177 | "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1178 | "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1179 | "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" 1180 | } 1181 | }, 1182 | "pez": { 1183 | "version": "https://registry.npmjs.org/pez/-/pez-2.1.5.tgz", 1184 | "integrity": "sha1-XsLMYlAMw+tCNtSkFM9aF7XrUAc=", 1185 | "requires": { 1186 | "b64": "https://registry.npmjs.org/b64/-/b64-3.0.3.tgz", 1187 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1188 | "content": "https://registry.npmjs.org/content/-/content-3.0.6.tgz", 1189 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1190 | "nigel": "https://registry.npmjs.org/nigel/-/nigel-2.0.2.tgz" 1191 | } 1192 | }, 1193 | "podium": { 1194 | "version": "https://registry.npmjs.org/podium/-/podium-1.3.0.tgz", 1195 | "integrity": "sha1-PEkPVNFvEPUmDL6YZB8ctzOohRw=", 1196 | "requires": { 1197 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1198 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 1199 | "joi": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz" 1200 | }, 1201 | "dependencies": { 1202 | "joi": { 1203 | "version": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", 1204 | "integrity": "sha1-Ulh/AtUri3XNsMdPCxZKGRoOH8I=", 1205 | "requires": { 1206 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1207 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 1208 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 1209 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 1210 | } 1211 | } 1212 | } 1213 | }, 1214 | "private": { 1215 | "version": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 1216 | "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", 1217 | "dev": true 1218 | }, 1219 | "pseudomap": { 1220 | "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1221 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 1222 | }, 1223 | "punycode": { 1224 | "version": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1225 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 1226 | }, 1227 | "querystring": { 1228 | "version": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1229 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 1230 | }, 1231 | "regenerate": { 1232 | "version": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", 1233 | "integrity": "sha1-DDNtOYBVPXVcObWGrjsgqknIK38=", 1234 | "dev": true 1235 | }, 1236 | "regenerator-runtime": { 1237 | "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", 1238 | "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", 1239 | "dev": true 1240 | }, 1241 | "regenerator-transform": { 1242 | "version": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", 1243 | "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", 1244 | "dev": true, 1245 | "requires": { 1246 | "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 1247 | "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 1248 | "private": "https://registry.npmjs.org/private/-/private-0.1.8.tgz" 1249 | } 1250 | }, 1251 | "regexpu-core": { 1252 | "version": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", 1253 | "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", 1254 | "dev": true, 1255 | "requires": { 1256 | "regenerate": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", 1257 | "regjsgen": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", 1258 | "regjsparser": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz" 1259 | } 1260 | }, 1261 | "regjsgen": { 1262 | "version": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", 1263 | "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", 1264 | "dev": true 1265 | }, 1266 | "regjsparser": { 1267 | "version": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", 1268 | "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", 1269 | "dev": true, 1270 | "requires": { 1271 | "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" 1272 | } 1273 | }, 1274 | "repeating": { 1275 | "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 1276 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 1277 | "dev": true, 1278 | "requires": { 1279 | "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" 1280 | } 1281 | }, 1282 | "safe-buffer": { 1283 | "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1284 | "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" 1285 | }, 1286 | "sax": { 1287 | "version": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 1288 | "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" 1289 | }, 1290 | "semver": { 1291 | "version": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1292 | "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", 1293 | "dev": true 1294 | }, 1295 | "shot": { 1296 | "version": "https://registry.npmjs.org/shot/-/shot-3.4.2.tgz", 1297 | "integrity": "sha1-Hlw/bysmZJrcQvfrNQIUpaApHWc=", 1298 | "requires": { 1299 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1300 | "joi": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz" 1301 | }, 1302 | "dependencies": { 1303 | "joi": { 1304 | "version": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", 1305 | "integrity": "sha1-Ulh/AtUri3XNsMdPCxZKGRoOH8I=", 1306 | "requires": { 1307 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1308 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 1309 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 1310 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 1311 | } 1312 | } 1313 | } 1314 | }, 1315 | "slash": { 1316 | "version": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 1317 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 1318 | "dev": true 1319 | }, 1320 | "source-map": { 1321 | "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1322 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1323 | "dev": true 1324 | }, 1325 | "source-map-support": { 1326 | "version": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 1327 | "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", 1328 | "dev": true, 1329 | "requires": { 1330 | "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" 1331 | } 1332 | }, 1333 | "statehood": { 1334 | "version": "https://registry.npmjs.org/statehood/-/statehood-5.0.3.tgz", 1335 | "integrity": "sha1-wHp1Yg21N5tg0u3Uf1OAAqisfdY=", 1336 | "requires": { 1337 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1338 | "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 1339 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1340 | "iron": "https://registry.npmjs.org/iron/-/iron-4.0.5.tgz", 1341 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 1342 | "joi": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz" 1343 | }, 1344 | "dependencies": { 1345 | "joi": { 1346 | "version": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", 1347 | "integrity": "sha1-Ulh/AtUri3XNsMdPCxZKGRoOH8I=", 1348 | "requires": { 1349 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1350 | "isemail": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 1351 | "items": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 1352 | "topo": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" 1353 | } 1354 | } 1355 | } 1356 | }, 1357 | "strip-ansi": { 1358 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1359 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1360 | "dev": true, 1361 | "requires": { 1362 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" 1363 | } 1364 | }, 1365 | "subtext": { 1366 | "version": "https://registry.npmjs.org/subtext/-/subtext-5.0.0.tgz", 1367 | "integrity": "sha1-nD8IMBi7FYaxZ62M/YcIP1zN/g8=", 1368 | "requires": { 1369 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1370 | "content": "https://registry.npmjs.org/content/-/content-3.0.6.tgz", 1371 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1372 | "pez": "https://registry.npmjs.org/pez/-/pez-2.1.5.tgz", 1373 | "wreck": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz" 1374 | } 1375 | }, 1376 | "supports-color": { 1377 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1378 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1379 | "dev": true 1380 | }, 1381 | "to-fast-properties": { 1382 | "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 1383 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 1384 | "dev": true 1385 | }, 1386 | "topo": { 1387 | "version": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", 1388 | "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", 1389 | "requires": { 1390 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 1391 | } 1392 | }, 1393 | "trim-right": { 1394 | "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 1395 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 1396 | "dev": true 1397 | }, 1398 | "ultron": { 1399 | "version": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 1400 | "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=" 1401 | }, 1402 | "url": { 1403 | "version": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 1404 | "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", 1405 | "requires": { 1406 | "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1407 | "querystring": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" 1408 | } 1409 | }, 1410 | "uuid": { 1411 | "version": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 1412 | "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=" 1413 | }, 1414 | "vise": { 1415 | "version": "https://registry.npmjs.org/vise/-/vise-2.0.2.tgz", 1416 | "integrity": "sha1-awjo+0y3bjpQzW3Q7DczjoEaDTk=", 1417 | "requires": { 1418 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 1419 | } 1420 | }, 1421 | "which": { 1422 | "version": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 1423 | "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", 1424 | "requires": { 1425 | "isexe": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1426 | } 1427 | }, 1428 | "wreck": { 1429 | "version": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz", 1430 | "integrity": "sha1-zS/84WdEnh8CQu2c+AVS4g+2kCo=", 1431 | "requires": { 1432 | "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1433 | "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" 1434 | } 1435 | }, 1436 | "ws": { 1437 | "version": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", 1438 | "integrity": "sha1-v+HaTAjuuXgLmG4OTRDszXNFmZ8=", 1439 | "requires": { 1440 | "async-limiter": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 1441 | "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1442 | "ultron": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" 1443 | } 1444 | }, 1445 | "xml2js": { 1446 | "version": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", 1447 | "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", 1448 | "requires": { 1449 | "sax": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 1450 | "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz" 1451 | } 1452 | }, 1453 | "xmlbuilder": { 1454 | "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", 1455 | "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", 1456 | "requires": { 1457 | "lodash": "4.17.5" 1458 | } 1459 | }, 1460 | "yallist": { 1461 | "version": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1462 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 1463 | } 1464 | } 1465 | } 1466 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gun-host", 3 | "version": "0.0.2", 4 | "description": "It is a lib to run [Gun](http://gun.js.org) host in Node.js", 5 | "main": "index.js", 6 | "directories": { 7 | "example": "examples" 8 | }, 9 | "scripts": { 10 | "start": "node bootstrap.js", 11 | "test": "nyc ./node_modules/mocha/bin/mocha" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/QXIP/gun-host.git" 16 | }, 17 | "keywords": [], 18 | "author": "", 19 | "license": "ISC", 20 | "bugs": { 21 | "url": "https://github.com/QXIP/gun-host/issues" 22 | }, 23 | "homepage": "https://github.com/QXIP/gun-host#readme", 24 | "dependencies": { 25 | "bluebird": "3.5.1", 26 | "gun": "0.9.93", 27 | "hapi": "16.6.2", 28 | "lodash": "4.17.5", 29 | "pem": "1.12.3" 30 | }, 31 | "devDependencies": { 32 | "expect.js": "0.3.1", 33 | "mocha": "5.0.1", 34 | "nyc": "11.4.1" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/__test__/gun-host.js: -------------------------------------------------------------------------------- 1 | const {describe, it} = require('mocha'); 2 | const expect = require('expect.js'); 3 | 4 | const GunHost = require('../gun-host'); 5 | 6 | describe('Gun', function() { 7 | const cluster = { 8 | enabled: true, 9 | name: '_test_gun', 10 | priority_for_master: 0, 11 | absent_time_for_delete: 86400, 12 | absent_time: 15, 13 | loop_delay: 5, 14 | cert: { 15 | selfsigned: true, 16 | valid: 10, 17 | key: null, 18 | cert: null, 19 | }, 20 | gun: { 21 | port: 9000, 22 | host: '0.0.0.0', 23 | cache: 'data.json', 24 | peers: ['https://localhost:9000/gun'], 25 | }, 26 | host: { 27 | id: '123', 28 | name: 'trex', 29 | priority: 0, 30 | node: 'hosts', 31 | }, 32 | }; 33 | 34 | const node = new GunHost({ 35 | peers: cluster.gun.peers, 36 | rootNodeName: cluster.name, 37 | }); 38 | 39 | it('start server', function() { 40 | return node.start({ 41 | host: cluster.gun.host, 42 | port: cluster.gun.port, 43 | cache: cluster.gun.cache, 44 | cert: cluster.cert, 45 | }).then(function(resp) { 46 | expect(resp).to.eql('gun server started successfully'); 47 | }); 48 | }); 49 | 50 | it('add node', function() { 51 | return node.add(`${cluster.host.node}.${cluster.host.id}`, cluster.host).then(function(resp) { 52 | expect(resp.err).to.be(null); 53 | expect(resp.ok).to.be(1); 54 | }); 55 | }); 56 | 57 | it('get node', function() { 58 | return node.get(`${cluster.host.node}.${cluster.host.id}`).then(function(resp) { 59 | expect(resp.id).to.be(cluster.host.id); 60 | }); 61 | }); 62 | 63 | it('delete node', function() { 64 | return node.delete(`${cluster.host.node}.${cluster.host.id}`).then(function(resp) { 65 | expect(resp.err).to.be(null); 66 | expect(resp.ok).to.be(1); 67 | }); 68 | }); 69 | }); 70 | -------------------------------------------------------------------------------- /src/__test__/index.js: -------------------------------------------------------------------------------- 1 | require('./gun-host'); 2 | -------------------------------------------------------------------------------- /src/certificate.js: -------------------------------------------------------------------------------- 1 | const Promise = require('bluebird'); 2 | const pem = require('pem'); 3 | 4 | /** 5 | * Manage certificates 6 | */ 7 | class Certificate { 8 | /** 9 | * Create self-signed cert 10 | * 11 | * @param {integer} days of validity 12 | * @param {boolean} selSigned 13 | * @return {object} keys 14 | */ 15 | static create(days, selfSigned = true) { 16 | return new Promise(function(resolve, reject) { 17 | pem.createCertificate({days, selfSigned}, function(error, keys) { 18 | if (error) { 19 | reject(error); 20 | } 21 | resolve(keys); 22 | }); 23 | }); 24 | } 25 | } 26 | 27 | module.exports = Certificate; 28 | -------------------------------------------------------------------------------- /src/gun-host.js: -------------------------------------------------------------------------------- 1 | const Server = require('./server'); 2 | const GunPromise = require('./gun-promise'); 3 | 4 | /** 5 | * Serve Gun DB functionality 6 | */ 7 | class GunHost { 8 | /** 9 | * Constructor 10 | * 11 | * @param {object} config: 12 | * {array} peers - list of Gun hosts 13 | * {string} rootNodeName - parent for all nodes of this Gun host 14 | */ 15 | constructor(config) { 16 | this.host = new GunPromise(config.peers, config.rootNodeName); 17 | } 18 | 19 | /** 20 | * Start gun server 21 | * 22 | * @param {object} config 23 | * @return {string} ack or err 24 | */ 25 | start(config) { 26 | const server = new Server(config); 27 | return server.start(); 28 | } 29 | 30 | /** 31 | * Add node 32 | * 33 | * @param {string} path for node 34 | * @param {object} node to add 35 | * @return {object} ack 36 | */ 37 | add(path, node) { 38 | return this.host.put(path, node); 39 | }; 40 | 41 | /** 42 | * Get node 43 | * 44 | * @param {string} path for node 45 | * @return {object} node by path 46 | */ 47 | get(path) { 48 | return this.host.load(path); 49 | }; 50 | 51 | /** 52 | * Delete node 53 | * 54 | * @param {string} path for node 55 | * @return {string} ack 56 | */ 57 | delete(path) { 58 | return this.host.delete(path); 59 | }; 60 | } 61 | 62 | module.exports = GunHost; 63 | -------------------------------------------------------------------------------- /src/gun-promise.js: -------------------------------------------------------------------------------- 1 | const Promise = require('bluebird'); 2 | const {forEach} = require('lodash'); 3 | const Gun = require('gun'); 4 | require('gun/lib/path'); 5 | require('gun/lib/load'); 6 | require('gun/lib/then'); 7 | 8 | /** 9 | * Abstract access to Gun DB 10 | */ 11 | class GunPromise { 12 | /** 13 | * Constructor 14 | * 15 | * @param {object} peers of Gun 16 | * @param {object} name of the node 17 | */ 18 | constructor(peers, name) { 19 | this.name = name; 20 | this.gun = new Gun({peers}); 21 | this.node = this.gun.get(name); 22 | } 23 | 24 | /** 25 | * Get object and all its children 26 | * 27 | * @param {string} pathway - a.b.c or a 28 | * @param {boolean} filterNull - filter 'null' values in the 1st level 29 | * @return {array} value 30 | */ 31 | load(pathway, filterNull = true) { 32 | return this.exists(pathway).then((exists) => { 33 | if (!exists) { 34 | return null; 35 | } 36 | return new Promise((resolve, reject) => { 37 | this.node.path(pathway).load(function(object) { 38 | if (!filterNull) { 39 | resolve(object); 40 | } 41 | const result = {}; 42 | forEach(object, function(value, key) { 43 | if (value) { 44 | result[key] = value; 45 | } 46 | }); 47 | resolve(result); 48 | }); 49 | }); 50 | }); 51 | } 52 | 53 | /** 54 | * Put value 55 | * 56 | * @param {string} pathway - a.b.c or a 57 | * @param {object} value 58 | * @return {object} ack 59 | */ 60 | put(pathway, value) { 61 | return new Promise((resolve, reject) => { 62 | return this.node.path(pathway).put(value, function(ack) { 63 | if (ack.error) { 64 | reject(ack.error); 65 | } 66 | resolve(ack); 67 | }); 68 | }); 69 | } 70 | 71 | /** 72 | * Check if value exists 73 | * 74 | * @param {string} pathway - a.b.c or a 75 | * @return {boolean} exist 76 | */ 77 | exists(pathway) { 78 | return new Promise((resolve, reject) => { 79 | this.node.path(pathway).val(function(value) { 80 | resolve(value ? true : false); 81 | }); 82 | }); 83 | } 84 | 85 | /** 86 | * Get data by path 87 | * 88 | * @param {string} pathway - a.b.c or a 89 | * @return {object} value 90 | */ 91 | path(pathway) { 92 | return new Promise((resolve, reject) => { 93 | this.node.path(pathway).val(function(value) { 94 | resolve(value); 95 | }); 96 | }); 97 | } 98 | 99 | /** 100 | * Delete data 101 | * 102 | * @param {string} pathway - a.b.c or a 103 | * @return {string} message 104 | */ 105 | delete(pathway) { 106 | return new Promise((resolve, reject) => { 107 | // Gun bug, unable to delete a value: https://github.com/amark/gun/issues/456 108 | // 'null' put here to facilitate filtering deleted values 109 | this.node.path(pathway).put(null); 110 | // Gun bug, .put(cb) callback is not resolved if value is null: https://github.com/amark/gun/issues/453 111 | resolve({err: null, ok: 1}); 112 | }); 113 | } 114 | } 115 | 116 | module.exports = GunPromise; 117 | -------------------------------------------------------------------------------- /src/server.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const gun = require('gun'); 3 | const Hapi = require('hapi'); 4 | const Promise = require('bluebird'); 5 | const certificate = require('./certificate'); 6 | 7 | /** 8 | * Manage Hapi server to server Gun DB 9 | */ 10 | class Server { 11 | /** 12 | * Constructor 13 | * 14 | * @param {object} config: 15 | * {string} host 16 | * {integer} port 17 | * {string} cache - file name to store Gun data 18 | * {object} cert: 19 | * {boolean} selfsigned - certificate 20 | * {integer} valid - for n days 21 | * {string} key - full sys path for pem key 22 | * {string} cert - full sys path for certificate 23 | */ 24 | constructor(config) { 25 | this.config = config; 26 | } 27 | 28 | /** 29 | * Start Hapi server 30 | * 31 | * @param {object} keys of secure con (cert and pem key) 32 | * @return {string} ack or err 33 | */ 34 | runHapi(keys) { 35 | const server = new Hapi.Server(); 36 | 37 | server.connection({ 38 | host: this.config.host, 39 | port: this.config.port, 40 | tls: { 41 | key: keys.serviceKey, 42 | cert: keys.certificate, 43 | }, 44 | }); 45 | 46 | server.connections.forEach((con) => { 47 | gun({web: con.listener, file: this.config.cache}); 48 | }); 49 | 50 | return new Promise(function(resolve, reject) { 51 | server.start(function(error) { 52 | if (error) { 53 | reject(error); 54 | } 55 | resolve('gun server started successfully'); 56 | }); 57 | }); 58 | } 59 | 60 | /** 61 | * Start server 62 | * 63 | * @return {string} ack or err 64 | */ 65 | start() { 66 | if (this.config.cert.selfsigned) { 67 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 68 | return certificate.create(this.config.cert.valid).then((keys) => { 69 | return this.runHapi(keys); 70 | }); 71 | } 72 | const keys = { 73 | serviceKey: fs.readFileSync(this.config.cert.key), 74 | certificate: fs.readFileSync(this.config.cert.cert), 75 | }; 76 | return this.runHapi(keys); 77 | } 78 | } 79 | 80 | module.exports = Server; 81 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | require('../src/__test__'); 2 | --------------------------------------------------------------------------------