├── .gitignore ├── monitor.js ├── Dockerfile ├── .dockerignore ├── docker-cloud.test.yml ├── proxy.js ├── end-user ├── server.js └── index.html ├── services ├── payment-service.js ├── user-service.js ├── product-service.js └── purchase-service.js ├── package.json ├── init-db.js ├── test └── user-service.test.js ├── LICENSE ├── cote-workshop.json ├── models.js ├── admin ├── server.js └── index.html ├── docker-compose.yml ├── docker-cloud.yml ├── docker-swarm.yml ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vscode 3 | node_modules 4 | db.sqlite 5 | -------------------------------------------------------------------------------- /monitor.js: -------------------------------------------------------------------------------- 1 | var cote = require('cote'); 2 | 3 | new cote.MonitoringTool(); 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8 2 | 3 | WORKDIR /src 4 | ADD package.json . 5 | RUN npm install 6 | 7 | ADD . . 8 | 9 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .dockerignore 3 | .vscode 4 | Dockerfile 5 | docker-compose.yml 6 | LICENSE 7 | node_modules 8 | README.md 9 | -------------------------------------------------------------------------------- /docker-cloud.test.yml: -------------------------------------------------------------------------------- 1 | user-service: 2 | build: . 3 | command: node services/user-service.js 4 | 5 | sut: 6 | build: . 7 | command: npm test 8 | links: 9 | - user-service 10 | -------------------------------------------------------------------------------- /proxy.js: -------------------------------------------------------------------------------- 1 | var proxy = require('redbird')({port: 80}); 2 | 3 | proxy.register("admin.cote.co", "http://localhost:5000"); 4 | proxy.register("end-user.cote.co", "http://localhost:5001"); 5 | proxy.register("monitoring.cote.co", "http://localhost:5555"); 6 | -------------------------------------------------------------------------------- /end-user/server.js: -------------------------------------------------------------------------------- 1 | var app = require('express')(), 2 | server = require('http').Server(app), 3 | io = require('socket.io')(server), 4 | cote = require('cote'); 5 | 6 | app.get('/', function (req, res) { 7 | console.log(`${req.ip} requested end-user interface`); 8 | 9 | res.sendFile(__dirname + '/index.html'); 10 | }); 11 | 12 | server.listen(5001); 13 | 14 | new cote.Sockend(io, { 15 | name: 'end-user sockend server' 16 | }); 17 | -------------------------------------------------------------------------------- /services/payment-service.js: -------------------------------------------------------------------------------- 1 | var cote = require('cote'), 2 | models = require('../models'); 3 | 4 | var paymentResponder = new cote.Responder({ 5 | name: 'payment responder', 6 | key: 'payment' 7 | }); 8 | 9 | paymentResponder.on('*', console.log); 10 | 11 | paymentResponder.on('process', function(req, cb) { 12 | models.User.get(req.userId, function(err, user) { 13 | if (user.balance < req.price) return cb(true); 14 | 15 | user.balance -= req.price; 16 | 17 | user.save(cb); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cote-workshop", 3 | "version": "0.13.1", 4 | "description": "A microservices case study with cote", 5 | "repository": { 6 | "type": "git", 7 | "url": "git@github.com:dashersw/cote-workshop.git" 8 | }, 9 | "author": "Armagan Amcalar ", 10 | "license": "MIT", 11 | "dependencies": { 12 | "body-parser": "^1.18.3", 13 | "cote": "0.17.0", 14 | "express": "^4.16.3", 15 | "orm": "^5.0.2", 16 | "pg": "^7.4.3", 17 | "redbird": "^0.7.0", 18 | "socket.io": "^2.1.1", 19 | "sqlite3": "^4.0.1" 20 | }, 21 | "scripts": { 22 | "test": "ava --verbose --timeout=60000" 23 | }, 24 | "devDependencies": { 25 | "ava": "^0.20.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /init-db.js: -------------------------------------------------------------------------------- 1 | var models = require('./models'); 2 | 3 | var products = [ 4 | { 5 | name: 'Fancy dish', 6 | price: 1, 7 | stock: 20 8 | }, 9 | { 10 | name: 'Healthy food', 11 | price: 2, 12 | stock: 20 13 | }, 14 | { 15 | name: 'Feast for kings', 16 | price: 3, 17 | stock: 20 18 | } 19 | ]; 20 | 21 | module.exports = new Promise((resolve, reject) => { 22 | models.drop(err => { 23 | if (err) return console.log(err); 24 | 25 | models.init(function(err) { 26 | if (err) return console.log(err); 27 | 28 | products.forEach(function(product) { 29 | models.Product.create(product, function(err, product) { 30 | console.log('Initialized', product.name); 31 | 32 | resolve(); 33 | }); 34 | }); 35 | }); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /services/user-service.js: -------------------------------------------------------------------------------- 1 | var cote = require('cote'), 2 | models = require('../models'); 3 | 4 | var userResponder = new cote.Responder({ 5 | name: 'user responder', 6 | namespace: 'user', 7 | respondsTo: ['create'] 8 | }); 9 | 10 | var userPublisher = new cote.Publisher({ 11 | name: 'user publisher', 12 | namespace: 'user', 13 | broadcasts: ['update'] 14 | }); 15 | 16 | userResponder.on('*', console.log); 17 | 18 | userResponder.on('create', function(req, cb) { 19 | models.User.create({}, cb); 20 | 21 | updateUsers(); 22 | }); 23 | 24 | userResponder.on('list', function(req, cb) { 25 | var query = req.query || {}; 26 | models.User.find(query, cb); 27 | }); 28 | 29 | userResponder.on('get', function(req, cb) { 30 | models.User.get(req.id, cb); 31 | }); 32 | 33 | function updateUsers() { 34 | models.User.find(function(err, users) { 35 | userPublisher.publish('update', users); 36 | }); 37 | } 38 | -------------------------------------------------------------------------------- /test/user-service.test.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import cote from 'cote'; 3 | 4 | test('automatic pass', t => { 5 | t.pass(); 6 | }); 7 | 8 | test.cb('create user', t => { 9 | var userRequester = new cote.Requester({ 10 | name: 'test user requester 1', 11 | namespace: 'user' 12 | }); 13 | 14 | userRequester.send({ type: 'create' }, (err, user) => { 15 | t.is(user.balance, 30); 16 | t.truthy(user.id); 17 | t.end(); 18 | }); 19 | }); 20 | 21 | test.cb('get user', t => { 22 | var userRequester = new cote.Requester({ 23 | name: 'test user requester 2', 24 | namespace: 'user' 25 | }); 26 | 27 | userRequester.send({ type: 'create' }, (err, newUser) => { 28 | t.is(newUser.balance, 30); 29 | t.truthy(newUser.id); 30 | 31 | userRequester.send({ type: 'get', id: newUser.id }, (err, user) => { 32 | console.log(err, user) 33 | t.is(user.id, newUser.id); 34 | t.is(user.balance, newUser.balance); 35 | t.end(); 36 | }) 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Armagan Amcalar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /services/product-service.js: -------------------------------------------------------------------------------- 1 | var cote = require('cote'), 2 | models = require('../models'); 3 | 4 | var productResponder = new cote.Responder({ 5 | name: 'product responder', 6 | namespace: 'product', 7 | respondsTo: ['list'] 8 | }); 9 | 10 | var productPublisher = new cote.Publisher({ 11 | name: 'product publisher', 12 | namespace: 'product', 13 | broadcasts: ['update'] 14 | }); 15 | 16 | productResponder.on('*', console.log); 17 | 18 | productResponder.on('list', function(req, cb) { 19 | var query = req.query || {}; 20 | models.Product.find(query, cb); 21 | }); 22 | 23 | productResponder.on('create', function(req, cb) { 24 | models.Product.create(req.product, function(err, products) { 25 | cb(err, products); 26 | 27 | updateProducts(); 28 | }); 29 | }); 30 | 31 | productResponder.on('delete', function(req, cb) { 32 | models.Product.get(req.id, function(err, product) { 33 | product.remove(function(err, product) { 34 | cb(err, product); 35 | 36 | updateProducts(); 37 | }); 38 | }); 39 | }); 40 | 41 | function updateProducts() { 42 | models.Product.find(function(err, products) { 43 | productPublisher.publish('update', products); 44 | }); 45 | } 46 | -------------------------------------------------------------------------------- /cote-workshop.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name" : "admin", 5 | "script" : "admin/server.js", 6 | "watch" : "admin/server.js" 7 | }, 8 | { 9 | "name" : "end-user", 10 | "script" : "end-user/server.js", 11 | "watch" : "end-user/server.js" 12 | }, 13 | { 14 | "name" : "monitor", 15 | "script" : "monitor.js", 16 | "watch" : "monitor.js" 17 | }, 18 | { 19 | "name" : "payment-service", 20 | "script" : "services/payment-service.js", 21 | "watch" : "services/payment-service.js" 22 | }, 23 | { 24 | "name" : "product-service", 25 | "script" : "services/product-service.js", 26 | "watch" : "services/product-service.js" 27 | }, 28 | { 29 | "name" : "purchase-service", 30 | "script" : "services/purchase-service.js", 31 | "watch" : "services/purchase-service.js" 32 | }, 33 | { 34 | "name" : "user-service", 35 | "script" : "services/user-service.js", 36 | "watch" : "services/user-service.js" 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /models.js: -------------------------------------------------------------------------------- 1 | var orm = require('orm'); 2 | 3 | var connectionString; 4 | 5 | if (process.env.PG == 'true') 6 | connectionString = 'postgres://cote:ohgath2ig8eoP8@postgres/cote'; 7 | else 8 | connectionString = 'sqlite://db.sqlite'; 9 | 10 | var db = orm.connect(connectionString, function onConnect(err) { 11 | if (err) { 12 | console.log('Error', err); 13 | process.exit(1); 14 | } 15 | }); 16 | 17 | db.settings.set('instance.cache', false); 18 | 19 | var Product = db.define('product', { 20 | name: String, 21 | price: Number, 22 | stock: Number 23 | }); 24 | 25 | var Purchase = db.define('purchase', {}); 26 | 27 | var User = db.define('user', { 28 | balance: { type: 'number', defaultValue: 30 } 29 | }); 30 | 31 | Purchase.hasOne('product', Product, { 32 | autoFetch: true 33 | }); 34 | Purchase.hasOne('owner', User, { 35 | autoFetch: true, 36 | reverse: 'purchases' 37 | }); 38 | 39 | function init(callback) { 40 | console.log('Initializing db.'); 41 | 42 | db.sync(callback); 43 | } 44 | 45 | function drop(callback) { 46 | if (process.env.DROP) { 47 | console.log('Dropping db.'); 48 | db.drop(callback); 49 | } 50 | else 51 | callback(); 52 | } 53 | 54 | db.sync(); 55 | 56 | module.exports = { 57 | Product: Product, 58 | Purchase: Purchase, 59 | User: User, 60 | init: init, 61 | drop: drop 62 | }; 63 | -------------------------------------------------------------------------------- /admin/server.js: -------------------------------------------------------------------------------- 1 | var app = require('express')(), 2 | bodyParser = require('body-parser'), 3 | server = require('http').Server(app), 4 | io = require('socket.io')(server), 5 | cote = require('cote'); 6 | 7 | app.use(bodyParser.json()); 8 | 9 | app.all('*', function(req, res, next) { 10 | console.log(req.method, req.url); 11 | next(); 12 | }); 13 | 14 | app.get('/', function(req, res) { 15 | res.sendFile(__dirname + '/index.html'); 16 | }); 17 | 18 | app.get('/product', function(req, res) { 19 | productRequester.send({type: 'list'}, function(err, products) { 20 | res.send(products); 21 | }); 22 | }); 23 | 24 | app.post('/product', function(req, res) { 25 | productRequester.send({type: 'create', product: req.body.product}, function(err, product) { 26 | res.send(product); 27 | }); 28 | }); 29 | 30 | app.delete('/product/:id', function(req, res) { 31 | productRequester.send({type: 'delete', id: req.params.id}, function(err, product) { 32 | res.send(product); 33 | }); 34 | }); 35 | 36 | app.get('/user', function(req, res) { 37 | userRequester.send({type: 'list'}, function(err, users) { 38 | res.send(users); 39 | }); 40 | }); 41 | 42 | app.get('/purchase', function(req, res) { 43 | purchaseRequester.send({type: 'list'}, function(err, purchases) { 44 | res.send(purchases); 45 | }); 46 | }); 47 | 48 | var productRequester = new cote.Requester({ 49 | name: 'admin product requester', 50 | namespace: 'product' 51 | }); 52 | 53 | var userRequester = new cote.Requester({ 54 | name: 'admin user requester', 55 | namespace: 'user' 56 | }); 57 | 58 | var purchaseRequester = new cote.Requester({ 59 | name: 'admin purchase requester', 60 | namespace: 'purchase' 61 | }); 62 | 63 | server.listen(5000); 64 | 65 | new cote.Sockend(io, { 66 | name: 'admin sockend server' 67 | }); 68 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | base: 4 | build: . 5 | image: dashersw/cote-workshop 6 | restart: on-failure 7 | environment: 8 | - PG=true 9 | 10 | lb: 11 | image: dockercloud/haproxy 12 | links: 13 | - admin 14 | - end-user 15 | - monitoring 16 | volumes: 17 | - /var/run/docker.sock:/var/run/docker.sock 18 | ports: 19 | - 80:80 20 | - 443:443 21 | restart: on-failure 22 | 23 | admin: 24 | extends: base 25 | command: node admin/server.js 26 | environment: 27 | - VIRTUAL_HOST=local-admin.cotejs.org, ws://local-admin.cotejs.org 28 | - BALANCE=source 29 | ports: 30 | - 5000:5000 31 | 32 | end-user: 33 | extends: base 34 | command: node end-user/server.js 35 | environment: 36 | - VIRTUAL_HOST=local-end-user.cotejs.org, ws://local-end-user.cotejs.org 37 | - BALANCE=source 38 | ports: 39 | - 5001:5001 40 | 41 | monitoring: 42 | extends: base 43 | command: node monitor.js 44 | environment: 45 | - PORT=80 46 | - VIRTUAL_HOST=local-monitoring.cotejs.org 47 | ports: 48 | - 5555:5555 49 | 50 | payment-service: 51 | extends: base 52 | command: node services/payment-service.js 53 | depends_on: 54 | - db 55 | 56 | product-service: 57 | extends: base 58 | command: node services/product-service.js 59 | depends_on: 60 | - db 61 | 62 | purchase-service: 63 | extends: base 64 | command: node services/purchase-service.js 65 | depends_on: 66 | - db 67 | 68 | user-service: 69 | extends: base 70 | command: node services/user-service.js 71 | depends_on: 72 | - db 73 | 74 | db: 75 | extends: base 76 | command: node init-db.js 77 | depends_on: 78 | - postgres 79 | 80 | postgres: 81 | image: sameersbn/postgresql:9.6-1 82 | environment: 83 | - DB_USER=cote 84 | - DB_PASS=ohgath2ig8eoP8 85 | - DB_NAME=cote 86 | -------------------------------------------------------------------------------- /services/purchase-service.js: -------------------------------------------------------------------------------- 1 | var cote = require('cote'), 2 | models = require('../models'); 3 | 4 | var purchaseResponder = new cote.Responder({ 5 | name: 'purchase responder', 6 | namespace: 'purchase', 7 | respondsTo: ['buy'] 8 | }); 9 | 10 | var purchasePublisher = new cote.Publisher({ 11 | name: 'purchase publisher', 12 | namespace: 'purchase', 13 | broadcasts: ['update'] 14 | }); 15 | 16 | var paymentRequester = new cote.Requester({ 17 | name: 'payment requester', 18 | key: 'payment' 19 | }); 20 | 21 | purchaseResponder.on('*', console.log); 22 | 23 | purchaseResponder.on('buy', function(req, cb) { 24 | var purchase = new models.Purchase({}); 25 | 26 | models.Product.get(req.productId, function(err, product) { 27 | if (product.stock == 0) return cb(true); 28 | 29 | paymentRequester.send({ type: 'process', userId: req.userId, price: product.price }, function(err) { 30 | if (err) return cb(err); 31 | 32 | product.stock--; 33 | 34 | models.User.get(req.userId, function(err, user) { 35 | product.save(function() { 36 | purchase.setOwner(user, function() { 37 | purchase.setProduct(product, function() { 38 | purchase.save(function(err, purchase) { 39 | cb(err, { 40 | user: user, 41 | purchase: purchase 42 | }); 43 | updatePurchases(); 44 | }); 45 | }); 46 | }); 47 | }); 48 | }); 49 | }); 50 | }); 51 | }); 52 | 53 | purchaseResponder.on('list', function(req, cb) { 54 | var query = req.query || {}; 55 | models.Purchase.find(query, cb); 56 | }); 57 | 58 | function updatePurchases() { 59 | models.Purchase.find(function(err, purchases) { 60 | purchasePublisher.publish('update', purchases); 61 | }); 62 | } 63 | -------------------------------------------------------------------------------- /end-user/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | End User 5 | 6 | 7 | 8 | 9 | 46 | 47 | 48 |

49 | User #{{user.id}} 50 | Balance ${{user.balance}} 51 |

52 | 53 |

Products

54 |
55 |

{{product.name || 'a' }}

56 | 57 |

{{product.stock}} in stock

58 | 61 |
62 | 63 | 64 | -------------------------------------------------------------------------------- /docker-cloud.yml: -------------------------------------------------------------------------------- 1 | admin: 2 | autoredeploy: true 3 | command: node admin/server.js 4 | environment: 5 | - BALANCE=source 6 | - 'VIRTUAL_HOST=admin.cotejs.org, demo-admin.cotejs.org, ws://admin.cotejs.org, ws://demo-admin.cotejs.org' 7 | expose: 8 | - '5000' 9 | image: 'cotedemo/cote-workshop:admin' 10 | restart: on-failure 11 | tags: 12 | - admin 13 | db: 14 | autoredeploy: true 15 | command: node init-db.js 16 | environment: 17 | - PG=true 18 | image: 'cotedemo/cote-workshop:init-db' 19 | links: 20 | - postgres 21 | tags: 22 | - db 23 | end-user: 24 | autoredeploy: true 25 | command: node end-user/server.js 26 | environment: 27 | - BALANCE=source 28 | - 'VIRTUAL_HOST=end-user.cotejs.org, ws://end-user.cotejs.org, demo-end-user.cotejs.org, ws://demo-end-user.cotejs.org' 29 | expose: 30 | - '5001' 31 | image: 'cotedemo/cote-workshop:end-user' 32 | restart: on-failure 33 | tags: 34 | - end-user 35 | lb: 36 | deployment_strategy: every_node 37 | image: 'dockercloud/haproxy:latest' 38 | links: 39 | - admin 40 | - end-user 41 | - monitoring 42 | ports: 43 | - '80:80' 44 | - '443:443' 45 | restart: on-failure 46 | roles: 47 | - global 48 | tags: 49 | - lb 50 | monitoring: 51 | autoredeploy: true 52 | command: node monitor.js 53 | environment: 54 | - PORT=5555 55 | - 'VIRTUAL_HOST=monitoring.cotejs.org,demo-monitoring.cotejs.org' 56 | expose: 57 | - '5555' 58 | image: 'cotedemo/cote-workshop:monitoring' 59 | tags: 60 | - mon 61 | payment-service: 62 | autoredeploy: true 63 | command: node services/payment-service.js 64 | environment: 65 | - PG=true 66 | image: 'cotedemo/cote-workshop:payment-service' 67 | links: 68 | - postgres 69 | restart: on-failure 70 | tags: 71 | - payment 72 | postgres: 73 | environment: 74 | - DB_NAME=cote 75 | - DB_PASS=ohgath2ig8eoP8 76 | - DB_USER=cote 77 | image: 'sameersbn/postgresql:9.6-1' 78 | tags: 79 | - db 80 | volumes: 81 | - '/data/pg:/var/lib/postgresql' 82 | product-service: 83 | autoredeploy: true 84 | command: node services/product-service.js 85 | environment: 86 | - PG=true 87 | image: 'cotedemo/cote-workshop:product-service' 88 | restart: on-failure 89 | tags: 90 | - services 91 | purchase-service: 92 | autoredeploy: true 93 | command: node services/purchase-service.js 94 | environment: 95 | - PG=true 96 | image: 'cotedemo/cote-workshop:purchase-service' 97 | restart: on-failure 98 | tags: 99 | - services 100 | user-service: 101 | autoredeploy: true 102 | command: node services/user-service.js 103 | environment: 104 | - PG=true 105 | image: 'cotedemo/cote-workshop:user-service' 106 | restart: on-failure 107 | tags: 108 | - services 109 | -------------------------------------------------------------------------------- /docker-swarm.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | networks: 4 | lb: 5 | driver: overlay 6 | cote: 7 | driver: overlay 8 | 9 | services: 10 | lb: 11 | image: dockercloud/haproxy 12 | deploy: 13 | placement: 14 | constraints: 15 | - node.role == manager 16 | networks: 17 | - lb 18 | volumes: 19 | - /var/run/docker.sock:/var/run/docker.sock 20 | ports: 21 | - 80:80 22 | - 443:443 23 | 24 | admin: 25 | image: dashersw/cote-workshop 26 | networks: 27 | - lb 28 | - cote 29 | command: node admin/server.js 30 | environment: 31 | - PG=true 32 | - COTE_DISCOVERY_REDIS_HOST=redis 33 | - VIRTUAL_HOST=local-admin.cotejs.org, ws://local-admin.cotejs.org 34 | - SERVICE_PORTS=5000 35 | - BALANCE=source 36 | 37 | end-user: 38 | networks: 39 | - lb 40 | - cote 41 | image: dashersw/cote-workshop 42 | command: node end-user/server.js 43 | environment: 44 | - PG=true 45 | - COTE_DISCOVERY_REDIS_HOST=redis 46 | - VIRTUAL_HOST=local-end-user.cotejs.org, ws://local-end-user.cotejs.org 47 | - SERVICE_PORTS=5001 48 | - BALANCE=source 49 | 50 | monitoring: 51 | networks: 52 | - lb 53 | - cote 54 | image: dashersw/cote-workshop 55 | command: node monitor.js 56 | environment: 57 | - PG=true 58 | - COTE_DISCOVERY_REDIS_HOST=redis 59 | - SERVICE_PORTS=5555 60 | - VIRTUAL_HOST=local-monitoring.cotejs.org 61 | 62 | payment-service: 63 | networks: 64 | - cote 65 | image: dashersw/cote-workshop 66 | command: node services/payment-service.js 67 | environment: 68 | - PG=true 69 | - COTE_DISCOVERY_REDIS_HOST=redis 70 | depends_on: 71 | - db 72 | 73 | product-service: 74 | networks: 75 | - cote 76 | image: dashersw/cote-workshop 77 | command: node services/product-service.js 78 | environment: 79 | - PG=true 80 | - COTE_DISCOVERY_REDIS_HOST=redis 81 | depends_on: 82 | - db 83 | 84 | purchase-service: 85 | networks: 86 | - cote 87 | image: dashersw/cote-workshop 88 | command: node services/purchase-service.js 89 | environment: 90 | - PG=true 91 | - COTE_DISCOVERY_REDIS_HOST=redis 92 | depends_on: 93 | - db 94 | 95 | user-service: 96 | networks: 97 | - cote 98 | image: dashersw/cote-workshop 99 | command: node services/user-service.js 100 | environment: 101 | - PG=true 102 | - COTE_DISCOVERY_REDIS_HOST=redis 103 | depends_on: 104 | - db 105 | 106 | redis: 107 | image: redis 108 | networks: 109 | - cote 110 | ports: 111 | - 6379:6379 112 | 113 | db: 114 | networks: 115 | - cote 116 | image: dashersw/cote-workshop 117 | command: node init-db.js 118 | environment: 119 | - PG=true 120 | depends_on: 121 | - postgres 122 | 123 | postgres: 124 | networks: 125 | - cote 126 | image: sameersbn/postgresql:9.6-1 127 | environment: 128 | - DB_USER=cote 129 | - DB_PASS=ohgath2ig8eoP8 130 | - DB_NAME=cote 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Microservices case study with cote.js 2 | 3 | This project aims to show a microservices architecture built with [cote.js](https://github.com/dashersw/cote), an auto-discovery mesh network framework for building fault-tolerant and scalable applications. 4 | 5 | It's an example e-commerce application with a complete feature set from admin interface to end user interface, and 4 different microservices for dealing with payments, products, purchases and user management. 6 | 7 | The admin interface is implemented on a REST server to demonstrate how cote.js would work within an existing express-based application. Product, user and purchase management is done via REST calls to the admin server, where they are then forwarded to respective microservices. 8 | 9 | The client interface is implemented entirely in cote; the server only serves a single index.html. It's a breakthrough implementation, which basically means you can host your website statically (on for example, S3), and have all the benefits of a server and the microservices architecture. 10 | 11 | ## Installation 12 | 13 | Run the following commands: 14 | 15 | ``` 16 | git clone https://github.com/dashersw/cote-workshop 17 | cd cote-workshop 18 | npm install 19 | node init-db.js 20 | ``` 21 | 22 | ## Getting the system up and running 23 | 24 | There are four backend services, an admin interface and an end-user interface. 25 | 26 | ### Quickstart 27 | 28 | For the quickest start, have [PM2](http://pm2.keymetrics.io) installed globally and then just type: 29 | 30 | ``` 31 | pm2 start cote-workshop.json 32 | ``` 33 | 34 | This will run all the 6 services you need, and you can monitor your services with `pm2 monit` or use any pm2 commands at your disposal. 35 | 36 | Admin interface will be available in [http://localhost:5000](http://localhost:5000) 37 | 38 | End user interface will be available in [http://localhost:5001](http://localhost:5001) 39 | 40 | Monitoring will be available in [http://localhost:5555](http://localhost:5555) 41 | 42 | Navigate to the admin and (multiple) end user interfaces and add / delete / buy some products to see everything updating in real time! 43 | 44 | ### Manual start 45 | 46 | Run the admin interface: 47 | 48 | ``` 49 | node admin/server 50 | ``` 51 | 52 | Admin interface will be available in [http://localhost:5000](http://localhost:5000) 53 | 54 | Run the end user interface in a separate terminal window (or tab): 55 | 56 | ``` 57 | node end-user/server 58 | ``` 59 | 60 | End user interface will be available in [http://localhost:5001](http://localhost:5001) 61 | 62 | Now run the services in separate terminal windows (or tabs): 63 | 64 | ``` 65 | node services/payment-service 66 | node services/product-service 67 | node services/purchase-service 68 | node services/user-service 69 | ``` 70 | 71 | Navigate to the admin and (multiple) end user interfaces and add / delete / buy some products to see everything updating in real time! 72 | 73 | ## Monitoring 74 | 75 | There's a built-in monitor service which lets you visualize the connections between microservices. The monitoring service is automatically started via pm2, or if you want to manually start it, run: 76 | 77 | ``` 78 | node monitor.js 79 | ``` 80 | 81 | It's a simple monitoring GUI, and will be available in [http://localhost:5555](http://localhost:5555) 82 | 83 | ## Running locally with host names 84 | 85 | This repo includes a proxy service which binds on port 80 to host the application via certain host names. 86 | 87 | The proxy supports these virtual hosts; 88 | 89 | `http://local-admin.cotejs.org` for the admin interface and redirects requests to `localhost:5000`. 90 | 91 | `http://local-end-user.cotejs.org` for the end user interface and redirects requests to `localhost:5001`. 92 | 93 | `http://local-monitoring.cotejs.org` for the monitoring interface and redirects requests to `localhost:5555`. 94 | 95 | Then you have to modify your `/etc/hosts` file to include `127.0.0.1 local-admin.cotejs.org local-end-user.cotejs.org local-monitoring.cotejs.org`. Now when you visit either of these addresses in your browser, you will be redirected to the respective service. 96 | 97 | ## Docker installation 98 | 99 | This repository includes a full-featured `docker-compose.yml` to start all the necessary services including a PostgreSQL database via Docker. 100 | 101 | Run the following to launch all services; 102 | ``` 103 | docker-compose up 104 | ``` 105 | 106 | This will build necessary local images and then launch a cluster of services. If you edit your `/etc/hosts` file to accomodate the given domain names, you can interact with the application via your browser. 107 | -------------------------------------------------------------------------------- /admin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Admin 4 | 5 | 6 | 7 | 8 | 59 | 60 | 61 |

Products

62 | 63 |

Add new product

64 | 65 |
66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 83 | 84 | 85 |
NamePriceStockAction
81 | 82 |
86 |
87 | 88 |

List all products

89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 108 | 109 | 110 |
#NamePriceStockAction
{{product.id}}{{product.name}}{{product.price}}{{product.stock}} 106 | 107 |
111 | 112 |

Users

113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 |
#BalancePurchases
{{user.id}}{{user.balance}}{{user.productIds}}
129 | 130 |

Purchases

131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 |
#UserProduct
{{purchase.id}}{{purchase.owner.id}}{{purchase.product.name}}
147 | 148 | 149 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@dashersw/axon@2.0.3": 6 | version "2.0.3" 7 | resolved "https://registry.yarnpkg.com/@dashersw/axon/-/axon-2.0.3.tgz#d3a48c8a954cf13118f09dc0ea49090872b0697f" 8 | dependencies: 9 | amp "~0.3.1" 10 | amp-message "~0.1.1" 11 | configurable "0.0.1" 12 | debug "*" 13 | escape-regexp "0.0.1" 14 | 15 | abbrev@1: 16 | version "1.0.9" 17 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 18 | 19 | accepts@1.3.3, accepts@~1.3.3: 20 | version "1.3.3" 21 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 22 | dependencies: 23 | mime-types "~2.1.11" 24 | negotiator "0.6.1" 25 | 26 | after@0.8.1: 27 | version "0.8.1" 28 | resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" 29 | 30 | after@0.8.2: 31 | version "0.8.2" 32 | resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 33 | 34 | amp-message@~0.1.1: 35 | version "0.1.2" 36 | resolved "https://registry.yarnpkg.com/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" 37 | dependencies: 38 | amp "0.3.1" 39 | 40 | amp@0.3.1, amp@~0.3.1: 41 | version "0.3.1" 42 | resolved "https://registry.yarnpkg.com/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" 43 | 44 | ansi-regex@^2.0.0: 45 | version "2.1.1" 46 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 47 | 48 | ansi-styles@^2.2.1: 49 | version "2.2.1" 50 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 51 | 52 | ap@~0.2.0: 53 | version "0.2.0" 54 | resolved "https://registry.yarnpkg.com/ap/-/ap-0.2.0.tgz#ae0942600b29912f0d2b14ec60c45e8f330b6110" 55 | 56 | aproba@^1.0.3: 57 | version "1.0.4" 58 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" 59 | 60 | are-we-there-yet@~1.1.2: 61 | version "1.1.2" 62 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" 63 | dependencies: 64 | delegates "^1.0.0" 65 | readable-stream "^2.0.0 || ^1.1.13" 66 | 67 | array-flatten@1.1.1: 68 | version "1.1.1" 69 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 70 | 71 | arraybuffer.slice@0.0.6: 72 | version "0.0.6" 73 | resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" 74 | 75 | asn1@0.1.11: 76 | version "0.1.11" 77 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" 78 | 79 | asn1@~0.2.3: 80 | version "0.2.3" 81 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 82 | 83 | asn1js@^1.2.12: 84 | version "1.2.12" 85 | resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-1.2.12.tgz#87d5ee797596ae2d2a3cb0247220dc42ffc3f211" 86 | 87 | assert-plus@^0.1.5: 88 | version "0.1.5" 89 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" 90 | 91 | assert-plus@^0.2.0: 92 | version "0.2.0" 93 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 94 | 95 | assert-plus@^1.0.0: 96 | version "1.0.0" 97 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 98 | 99 | async@2.1.4, async@^2.0.1: 100 | version "2.1.4" 101 | resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" 102 | dependencies: 103 | lodash "^4.14.0" 104 | 105 | async@^1.5.2: 106 | version "1.5.2" 107 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 108 | 109 | asynckit@^0.4.0: 110 | version "0.4.0" 111 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 112 | 113 | aws-sign2@~0.5.0: 114 | version "0.5.0" 115 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" 116 | 117 | aws-sign2@~0.6.0: 118 | version "0.6.0" 119 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 120 | 121 | aws4@^1.2.1: 122 | version "1.5.0" 123 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" 124 | 125 | backo2@1.0.2: 126 | version "1.0.2" 127 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 128 | 129 | balanced-match@^0.4.1: 130 | version "0.4.2" 131 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 132 | 133 | base64-arraybuffer@0.1.2: 134 | version "0.1.2" 135 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154" 136 | 137 | base64-arraybuffer@0.1.5: 138 | version "0.1.5" 139 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" 140 | 141 | base64id@0.1.0: 142 | version "0.1.0" 143 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" 144 | 145 | base64id@1.0.0: 146 | version "1.0.0" 147 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" 148 | 149 | bcrypt-pbkdf@^1.0.0: 150 | version "1.0.0" 151 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" 152 | dependencies: 153 | tweetnacl "^0.14.3" 154 | 155 | benchmark@1.0.0: 156 | version "1.0.0" 157 | resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73" 158 | 159 | better-assert@~1.0.0: 160 | version "1.0.2" 161 | resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" 162 | dependencies: 163 | callsite "1.0.0" 164 | 165 | bindings@^1.2.1, bindings@~1.2.1: 166 | version "1.2.1" 167 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" 168 | 169 | bl@~1.0.0: 170 | version "1.0.3" 171 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e" 172 | dependencies: 173 | readable-stream "~2.0.5" 174 | 175 | blob@0.0.2: 176 | version "0.0.2" 177 | resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.2.tgz#b89562bd6994af95ba1e812155536333aa23cf24" 178 | 179 | blob@0.0.4: 180 | version "0.0.4" 181 | resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" 182 | 183 | block-stream@*: 184 | version "0.0.9" 185 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 186 | dependencies: 187 | inherits "~2.0.0" 188 | 189 | bluebird@^2.9.24, bluebird@^2.9.30: 190 | version "2.11.0" 191 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" 192 | 193 | bluebird@^3.0.6, bluebird@^3.4.0, bluebird@^3.4.1: 194 | version "3.4.7" 195 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" 196 | 197 | body-parser@^1.16.0: 198 | version "1.16.0" 199 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b" 200 | dependencies: 201 | bytes "2.4.0" 202 | content-type "~1.0.2" 203 | debug "2.6.0" 204 | depd "~1.1.0" 205 | http-errors "~1.5.1" 206 | iconv-lite "0.4.15" 207 | on-finished "~2.3.0" 208 | qs "6.2.1" 209 | raw-body "~2.2.0" 210 | type-is "~1.6.14" 211 | 212 | boom@2.x.x: 213 | version "2.10.1" 214 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 215 | dependencies: 216 | hoek "2.x.x" 217 | 218 | brace-expansion@^1.0.0: 219 | version "1.1.6" 220 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 221 | dependencies: 222 | balanced-match "^0.4.1" 223 | concat-map "0.0.1" 224 | 225 | buffer-shims@^1.0.0: 226 | version "1.0.0" 227 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 228 | 229 | buffer-v6-polyfill@^1.0.3: 230 | version "1.0.3" 231 | resolved "https://registry.yarnpkg.com/buffer-v6-polyfill/-/buffer-v6-polyfill-1.0.3.tgz#bc695c6f19d00a63e83338c36cd68f3f5dcba3e8" 232 | 233 | buffer-writer@1.0.1: 234 | version "1.0.1" 235 | resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-1.0.1.tgz#22a936901e3029afcd7547eb4487ceb697a3bf08" 236 | 237 | bunyan@^1.8.1: 238 | version "1.8.5" 239 | resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.5.tgz#0d619e83005fb89070f5f47982fc1bf00600878a" 240 | optionalDependencies: 241 | dtrace-provider "~0.8" 242 | moment "^2.10.6" 243 | mv "~2" 244 | safe-json-stringify "~1" 245 | 246 | bytes@2.4.0: 247 | version "2.4.0" 248 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" 249 | 250 | callsite@1.0.0: 251 | version "1.0.0" 252 | resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" 253 | 254 | caseless@~0.11.0: 255 | version "0.11.0" 256 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 257 | 258 | certpem@^1.0.0: 259 | version "1.0.1" 260 | resolved "https://registry.yarnpkg.com/certpem/-/certpem-1.0.1.tgz#fa4a258c4057965c465700822fb8d807d7f2d9f5" 261 | dependencies: 262 | asn1js "^1.2.12" 263 | buffer-v6-polyfill "^1.0.3" 264 | node.extend "^1.1.5" 265 | pkijs "^1.3.27" 266 | 267 | chalk@^1.0.0, chalk@^1.1.1: 268 | version "1.1.3" 269 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 270 | dependencies: 271 | ansi-styles "^2.2.1" 272 | escape-string-regexp "^1.0.2" 273 | has-ansi "^2.0.0" 274 | strip-ansi "^3.0.0" 275 | supports-color "^2.0.0" 276 | 277 | charm@0.1.2: 278 | version "0.1.2" 279 | resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" 280 | 281 | code-point-at@^1.0.0: 282 | version "1.1.0" 283 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 284 | 285 | colors@0.x.x: 286 | version "0.6.2" 287 | resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" 288 | 289 | combined-stream@^1.0.5, combined-stream@~1.0.1, combined-stream@~1.0.5: 290 | version "1.0.5" 291 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 292 | dependencies: 293 | delayed-stream "~1.0.0" 294 | 295 | commander@^2.8.1, commander@^2.9.0: 296 | version "2.9.0" 297 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 298 | dependencies: 299 | graceful-readlink ">= 1.0.0" 300 | 301 | commander@~0.6.1: 302 | version "0.6.1" 303 | resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" 304 | 305 | component-bind@1.0.0: 306 | version "1.0.0" 307 | resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" 308 | 309 | component-emitter@1.1.2: 310 | version "1.1.2" 311 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" 312 | 313 | component-emitter@1.2.1: 314 | version "1.2.1" 315 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 316 | 317 | component-inherit@0.0.3: 318 | version "0.0.3" 319 | resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" 320 | 321 | concat-map@0.0.1: 322 | version "0.0.1" 323 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 324 | 325 | configurable@0.0.1: 326 | version "0.0.1" 327 | resolved "https://registry.yarnpkg.com/configurable/-/configurable-0.0.1.tgz#47d75b727b51b4eb84c1dadafe3f8240313833b1" 328 | 329 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 330 | version "1.1.0" 331 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 332 | 333 | content-disposition@0.5.1: 334 | version "0.5.1" 335 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" 336 | 337 | content-type@~1.0.2: 338 | version "1.0.2" 339 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" 340 | 341 | cookie-signature@1.0.6: 342 | version "1.0.6" 343 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 344 | 345 | cookie@0.3.1: 346 | version "0.3.1" 347 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 348 | 349 | core-util-is@~1.0.0: 350 | version "1.0.2" 351 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 352 | 353 | cote@0.9.3-monitoring: 354 | version "0.9.3-monitoring" 355 | resolved "https://registry.yarnpkg.com/cote/-/cote-0.9.3-monitoring.tgz#6a68ba603dfcbf0e04db9b9e73e871f5d8c6a758" 356 | dependencies: 357 | "@dashersw/axon" "2.0.3" 358 | charm "0.1.2" 359 | colors "0.x.x" 360 | eventemitter2 "0.4.x" 361 | lodash "4.13.1" 362 | node-discover "0.4.0" 363 | node-uuid "1.4.1" 364 | portfinder "1.0.x" 365 | socket.io "1.3.5" 366 | 367 | cryptiles@2.x.x: 368 | version "2.0.5" 369 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 370 | dependencies: 371 | boom "2.x.x" 372 | 373 | ctype@0.5.3: 374 | version "0.5.3" 375 | resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" 376 | 377 | dashdash@^1.12.0: 378 | version "1.14.1" 379 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 380 | dependencies: 381 | assert-plus "^1.0.0" 382 | 383 | deasync@~0.1.1: 384 | version "0.1.9" 385 | resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.9.tgz#f58dd49fa63110c74bea8405a90a828be26d3a24" 386 | dependencies: 387 | bindings "~1.2.1" 388 | nan "^2.0.7" 389 | 390 | debug@*, debug@2.6.0, debug@^2.2.0: 391 | version "2.6.0" 392 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" 393 | dependencies: 394 | ms "0.7.2" 395 | 396 | debug@0.7.4: 397 | version "0.7.4" 398 | resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" 399 | 400 | debug@1.0.2: 401 | version "1.0.2" 402 | resolved "https://registry.yarnpkg.com/debug/-/debug-1.0.2.tgz#3849591c10cce648476c3c7c2e2e3416db5963c4" 403 | dependencies: 404 | ms "0.6.2" 405 | 406 | debug@1.0.3: 407 | version "1.0.3" 408 | resolved "https://registry.yarnpkg.com/debug/-/debug-1.0.3.tgz#fc8c6b2d6002804b4081c0208e0f6460ba1fa3e4" 409 | dependencies: 410 | ms "0.6.2" 411 | 412 | debug@1.0.4: 413 | version "1.0.4" 414 | resolved "https://registry.yarnpkg.com/debug/-/debug-1.0.4.tgz#5b9c256bd54b6ec02283176fa8a0ede6d154cbf8" 415 | dependencies: 416 | ms "0.6.2" 417 | 418 | debug@2.1.0: 419 | version "2.1.0" 420 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.0.tgz#33ab915659d8c2cc8a41443d94d6ebd37697ed21" 421 | dependencies: 422 | ms "0.6.2" 423 | 424 | debug@2.2.0, debug@~2.2.0: 425 | version "2.2.0" 426 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 427 | dependencies: 428 | ms "0.7.1" 429 | 430 | debug@2.3.3: 431 | version "2.3.3" 432 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" 433 | dependencies: 434 | ms "0.7.2" 435 | 436 | deep-extend@~0.4.0: 437 | version "0.4.1" 438 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 439 | 440 | delayed-stream@~1.0.0: 441 | version "1.0.0" 442 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 443 | 444 | delegates@^1.0.0: 445 | version "1.0.0" 446 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 447 | 448 | depd@~1.1.0: 449 | version "1.1.0" 450 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 451 | 452 | destroy@~1.0.4: 453 | version "1.0.4" 454 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 455 | 456 | dolphin@*: 457 | version "0.1.14" 458 | resolved "https://registry.yarnpkg.com/dolphin/-/dolphin-0.1.14.tgz#a545ae22762c0bc9ab9b818d9b4eff8bff28bf3e" 459 | dependencies: 460 | bluebird "^2.9.24" 461 | lodash "^4.15.0" 462 | request "^2.65.0" 463 | 464 | dtrace-provider@~0.8: 465 | version "0.8.0" 466 | resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.0.tgz#fa95fbf67ed3ae3e97364f9664af7302e5ff5625" 467 | dependencies: 468 | nan "^2.3.3" 469 | 470 | ecc-jsbn@~0.1.1: 471 | version "0.1.1" 472 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 473 | dependencies: 474 | jsbn "~0.1.0" 475 | 476 | ee-first@1.1.1: 477 | version "1.1.1" 478 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 479 | 480 | encodeurl@~1.0.1: 481 | version "1.0.1" 482 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 483 | 484 | enforce@0.1.7: 485 | version "0.1.7" 486 | resolved "https://registry.yarnpkg.com/enforce/-/enforce-0.1.7.tgz#af7cdd3fa982b2ecaae06ae7b5c259517d22be3f" 487 | 488 | engine.io-client@1.5.1: 489 | version "1.5.1" 490 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.5.1.tgz#ecd0026d90b065169b9885960183f3d56b8da18e" 491 | dependencies: 492 | component-emitter "1.1.2" 493 | component-inherit "0.0.3" 494 | debug "1.0.4" 495 | engine.io-parser "1.2.1" 496 | has-cors "1.0.3" 497 | indexof "0.0.1" 498 | parsejson "0.0.1" 499 | parseqs "0.0.2" 500 | parseuri "0.0.4" 501 | ws "0.4.31" 502 | xmlhttprequest "https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz" 503 | 504 | engine.io-client@1.8.2: 505 | version "1.8.2" 506 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.2.tgz#c38767547f2a7d184f5752f6f0ad501006703766" 507 | dependencies: 508 | component-emitter "1.2.1" 509 | component-inherit "0.0.3" 510 | debug "2.3.3" 511 | engine.io-parser "1.3.2" 512 | has-cors "1.1.0" 513 | indexof "0.0.1" 514 | parsejson "0.0.3" 515 | parseqs "0.0.5" 516 | parseuri "0.0.5" 517 | ws "1.1.1" 518 | xmlhttprequest-ssl "1.5.3" 519 | yeast "0.1.2" 520 | 521 | engine.io-parser@1.2.1: 522 | version "1.2.1" 523 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.2.1.tgz#4462a67d0c70a907c06db2e1de53791a86f5ab37" 524 | dependencies: 525 | after "0.8.1" 526 | arraybuffer.slice "0.0.6" 527 | base64-arraybuffer "0.1.2" 528 | blob "0.0.2" 529 | has-binary "0.1.5" 530 | utf8 "2.0.0" 531 | 532 | engine.io-parser@1.3.2: 533 | version "1.3.2" 534 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" 535 | dependencies: 536 | after "0.8.2" 537 | arraybuffer.slice "0.0.6" 538 | base64-arraybuffer "0.1.5" 539 | blob "0.0.4" 540 | has-binary "0.1.7" 541 | wtf-8 "1.0.0" 542 | 543 | engine.io@1.5.1: 544 | version "1.5.1" 545 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.5.1.tgz#8f7a4b2aadf974b71ffd185cffe1e2bdf384ddfb" 546 | dependencies: 547 | base64id "0.1.0" 548 | debug "1.0.3" 549 | engine.io-parser "1.2.1" 550 | ws "0.5.0" 551 | 552 | engine.io@1.8.2: 553 | version "1.8.2" 554 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.2.tgz#6b59be730b348c0125b0a4589de1c355abcf7a7e" 555 | dependencies: 556 | accepts "1.3.3" 557 | base64id "1.0.0" 558 | cookie "0.3.1" 559 | debug "2.3.3" 560 | engine.io-parser "1.3.2" 561 | ws "1.1.1" 562 | 563 | escape-html@~1.0.3: 564 | version "1.0.3" 565 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 566 | 567 | escape-regexp@0.0.1: 568 | version "0.0.1" 569 | resolved "https://registry.yarnpkg.com/escape-regexp/-/escape-regexp-0.0.1.tgz#f44bda12d45bbdf9cb7f862ee7e4827b3dd32254" 570 | 571 | escape-string-regexp@^1.0.2: 572 | version "1.0.5" 573 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 574 | 575 | etag@~1.7.0: 576 | version "1.7.0" 577 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" 578 | 579 | eventemitter2@0.4.x: 580 | version "0.4.14" 581 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" 582 | 583 | eventemitter3@1.x.x: 584 | version "1.2.0" 585 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" 586 | 587 | express@^4.14.0: 588 | version "4.14.0" 589 | resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" 590 | dependencies: 591 | accepts "~1.3.3" 592 | array-flatten "1.1.1" 593 | content-disposition "0.5.1" 594 | content-type "~1.0.2" 595 | cookie "0.3.1" 596 | cookie-signature "1.0.6" 597 | debug "~2.2.0" 598 | depd "~1.1.0" 599 | encodeurl "~1.0.1" 600 | escape-html "~1.0.3" 601 | etag "~1.7.0" 602 | finalhandler "0.5.0" 603 | fresh "0.3.0" 604 | merge-descriptors "1.0.1" 605 | methods "~1.1.2" 606 | on-finished "~2.3.0" 607 | parseurl "~1.3.1" 608 | path-to-regexp "0.1.7" 609 | proxy-addr "~1.1.2" 610 | qs "6.2.0" 611 | range-parser "~1.2.0" 612 | send "0.14.1" 613 | serve-static "~1.11.1" 614 | type-is "~1.6.13" 615 | utils-merge "1.0.0" 616 | vary "~1.1.0" 617 | 618 | extend@~3.0.0: 619 | version "3.0.0" 620 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 621 | 622 | extsprintf@1.0.2: 623 | version "1.0.2" 624 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 625 | 626 | finalhandler@0.5.0: 627 | version "0.5.0" 628 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" 629 | dependencies: 630 | debug "~2.2.0" 631 | escape-html "~1.0.3" 632 | on-finished "~2.3.0" 633 | statuses "~1.3.0" 634 | unpipe "~1.0.0" 635 | 636 | forever-agent@~0.6.0, forever-agent@~0.6.1: 637 | version "0.6.1" 638 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 639 | 640 | form-data@~1.0.0-rc1: 641 | version "1.0.1" 642 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" 643 | dependencies: 644 | async "^2.0.1" 645 | combined-stream "^1.0.5" 646 | mime-types "^2.1.11" 647 | 648 | form-data@~2.1.1: 649 | version "2.1.2" 650 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" 651 | dependencies: 652 | asynckit "^0.4.0" 653 | combined-stream "^1.0.5" 654 | mime-types "^2.1.12" 655 | 656 | forwarded@~0.1.0: 657 | version "0.1.0" 658 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" 659 | 660 | fresh@0.3.0: 661 | version "0.3.0" 662 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" 663 | 664 | fs.realpath@^1.0.0: 665 | version "1.0.0" 666 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 667 | 668 | fstream-ignore@~1.0.5: 669 | version "1.0.5" 670 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 671 | dependencies: 672 | fstream "^1.0.0" 673 | inherits "2" 674 | minimatch "^3.0.0" 675 | 676 | fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: 677 | version "1.0.10" 678 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" 679 | dependencies: 680 | graceful-fs "^4.1.2" 681 | inherits "~2.0.0" 682 | mkdirp ">=0.5 0" 683 | rimraf "2" 684 | 685 | gauge@~2.7.1: 686 | version "2.7.2" 687 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" 688 | dependencies: 689 | aproba "^1.0.3" 690 | console-control-strings "^1.0.0" 691 | has-unicode "^2.0.0" 692 | object-assign "^4.1.0" 693 | signal-exit "^3.0.0" 694 | string-width "^1.0.1" 695 | strip-ansi "^3.0.1" 696 | supports-color "^0.2.0" 697 | wide-align "^1.1.0" 698 | 699 | generate-function@^2.0.0: 700 | version "2.0.0" 701 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 702 | 703 | generate-object-property@^1.1.0: 704 | version "1.2.0" 705 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 706 | dependencies: 707 | is-property "^1.0.0" 708 | 709 | generic-pool@2.4.2: 710 | version "2.4.2" 711 | resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.4.2.tgz#886bc5bf0beb7db96e81bcbba078818de5a62683" 712 | 713 | getpass@^0.1.1: 714 | version "0.1.6" 715 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" 716 | dependencies: 717 | assert-plus "^1.0.0" 718 | 719 | glob@^6.0.1: 720 | version "6.0.4" 721 | resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" 722 | dependencies: 723 | inflight "^1.0.4" 724 | inherits "2" 725 | minimatch "2 || 3" 726 | once "^1.3.0" 727 | path-is-absolute "^1.0.0" 728 | 729 | glob@^7.0.5: 730 | version "7.1.1" 731 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 732 | dependencies: 733 | fs.realpath "^1.0.0" 734 | inflight "^1.0.4" 735 | inherits "2" 736 | minimatch "^3.0.2" 737 | once "^1.3.0" 738 | path-is-absolute "^1.0.0" 739 | 740 | "global@https://github.com/component/global/archive/v2.0.1.tar.gz": 741 | version "2.0.1" 742 | resolved "https://github.com/component/global/archive/v2.0.1.tar.gz#3fb25343fb66d79991b0f4a429ce3b54480eec3c" 743 | 744 | graceful-fs@^4.1.2: 745 | version "4.1.11" 746 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 747 | 748 | "graceful-readlink@>= 1.0.0": 749 | version "1.0.1" 750 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 751 | 752 | handle-thing@^1.2.4: 753 | version "1.2.5" 754 | resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" 755 | 756 | har-validator@^1.6.1: 757 | version "1.8.0" 758 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-1.8.0.tgz#d83842b0eb4c435960aeb108a067a3aa94c0eeb2" 759 | dependencies: 760 | bluebird "^2.9.30" 761 | chalk "^1.0.0" 762 | commander "^2.8.1" 763 | is-my-json-valid "^2.12.0" 764 | 765 | har-validator@~2.0.6: 766 | version "2.0.6" 767 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" 768 | dependencies: 769 | chalk "^1.1.1" 770 | commander "^2.9.0" 771 | is-my-json-valid "^2.12.4" 772 | pinkie-promise "^2.0.0" 773 | 774 | has-ansi@^2.0.0: 775 | version "2.0.0" 776 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 777 | dependencies: 778 | ansi-regex "^2.0.0" 779 | 780 | has-binary-data@0.1.3: 781 | version "0.1.3" 782 | resolved "https://registry.yarnpkg.com/has-binary-data/-/has-binary-data-0.1.3.tgz#8ebb18388b57f19a5231275a16fc18d51f379aae" 783 | dependencies: 784 | isarray "0.0.1" 785 | 786 | has-binary@0.1.5: 787 | version "0.1.5" 788 | resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.5.tgz#95e75720ff31b72a3ba89a5b6dce082e4bc6467f" 789 | dependencies: 790 | isarray "0.0.1" 791 | 792 | has-binary@0.1.6: 793 | version "0.1.6" 794 | resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" 795 | dependencies: 796 | isarray "0.0.1" 797 | 798 | has-binary@0.1.7: 799 | version "0.1.7" 800 | resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" 801 | dependencies: 802 | isarray "0.0.1" 803 | 804 | has-cors@1.0.3: 805 | version "1.0.3" 806 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.0.3.tgz#502acb9b3104dac33dd2630eaf2f888b0baf4cb3" 807 | dependencies: 808 | global "https://github.com/component/global/archive/v2.0.1.tar.gz" 809 | 810 | has-cors@1.1.0: 811 | version "1.1.0" 812 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" 813 | 814 | has-unicode@^2.0.0: 815 | version "2.0.1" 816 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 817 | 818 | hat@0.0.3: 819 | version "0.0.3" 820 | resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" 821 | 822 | hawk@~3.1.0, hawk@~3.1.3: 823 | version "3.1.3" 824 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 825 | dependencies: 826 | boom "2.x.x" 827 | cryptiles "2.x.x" 828 | hoek "2.x.x" 829 | sntp "1.x.x" 830 | 831 | hoek@2.x.x: 832 | version "2.16.3" 833 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 834 | 835 | homedir@^0.6.0: 836 | version "0.6.0" 837 | resolved "https://registry.yarnpkg.com/homedir/-/homedir-0.6.0.tgz#2b21db66bf08a6db38249a3eff52d7d18706af1e" 838 | 839 | hpack.js@^2.1.6: 840 | version "2.1.6" 841 | resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" 842 | dependencies: 843 | inherits "^2.0.1" 844 | obuf "^1.0.0" 845 | readable-stream "^2.0.1" 846 | wbuf "^1.1.0" 847 | 848 | http-deceiver@^1.2.4: 849 | version "1.2.7" 850 | resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" 851 | 852 | http-errors@~1.5.0, http-errors@~1.5.1: 853 | version "1.5.1" 854 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" 855 | dependencies: 856 | inherits "2.0.3" 857 | setprototypeof "1.0.2" 858 | statuses ">= 1.3.1 < 2" 859 | 860 | http-proxy@^1.14.0: 861 | version "1.16.2" 862 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" 863 | dependencies: 864 | eventemitter3 "1.x.x" 865 | requires-port "1.x.x" 866 | 867 | http-signature@~0.11.0: 868 | version "0.11.0" 869 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.11.0.tgz#1796cf67a001ad5cd6849dca0991485f09089fe6" 870 | dependencies: 871 | asn1 "0.1.11" 872 | assert-plus "^0.1.5" 873 | ctype "0.5.3" 874 | 875 | http-signature@~1.1.0: 876 | version "1.1.1" 877 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 878 | dependencies: 879 | assert-plus "^0.2.0" 880 | jsprim "^1.2.2" 881 | sshpk "^1.7.0" 882 | 883 | iconv-lite@0.4.15: 884 | version "0.4.15" 885 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" 886 | 887 | indexof@0.0.1: 888 | version "0.0.1" 889 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 890 | 891 | inflight@^1.0.4: 892 | version "1.0.6" 893 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 894 | dependencies: 895 | once "^1.3.0" 896 | wrappy "1" 897 | 898 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: 899 | version "2.0.3" 900 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 901 | 902 | ini@~1.3.0: 903 | version "1.3.4" 904 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 905 | 906 | ipaddr.js@1.2.0: 907 | version "1.2.0" 908 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" 909 | 910 | is-fullwidth-code-point@^1.0.0: 911 | version "1.0.0" 912 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 913 | dependencies: 914 | number-is-nan "^1.0.0" 915 | 916 | is-my-json-valid@^2.12.0, is-my-json-valid@^2.12.4: 917 | version "2.15.0" 918 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" 919 | dependencies: 920 | generate-function "^2.0.0" 921 | generate-object-property "^1.1.0" 922 | jsonpointer "^4.0.0" 923 | xtend "^4.0.0" 924 | 925 | is-property@^1.0.0: 926 | version "1.0.2" 927 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 928 | 929 | is-typedarray@~1.0.0: 930 | version "1.0.0" 931 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 932 | 933 | is@^3.1.0: 934 | version "3.2.0" 935 | resolved "https://registry.yarnpkg.com/is/-/is-3.2.0.tgz#a362e3daf7df3fd8b7114115d624c5b7e1cb90f7" 936 | 937 | isarray@0.0.1: 938 | version "0.0.1" 939 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 940 | 941 | isarray@~1.0.0: 942 | version "1.0.0" 943 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 944 | 945 | isstream@~0.1.1, isstream@~0.1.2: 946 | version "0.1.2" 947 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 948 | 949 | jodid25519@^1.0.0: 950 | version "1.0.2" 951 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 952 | dependencies: 953 | jsbn "~0.1.0" 954 | 955 | jsbn@~0.1.0: 956 | version "0.1.0" 957 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" 958 | 959 | json-schema@0.2.3: 960 | version "0.2.3" 961 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 962 | 963 | json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: 964 | version "5.0.1" 965 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 966 | 967 | json3@3.2.6: 968 | version "3.2.6" 969 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.2.6.tgz#f6efc93c06a04de9aec53053df2559bb19e2038b" 970 | 971 | json3@3.3.2: 972 | version "3.3.2" 973 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 974 | 975 | jsonpointer@^4.0.0: 976 | version "4.0.1" 977 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 978 | 979 | jsprim@^1.2.2: 980 | version "1.3.1" 981 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" 982 | dependencies: 983 | extsprintf "1.0.2" 984 | json-schema "0.2.3" 985 | verror "1.3.6" 986 | 987 | le-acme-core@^2.0.5: 988 | version "2.0.9" 989 | resolved "https://registry.yarnpkg.com/le-acme-core/-/le-acme-core-2.0.9.tgz#6f90042c34cf67474d136618912e576907f77914" 990 | dependencies: 991 | request "^2.74.0" 992 | rsa-compat "^1.2.7" 993 | 994 | le-challenge-fs@^2.0.2, le-challenge-fs@^2.0.4: 995 | version "2.0.8" 996 | resolved "https://registry.yarnpkg.com/le-challenge-fs/-/le-challenge-fs-2.0.8.tgz#b6d458a37f097e87df3d8b5ff67013737ab9d5a2" 997 | dependencies: 998 | mkdirp "^0.5.1" 999 | 1000 | le-challenge-sni@^2.0.0: 1001 | version "2.0.1" 1002 | resolved "https://registry.yarnpkg.com/le-challenge-sni/-/le-challenge-sni-2.0.1.tgz#4e262f1bf52cf1d181e64bc187776b7a68c8f417" 1003 | dependencies: 1004 | le-tls-sni "^0.1.0" 1005 | 1006 | le-sni-auto@^2.1.0: 1007 | version "2.1.0" 1008 | resolved "https://registry.yarnpkg.com/le-sni-auto/-/le-sni-auto-2.1.0.tgz#a58adbf92e0ac5f9652192961d8668861e633d46" 1009 | dependencies: 1010 | bluebird "^3.4.1" 1011 | 1012 | le-store-certbot@^2.0.3: 1013 | version "2.0.3" 1014 | resolved "https://registry.yarnpkg.com/le-store-certbot/-/le-store-certbot-2.0.3.tgz#8de549b5b23bbef8d920cb4fea8eb4b8e14c70eb" 1015 | dependencies: 1016 | bluebird "^3.4.1" 1017 | mkdirp "^0.5.1" 1018 | pyconf "^1.1.2" 1019 | safe-replace "^1.0.2" 1020 | 1021 | le-tls-sni@^0.1.0: 1022 | version "0.1.4" 1023 | resolved "https://registry.yarnpkg.com/le-tls-sni/-/le-tls-sni-0.1.4.tgz#785309a07b0ebb24190fe5ba615b9cc7685ce19c" 1024 | dependencies: 1025 | node-forge "^0.6.43" 1026 | rsa-compat "^1.2.7" 1027 | 1028 | letsencrypt@^2.1.6: 1029 | version "2.1.8" 1030 | resolved "https://registry.yarnpkg.com/letsencrypt/-/letsencrypt-2.1.8.tgz#981ae1415b9fb372ae15f1156d5d32b7dcc78bdd" 1031 | dependencies: 1032 | asn1js "^1.2.12" 1033 | bluebird "^3.0.6" 1034 | certpem "^1.0.0" 1035 | homedir "^0.6.0" 1036 | le-acme-core "^2.0.5" 1037 | le-challenge-fs "^2.0.2" 1038 | le-challenge-sni "^2.0.0" 1039 | le-sni-auto "^2.1.0" 1040 | le-store-certbot "^2.0.3" 1041 | localhost.daplie.com-certificates "^1.2.3" 1042 | node.extend "^1.1.5" 1043 | pkijs "^1.3.27" 1044 | rsa-compat "^1.2.1" 1045 | 1046 | localhost.daplie.com-certificates@^1.2.3: 1047 | version "1.2.4" 1048 | resolved "https://registry.yarnpkg.com/localhost.daplie.com-certificates/-/localhost.daplie.com-certificates-1.2.4.tgz#f68c192b16646fa366fe9b0fd655f488a3113855" 1049 | 1050 | lodash@4.13.1, lodash@^4.13.1: 1051 | version "4.13.1" 1052 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.13.1.tgz#83e4b10913f48496d4d16fec4a560af2ee744b68" 1053 | 1054 | lodash@4.17.2, lodash@^4.14.0, lodash@^4.15.0: 1055 | version "4.17.2" 1056 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" 1057 | 1058 | lru-cache@^4.0.1: 1059 | version "4.0.2" 1060 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 1061 | dependencies: 1062 | pseudomap "^1.0.1" 1063 | yallist "^2.0.0" 1064 | 1065 | media-typer@0.3.0: 1066 | version "0.3.0" 1067 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1068 | 1069 | merge-descriptors@1.0.1: 1070 | version "1.0.1" 1071 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1072 | 1073 | methods@~1.1.2: 1074 | version "1.1.2" 1075 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1076 | 1077 | mime-db@~1.26.0: 1078 | version "1.26.0" 1079 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" 1080 | 1081 | mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.2, mime-types@~2.1.7: 1082 | version "2.1.14" 1083 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" 1084 | dependencies: 1085 | mime-db "~1.26.0" 1086 | 1087 | mime@1.3.4: 1088 | version "1.3.4" 1089 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 1090 | 1091 | minimalistic-assert@^1.0.0: 1092 | version "1.0.0" 1093 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" 1094 | 1095 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: 1096 | version "3.0.3" 1097 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 1098 | dependencies: 1099 | brace-expansion "^1.0.0" 1100 | 1101 | minimist@0.0.8: 1102 | version "0.0.8" 1103 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1104 | 1105 | minimist@^1.2.0: 1106 | version "1.2.0" 1107 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1108 | 1109 | mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: 1110 | version "0.5.1" 1111 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1112 | dependencies: 1113 | minimist "0.0.8" 1114 | 1115 | moment@^2.10.6: 1116 | version "2.17.1" 1117 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" 1118 | 1119 | ms@0.6.2: 1120 | version "0.6.2" 1121 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" 1122 | 1123 | ms@0.7.1: 1124 | version "0.7.1" 1125 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1126 | 1127 | ms@0.7.2: 1128 | version "0.7.2" 1129 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 1130 | 1131 | mv@~2: 1132 | version "2.1.1" 1133 | resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" 1134 | dependencies: 1135 | mkdirp "~0.5.1" 1136 | ncp "~2.0.0" 1137 | rimraf "~2.4.0" 1138 | 1139 | nan@1.4.x: 1140 | version "1.4.3" 1141 | resolved "https://registry.yarnpkg.com/nan/-/nan-1.4.3.tgz#c56b5404698063696f597435f9163c312aea5009" 1142 | 1143 | nan@^2.0.7, nan@^2.3.3, nan@~2.4.0: 1144 | version "2.4.0" 1145 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" 1146 | 1147 | nan@~0.3.0: 1148 | version "0.3.2" 1149 | resolved "https://registry.yarnpkg.com/nan/-/nan-0.3.2.tgz#0df1935cab15369075ef160ad2894107aa14dc2d" 1150 | 1151 | ncp@~2.0.0: 1152 | version "2.0.0" 1153 | resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" 1154 | 1155 | negotiator@0.6.1: 1156 | version "0.6.1" 1157 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 1158 | 1159 | node-discover@0.4.0: 1160 | version "0.4.0" 1161 | resolved "https://registry.yarnpkg.com/node-discover/-/node-discover-0.4.0.tgz#32e3081078456088653db5cc46d3715ec294982d" 1162 | dependencies: 1163 | node-uuid "^1.4.3" 1164 | 1165 | node-etcd@^4.2.1: 1166 | version "4.2.1" 1167 | resolved "https://registry.yarnpkg.com/node-etcd/-/node-etcd-4.2.1.tgz#a77ec872822170a9b80bcc354190287adfc24b43" 1168 | dependencies: 1169 | deasync "~0.1.1" 1170 | request "~2.60.0" 1171 | underscore "~1.8.2" 1172 | 1173 | node-forge@^0.6.41, node-forge@^0.6.43: 1174 | version "0.6.47" 1175 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.47.tgz#84a239c1eabfd9bbe3a9b7308d52102fdba1da81" 1176 | 1177 | node-pre-gyp@~0.6.31: 1178 | version "0.6.32" 1179 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" 1180 | dependencies: 1181 | mkdirp "~0.5.1" 1182 | nopt "~3.0.6" 1183 | npmlog "^4.0.1" 1184 | rc "~1.1.6" 1185 | request "^2.79.0" 1186 | rimraf "~2.5.4" 1187 | semver "~5.3.0" 1188 | tar "~2.2.1" 1189 | tar-pack "~3.3.0" 1190 | 1191 | node-uuid@1.4.1: 1192 | version "1.4.1" 1193 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.1.tgz#39aef510e5889a3dca9c895b506c73aae1bac048" 1194 | 1195 | node-uuid@^1.4.3, node-uuid@~1.4.0: 1196 | version "1.4.7" 1197 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" 1198 | 1199 | node.extend@^1.1.5: 1200 | version "1.1.6" 1201 | resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.6.tgz#a7b882c82d6c93a4863a5504bd5de8ec86258b96" 1202 | dependencies: 1203 | is "^3.1.0" 1204 | 1205 | nopt@~3.0.6: 1206 | version "3.0.6" 1207 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 1208 | dependencies: 1209 | abbrev "1" 1210 | 1211 | npmlog@^4.0.1: 1212 | version "4.0.2" 1213 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" 1214 | dependencies: 1215 | are-we-there-yet "~1.1.2" 1216 | console-control-strings "~1.1.0" 1217 | gauge "~2.7.1" 1218 | set-blocking "~2.0.0" 1219 | 1220 | number-is-nan@^1.0.0: 1221 | version "1.0.1" 1222 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1223 | 1224 | oauth-sign@~0.8.0, oauth-sign@~0.8.1: 1225 | version "0.8.2" 1226 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1227 | 1228 | object-assign@4.1.0, object-assign@^4.1.0: 1229 | version "4.1.0" 1230 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 1231 | 1232 | object-component@0.0.3: 1233 | version "0.0.3" 1234 | resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" 1235 | 1236 | object-hash@^1.1.2: 1237 | version "1.1.5" 1238 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.1.5.tgz#bdd844e030d0861b692ca175c6cab6868ec233d7" 1239 | 1240 | object-keys@1.0.1: 1241 | version "1.0.1" 1242 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.1.tgz#55802e85842c26bbb5ebbc157abf3be302569ba8" 1243 | 1244 | obuf@^1.0.0, obuf@^1.1.0: 1245 | version "1.1.1" 1246 | resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" 1247 | 1248 | on-finished@~2.3.0: 1249 | version "2.3.0" 1250 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1251 | dependencies: 1252 | ee-first "1.1.1" 1253 | 1254 | once@^1.3.0, once@~1.3.3: 1255 | version "1.3.3" 1256 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 1257 | dependencies: 1258 | wrappy "1" 1259 | 1260 | options@>=0.0.5: 1261 | version "0.0.6" 1262 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 1263 | 1264 | orm@^3.2.3: 1265 | version "3.2.3" 1266 | resolved "https://registry.yarnpkg.com/orm/-/orm-3.2.3.tgz#53ce621d84b026ad8fdb5afd918f60aff1710f20" 1267 | dependencies: 1268 | async "2.1.4" 1269 | enforce "0.1.7" 1270 | hat "0.0.3" 1271 | lodash "4.17.2" 1272 | path-is-absolute "1.0.1" 1273 | sql-ddl-sync "0.3.12" 1274 | sql-query "0.1.26" 1275 | 1276 | packet-reader@0.2.0: 1277 | version "0.2.0" 1278 | resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.2.0.tgz#819df4d010b82d5ea5671f8a1a3acf039bcd7700" 1279 | 1280 | parsejson@0.0.1: 1281 | version "0.0.1" 1282 | resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc" 1283 | dependencies: 1284 | better-assert "~1.0.0" 1285 | 1286 | parsejson@0.0.3: 1287 | version "0.0.3" 1288 | resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" 1289 | dependencies: 1290 | better-assert "~1.0.0" 1291 | 1292 | parseqs@0.0.2: 1293 | version "0.0.2" 1294 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7" 1295 | dependencies: 1296 | better-assert "~1.0.0" 1297 | 1298 | parseqs@0.0.5: 1299 | version "0.0.5" 1300 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" 1301 | dependencies: 1302 | better-assert "~1.0.0" 1303 | 1304 | parseuri@0.0.2: 1305 | version "0.0.2" 1306 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.2.tgz#db41878f2d6964718be870b3140973d8093be156" 1307 | dependencies: 1308 | better-assert "~1.0.0" 1309 | 1310 | parseuri@0.0.4: 1311 | version "0.0.4" 1312 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350" 1313 | dependencies: 1314 | better-assert "~1.0.0" 1315 | 1316 | parseuri@0.0.5: 1317 | version "0.0.5" 1318 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" 1319 | dependencies: 1320 | better-assert "~1.0.0" 1321 | 1322 | parseurl@~1.3.1: 1323 | version "1.3.1" 1324 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 1325 | 1326 | path-is-absolute@1.0.1, path-is-absolute@^1.0.0: 1327 | version "1.0.1" 1328 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1329 | 1330 | path-to-regexp@0.1.7: 1331 | version "0.1.7" 1332 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1333 | 1334 | pg-connection-string@0.1.3: 1335 | version "0.1.3" 1336 | resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" 1337 | 1338 | pg-pool@1.*: 1339 | version "1.6.0" 1340 | resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-1.6.0.tgz#2e300199927b6d7db6be71e2e3435dddddf07b41" 1341 | dependencies: 1342 | generic-pool "2.4.2" 1343 | object-assign "4.1.0" 1344 | 1345 | pg-types@1.*: 1346 | version "1.11.0" 1347 | resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.11.0.tgz#aae91a82d952b633bb88d006350a166daaf6ea90" 1348 | dependencies: 1349 | ap "~0.2.0" 1350 | postgres-array "~1.0.0" 1351 | postgres-bytea "~1.0.0" 1352 | postgres-date "~1.0.0" 1353 | postgres-interval "~1.0.0" 1354 | 1355 | pg@^6.1.0: 1356 | version "6.1.2" 1357 | resolved "https://registry.yarnpkg.com/pg/-/pg-6.1.2.tgz#2c896a7434502e2b938c100fc085b4e974a186db" 1358 | dependencies: 1359 | buffer-writer "1.0.1" 1360 | packet-reader "0.2.0" 1361 | pg-connection-string "0.1.3" 1362 | pg-pool "1.*" 1363 | pg-types "1.*" 1364 | pgpass "1.x" 1365 | semver "4.3.2" 1366 | 1367 | pgpass@1.x: 1368 | version "1.0.1" 1369 | resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.1.tgz#0de8b5bef993295d90a7e17d976f568dcd25d49f" 1370 | dependencies: 1371 | split "^1.0.0" 1372 | 1373 | pinkie-promise@^2.0.0: 1374 | version "2.0.1" 1375 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1376 | dependencies: 1377 | pinkie "^2.0.0" 1378 | 1379 | pinkie@^2.0.0: 1380 | version "2.0.4" 1381 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1382 | 1383 | pkijs@^1.3.27: 1384 | version "1.3.33" 1385 | resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-1.3.33.tgz#a689ef62113b7c348e1ffc09965d2239e5bb4c92" 1386 | 1387 | portfinder@1.0.x: 1388 | version "1.0.12" 1389 | resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.12.tgz#94a65114bec64433f9ce2116da33158238ce7ab4" 1390 | dependencies: 1391 | async "^1.5.2" 1392 | debug "^2.2.0" 1393 | mkdirp "0.5.x" 1394 | 1395 | postgres-array@~1.0.0: 1396 | version "1.0.2" 1397 | resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.2.tgz#8e0b32eb03bf77a5c0a7851e0441c169a256a238" 1398 | 1399 | postgres-bytea@~1.0.0: 1400 | version "1.0.0" 1401 | resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" 1402 | 1403 | postgres-date@~1.0.0: 1404 | version "1.0.3" 1405 | resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz#e2d89702efdb258ff9d9cee0fe91bd06975257a8" 1406 | 1407 | postgres-interval@~1.0.0: 1408 | version "1.0.2" 1409 | resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.0.2.tgz#7261438d862b412921c6fdb7617668424b73a6ed" 1410 | dependencies: 1411 | xtend "^4.0.0" 1412 | 1413 | process-nextick-args@~1.0.6: 1414 | version "1.0.7" 1415 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1416 | 1417 | proxy-addr@~1.1.2: 1418 | version "1.1.3" 1419 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" 1420 | dependencies: 1421 | forwarded "~0.1.0" 1422 | ipaddr.js "1.2.0" 1423 | 1424 | pseudomap@^1.0.1: 1425 | version "1.0.2" 1426 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1427 | 1428 | punycode@^1.4.1: 1429 | version "1.4.1" 1430 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1431 | 1432 | pyconf@^1.1.2: 1433 | version "1.1.2" 1434 | resolved "https://registry.yarnpkg.com/pyconf/-/pyconf-1.1.2.tgz#61a7aa299ff6ee57b8c687ad355a55d2e7a86a6b" 1435 | dependencies: 1436 | safe-replace "^1.0.2" 1437 | 1438 | qs@6.2.0: 1439 | version "6.2.0" 1440 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" 1441 | 1442 | qs@6.2.1: 1443 | version "6.2.1" 1444 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" 1445 | 1446 | qs@~4.0.0: 1447 | version "4.0.0" 1448 | resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" 1449 | 1450 | qs@~6.3.0: 1451 | version "6.3.0" 1452 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" 1453 | 1454 | range-parser@~1.2.0: 1455 | version "1.2.0" 1456 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 1457 | 1458 | raw-body@~2.2.0: 1459 | version "2.2.0" 1460 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" 1461 | dependencies: 1462 | bytes "2.4.0" 1463 | iconv-lite "0.4.15" 1464 | unpipe "1.0.0" 1465 | 1466 | rc@~1.1.6: 1467 | version "1.1.6" 1468 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" 1469 | dependencies: 1470 | deep-extend "~0.4.0" 1471 | ini "~1.3.0" 1472 | minimist "^1.2.0" 1473 | strip-json-comments "~1.0.4" 1474 | 1475 | "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1: 1476 | version "2.2.2" 1477 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 1478 | dependencies: 1479 | buffer-shims "^1.0.0" 1480 | core-util-is "~1.0.0" 1481 | inherits "~2.0.1" 1482 | isarray "~1.0.0" 1483 | process-nextick-args "~1.0.6" 1484 | string_decoder "~0.10.x" 1485 | util-deprecate "~1.0.1" 1486 | 1487 | readable-stream@~2.0.5: 1488 | version "2.0.6" 1489 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 1490 | dependencies: 1491 | core-util-is "~1.0.0" 1492 | inherits "~2.0.1" 1493 | isarray "~1.0.0" 1494 | process-nextick-args "~1.0.6" 1495 | string_decoder "~0.10.x" 1496 | util-deprecate "~1.0.1" 1497 | 1498 | readable-stream@~2.1.4: 1499 | version "2.1.5" 1500 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" 1501 | dependencies: 1502 | buffer-shims "^1.0.0" 1503 | core-util-is "~1.0.0" 1504 | inherits "~2.0.1" 1505 | isarray "~1.0.0" 1506 | process-nextick-args "~1.0.6" 1507 | string_decoder "~0.10.x" 1508 | util-deprecate "~1.0.1" 1509 | 1510 | redbird@^0.6.15: 1511 | version "0.6.15" 1512 | resolved "https://registry.yarnpkg.com/redbird/-/redbird-0.6.15.tgz#b90a4435d0b004a00f9b7adbb871df3437e0c7ae" 1513 | dependencies: 1514 | bluebird "^3.4.0" 1515 | bunyan "^1.8.1" 1516 | dolphin "*" 1517 | http-proxy "^1.14.0" 1518 | le-challenge-fs "^2.0.4" 1519 | le-store-certbot "^2.0.3" 1520 | letsencrypt "^2.1.6" 1521 | lodash "^4.13.1" 1522 | lru-cache "^4.0.1" 1523 | node-etcd "^4.2.1" 1524 | object-hash "^1.1.2" 1525 | safetimeout "^0.1.1" 1526 | spdy "^3.4.0" 1527 | valid-url "^1.0.9" 1528 | 1529 | request@^2.65.0, request@^2.74.0, request@^2.79.0: 1530 | version "2.79.0" 1531 | resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" 1532 | dependencies: 1533 | aws-sign2 "~0.6.0" 1534 | aws4 "^1.2.1" 1535 | caseless "~0.11.0" 1536 | combined-stream "~1.0.5" 1537 | extend "~3.0.0" 1538 | forever-agent "~0.6.1" 1539 | form-data "~2.1.1" 1540 | har-validator "~2.0.6" 1541 | hawk "~3.1.3" 1542 | http-signature "~1.1.0" 1543 | is-typedarray "~1.0.0" 1544 | isstream "~0.1.2" 1545 | json-stringify-safe "~5.0.1" 1546 | mime-types "~2.1.7" 1547 | oauth-sign "~0.8.1" 1548 | qs "~6.3.0" 1549 | stringstream "~0.0.4" 1550 | tough-cookie "~2.3.0" 1551 | tunnel-agent "~0.4.1" 1552 | uuid "^3.0.0" 1553 | 1554 | request@~2.60.0: 1555 | version "2.60.0" 1556 | resolved "https://registry.yarnpkg.com/request/-/request-2.60.0.tgz#498820957fcdded1d37749069610c85f61a29f2d" 1557 | dependencies: 1558 | aws-sign2 "~0.5.0" 1559 | bl "~1.0.0" 1560 | caseless "~0.11.0" 1561 | combined-stream "~1.0.1" 1562 | extend "~3.0.0" 1563 | forever-agent "~0.6.0" 1564 | form-data "~1.0.0-rc1" 1565 | har-validator "^1.6.1" 1566 | hawk "~3.1.0" 1567 | http-signature "~0.11.0" 1568 | isstream "~0.1.1" 1569 | json-stringify-safe "~5.0.0" 1570 | mime-types "~2.1.2" 1571 | node-uuid "~1.4.0" 1572 | oauth-sign "~0.8.0" 1573 | qs "~4.0.0" 1574 | stringstream "~0.0.4" 1575 | tough-cookie ">=0.12.0" 1576 | tunnel-agent "~0.4.0" 1577 | 1578 | requires-port@1.x.x: 1579 | version "1.0.0" 1580 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 1581 | 1582 | rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: 1583 | version "2.5.4" 1584 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 1585 | dependencies: 1586 | glob "^7.0.5" 1587 | 1588 | rimraf@~2.4.0: 1589 | version "2.4.5" 1590 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" 1591 | dependencies: 1592 | glob "^6.0.1" 1593 | 1594 | rsa-compat@^1.2.1, rsa-compat@^1.2.7: 1595 | version "1.2.7" 1596 | resolved "https://registry.yarnpkg.com/rsa-compat/-/rsa-compat-1.2.7.tgz#7c4636de798885a9f3c90436ea3804e35b1684c8" 1597 | dependencies: 1598 | buffer-v6-polyfill "^1.0.3" 1599 | node-forge "^0.6.41" 1600 | optionalDependencies: 1601 | ursa "^0.9.4" 1602 | 1603 | safe-json-stringify@~1: 1604 | version "1.0.3" 1605 | resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.0.3.tgz#3cb6717660a086d07cb5bd9b7a6875bcf67bd05e" 1606 | 1607 | safe-replace@^1.0.2: 1608 | version "1.0.2" 1609 | resolved "https://registry.yarnpkg.com/safe-replace/-/safe-replace-1.0.2.tgz#b181ab4095acdf6ab0a8f840517491ca8a9922ba" 1610 | 1611 | safetimeout@^0.1.1: 1612 | version "0.1.1" 1613 | resolved "https://registry.yarnpkg.com/safetimeout/-/safetimeout-0.1.1.tgz#142560bd8d46e4a097891bc88a6362a1e3657b4a" 1614 | 1615 | select-hose@^2.0.0: 1616 | version "2.0.0" 1617 | resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" 1618 | 1619 | semver@4.3.2: 1620 | version "4.3.2" 1621 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" 1622 | 1623 | semver@~5.3.0: 1624 | version "5.3.0" 1625 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1626 | 1627 | send@0.14.1: 1628 | version "0.14.1" 1629 | resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" 1630 | dependencies: 1631 | debug "~2.2.0" 1632 | depd "~1.1.0" 1633 | destroy "~1.0.4" 1634 | encodeurl "~1.0.1" 1635 | escape-html "~1.0.3" 1636 | etag "~1.7.0" 1637 | fresh "0.3.0" 1638 | http-errors "~1.5.0" 1639 | mime "1.3.4" 1640 | ms "0.7.1" 1641 | on-finished "~2.3.0" 1642 | range-parser "~1.2.0" 1643 | statuses "~1.3.0" 1644 | 1645 | serve-static@~1.11.1: 1646 | version "1.11.1" 1647 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" 1648 | dependencies: 1649 | encodeurl "~1.0.1" 1650 | escape-html "~1.0.3" 1651 | parseurl "~1.3.1" 1652 | send "0.14.1" 1653 | 1654 | set-blocking@~2.0.0: 1655 | version "2.0.0" 1656 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1657 | 1658 | setprototypeof@1.0.2: 1659 | version "1.0.2" 1660 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" 1661 | 1662 | signal-exit@^3.0.0: 1663 | version "3.0.2" 1664 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1665 | 1666 | sntp@1.x.x: 1667 | version "1.0.9" 1668 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1669 | dependencies: 1670 | hoek "2.x.x" 1671 | 1672 | socket.io-adapter@0.3.1: 1673 | version "0.3.1" 1674 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.3.1.tgz#df81f970b4df6493902d93e519c7b72755c3a958" 1675 | dependencies: 1676 | debug "1.0.2" 1677 | object-keys "1.0.1" 1678 | socket.io-parser "2.2.2" 1679 | 1680 | socket.io-adapter@0.5.0: 1681 | version "0.5.0" 1682 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" 1683 | dependencies: 1684 | debug "2.3.3" 1685 | socket.io-parser "2.3.1" 1686 | 1687 | socket.io-client@1.3.5: 1688 | version "1.3.5" 1689 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.3.5.tgz#9c3a6fbdbd99420c3633a16b4e2543e73f1303ea" 1690 | dependencies: 1691 | backo2 "1.0.2" 1692 | component-bind "1.0.0" 1693 | component-emitter "1.1.2" 1694 | debug "0.7.4" 1695 | engine.io-client "1.5.1" 1696 | has-binary "0.1.6" 1697 | indexof "0.0.1" 1698 | object-component "0.0.3" 1699 | parseuri "0.0.2" 1700 | socket.io-parser "2.2.4" 1701 | to-array "0.1.3" 1702 | 1703 | socket.io-client@1.7.2: 1704 | version "1.7.2" 1705 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.2.tgz#39fdb0c3dd450e321b7e40cfd83612ec533dd644" 1706 | dependencies: 1707 | backo2 "1.0.2" 1708 | component-bind "1.0.0" 1709 | component-emitter "1.2.1" 1710 | debug "2.3.3" 1711 | engine.io-client "1.8.2" 1712 | has-binary "0.1.7" 1713 | indexof "0.0.1" 1714 | object-component "0.0.3" 1715 | parseuri "0.0.5" 1716 | socket.io-parser "2.3.1" 1717 | to-array "0.1.4" 1718 | 1719 | socket.io-parser@2.2.2: 1720 | version "2.2.2" 1721 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.2.tgz#3d7af6b64497e956b7d9fe775f999716027f9417" 1722 | dependencies: 1723 | benchmark "1.0.0" 1724 | component-emitter "1.1.2" 1725 | debug "0.7.4" 1726 | isarray "0.0.1" 1727 | json3 "3.2.6" 1728 | 1729 | socket.io-parser@2.2.4: 1730 | version "2.2.4" 1731 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.4.tgz#f9ce19bf1909608ceb15d97721e23bfdd1e7cf65" 1732 | dependencies: 1733 | benchmark "1.0.0" 1734 | component-emitter "1.1.2" 1735 | debug "0.7.4" 1736 | isarray "0.0.1" 1737 | json3 "3.2.6" 1738 | 1739 | socket.io-parser@2.3.1: 1740 | version "2.3.1" 1741 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" 1742 | dependencies: 1743 | component-emitter "1.1.2" 1744 | debug "2.2.0" 1745 | isarray "0.0.1" 1746 | json3 "3.3.2" 1747 | 1748 | socket.io@1.3.5: 1749 | version "1.3.5" 1750 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.3.5.tgz#bfd609f37626889e94df9d3526db79a84255f1d8" 1751 | dependencies: 1752 | debug "2.1.0" 1753 | engine.io "1.5.1" 1754 | has-binary-data "0.1.3" 1755 | socket.io-adapter "0.3.1" 1756 | socket.io-client "1.3.5" 1757 | socket.io-parser "2.2.4" 1758 | 1759 | socket.io@^1.7.2: 1760 | version "1.7.2" 1761 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.2.tgz#83bbbdf2e79263b378900da403e7843e05dc3b71" 1762 | dependencies: 1763 | debug "2.3.3" 1764 | engine.io "1.8.2" 1765 | has-binary "0.1.7" 1766 | object-assign "4.1.0" 1767 | socket.io-adapter "0.5.0" 1768 | socket.io-client "1.7.2" 1769 | socket.io-parser "2.3.1" 1770 | 1771 | spdy-transport@^2.0.15: 1772 | version "2.0.18" 1773 | resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.18.tgz#43fc9c56be2cccc12bb3e2754aa971154e836ea6" 1774 | dependencies: 1775 | debug "^2.2.0" 1776 | hpack.js "^2.1.6" 1777 | obuf "^1.1.0" 1778 | readable-stream "^2.0.1" 1779 | wbuf "^1.4.0" 1780 | 1781 | spdy@^3.4.0: 1782 | version "3.4.4" 1783 | resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.4.tgz#e0406407ca90ff01b553eb013505442649f5a819" 1784 | dependencies: 1785 | debug "^2.2.0" 1786 | handle-thing "^1.2.4" 1787 | http-deceiver "^1.2.4" 1788 | select-hose "^2.0.0" 1789 | spdy-transport "^2.0.15" 1790 | 1791 | split@^1.0.0: 1792 | version "1.0.0" 1793 | resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae" 1794 | dependencies: 1795 | through "2" 1796 | 1797 | sql-ddl-sync@0.3.12: 1798 | version "0.3.12" 1799 | resolved "https://registry.yarnpkg.com/sql-ddl-sync/-/sql-ddl-sync-0.3.12.tgz#4dec41e5cdd63f6c33acb0d2eb08d7b1ed6f9e7f" 1800 | dependencies: 1801 | lodash "4.17.2" 1802 | 1803 | sql-query@0.1.26: 1804 | version "0.1.26" 1805 | resolved "https://registry.yarnpkg.com/sql-query/-/sql-query-0.1.26.tgz#c8d358be5db1c49cc2055558ba3df64e5a48c441" 1806 | 1807 | sqlite3@^3.1.8: 1808 | version "3.1.8" 1809 | resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-3.1.8.tgz#4cbcf965d8b901d1b1015cbc7fc415aae157dfaa" 1810 | dependencies: 1811 | nan "~2.4.0" 1812 | node-pre-gyp "~0.6.31" 1813 | 1814 | sshpk@^1.7.0: 1815 | version "1.10.2" 1816 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" 1817 | dependencies: 1818 | asn1 "~0.2.3" 1819 | assert-plus "^1.0.0" 1820 | dashdash "^1.12.0" 1821 | getpass "^0.1.1" 1822 | optionalDependencies: 1823 | bcrypt-pbkdf "^1.0.0" 1824 | ecc-jsbn "~0.1.1" 1825 | jodid25519 "^1.0.0" 1826 | jsbn "~0.1.0" 1827 | tweetnacl "~0.14.0" 1828 | 1829 | "statuses@>= 1.3.1 < 2", statuses@~1.3.0: 1830 | version "1.3.1" 1831 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 1832 | 1833 | string-width@^1.0.1: 1834 | version "1.0.2" 1835 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1836 | dependencies: 1837 | code-point-at "^1.0.0" 1838 | is-fullwidth-code-point "^1.0.0" 1839 | strip-ansi "^3.0.0" 1840 | 1841 | string_decoder@~0.10.x: 1842 | version "0.10.31" 1843 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1844 | 1845 | stringstream@~0.0.4: 1846 | version "0.0.5" 1847 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1848 | 1849 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1850 | version "3.0.1" 1851 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1852 | dependencies: 1853 | ansi-regex "^2.0.0" 1854 | 1855 | strip-json-comments@~1.0.4: 1856 | version "1.0.4" 1857 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 1858 | 1859 | supports-color@^0.2.0: 1860 | version "0.2.0" 1861 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" 1862 | 1863 | supports-color@^2.0.0: 1864 | version "2.0.0" 1865 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1866 | 1867 | tar-pack@~3.3.0: 1868 | version "3.3.0" 1869 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" 1870 | dependencies: 1871 | debug "~2.2.0" 1872 | fstream "~1.0.10" 1873 | fstream-ignore "~1.0.5" 1874 | once "~1.3.3" 1875 | readable-stream "~2.1.4" 1876 | rimraf "~2.5.1" 1877 | tar "~2.2.1" 1878 | uid-number "~0.0.6" 1879 | 1880 | tar@~2.2.1: 1881 | version "2.2.1" 1882 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 1883 | dependencies: 1884 | block-stream "*" 1885 | fstream "^1.0.2" 1886 | inherits "2" 1887 | 1888 | through@2: 1889 | version "2.3.8" 1890 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1891 | 1892 | tinycolor@0.x: 1893 | version "0.0.1" 1894 | resolved "https://registry.yarnpkg.com/tinycolor/-/tinycolor-0.0.1.tgz#320b5a52d83abb5978d81a3e887d4aefb15a6164" 1895 | 1896 | to-array@0.1.3: 1897 | version "0.1.3" 1898 | resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.3.tgz#d45dadc6363417f60f28474fea50ecddbb4f4991" 1899 | 1900 | to-array@0.1.4: 1901 | version "0.1.4" 1902 | resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" 1903 | 1904 | tough-cookie@>=0.12.0, tough-cookie@~2.3.0: 1905 | version "2.3.2" 1906 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 1907 | dependencies: 1908 | punycode "^1.4.1" 1909 | 1910 | tunnel-agent@~0.4.0, tunnel-agent@~0.4.1: 1911 | version "0.4.3" 1912 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 1913 | 1914 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1915 | version "0.14.5" 1916 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1917 | 1918 | type-is@~1.6.13, type-is@~1.6.14: 1919 | version "1.6.14" 1920 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" 1921 | dependencies: 1922 | media-typer "0.3.0" 1923 | mime-types "~2.1.13" 1924 | 1925 | uid-number@~0.0.6: 1926 | version "0.0.6" 1927 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 1928 | 1929 | ultron@1.0.x: 1930 | version "1.0.2" 1931 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 1932 | 1933 | underscore@~1.8.2: 1934 | version "1.8.3" 1935 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" 1936 | 1937 | unpipe@1.0.0, unpipe@~1.0.0: 1938 | version "1.0.0" 1939 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1940 | 1941 | ursa@^0.9.4: 1942 | version "0.9.4" 1943 | resolved "https://registry.yarnpkg.com/ursa/-/ursa-0.9.4.tgz#0a2abfb7dc4267f733b0f8f2fc7f2c895d40a413" 1944 | dependencies: 1945 | bindings "^1.2.1" 1946 | nan "^2.3.3" 1947 | 1948 | utf8@2.0.0: 1949 | version "2.0.0" 1950 | resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.0.0.tgz#79ce59eced874809cab9a71fc7102c7d45d4118d" 1951 | 1952 | util-deprecate@~1.0.1: 1953 | version "1.0.2" 1954 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1955 | 1956 | utils-merge@1.0.0: 1957 | version "1.0.0" 1958 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 1959 | 1960 | uuid@^3.0.0: 1961 | version "3.0.1" 1962 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 1963 | 1964 | valid-url@^1.0.9: 1965 | version "1.0.9" 1966 | resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" 1967 | 1968 | vary@~1.1.0: 1969 | version "1.1.0" 1970 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" 1971 | 1972 | verror@1.3.6: 1973 | version "1.3.6" 1974 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 1975 | dependencies: 1976 | extsprintf "1.0.2" 1977 | 1978 | wbuf@^1.1.0, wbuf@^1.4.0: 1979 | version "1.7.2" 1980 | resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" 1981 | dependencies: 1982 | minimalistic-assert "^1.0.0" 1983 | 1984 | wide-align@^1.1.0: 1985 | version "1.1.0" 1986 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" 1987 | dependencies: 1988 | string-width "^1.0.1" 1989 | 1990 | wrappy@1: 1991 | version "1.0.2" 1992 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1993 | 1994 | ws@0.4.31: 1995 | version "0.4.31" 1996 | resolved "https://registry.yarnpkg.com/ws/-/ws-0.4.31.tgz#5a4849e7a9ccd1ed5a81aeb4847c9fedf3122927" 1997 | dependencies: 1998 | commander "~0.6.1" 1999 | nan "~0.3.0" 2000 | options ">=0.0.5" 2001 | tinycolor "0.x" 2002 | 2003 | ws@0.5.0: 2004 | version "0.5.0" 2005 | resolved "https://registry.yarnpkg.com/ws/-/ws-0.5.0.tgz#b3980391dc4777d83974718aa361e808d86cf9ca" 2006 | dependencies: 2007 | nan "1.4.x" 2008 | options ">=0.0.5" 2009 | ultron "1.0.x" 2010 | 2011 | ws@1.1.1: 2012 | version "1.1.1" 2013 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" 2014 | dependencies: 2015 | options ">=0.0.5" 2016 | ultron "1.0.x" 2017 | 2018 | wtf-8@1.0.0: 2019 | version "1.0.0" 2020 | resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" 2021 | 2022 | xmlhttprequest-ssl@1.5.3: 2023 | version "1.5.3" 2024 | resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" 2025 | 2026 | "xmlhttprequest@https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz": 2027 | version "1.5.0" 2028 | resolved "https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz#20cafa5caa55f6db6bfaee849d1eb60ee43a5fca" 2029 | 2030 | xtend@^4.0.0: 2031 | version "4.0.1" 2032 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2033 | 2034 | yallist@^2.0.0: 2035 | version "2.0.0" 2036 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" 2037 | 2038 | yeast@0.1.2: 2039 | version "0.1.2" 2040 | resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" 2041 | --------------------------------------------------------------------------------