├── mobile-app ├── hooks │ └── after_prepare │ │ └── cordova-icon.sh ├── .gitignore ├── icon.png ├── www │ ├── img │ │ └── founders.png │ ├── index.html │ ├── css │ │ └── index.css │ └── js │ │ └── app.js ├── package.json ├── README.md └── config.xml ├── door-open-service ├── node-backend │ ├── .gitignore │ ├── .babelrc │ ├── Dockerfile │ ├── config │ │ ├── custom-environment-variables.json │ │ └── default.json │ ├── src │ │ ├── app.js │ │ ├── RpiGpioOpener.js │ │ ├── DoorBackend.js │ │ ├── httpInterface.js │ │ ├── DoorSocketServer.js │ │ ├── DoorSlackBot.js │ │ ├── StatsDatabase.js │ │ └── slackInterface.js │ ├── .eslintrc │ ├── package.json │ └── package-lock.json └── esp8266-nodemcu │ └── init.lua ├── .travis.yml ├── README.md ├── doorbell-service └── esp8266-nodemcu │ └── init.lua ├── LICENSE └── .gitattributes /mobile-app/hooks/after_prepare/cordova-icon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cordova-icon 3 | -------------------------------------------------------------------------------- /mobile-app/.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | node_modules/ 3 | 4 | platforms/ 5 | plugins/ 6 | www/lib/ 7 | -------------------------------------------------------------------------------- /mobile-app/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FoundersFounders/door-services/HEAD/mobile-app/icon.png -------------------------------------------------------------------------------- /mobile-app/www/img/founders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FoundersFounders/door-services/HEAD/mobile-app/www/img/founders.png -------------------------------------------------------------------------------- /door-open-service/node-backend/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | typings 3 | .vscode 4 | npm-debug.log 5 | 6 | config/local*.json 7 | stats.db 8 | -------------------------------------------------------------------------------- /door-open-service/node-backend/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"], 3 | "plugins": [ 4 | "syntax-object-rest-spread", 5 | "transform-object-rest-spread" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | 3 | language: node_js 4 | node_js: 5 | - 8 6 | 7 | before_script: 8 | - cd door-open-service/node-backend 9 | script: 10 | - npm install 11 | - npm run lint -- --max-warnings=0 12 | -------------------------------------------------------------------------------- /door-open-service/node-backend/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6 2 | MAINTAINER ShiftForward 3 | 4 | RUN mkdir -p /app 5 | WORKDIR /app 6 | 7 | ENV NODE_ENV production 8 | 9 | ADD package.json /app/package.json 10 | RUN npm install 11 | 12 | ADD config /app/config 13 | ADD src /app/src 14 | ADD .babelrc /app/.babelrc 15 | 16 | EXPOSE 8300 3000 17 | ENTRYPOINT ["npm", "start", "--"] 18 | -------------------------------------------------------------------------------- /door-open-service/node-backend/config/custom-environment-variables.json: -------------------------------------------------------------------------------- 1 | { 2 | "slackBot": { 3 | "channel": "SLACK_CHANNEL_NAME", 4 | "botToken": "SLACK_BOT_TOKEN" 5 | }, 6 | "socketServer": { 7 | "port": "SOCKET_SERVER_PORT" 8 | }, 9 | "interfaces": { 10 | "slack": { 11 | "enabled": "SLACK_INTERFACE_ENABLED" 12 | }, 13 | "http": { 14 | "enabled": "HTTP_INTERFACE_ENABLED", 15 | "port": "HTTP_SERVER_PORT", 16 | "secret": "HTTP_SERVER_SECRET" 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /door-open-service/node-backend/config/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "slackBot": { 3 | }, 4 | "openers": { 5 | "socketServer": { 6 | "enabled": true, 7 | "port": 8300 8 | }, 9 | "rpiGpio": { 10 | "enabled": true, 11 | "pins": { 12 | "garage": 18 13 | } 14 | } 15 | }, 16 | "interfaces": { 17 | "slack": { 18 | "enabled": true 19 | }, 20 | "http": { 21 | "enabled": false, 22 | "port": 3000 23 | } 24 | }, 25 | "backend": { 26 | "doorConfigs": { 27 | "door": { 28 | "openTime": 2500 29 | }, 30 | "garage": { 31 | "openTime": 5000, 32 | "lockTime": 25000 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mobile-app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "door-service-mobile-app", 3 | "version": "0.1.0", 4 | "repository": { 5 | "type": "git", 6 | "url": "git@github.com:FoundersFounders/door-services.git" 7 | }, 8 | "license": "MIT", 9 | "dependencies": { 10 | "framework7": "^1.4.2" 11 | }, 12 | "devDependencies": { 13 | "cordova": "^6.1.1", 14 | "cordova-icon": "^0.7.0" 15 | }, 16 | "scripts": { 17 | "jsres": "mkdir -p www/lib/js && cp node_modules/framework7/dist/js/*.js www/lib/js", 18 | "cssres": "mkdir -p www/lib/css && cp node_modules/framework7/dist/css/*.css www/lib/css", 19 | "postinstall": "npm run -s jsres && npm run -s cssres && cordova prepare", 20 | "requirements": "cordova requirements", 21 | "build": "cordova build", 22 | "start": "cordova run" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Door Services 2 | 3 | This project contains the 2 services and a mobile app concerning the FoundersFounders door. 4 | 5 | ## Doorbell service 6 | 7 | This was based off a simple wireless (RF) doorbell, in which an ESP8266 was wired to the led that blinks when it rings. 8 | This will make the ESP connect to slack through an Incoming Webhook and post a message notifying that someone is at the door. 9 | 10 | ## Door Open service 11 | 12 | This service controls the door-unlock mechanism. An ESP8266 with an relay is wired to the door-unlock mechanism and connected 13 | to the node service. The node service will work both as a slack bot (to receive the trigger messages) and as the controller 14 | to let ESP8266 known when to open the door. 15 | 16 | ## Mobile App 17 | 18 | A web app to send messages to a slack bot for door and garage opening services. 19 | -------------------------------------------------------------------------------- /doorbell-service/esp8266-nodemcu/init.lua: -------------------------------------------------------------------------------- 1 | local WIFI_SSID = "" 2 | local WIFI_PASSWORD = "" 3 | local BACKEND_SERVICE_URL = "http:///api/chat.postMessage" .. 4 | "?token=" .. 5 | "&channel=" .. 6 | "&username=Doorbell%20Bot" .. 7 | "&icon_url=http%3a%2f%2fimg.ctrlv.in%2fimg%2f16%2f01%2f21%2f56a0c2a544ad8.png" .. 8 | "&link_names=1" .. 9 | "&text=%40here%3a+Someone%20is%20ringing%20the%20door%20bell!" 10 | 11 | wifi.sta.eventMonReg(wifi.STA_GOTIP, function() 12 | wifi.sta.eventMonStop() 13 | 14 | http.post(BACKEND_SERVICE_URL, nil, nil, function(code, data) 15 | if code < 0 then 16 | print("HTTP request failed") 17 | else 18 | print("HTTP request success") 19 | print(code, data) 20 | end 21 | node.dsleep(0) 22 | end) 23 | end) 24 | 25 | wifi.sta.eventMonStart() 26 | 27 | wifi.setmode(wifi.STATION) 28 | wifi.sta.config(WIFI_SSID, WIFI_PASSWORD) 29 | -------------------------------------------------------------------------------- /mobile-app/README.md: -------------------------------------------------------------------------------- 1 | # Build 2 | 3 | Install the required dependencies: 4 | 5 | ``` 6 | npm install 7 | ``` 8 | 9 | `cordova-icon` requires `ImageMagick`: 10 | 11 | ``` 12 | brew install imagemagick # OSX 13 | sudo apt-get install imagemagick # Debian / Ubuntu 14 | ``` 15 | 16 | To build the app for iOS you must also install (locally or globally): 17 | 18 | ``` 19 | npm install ios-sim 20 | npm install ios-deploy 21 | ``` 22 | 23 | To build and run the app in the platform simulator: 24 | 25 | ``` 26 | npm start # all platforms 27 | npm start android # android app only 28 | npm start ios # iOS app only 29 | ``` 30 | 31 | To build the app only without running it: 32 | 33 | ``` 34 | npm run build # all platforms 35 | npm run build -- android # android app only 36 | npm run build -- ios # iOS app only 37 | ``` 38 | 39 | # Reference 40 | 41 | * https://cordova.apache.org/docs/en/latest/guide/cli/index.html 42 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/app.js: -------------------------------------------------------------------------------- 1 | import DoorBackend from "./DoorBackend"; 2 | import DoorSlackBot from "./DoorSlackBot"; 3 | import DoorSocketServer from "./DoorSocketServer"; 4 | import RpiGpioOpener from "./RpiGpioOpener"; 5 | import startHttpInterface from "./httpInterface"; 6 | import startSlackInterface from "./slackInterface"; 7 | 8 | import config from "config"; 9 | 10 | const slackBot = new DoorSlackBot(config.get("slackBot")); 11 | const backend = new DoorBackend(config.get("backend")); 12 | 13 | if (config.get("openers.socketServer.enabled")) 14 | backend.addOpener(new DoorSocketServer(config.get("openers.socketServer"))); 15 | 16 | if (config.get("openers.rpiGpio.enabled")) 17 | backend.addOpener(new RpiGpioOpener(config.get("openers.rpiGpio"))); 18 | 19 | if (config.get("interfaces.slack.enabled")) 20 | startSlackInterface(config.get("interfaces.slack"), slackBot, backend); 21 | 22 | if (config.get("interfaces.http.enabled")) 23 | startHttpInterface(config.get("interfaces.http"), slackBot, backend); 24 | -------------------------------------------------------------------------------- /door-open-service/node-backend/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "babel-eslint", 4 | "extends": "eslint:recommended", 5 | 6 | "env": { 7 | "es6": true, 8 | "node": true 9 | }, 10 | 11 | "parserOptions": { 12 | "ecmaVersion": 6, 13 | "sourceType": "module" 14 | }, 15 | 16 | "rules": { 17 | "eqeqeq": [2, "smart"], 18 | "no-implicit-coercion": 2, 19 | "no-var": 2, 20 | "valid-jsdoc": 2, 21 | 22 | "camelcase": 1, 23 | "indent": [1, 2, { "SwitchCase": 1 }], 24 | "keyword-spacing": 1, 25 | "max-len": [1, 120, 4], 26 | "no-multiple-empty-lines": [1, { "max": 1 }], 27 | "no-sequences": 1, 28 | "no-trailing-spaces": [1, { "skipBlankLines": false }], 29 | "object-curly-spacing": [1, "always"], 30 | "quotes": [1, "double", "avoid-escape"], 31 | "semi": [1, "always"], 32 | "space-before-blocks": [1, "always"], 33 | "space-before-function-paren": [1, { "anonymous": "always", "named": "never" }], 34 | "space-in-parens": [1, "never"], 35 | "space-infix-ops": 1, 36 | "spaced-comment": 1, 37 | 38 | "no-console": 0 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Founders Founders 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 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/RpiGpioOpener.js: -------------------------------------------------------------------------------- 1 | import Promise from "bluebird"; 2 | import gpio from "rpi-gpio"; 3 | import _ from "underscore"; 4 | 5 | class RpiGpioOpener { 6 | 7 | constructor(config) { 8 | gpio.setMode(gpio.MODE_BCM); 9 | this.pins = config.pins; 10 | this.opening = {}; 11 | } 12 | 13 | canOpen(doorId) { 14 | return !_.isUndefined(this.pins[doorId]); 15 | } 16 | 17 | open(doorId, time) { 18 | if (!this.canOpen(doorId) || this.opening[doorId]) return; 19 | 20 | this.opening[doorId] = true; 21 | this.writePin(doorId, true) 22 | .delay(time) 23 | .then(() => this.writePin(doorId, false)) 24 | .catch(console.error) 25 | .finally(() => this.opening[doorId] = false); 26 | } 27 | 28 | writePin(doorId, value) { 29 | const pin = this.pins[doorId]; 30 | const gpioSetup = Promise.promisify(gpio.setup, { context: gpio }); 31 | const gpioWrite = Promise.promisify(gpio.write, { context: gpio }); 32 | 33 | return gpioSetup(pin, gpio.DIR_OUT, gpio.EDGE_NONE) 34 | .tap(() => console.log(`Writing '${value}' to pin ${pin}`)) 35 | .then(() => gpioWrite(pin, value)); 36 | } 37 | } 38 | 39 | export default RpiGpioOpener; 40 | -------------------------------------------------------------------------------- /mobile-app/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Crowbar 4 | 5 | A web app to send messages to a slack bot for door and garage opening services. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/DoorBackend.js: -------------------------------------------------------------------------------- 1 | import _ from "underscore"; 2 | 3 | class DoorBackend { 4 | 5 | constructor(config) { 6 | this.doorConfigs = config.doorConfigs; 7 | this.locks = _.mapObject(config.doorConfigs, doorConfig => 8 | (doorConfig.lockTime ? { lockTime: doorConfig.lockTime } : undefined) 9 | ); 10 | this.openers = []; 11 | } 12 | 13 | addOpener(opener) { 14 | this.openers.push(opener); 15 | } 16 | 17 | open(user, doorId) { 18 | // check if the user was properly authenticated (handled by DoorSlackBot) 19 | if (!user) return { result: DoorBackend.OPEN_RESULT.UNAUTHORIZED }; 20 | 21 | // check if the door is locked by the virtue of a recent opening by another person 22 | const lock = this.locks[doorId]; 23 | if (lock) { 24 | const now = new Date().getTime(); 25 | if (lock.lastUser !== user.email && now - lock.lastTime < lock.lockTime) { 26 | return { result: DoorBackend.OPEN_RESULT.LOCKED, user: lock.lastUser }; 27 | } 28 | lock.lastUser = user.email; 29 | lock.lastTime = now; 30 | } 31 | 32 | // find an opener able to open this door 33 | let opener = _.find(this.openers, opener => opener.canOpen(doorId)); 34 | if (!opener) return { result: DoorBackend.OPEN_RESULT.UNAVAILABLE }; 35 | 36 | // finally, open the door 37 | opener.open(doorId, this.doorConfigs[doorId].openTime); 38 | return { result: DoorBackend.OPEN_RESULT.SUCCESS }; 39 | } 40 | } 41 | 42 | DoorBackend.OPEN_RESULT = { 43 | SUCCESS: "SUCCESS", 44 | LOCKED: "LOCKED", 45 | UNAVAILABLE: "UNAVAILABLE", 46 | UNAUTHORIZED: "UNAUTHORIZED" 47 | }; 48 | 49 | export default DoorBackend; 50 | -------------------------------------------------------------------------------- /door-open-service/node-backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "f2door", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/app.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/FoundersFounders/door-services.git" 9 | }, 10 | "author": "FoundersFounders", 11 | "license": "MIT", 12 | "bugs": { 13 | "url": "https://github.com/FoundersFounders/door-services/issues" 14 | }, 15 | "homepage": "https://github.com/FoundersFounders/door-services#readme", 16 | "dependencies": { 17 | "@slack/client": "3.12.0", 18 | "bars": "github:steel/bars", 19 | "bluebird": "3.5.0", 20 | "config": "1.26.2", 21 | "good": "7.3.0", 22 | "good-console": "6.4.0", 23 | "hapi": "16.5.2", 24 | "moment": "2.18.1", 25 | "rpi-gpio": "0.8.1", 26 | "sequelize": "4.8.0", 27 | "sqlite3": "3.1.9", 28 | "string_decoder": "1.0.3", 29 | "underscore": "1.8.3" 30 | }, 31 | "devDependencies": { 32 | "babel-core": "6.26.0", 33 | "babel-eslint": "7.2.3", 34 | "babel-plugin-syntax-object-rest-spread": "6.13.0", 35 | "babel-plugin-transform-object-rest-spread": "6.26.0", 36 | "babel-preset-es2015": "6.24.1", 37 | "eslint": "4.6.1" 38 | }, 39 | "scripts": { 40 | "start": "node -r babel-register src/app.js", 41 | "lint": "eslint src", 42 | "lint-fix": "eslint --fix src", 43 | "test": "echo \"Error: no test specified\" && exit 1", 44 | "docker:image": "echo founders2/f2door:$(git rev-parse HEAD | head -c 10)", 45 | "docker:publishLocal": "docker build -t $(npm run -s docker:image) .", 46 | "docker:publish": "npm run docker:publishLocal && docker push $(npm run -s docker:image)" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /mobile-app/www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Slack Stuff 13 | 14 | 15 |
16 | 17 |
18 |
19 | Open Door 20 |
21 |
22 |
23 |
24 | Open Garage 25 |
26 |
27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /door-open-service/esp8266-nodemcu/init.lua: -------------------------------------------------------------------------------- 1 | -- FoundersFounders Building Door Open 2 | 3 | local WIFI_SSID = "" 4 | local WIFI_PASSWORD = "" 5 | local BACKEND_SERVICE = "" 6 | local DOOR_GROUP = "door" -- change if not deploying for the front door 7 | 8 | -- 1. Connect to wifi 9 | function configure_wifi() 10 | wifi.sta.config(WIFI_SSID, WIFI_PASSWORD) 11 | end 12 | 13 | -- 2. Configure GPIO 14 | gpio_pin = 2 --gpio4 15 | gpio.mode(gpio_pin, gpio.OUTPUT) 16 | gpio.write(gpio_pin, gpio.LOW) 17 | 18 | -- 3. Set-up timer 19 | function setup_wifi() 20 | wifi.setmode(wifi.STATION) 21 | 22 | if wifi.sta.getip() then 23 | connect_to_sf_service() 24 | else 25 | wifi.sta.eventMonReg(wifi.STA_GOTIP, function() 26 | wifi.sta.eventMonStop() 27 | connect_to_sf_service() 28 | end) 29 | wifi.sta.eventMonStart() 30 | configure_wifi() 31 | end 32 | end 33 | 34 | setup_wifi() 35 | 36 | function connect_to_sf_service() 37 | print("Connecting to backend service...") 38 | sk = net.createConnection(net.TCP, 0) 39 | sk:on("receive", function(sck, c) 40 | sk:send(open_door(sck, c)) 41 | print(c) 42 | end) 43 | sk:connect(8300, BACKEND_SERVICE) 44 | sk:on("connection", function(sck, c) 45 | print("got connection") 46 | sk:send("G|"..DOOR_GROUP) 47 | end) 48 | sk:on("disconnection", setup_wifi) 49 | end 50 | 51 | -- 4. Handle door relay 52 | door_currently_open = false 53 | function open_door(sck, duration) 54 | duration = tonumber(duration) 55 | if (duration == nil) then 56 | return "0|Invalid number." 57 | end 58 | if (door_currently_open == true) then 59 | return "1|Door is already open!" 60 | else 61 | door_currently_open = true 62 | gpio.write(gpio_pin, gpio.HIGH) 63 | tmr.alarm(1, duration, 0, function() 64 | gpio.write(gpio_pin, gpio.LOW) 65 | print("Door is closed.") 66 | sck:send("2|Door is closed.") 67 | tmr.stop(1) 68 | door_currently_open = false 69 | end) 70 | return "3|Door is now open for " .. duration .. "." 71 | end 72 | end 73 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/httpInterface.js: -------------------------------------------------------------------------------- 1 | import Boom from "boom"; 2 | import Good from "good"; 3 | import Hapi from "hapi"; 4 | import Joi from "joi"; 5 | 6 | import StatsDatabase from "./StatsDatabase"; 7 | 8 | /** 9 | * Opens an HTTP server for users to make requests to the door backend. 10 | * @param {object} config the HTTP interface configuration 11 | * @param {DoorSlackBot} slackBot the Slack bot to use for logging door openings 12 | * @param {DoorSocketServer} backend the server used to broadcast messages to devices 13 | * @returns {undefined} 14 | */ 15 | export default function (config, slackBot, backend) { 16 | const server = new Hapi.Server(); 17 | server.connection({ port: config.port }); 18 | 19 | // GET /ping 20 | server.route({ 21 | method: "GET", 22 | path: "/ping", 23 | handler: (request, reply) => { 24 | reply("I'm alive."); 25 | } 26 | }); 27 | 28 | // GET /stats 29 | server.route({ 30 | method: "GET", 31 | path: "/stats", 32 | handler: (request, reply) => { 33 | StatsDatabase.getStats() 34 | .then(data => reply(data)) 35 | .catch(err => { console.error(err); reply(err); }); 36 | } 37 | }); 38 | 39 | // POST /open 40 | server.route({ 41 | method: "POST", 42 | path: "/open", 43 | handler: (request, reply) => { 44 | slackBot.getUserInfo(request.payload.id).then(user => { 45 | if (!user || request.payload.secret !== config.secret) { 46 | reply(Boom.unauthorized()); 47 | return; 48 | } 49 | backend.open("door", 2500); 50 | StatsDatabase.registerDoorOpen(user); 51 | slackBot.postMessage(`Opening the door as requested by ${user.name} (${user.email})...`); 52 | reply(user); 53 | }).catch(err => { console.log(err); reply(err); }); 54 | }, 55 | config: { 56 | validate: { 57 | payload: { 58 | id: Joi.string(), 59 | secret: Joi.string() 60 | } 61 | } 62 | } 63 | }); 64 | 65 | server.register({ 66 | register: Good, 67 | options: { 68 | reporters: { 69 | consoleReporter: [{ 70 | module: "good-console", 71 | args: [{ log: "*", response: "*" }] 72 | }] 73 | } 74 | } 75 | }, err => { 76 | if (err) throw err; // something bad happened loading the plugin 77 | 78 | server.start((err) => { 79 | if (err) throw err; 80 | server.log("info", `Server running at: ${server.info.uri}`); 81 | }); 82 | }); 83 | } 84 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/DoorSocketServer.js: -------------------------------------------------------------------------------- 1 | import { StringDecoder } from "string_decoder"; 2 | import net from "net"; 3 | import _ from "underscore"; 4 | 5 | const decoder = new StringDecoder("utf8"); 6 | 7 | /** 8 | * A server for door opening IoT devices to communicate with this backend. Communication is done via simple sockets. 9 | * Devices can opt to register in this server with a specific "group" string that identifies which door they handle. 10 | */ 11 | class DoorSocketServer { 12 | 13 | constructor(config) { 14 | this.port = config.port; 15 | this.clients = {}; 16 | this.createServer(); 17 | } 18 | 19 | canOpen(doorId) { 20 | return _.find(this.clients, socketInfo => socketInfo.group === doorId); 21 | } 22 | 23 | open(doorId, time) { 24 | _.each(this.clients, ({ group: socketGroup, socket }) => { 25 | if (socketGroup === doorId) socket.write(time.toString()); 26 | }); 27 | 28 | // Log it to the server output too 29 | console.log(`Broadcast to ${doorId}: ${time}`); 30 | } 31 | 32 | createServer() { 33 | return net.createServer(socket => { 34 | 35 | // Identify this client 36 | socket.name = socket.remoteAddress + ":" + socket.remotePort; 37 | 38 | // Put this new client in the list 39 | this.clients[socket.name] = { socket: socket, group: "door" }; 40 | console.log(`New connection: ${socket.name}`); 41 | 42 | // Handle incoming messages from clients. 43 | socket.on("data", data => { 44 | const message = decoder.write(data); 45 | if (message.startsWith("G|")) { 46 | const group = message.substr("G|".length); 47 | this.clients[socket.name].group = group; 48 | console.log(`${socket.name} now belongs to group '${group}'`); 49 | } else { 50 | console.log(`Message from ${socket.name}: ${message}`); 51 | } 52 | }); 53 | 54 | // Remove the client from the list when it leaves 55 | socket.on("end", () => { 56 | console.log(`Connection ended: ${socket.name}`); 57 | delete this.clients[socket.name]; 58 | }); 59 | 60 | socket.on("error", err => { 61 | console.error(`Connection error: ${socket.name}`); 62 | console.error(err.stack); 63 | delete this.clients[socket.name]; 64 | }); 65 | 66 | socket.on("close", () => { 67 | console.log(`Connection closed: ${socket.name}`); 68 | delete this.clients[socket.name]; 69 | }); 70 | }).listen(this.port); 71 | } 72 | } 73 | 74 | export default DoorSocketServer; 75 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/DoorSlackBot.js: -------------------------------------------------------------------------------- 1 | import { RtmClient, MemoryDataStore, CLIENT_EVENTS, RTM_EVENTS } from "@slack/client"; 2 | import _ from "underscore"; 3 | 4 | /** 5 | * A representation of the door bot in Slack. It is configured with a specific integration token and a Slack channel 6 | * (public or private) and provides the primitives for interacting with Slack. In particular, it provides a way to 7 | * add hooks for reacting to user messages, a way to post a message in the configured channel and a way to retrieve 8 | * information about an user. 9 | */ 10 | class DoorSlackBot { 11 | 12 | constructor(config) { 13 | this.rtm = new RtmClient(config.botToken, { 14 | dataStore: new MemoryDataStore(), 15 | autoReconnect: true 16 | }); 17 | 18 | this.msgCallbacks = []; 19 | 20 | this.rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, rtmStartData => { 21 | console.log(`Logged in as ${rtmStartData.self.name}`); 22 | }); 23 | 24 | this.rtm.on(CLIENT_EVENTS.RTM.RTM_CONNECTION_OPENED, () => { 25 | console.log("Opened RTM connection"); 26 | this.channelInfo = this.rtm.dataStore.getChannelOrGroupByName(config.channel); 27 | }); 28 | 29 | this.rtm.on(RTM_EVENTS.MESSAGE, rawData => { 30 | console.log(`Slack: ${JSON.stringify(rawData)}`); 31 | 32 | let { type, text, channel } = rawData; 33 | if (type !== "message" || !text || !channel) return; 34 | 35 | if (channel === this.channelInfo.id && text.indexOf(this.rtm.activeUserId) !== -1) { 36 | const match = _.find(this.msgCallbacks, cb => text.match(cb.regex)); 37 | if (match) { 38 | this.getUserInfo(rawData.user).then(user => match.callback(user, text)); 39 | } 40 | } 41 | }); 42 | 43 | this.rtm.on(CLIENT_EVENTS.RTM.ATTEMPTING_RECONNECT, () => { 44 | console.log("Attempting to reconnect to Slack..."); 45 | }); 46 | 47 | this.rtm.on(CLIENT_EVENTS.RTM.DISCONNECT, () => { 48 | console.log("Permanently disconnected."); 49 | }); 50 | 51 | this.rtm.start(); 52 | } 53 | 54 | onMessageLike(regex, callback) { 55 | this.msgCallbacks.push({ regex, callback }); 56 | } 57 | 58 | postMessage(message) { 59 | this.rtm.sendMessage(message, this.channelInfo.id); 60 | } 61 | 62 | getUserInfo(userId) { 63 | let user = this.rtm.dataStore.getUserById(userId); 64 | 65 | let summary = user && _.contains(this.channelInfo.members, userId) ? 66 | { name: user.name, email: user.profile.email } : 67 | null; 68 | 69 | return Promise.resolve(summary); 70 | } 71 | } 72 | 73 | export default DoorSlackBot; 74 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/StatsDatabase.js: -------------------------------------------------------------------------------- 1 | import Promise from "bluebird"; 2 | import Sequelize from "sequelize"; 3 | import _ from "underscore"; 4 | 5 | const STATS_DATABASE = "stats.db"; // sqlite 6 | const DAYS_OF_WEEK = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 7 | 8 | const sequelize = new Sequelize(null, null, null, { 9 | dialect: "sqlite", 10 | storage: STATS_DATABASE 11 | }); 12 | 13 | const DoorOpens = sequelize.define("door_opens", { 14 | id: { 15 | type: Sequelize.INTEGER, 16 | field: "id", 17 | primaryKey: true, 18 | autoIncrement: true 19 | }, 20 | user: { 21 | type: Sequelize.STRING, 22 | field: "user" 23 | }, 24 | email: { 25 | type: Sequelize.STRING, 26 | field: "email" 27 | }, 28 | timestamp: { 29 | type: Sequelize.DATE, 30 | field: "timestamp", 31 | defaultValue: Sequelize.NOW 32 | }, 33 | type: { 34 | type: Sequelize.STRING, 35 | field: "type" 36 | } 37 | }, { 38 | freezeTableName: true, 39 | tableName: "door_opens", 40 | timestamps: false 41 | }); 42 | 43 | DoorOpens.sync(); 44 | 45 | /** 46 | * An entrypoint for querying and updating the door opening stats database. 47 | */ 48 | // TODO: convert static to instance methods and parameterize StatsDatabase instances with DB file and options 49 | class StatsDatabase { 50 | 51 | static registerDoorOpen({ name, email }) { 52 | DoorOpens.create({ user: name, email: email, type: "door" }); 53 | } 54 | 55 | static registerGarageOpen({ name, email }) { 56 | DoorOpens.create({ user: name, email: email, type: "garage" }); 57 | } 58 | 59 | static getStats() { 60 | const queries = type => { 61 | return { 62 | countPerDayQ: sequelize.query( 63 | "SELECT case cast(strftime('%w', timestamp) as integer) " + 64 | "when 0 then 'Sun' " + 65 | "when 1 then 'Mon' " + 66 | "when 2 then 'Tue' " + 67 | "when 3 then 'Wed' " + 68 | "when 4 then 'Thu' " + 69 | "when 5 then 'Fri' " + 70 | "else 'Sat' end as dayofweek, COUNT(timestamp) as count FROM door_opens " + 71 | `WHERE type = '${type}' GROUP BY dayofweek`, { type: sequelize.QueryTypes.SELECT }), 72 | timestampQ: DoorOpens.findOne({ 73 | order: [["timestamp", "ASC"]], 74 | where: { type }, 75 | limit: 1, 76 | attributes: ["timestamp"] 77 | }) 78 | }; 79 | }; 80 | 81 | const types = ["door", "garage"]; 82 | 83 | return Promise.all(types.map(t => Promise.props(queries(t)))).then(data => { 84 | return _.map(data, val => { 85 | const counts0 = _.object(DAYS_OF_WEEK, _.map(DAYS_OF_WEEK, () => 0)); 86 | const countsDay = _.chain(val.countPerDayQ).indexBy("dayofweek").mapObject(day => day.count).value(); 87 | return _.extendOwn(counts0, countsDay, { 88 | since: val.timestampQ ? new Date(val.timestampQ.timestamp).toISOString() : null 89 | }); 90 | }); 91 | }).then(res => _.object(types, res)); 92 | } 93 | } 94 | 95 | export default StatsDatabase; 96 | -------------------------------------------------------------------------------- /mobile-app/www/css/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */ 3 | } 4 | 5 | body { 6 | -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */ 7 | -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */ 8 | -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */ 9 | background-color:#E4E4E4; 10 | background-attachment:fixed; 11 | font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif; 12 | font-size:12px; 13 | height:100%; 14 | margin:0px; 15 | padding:0px; 16 | /*text-transform:uppercase;*/ 17 | width:100%; 18 | text-align: center; 19 | } 20 | 21 | /* Portrait layout (default) */ 22 | .app { 23 | height:20%; /* text area height */ 24 | width:100%; /* text area width */ 25 | text-align:center; 26 | margin-top: 15%; 27 | } 28 | 29 | .logo { 30 | background-image: url('../img/founders.png'); 31 | width: 100%; 32 | height: 100%; 33 | background-size: contain; 34 | background-repeat: no-repeat; 35 | background-position: 50%; 36 | } 37 | 38 | /* Landscape layout (with min-width) */ 39 | @media screen and (min-aspect-ratio: 1/1) and (min-width:400px) { 40 | .app { 41 | background-position:left center; 42 | padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */ 43 | margin:-90px 0px 0px -198px; /* offset vertical: half of image height */ 44 | /* offset horizontal: half of image width and text area width */ 45 | } 46 | } 47 | 48 | h1 { 49 | font-size:24px; 50 | font-weight:normal; 51 | margin:0px; 52 | overflow:visible; 53 | padding:0px; 54 | text-align:center; 55 | } 56 | 57 | .event { 58 | border-radius:4px; 59 | -webkit-border-radius:4px; 60 | color:#FFFFFF; 61 | font-size:12px; 62 | margin:0px 30px; 63 | padding:2px 0px; 64 | } 65 | 66 | .event.listening { 67 | background-color:#333333; 68 | display:block; 69 | } 70 | 71 | .event.received { 72 | background-color:#4B946A; 73 | display:none; 74 | } 75 | 76 | @keyframes fade { 77 | from { opacity: 1.0; } 78 | 50% { opacity: 0.4; } 79 | to { opacity: 1.0; } 80 | } 81 | 82 | @-webkit-keyframes fade { 83 | from { opacity: 1.0; } 84 | 50% { opacity: 0.4; } 85 | to { opacity: 1.0; } 86 | } 87 | 88 | .blink { 89 | animation:fade 3000ms infinite; 90 | -webkit-animation:fade 3000ms infinite; 91 | } 92 | 93 | .app-button { 94 | text-align: center; 95 | margin-top: 50px; 96 | } 97 | 98 | .app-button>div { 99 | margin: 0 auto; 100 | } 101 | 102 | ::-webkit-input-placeholder { 103 | color: white; 104 | } 105 | 106 | :-moz-placeholder { /* Firefox 18- */ 107 | color: white; 108 | } 109 | 110 | ::-moz-placeholder { /* Firefox 19+ */ 111 | color: white; 112 | } 113 | 114 | :-ms-input-placeholder { 115 | color: gray; 116 | } 117 | -------------------------------------------------------------------------------- /door-open-service/node-backend/src/slackInterface.js: -------------------------------------------------------------------------------- 1 | import histogram from "bars"; 2 | import moment from "moment"; 3 | import _ from "underscore"; 4 | 5 | import DoorBackend from "./DoorBackend"; 6 | import StatsDatabase from "./StatsDatabase"; 7 | 8 | /** 9 | * Sets up the Slack bot to reply to user requests destined for the door backend sent through the configured Slack 10 | * channel. 11 | * @param {object} config the Slack interface configuration 12 | * @param {DoorSlackBot} slackBot the Slack bot to use for interacting and logging door openings 13 | * @param {DoorSocketServer} backend the server used to broadcast messages to devices 14 | * @returns {undefined} 15 | */ 16 | export default function (config, slackBot, backend) { 17 | 18 | function handleOpenCommand(user, doorId, onSuccess) { 19 | const result = backend.open(user, doorId); 20 | switch (result.result) { 21 | case DoorBackend.OPEN_RESULT.SUCCESS: 22 | onSuccess(); 23 | slackBot.postMessage(`Opening the ${doorId} as requested by ${user.name} (${user.email})...`); 24 | break; 25 | 26 | case DoorBackend.OPEN_RESULT.LOCKED: 27 | slackBot.postMessage(`Opening the ${doorId} denied by a pending lock of ${result.user}.`); 28 | break; 29 | 30 | case DoorBackend.OPEN_RESULT.UNAVAILABLE: 31 | slackBot.postMessage(`The remote ${doorId} opening service is not operational at the moment. ` + 32 | "Consider dispatching a drone to pick up a human."); 33 | break; 34 | 35 | case DoorBackend.OPEN_RESULT.UNAUTHORIZED: 36 | slackBot.postMessage("Unrecognized user."); 37 | } 38 | } 39 | 40 | slackBot.onMessageLike(/garage/i, user => { 41 | handleOpenCommand(user, "garage", () => StatsDatabase.registerGarageOpen(user)); 42 | }); 43 | 44 | slackBot.onMessageLike(/open/i, user => { 45 | handleOpenCommand(user, "door", () => StatsDatabase.registerDoorOpen(user)); 46 | }); 47 | 48 | slackBot.onMessageLike(/stats/i, () => { 49 | StatsDatabase.getStats().then(stats => { 50 | if (!stats) { 51 | throw new Error("There are no available stats for the remote door opening service"); 52 | } 53 | 54 | const produceMsg = (name, stats, includeSaveTime) => { 55 | const count = _.chain(stats).omit("since").values().reduce((m, val) => m + val, 0).value(); 56 | const savedTime = Math.round(count * 40.0); 57 | const savedTimeStr = moment.duration(savedTime, "seconds").humanize(); 58 | const timeStr = moment(stats.since, moment.ISO_8601).fromNow(); 59 | let msg = `The remote *${name}* opening service was used ` + 60 | `${count} time${count > 1 ? "s" : ""} since ${timeStr}.\n` + 61 | `Breakdown by day:\n\`\`\`${histogram(_.omit(stats, "since"), { sort: false })}\`\`\`\n`; 62 | if (includeSaveTime) 63 | msg += `Assuming that it takes ~40 seconds to open the ${name} and get back, ` + 64 | `around ${savedTimeStr} have been saved!`; 65 | return msg; 66 | }; 67 | 68 | const msg = produceMsg("door", stats["door"], true) + "\n\n\n" + produceMsg("garage", stats["garage"], false); 69 | slackBot.postMessage(msg); 70 | }).catch(err => { 71 | console.error(err); 72 | slackBot.postMessage(err.message); 73 | }); 74 | }); 75 | } 76 | -------------------------------------------------------------------------------- /mobile-app/www/js/app.js: -------------------------------------------------------------------------------- 1 | // Export selectors engine 2 | var $$ = Dom7; 3 | 4 | var app = { 5 | 6 | // -- to be filled before compiling the app -- 7 | clientId: '', 8 | clientSecret: '', 9 | teamId: '', 10 | channel: '', 11 | redirectUri: '', 12 | // -- 13 | 14 | token: '', 15 | requiredScope: 'chat:write:user', 16 | 17 | f7: new Framework7({ 18 | material: true 19 | }), 20 | 21 | turnOffRequests: false, 22 | 23 | openDoor: function() { 24 | app.showNotification("Opening the door", 3000); 25 | 26 | if (app.turnOffRequests) { 27 | return; 28 | } 29 | 30 | var url = 31 | 'https://slack.com/api/chat.postMessage?token=' + app.token + 32 | '&channel=' + app.channel + 33 | '&text=@door-service: open&link_names=1' + 34 | '&as_user=true'; 35 | app.sendAction(url); 36 | }, 37 | 38 | openGarage: function() { 39 | app.showNotification("Opening the garage", 3000); 40 | 41 | if (app.turnOffRequests) { 42 | return; 43 | } 44 | 45 | var url = 46 | 'https://slack.com/api/chat.postMessage?token=' + app.token + 47 | '&channel=' + app.channel + 48 | '&text=@door-service: garage&link_names=1' + 49 | '&as_user=true'; 50 | app.sendAction(url); 51 | }, 52 | 53 | // Application Constructor 54 | initialize: function() { 55 | app.bindEvents(); 56 | }, 57 | 58 | // Bind Event Listeners 59 | // 60 | // Bind any events that are required on startup. Common events are: 61 | // 'load', 'deviceready', 'offline', and 'online'. 62 | bindEvents: function() { 63 | $$(document).on('deviceready', app.onDeviceReady, false); 64 | 65 | var eventType = 'click'; 66 | 67 | if (app.f7.support.touch) { 68 | console.log("touch is supported"); 69 | eventType = 'touchstart'; 70 | } 71 | 72 | $$('#open-door').on(eventType, app.openDoor); 73 | $$('#open-garage').on(eventType, app.openGarage); 74 | }, 75 | 76 | getToken: function(fileEntry) { 77 | fileEntry.file(function (file) { 78 | var reader = new FileReader(); 79 | reader.onloadend = function() { 80 | if (this.result.length != 0) { 81 | app.token = this.result; 82 | } else { 83 | app.getOAuthToken(fileEntry); 84 | } 85 | }; 86 | reader.readAsText(file); 87 | }); 88 | }, 89 | 90 | getOAuthToken: function(fileEntry) { 91 | var authUrl = 'https://slack.com/oauth/authorize' + 92 | '?client_id=' + app.clientId + 93 | '&client_secret=' + app.clientSecret + 94 | '&scope=' + app.requiredScope + 95 | '&team=' + app.teamId; 96 | 97 | var authWindow = cordova.InAppBrowser.open(authUrl, '_blank', 'location=no,toolbar=no'); 98 | 99 | authWindow.addEventListener('loadstart', function(e) { 100 | var code = new RegExp(app.redirectUri + '\\?code=([^&]+)?').exec(e.url); 101 | if (code) code = code[1]; 102 | 103 | var error = new RegExp(app.redirectUri + '\\?error=([^&]+)').exec(e.url); 104 | if (error) error = error[1]; 105 | 106 | if (code || error) { 107 | authWindow.close(); 108 | } 109 | 110 | if (code) { 111 | $$.ajax({ 112 | url: 'https://slack.com/api/oauth.access' + 113 | '?client_id=' + app.clientId + 114 | '&client_secret=' + app.clientSecret + 115 | '&code=' + code, 116 | dataType: 'json', 117 | success: function (data) { 118 | app.token = data.access_token; 119 | app.saveToken(fileEntry, app.token); 120 | app.showNotification("Slack authentication successful"); 121 | } 122 | }); 123 | } 124 | 125 | if (error) { 126 | app.showNotification("Error: " + error); 127 | } 128 | }); 129 | }, 130 | 131 | saveToken: function(fileEntry, token) { 132 | fileEntry.createWriter(function (fileWriter) { 133 | fileWriter.write(token); 134 | }); 135 | }, 136 | 137 | onDeviceReady: function() { 138 | window.requestFileSystem(LocalFileSystem.PERSISTENT, 1024, function (fs) { 139 | fs.root.getFile("token", { create: true, exclusive: false }, function (fileEntry) { 140 | app.getToken(fileEntry); 141 | }); 142 | }); 143 | 144 | app.showNotification("Device ready"); 145 | }, 146 | 147 | sendAction: function(url) { 148 | $$.ajax({ 149 | url: url, 150 | crossDomain: true, 151 | method: 'GET', 152 | dataType: 'json', 153 | success: app.actionSuccess, 154 | error: app.actionError 155 | }); 156 | }, 157 | 158 | actionSuccess: function(data, status, xhr) { 159 | app.showNotification(JSON.stringify(data)); 160 | }, 161 | 162 | actionError: function(xhr, status) { 163 | app.showNotification("Error: " + status + " " + xhr.response); 164 | }, 165 | 166 | showNotification: function(message, timeout) { 167 | if (typeof timeout === "undefined") { 168 | timeout = 5000; 169 | } 170 | 171 | app.f7.addNotification({ 172 | message: message, 173 | hold: timeout, 174 | closeOnClick: true, 175 | button: { 176 | text: 'Close', 177 | color: 'lightgreen' 178 | } 179 | }); 180 | } 181 | }; 182 | 183 | app.initialize(); 184 | -------------------------------------------------------------------------------- /door-open-service/node-backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "f2door", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@slack/client": { 8 | "version": "3.12.0", 9 | "resolved": "https://registry.npmjs.org/@slack/client/-/client-3.12.0.tgz", 10 | "integrity": "sha512-7qtcNRNHRZX7hBSml6O7HFiRKCutaYZsiarpbdadXvqp0wWNPeVJNNZ2RWYnEClYjVqG0tIN9GLsQgPnn88CJQ==", 11 | "requires": { 12 | "async": "1.5.2", 13 | "bluebird": "3.5.0", 14 | "eventemitter3": "1.2.0", 15 | "https-proxy-agent": "1.0.0", 16 | "inherits": "2.0.3", 17 | "lodash": "4.17.4", 18 | "pkginfo": "0.4.1", 19 | "request": "2.81.0", 20 | "retry": "0.9.0", 21 | "url-join": "0.0.1", 22 | "winston": "2.3.1", 23 | "ws": "1.1.4" 24 | } 25 | }, 26 | "@types/geojson": { 27 | "version": "1.0.3", 28 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.3.tgz", 29 | "integrity": "sha512-unWrGQhXRrNTk/MabfBLCM/rWT6zxR1OSK0GIPxsP8NX8mJcsNWkERPp4z0pTyHLiANy+Nwczf8Q2I16Pth1FA==" 30 | }, 31 | "@types/node": { 32 | "version": "6.0.88", 33 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz", 34 | "integrity": "sha512-bYDPZTX0/s1aihdjLuAgogUAT5M+TpoWChEMea2p0yOcfn5bu3k6cJb9cp6nw268XeSNIGGr+4+/8V5K6BGzLQ==" 35 | }, 36 | "abbrev": { 37 | "version": "1.1.0", 38 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", 39 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" 40 | }, 41 | "accept": { 42 | "version": "2.1.4", 43 | "resolved": "https://registry.npmjs.org/accept/-/accept-2.1.4.tgz", 44 | "integrity": "sha1-iHr1TO7lx/RDBGGXHsQAxh0JrLs=", 45 | "requires": { 46 | "boom": "5.2.0", 47 | "hoek": "4.2.0" 48 | }, 49 | "dependencies": { 50 | "boom": { 51 | "version": "5.2.0", 52 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 53 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 54 | "requires": { 55 | "hoek": "4.2.0" 56 | } 57 | }, 58 | "hoek": { 59 | "version": "4.2.0", 60 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 61 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 62 | } 63 | } 64 | }, 65 | "acorn": { 66 | "version": "5.1.2", 67 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", 68 | "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", 69 | "dev": true 70 | }, 71 | "acorn-jsx": { 72 | "version": "3.0.1", 73 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 74 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 75 | "dev": true, 76 | "requires": { 77 | "acorn": "3.3.0" 78 | }, 79 | "dependencies": { 80 | "acorn": { 81 | "version": "3.3.0", 82 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 83 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 84 | "dev": true 85 | } 86 | } 87 | }, 88 | "agent-base": { 89 | "version": "2.1.1", 90 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", 91 | "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", 92 | "requires": { 93 | "extend": "3.0.1", 94 | "semver": "5.0.3" 95 | } 96 | }, 97 | "ajv": { 98 | "version": "4.11.8", 99 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 100 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 101 | "requires": { 102 | "co": "4.6.0", 103 | "json-stable-stringify": "1.0.1" 104 | } 105 | }, 106 | "ajv-keywords": { 107 | "version": "1.5.1", 108 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", 109 | "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", 110 | "dev": true 111 | }, 112 | "ammo": { 113 | "version": "2.0.4", 114 | "resolved": "https://registry.npmjs.org/ammo/-/ammo-2.0.4.tgz", 115 | "integrity": "sha1-v4CqshFpjqePY+9efxE91dnokX8=", 116 | "requires": { 117 | "boom": "5.2.0", 118 | "hoek": "4.2.0" 119 | }, 120 | "dependencies": { 121 | "boom": { 122 | "version": "5.2.0", 123 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 124 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 125 | "requires": { 126 | "hoek": "4.2.0" 127 | } 128 | }, 129 | "hoek": { 130 | "version": "4.2.0", 131 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 132 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 133 | } 134 | } 135 | }, 136 | "ansi-escapes": { 137 | "version": "2.0.0", 138 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", 139 | "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", 140 | "dev": true 141 | }, 142 | "ansi-regex": { 143 | "version": "2.1.1", 144 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 145 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 146 | }, 147 | "ansi-styles": { 148 | "version": "2.2.1", 149 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 150 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 151 | "dev": true 152 | }, 153 | "aproba": { 154 | "version": "1.1.2", 155 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", 156 | "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" 157 | }, 158 | "are-we-there-yet": { 159 | "version": "1.1.4", 160 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", 161 | "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", 162 | "requires": { 163 | "delegates": "1.0.0", 164 | "readable-stream": "2.3.3" 165 | }, 166 | "dependencies": { 167 | "isarray": { 168 | "version": "1.0.0", 169 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 170 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 171 | }, 172 | "readable-stream": { 173 | "version": "2.3.3", 174 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 175 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 176 | "requires": { 177 | "core-util-is": "1.0.2", 178 | "inherits": "2.0.3", 179 | "isarray": "1.0.0", 180 | "process-nextick-args": "1.0.7", 181 | "safe-buffer": "5.1.1", 182 | "string_decoder": "1.0.3", 183 | "util-deprecate": "1.0.2" 184 | } 185 | }, 186 | "string_decoder": { 187 | "version": "1.0.3", 188 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 189 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 190 | "requires": { 191 | "safe-buffer": "5.1.1" 192 | } 193 | } 194 | } 195 | }, 196 | "argparse": { 197 | "version": "1.0.9", 198 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 199 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 200 | "dev": true, 201 | "requires": { 202 | "sprintf-js": "1.0.3" 203 | } 204 | }, 205 | "array-union": { 206 | "version": "1.0.2", 207 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 208 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 209 | "dev": true, 210 | "requires": { 211 | "array-uniq": "1.0.3" 212 | } 213 | }, 214 | "array-uniq": { 215 | "version": "1.0.3", 216 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 217 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 218 | "dev": true 219 | }, 220 | "arrify": { 221 | "version": "1.0.1", 222 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 223 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 224 | "dev": true 225 | }, 226 | "asn1": { 227 | "version": "0.2.3", 228 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 229 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 230 | }, 231 | "assert-plus": { 232 | "version": "0.2.0", 233 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 234 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" 235 | }, 236 | "async": { 237 | "version": "1.5.2", 238 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 239 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 240 | }, 241 | "asynckit": { 242 | "version": "0.4.0", 243 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 244 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 245 | }, 246 | "aws-sign2": { 247 | "version": "0.6.0", 248 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 249 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" 250 | }, 251 | "aws4": { 252 | "version": "1.6.0", 253 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 254 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 255 | }, 256 | "b64": { 257 | "version": "3.0.3", 258 | "resolved": "https://registry.npmjs.org/b64/-/b64-3.0.3.tgz", 259 | "integrity": "sha512-Pbeh0i6OLubPJdIdCepn8ZQHwN2MWznZHbHABSTEfQ706ie+yuxNSaPdqX1xRatT6WanaS1EazMiSg0NUW2XxQ==" 260 | }, 261 | "babel-code-frame": { 262 | "version": "6.26.0", 263 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 264 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 265 | "dev": true, 266 | "requires": { 267 | "chalk": "1.1.3", 268 | "esutils": "2.0.2", 269 | "js-tokens": "3.0.2" 270 | } 271 | }, 272 | "babel-core": { 273 | "version": "6.26.0", 274 | "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", 275 | "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", 276 | "dev": true, 277 | "requires": { 278 | "babel-code-frame": "6.26.0", 279 | "babel-generator": "6.26.0", 280 | "babel-helpers": "6.24.1", 281 | "babel-messages": "6.23.0", 282 | "babel-register": "6.26.0", 283 | "babel-runtime": "6.26.0", 284 | "babel-template": "6.26.0", 285 | "babel-traverse": "6.26.0", 286 | "babel-types": "6.26.0", 287 | "babylon": "6.18.0", 288 | "convert-source-map": "1.5.0", 289 | "debug": "2.6.8", 290 | "json5": "0.5.1", 291 | "lodash": "4.17.4", 292 | "minimatch": "3.0.4", 293 | "path-is-absolute": "1.0.1", 294 | "private": "0.1.7", 295 | "slash": "1.0.0", 296 | "source-map": "0.5.7" 297 | }, 298 | "dependencies": { 299 | "json5": { 300 | "version": "0.5.1", 301 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 302 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 303 | "dev": true 304 | } 305 | } 306 | }, 307 | "babel-eslint": { 308 | "version": "7.2.3", 309 | "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", 310 | "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", 311 | "dev": true, 312 | "requires": { 313 | "babel-code-frame": "6.26.0", 314 | "babel-traverse": "6.26.0", 315 | "babel-types": "6.26.0", 316 | "babylon": "6.18.0" 317 | } 318 | }, 319 | "babel-generator": { 320 | "version": "6.26.0", 321 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", 322 | "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", 323 | "dev": true, 324 | "requires": { 325 | "babel-messages": "6.23.0", 326 | "babel-runtime": "6.26.0", 327 | "babel-types": "6.26.0", 328 | "detect-indent": "4.0.0", 329 | "jsesc": "1.3.0", 330 | "lodash": "4.17.4", 331 | "source-map": "0.5.7", 332 | "trim-right": "1.0.1" 333 | } 334 | }, 335 | "babel-helper-call-delegate": { 336 | "version": "6.24.1", 337 | "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", 338 | "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", 339 | "dev": true, 340 | "requires": { 341 | "babel-helper-hoist-variables": "6.24.1", 342 | "babel-runtime": "6.26.0", 343 | "babel-traverse": "6.26.0", 344 | "babel-types": "6.26.0" 345 | } 346 | }, 347 | "babel-helper-define-map": { 348 | "version": "6.26.0", 349 | "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", 350 | "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", 351 | "dev": true, 352 | "requires": { 353 | "babel-helper-function-name": "6.24.1", 354 | "babel-runtime": "6.26.0", 355 | "babel-types": "6.26.0", 356 | "lodash": "4.17.4" 357 | } 358 | }, 359 | "babel-helper-function-name": { 360 | "version": "6.24.1", 361 | "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 362 | "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", 363 | "dev": true, 364 | "requires": { 365 | "babel-helper-get-function-arity": "6.24.1", 366 | "babel-runtime": "6.26.0", 367 | "babel-template": "6.26.0", 368 | "babel-traverse": "6.26.0", 369 | "babel-types": "6.26.0" 370 | } 371 | }, 372 | "babel-helper-get-function-arity": { 373 | "version": "6.24.1", 374 | "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", 375 | "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", 376 | "dev": true, 377 | "requires": { 378 | "babel-runtime": "6.26.0", 379 | "babel-types": "6.26.0" 380 | } 381 | }, 382 | "babel-helper-hoist-variables": { 383 | "version": "6.24.1", 384 | "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", 385 | "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", 386 | "dev": true, 387 | "requires": { 388 | "babel-runtime": "6.26.0", 389 | "babel-types": "6.26.0" 390 | } 391 | }, 392 | "babel-helper-optimise-call-expression": { 393 | "version": "6.24.1", 394 | "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", 395 | "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", 396 | "dev": true, 397 | "requires": { 398 | "babel-runtime": "6.26.0", 399 | "babel-types": "6.26.0" 400 | } 401 | }, 402 | "babel-helper-regex": { 403 | "version": "6.26.0", 404 | "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", 405 | "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", 406 | "dev": true, 407 | "requires": { 408 | "babel-runtime": "6.26.0", 409 | "babel-types": "6.26.0", 410 | "lodash": "4.17.4" 411 | } 412 | }, 413 | "babel-helper-replace-supers": { 414 | "version": "6.24.1", 415 | "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", 416 | "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", 417 | "dev": true, 418 | "requires": { 419 | "babel-helper-optimise-call-expression": "6.24.1", 420 | "babel-messages": "6.23.0", 421 | "babel-runtime": "6.26.0", 422 | "babel-template": "6.26.0", 423 | "babel-traverse": "6.26.0", 424 | "babel-types": "6.26.0" 425 | } 426 | }, 427 | "babel-helpers": { 428 | "version": "6.24.1", 429 | "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 430 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", 431 | "dev": true, 432 | "requires": { 433 | "babel-runtime": "6.26.0", 434 | "babel-template": "6.26.0" 435 | } 436 | }, 437 | "babel-messages": { 438 | "version": "6.23.0", 439 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 440 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 441 | "dev": true, 442 | "requires": { 443 | "babel-runtime": "6.26.0" 444 | } 445 | }, 446 | "babel-plugin-check-es2015-constants": { 447 | "version": "6.22.0", 448 | "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", 449 | "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", 450 | "dev": true, 451 | "requires": { 452 | "babel-runtime": "6.26.0" 453 | } 454 | }, 455 | "babel-plugin-syntax-object-rest-spread": { 456 | "version": "6.13.0", 457 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", 458 | "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", 459 | "dev": true 460 | }, 461 | "babel-plugin-transform-es2015-arrow-functions": { 462 | "version": "6.22.0", 463 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", 464 | "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", 465 | "dev": true, 466 | "requires": { 467 | "babel-runtime": "6.26.0" 468 | } 469 | }, 470 | "babel-plugin-transform-es2015-block-scoped-functions": { 471 | "version": "6.22.0", 472 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", 473 | "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", 474 | "dev": true, 475 | "requires": { 476 | "babel-runtime": "6.26.0" 477 | } 478 | }, 479 | "babel-plugin-transform-es2015-block-scoping": { 480 | "version": "6.26.0", 481 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", 482 | "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", 483 | "dev": true, 484 | "requires": { 485 | "babel-runtime": "6.26.0", 486 | "babel-template": "6.26.0", 487 | "babel-traverse": "6.26.0", 488 | "babel-types": "6.26.0", 489 | "lodash": "4.17.4" 490 | } 491 | }, 492 | "babel-plugin-transform-es2015-classes": { 493 | "version": "6.24.1", 494 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", 495 | "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", 496 | "dev": true, 497 | "requires": { 498 | "babel-helper-define-map": "6.26.0", 499 | "babel-helper-function-name": "6.24.1", 500 | "babel-helper-optimise-call-expression": "6.24.1", 501 | "babel-helper-replace-supers": "6.24.1", 502 | "babel-messages": "6.23.0", 503 | "babel-runtime": "6.26.0", 504 | "babel-template": "6.26.0", 505 | "babel-traverse": "6.26.0", 506 | "babel-types": "6.26.0" 507 | } 508 | }, 509 | "babel-plugin-transform-es2015-computed-properties": { 510 | "version": "6.24.1", 511 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", 512 | "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", 513 | "dev": true, 514 | "requires": { 515 | "babel-runtime": "6.26.0", 516 | "babel-template": "6.26.0" 517 | } 518 | }, 519 | "babel-plugin-transform-es2015-destructuring": { 520 | "version": "6.23.0", 521 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", 522 | "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", 523 | "dev": true, 524 | "requires": { 525 | "babel-runtime": "6.26.0" 526 | } 527 | }, 528 | "babel-plugin-transform-es2015-duplicate-keys": { 529 | "version": "6.24.1", 530 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", 531 | "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", 532 | "dev": true, 533 | "requires": { 534 | "babel-runtime": "6.26.0", 535 | "babel-types": "6.26.0" 536 | } 537 | }, 538 | "babel-plugin-transform-es2015-for-of": { 539 | "version": "6.23.0", 540 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", 541 | "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", 542 | "dev": true, 543 | "requires": { 544 | "babel-runtime": "6.26.0" 545 | } 546 | }, 547 | "babel-plugin-transform-es2015-function-name": { 548 | "version": "6.24.1", 549 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", 550 | "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", 551 | "dev": true, 552 | "requires": { 553 | "babel-helper-function-name": "6.24.1", 554 | "babel-runtime": "6.26.0", 555 | "babel-types": "6.26.0" 556 | } 557 | }, 558 | "babel-plugin-transform-es2015-literals": { 559 | "version": "6.22.0", 560 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", 561 | "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", 562 | "dev": true, 563 | "requires": { 564 | "babel-runtime": "6.26.0" 565 | } 566 | }, 567 | "babel-plugin-transform-es2015-modules-amd": { 568 | "version": "6.24.1", 569 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", 570 | "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", 571 | "dev": true, 572 | "requires": { 573 | "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", 574 | "babel-runtime": "6.26.0", 575 | "babel-template": "6.26.0" 576 | } 577 | }, 578 | "babel-plugin-transform-es2015-modules-commonjs": { 579 | "version": "6.26.0", 580 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", 581 | "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", 582 | "dev": true, 583 | "requires": { 584 | "babel-plugin-transform-strict-mode": "6.24.1", 585 | "babel-runtime": "6.26.0", 586 | "babel-template": "6.26.0", 587 | "babel-types": "6.26.0" 588 | } 589 | }, 590 | "babel-plugin-transform-es2015-modules-systemjs": { 591 | "version": "6.24.1", 592 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", 593 | "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", 594 | "dev": true, 595 | "requires": { 596 | "babel-helper-hoist-variables": "6.24.1", 597 | "babel-runtime": "6.26.0", 598 | "babel-template": "6.26.0" 599 | } 600 | }, 601 | "babel-plugin-transform-es2015-modules-umd": { 602 | "version": "6.24.1", 603 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", 604 | "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", 605 | "dev": true, 606 | "requires": { 607 | "babel-plugin-transform-es2015-modules-amd": "6.24.1", 608 | "babel-runtime": "6.26.0", 609 | "babel-template": "6.26.0" 610 | } 611 | }, 612 | "babel-plugin-transform-es2015-object-super": { 613 | "version": "6.24.1", 614 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", 615 | "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", 616 | "dev": true, 617 | "requires": { 618 | "babel-helper-replace-supers": "6.24.1", 619 | "babel-runtime": "6.26.0" 620 | } 621 | }, 622 | "babel-plugin-transform-es2015-parameters": { 623 | "version": "6.24.1", 624 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", 625 | "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", 626 | "dev": true, 627 | "requires": { 628 | "babel-helper-call-delegate": "6.24.1", 629 | "babel-helper-get-function-arity": "6.24.1", 630 | "babel-runtime": "6.26.0", 631 | "babel-template": "6.26.0", 632 | "babel-traverse": "6.26.0", 633 | "babel-types": "6.26.0" 634 | } 635 | }, 636 | "babel-plugin-transform-es2015-shorthand-properties": { 637 | "version": "6.24.1", 638 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", 639 | "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", 640 | "dev": true, 641 | "requires": { 642 | "babel-runtime": "6.26.0", 643 | "babel-types": "6.26.0" 644 | } 645 | }, 646 | "babel-plugin-transform-es2015-spread": { 647 | "version": "6.22.0", 648 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", 649 | "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", 650 | "dev": true, 651 | "requires": { 652 | "babel-runtime": "6.26.0" 653 | } 654 | }, 655 | "babel-plugin-transform-es2015-sticky-regex": { 656 | "version": "6.24.1", 657 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", 658 | "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", 659 | "dev": true, 660 | "requires": { 661 | "babel-helper-regex": "6.26.0", 662 | "babel-runtime": "6.26.0", 663 | "babel-types": "6.26.0" 664 | } 665 | }, 666 | "babel-plugin-transform-es2015-template-literals": { 667 | "version": "6.22.0", 668 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", 669 | "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", 670 | "dev": true, 671 | "requires": { 672 | "babel-runtime": "6.26.0" 673 | } 674 | }, 675 | "babel-plugin-transform-es2015-typeof-symbol": { 676 | "version": "6.23.0", 677 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", 678 | "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", 679 | "dev": true, 680 | "requires": { 681 | "babel-runtime": "6.26.0" 682 | } 683 | }, 684 | "babel-plugin-transform-es2015-unicode-regex": { 685 | "version": "6.24.1", 686 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", 687 | "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", 688 | "dev": true, 689 | "requires": { 690 | "babel-helper-regex": "6.26.0", 691 | "babel-runtime": "6.26.0", 692 | "regexpu-core": "2.0.0" 693 | } 694 | }, 695 | "babel-plugin-transform-object-rest-spread": { 696 | "version": "6.26.0", 697 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", 698 | "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", 699 | "dev": true, 700 | "requires": { 701 | "babel-plugin-syntax-object-rest-spread": "6.13.0", 702 | "babel-runtime": "6.26.0" 703 | } 704 | }, 705 | "babel-plugin-transform-regenerator": { 706 | "version": "6.26.0", 707 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", 708 | "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", 709 | "dev": true, 710 | "requires": { 711 | "regenerator-transform": "0.10.1" 712 | } 713 | }, 714 | "babel-plugin-transform-strict-mode": { 715 | "version": "6.24.1", 716 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", 717 | "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", 718 | "dev": true, 719 | "requires": { 720 | "babel-runtime": "6.26.0", 721 | "babel-types": "6.26.0" 722 | } 723 | }, 724 | "babel-preset-es2015": { 725 | "version": "6.24.1", 726 | "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", 727 | "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", 728 | "dev": true, 729 | "requires": { 730 | "babel-plugin-check-es2015-constants": "6.22.0", 731 | "babel-plugin-transform-es2015-arrow-functions": "6.22.0", 732 | "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", 733 | "babel-plugin-transform-es2015-block-scoping": "6.26.0", 734 | "babel-plugin-transform-es2015-classes": "6.24.1", 735 | "babel-plugin-transform-es2015-computed-properties": "6.24.1", 736 | "babel-plugin-transform-es2015-destructuring": "6.23.0", 737 | "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", 738 | "babel-plugin-transform-es2015-for-of": "6.23.0", 739 | "babel-plugin-transform-es2015-function-name": "6.24.1", 740 | "babel-plugin-transform-es2015-literals": "6.22.0", 741 | "babel-plugin-transform-es2015-modules-amd": "6.24.1", 742 | "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", 743 | "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", 744 | "babel-plugin-transform-es2015-modules-umd": "6.24.1", 745 | "babel-plugin-transform-es2015-object-super": "6.24.1", 746 | "babel-plugin-transform-es2015-parameters": "6.24.1", 747 | "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", 748 | "babel-plugin-transform-es2015-spread": "6.22.0", 749 | "babel-plugin-transform-es2015-sticky-regex": "6.24.1", 750 | "babel-plugin-transform-es2015-template-literals": "6.22.0", 751 | "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", 752 | "babel-plugin-transform-es2015-unicode-regex": "6.24.1", 753 | "babel-plugin-transform-regenerator": "6.26.0" 754 | } 755 | }, 756 | "babel-register": { 757 | "version": "6.26.0", 758 | "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 759 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", 760 | "dev": true, 761 | "requires": { 762 | "babel-core": "6.26.0", 763 | "babel-runtime": "6.26.0", 764 | "core-js": "2.5.1", 765 | "home-or-tmp": "2.0.0", 766 | "lodash": "4.17.4", 767 | "mkdirp": "0.5.1", 768 | "source-map-support": "0.4.17" 769 | } 770 | }, 771 | "babel-runtime": { 772 | "version": "6.26.0", 773 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 774 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 775 | "dev": true, 776 | "requires": { 777 | "core-js": "2.5.1", 778 | "regenerator-runtime": "0.11.0" 779 | } 780 | }, 781 | "babel-template": { 782 | "version": "6.26.0", 783 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 784 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 785 | "dev": true, 786 | "requires": { 787 | "babel-runtime": "6.26.0", 788 | "babel-traverse": "6.26.0", 789 | "babel-types": "6.26.0", 790 | "babylon": "6.18.0", 791 | "lodash": "4.17.4" 792 | } 793 | }, 794 | "babel-traverse": { 795 | "version": "6.26.0", 796 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 797 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 798 | "dev": true, 799 | "requires": { 800 | "babel-code-frame": "6.26.0", 801 | "babel-messages": "6.23.0", 802 | "babel-runtime": "6.26.0", 803 | "babel-types": "6.26.0", 804 | "babylon": "6.18.0", 805 | "debug": "2.6.8", 806 | "globals": "9.18.0", 807 | "invariant": "2.2.2", 808 | "lodash": "4.17.4" 809 | } 810 | }, 811 | "babel-types": { 812 | "version": "6.26.0", 813 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 814 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 815 | "dev": true, 816 | "requires": { 817 | "babel-runtime": "6.26.0", 818 | "esutils": "2.0.2", 819 | "lodash": "4.17.4", 820 | "to-fast-properties": "1.0.3" 821 | } 822 | }, 823 | "babylon": { 824 | "version": "6.18.0", 825 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 826 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 827 | "dev": true 828 | }, 829 | "balanced-match": { 830 | "version": "1.0.0", 831 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 832 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 833 | }, 834 | "bars": { 835 | "version": "github:steel/bars#80bd397a1fe582dd282dc44b9f3ec597d9717bcf", 836 | "requires": { 837 | "printf": "0.1.3" 838 | } 839 | }, 840 | "bcrypt-pbkdf": { 841 | "version": "1.0.1", 842 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 843 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 844 | "optional": true, 845 | "requires": { 846 | "tweetnacl": "0.14.5" 847 | } 848 | }, 849 | "bindings": { 850 | "version": "1.2.1", 851 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", 852 | "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" 853 | }, 854 | "block-stream": { 855 | "version": "0.0.9", 856 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 857 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 858 | "requires": { 859 | "inherits": "2.0.3" 860 | } 861 | }, 862 | "bluebird": { 863 | "version": "3.5.0", 864 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 865 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" 866 | }, 867 | "boom": { 868 | "version": "2.10.1", 869 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 870 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 871 | "requires": { 872 | "hoek": "2.16.3" 873 | } 874 | }, 875 | "brace-expansion": { 876 | "version": "1.1.8", 877 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 878 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 879 | "requires": { 880 | "balanced-match": "1.0.0", 881 | "concat-map": "0.0.1" 882 | } 883 | }, 884 | "call": { 885 | "version": "4.0.2", 886 | "resolved": "https://registry.npmjs.org/call/-/call-4.0.2.tgz", 887 | "integrity": "sha1-33b19R7o3Ui4VqyEAPfmnm1zmcQ=", 888 | "requires": { 889 | "boom": "5.2.0", 890 | "hoek": "4.2.0" 891 | }, 892 | "dependencies": { 893 | "boom": { 894 | "version": "5.2.0", 895 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 896 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 897 | "requires": { 898 | "hoek": "4.2.0" 899 | } 900 | }, 901 | "hoek": { 902 | "version": "4.2.0", 903 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 904 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 905 | } 906 | } 907 | }, 908 | "caller-path": { 909 | "version": "0.1.0", 910 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 911 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 912 | "dev": true, 913 | "requires": { 914 | "callsites": "0.2.0" 915 | } 916 | }, 917 | "callsites": { 918 | "version": "0.2.0", 919 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 920 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 921 | "dev": true 922 | }, 923 | "caseless": { 924 | "version": "0.12.0", 925 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 926 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 927 | }, 928 | "catbox": { 929 | "version": "7.1.5", 930 | "resolved": "https://registry.npmjs.org/catbox/-/catbox-7.1.5.tgz", 931 | "integrity": "sha512-4fui5lELzqZ+9cnaAP/BcqXTH6LvWLBRtFhJ0I4FfgfXiSaZcf6k9m9dqOyChiTxNYtvLk7ZMYSf7ahMq3bf5A==", 932 | "requires": { 933 | "boom": "5.2.0", 934 | "hoek": "4.2.0", 935 | "joi": "10.6.0" 936 | }, 937 | "dependencies": { 938 | "boom": { 939 | "version": "5.2.0", 940 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 941 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 942 | "requires": { 943 | "hoek": "4.2.0" 944 | } 945 | }, 946 | "hoek": { 947 | "version": "4.2.0", 948 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 949 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 950 | } 951 | } 952 | }, 953 | "catbox-memory": { 954 | "version": "2.0.4", 955 | "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-2.0.4.tgz", 956 | "integrity": "sha1-Qz4lWQLK9UIz0ShkKcj03xToItU=", 957 | "requires": { 958 | "hoek": "4.2.0" 959 | }, 960 | "dependencies": { 961 | "hoek": { 962 | "version": "4.2.0", 963 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 964 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 965 | } 966 | } 967 | }, 968 | "chalk": { 969 | "version": "1.1.3", 970 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 971 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 972 | "dev": true, 973 | "requires": { 974 | "ansi-styles": "2.2.1", 975 | "escape-string-regexp": "1.0.5", 976 | "has-ansi": "2.0.0", 977 | "strip-ansi": "3.0.1", 978 | "supports-color": "2.0.0" 979 | } 980 | }, 981 | "circular-json": { 982 | "version": "0.3.3", 983 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 984 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 985 | "dev": true 986 | }, 987 | "cli-cursor": { 988 | "version": "2.1.0", 989 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 990 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 991 | "dev": true, 992 | "requires": { 993 | "restore-cursor": "2.0.0" 994 | } 995 | }, 996 | "cli-width": { 997 | "version": "2.2.0", 998 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 999 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 1000 | "dev": true 1001 | }, 1002 | "cls-bluebird": { 1003 | "version": "2.0.1", 1004 | "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.0.1.tgz", 1005 | "integrity": "sha1-wlmkgK4CwOUGE0MHuxPbMERu4uc=", 1006 | "requires": { 1007 | "is-bluebird": "1.0.2", 1008 | "shimmer": "1.1.0" 1009 | } 1010 | }, 1011 | "co": { 1012 | "version": "4.6.0", 1013 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1014 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 1015 | }, 1016 | "code-point-at": { 1017 | "version": "1.1.0", 1018 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 1019 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 1020 | }, 1021 | "color-convert": { 1022 | "version": "1.9.0", 1023 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 1024 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 1025 | "dev": true, 1026 | "requires": { 1027 | "color-name": "1.1.3" 1028 | } 1029 | }, 1030 | "color-name": { 1031 | "version": "1.1.3", 1032 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1033 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1034 | "dev": true 1035 | }, 1036 | "colors": { 1037 | "version": "1.0.3", 1038 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", 1039 | "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" 1040 | }, 1041 | "combined-stream": { 1042 | "version": "1.0.5", 1043 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 1044 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 1045 | "requires": { 1046 | "delayed-stream": "1.0.0" 1047 | } 1048 | }, 1049 | "concat-map": { 1050 | "version": "0.0.1", 1051 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1052 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1053 | }, 1054 | "concat-stream": { 1055 | "version": "1.6.0", 1056 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 1057 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 1058 | "dev": true, 1059 | "requires": { 1060 | "inherits": "2.0.3", 1061 | "readable-stream": "2.3.3", 1062 | "typedarray": "0.0.6" 1063 | }, 1064 | "dependencies": { 1065 | "isarray": { 1066 | "version": "1.0.0", 1067 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1068 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1069 | "dev": true 1070 | }, 1071 | "readable-stream": { 1072 | "version": "2.3.3", 1073 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1074 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1075 | "dev": true, 1076 | "requires": { 1077 | "core-util-is": "1.0.2", 1078 | "inherits": "2.0.3", 1079 | "isarray": "1.0.0", 1080 | "process-nextick-args": "1.0.7", 1081 | "safe-buffer": "5.1.1", 1082 | "string_decoder": "1.0.3", 1083 | "util-deprecate": "1.0.2" 1084 | } 1085 | }, 1086 | "string_decoder": { 1087 | "version": "1.0.3", 1088 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1089 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1090 | "dev": true, 1091 | "requires": { 1092 | "safe-buffer": "5.1.1" 1093 | } 1094 | } 1095 | } 1096 | }, 1097 | "config": { 1098 | "version": "1.26.2", 1099 | "resolved": "https://registry.npmjs.org/config/-/config-1.26.2.tgz", 1100 | "integrity": "sha1-JGYpEWjYr64Kroq5nqTUJy9SDK4=", 1101 | "requires": { 1102 | "json5": "0.4.0", 1103 | "os-homedir": "1.0.2" 1104 | } 1105 | }, 1106 | "console-control-strings": { 1107 | "version": "1.1.0", 1108 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 1109 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 1110 | }, 1111 | "content": { 1112 | "version": "3.0.5", 1113 | "resolved": "https://registry.npmjs.org/content/-/content-3.0.5.tgz", 1114 | "integrity": "sha512-MQVYZuNnm5N0xalwtRGlZrcKFwgE6VKXCEh3XkCeoWUo3gL5BS52UiqswRvAwQW1ocfdCNkEKI5uy0pNGax+IQ==", 1115 | "requires": { 1116 | "boom": "5.2.0" 1117 | }, 1118 | "dependencies": { 1119 | "boom": { 1120 | "version": "5.2.0", 1121 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1122 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 1123 | "requires": { 1124 | "hoek": "4.2.0" 1125 | } 1126 | }, 1127 | "hoek": { 1128 | "version": "4.2.0", 1129 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1130 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1131 | } 1132 | } 1133 | }, 1134 | "convert-source-map": { 1135 | "version": "1.5.0", 1136 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", 1137 | "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", 1138 | "dev": true 1139 | }, 1140 | "core-js": { 1141 | "version": "2.5.1", 1142 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", 1143 | "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", 1144 | "dev": true 1145 | }, 1146 | "core-util-is": { 1147 | "version": "1.0.2", 1148 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1149 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1150 | }, 1151 | "cross-spawn": { 1152 | "version": "5.1.0", 1153 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 1154 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 1155 | "dev": true, 1156 | "requires": { 1157 | "lru-cache": "4.1.1", 1158 | "shebang-command": "1.2.0", 1159 | "which": "1.3.0" 1160 | } 1161 | }, 1162 | "cryptiles": { 1163 | "version": "2.0.5", 1164 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 1165 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 1166 | "requires": { 1167 | "boom": "2.10.1" 1168 | } 1169 | }, 1170 | "cycle": { 1171 | "version": "1.0.3", 1172 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", 1173 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" 1174 | }, 1175 | "dashdash": { 1176 | "version": "1.14.1", 1177 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1178 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1179 | "requires": { 1180 | "assert-plus": "1.0.0" 1181 | }, 1182 | "dependencies": { 1183 | "assert-plus": { 1184 | "version": "1.0.0", 1185 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1186 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1187 | } 1188 | } 1189 | }, 1190 | "debug": { 1191 | "version": "2.6.8", 1192 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 1193 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 1194 | "requires": { 1195 | "ms": "2.0.0" 1196 | } 1197 | }, 1198 | "deep-extend": { 1199 | "version": "0.4.2", 1200 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", 1201 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" 1202 | }, 1203 | "deep-is": { 1204 | "version": "0.1.3", 1205 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1206 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 1207 | "dev": true 1208 | }, 1209 | "del": { 1210 | "version": "2.2.2", 1211 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 1212 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 1213 | "dev": true, 1214 | "requires": { 1215 | "globby": "5.0.0", 1216 | "is-path-cwd": "1.0.0", 1217 | "is-path-in-cwd": "1.0.0", 1218 | "object-assign": "4.1.1", 1219 | "pify": "2.3.0", 1220 | "pinkie-promise": "2.0.1", 1221 | "rimraf": "2.6.1" 1222 | } 1223 | }, 1224 | "delayed-stream": { 1225 | "version": "1.0.0", 1226 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1227 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1228 | }, 1229 | "delegates": { 1230 | "version": "1.0.0", 1231 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 1232 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 1233 | }, 1234 | "depd": { 1235 | "version": "1.1.1", 1236 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 1237 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 1238 | }, 1239 | "detect-indent": { 1240 | "version": "4.0.0", 1241 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 1242 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 1243 | "dev": true, 1244 | "requires": { 1245 | "repeating": "2.0.1" 1246 | } 1247 | }, 1248 | "doctrine": { 1249 | "version": "2.0.0", 1250 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", 1251 | "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", 1252 | "dev": true, 1253 | "requires": { 1254 | "esutils": "2.0.2", 1255 | "isarray": "1.0.0" 1256 | }, 1257 | "dependencies": { 1258 | "isarray": { 1259 | "version": "1.0.0", 1260 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1261 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1262 | "dev": true 1263 | } 1264 | } 1265 | }, 1266 | "dottie": { 1267 | "version": "2.0.0", 1268 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", 1269 | "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" 1270 | }, 1271 | "duplexify": { 1272 | "version": "3.5.1", 1273 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", 1274 | "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", 1275 | "requires": { 1276 | "end-of-stream": "1.4.0", 1277 | "inherits": "2.0.3", 1278 | "readable-stream": "2.3.3", 1279 | "stream-shift": "1.0.0" 1280 | } 1281 | }, 1282 | "ecc-jsbn": { 1283 | "version": "0.1.1", 1284 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 1285 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 1286 | "optional": true, 1287 | "requires": { 1288 | "jsbn": "0.1.1" 1289 | } 1290 | }, 1291 | "end-of-stream": { 1292 | "version": "1.4.0", 1293 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", 1294 | "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", 1295 | "requires": { 1296 | "once": "1.4.0" 1297 | } 1298 | }, 1299 | "epoll": { 1300 | "version": "0.1.22", 1301 | "resolved": "https://registry.npmjs.org/epoll/-/epoll-0.1.22.tgz", 1302 | "integrity": "sha1-GrmmN8/xGiCXDIiLHKIXi2TPUpE=", 1303 | "requires": { 1304 | "bindings": "1.2.1", 1305 | "nan": "2.6.2" 1306 | } 1307 | }, 1308 | "escape-string-regexp": { 1309 | "version": "1.0.5", 1310 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1311 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1312 | "dev": true 1313 | }, 1314 | "eslint": { 1315 | "version": "4.6.1", 1316 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.6.1.tgz", 1317 | "integrity": "sha1-3cf8f9cL+TIFsLNEm7FqHp59SVA=", 1318 | "dev": true, 1319 | "requires": { 1320 | "ajv": "5.2.2", 1321 | "babel-code-frame": "6.26.0", 1322 | "chalk": "2.1.0", 1323 | "concat-stream": "1.6.0", 1324 | "cross-spawn": "5.1.0", 1325 | "debug": "2.6.8", 1326 | "doctrine": "2.0.0", 1327 | "eslint-scope": "3.7.1", 1328 | "espree": "3.5.0", 1329 | "esquery": "1.0.0", 1330 | "estraverse": "4.2.0", 1331 | "esutils": "2.0.2", 1332 | "file-entry-cache": "2.0.0", 1333 | "functional-red-black-tree": "1.0.1", 1334 | "glob": "7.1.2", 1335 | "globals": "9.18.0", 1336 | "ignore": "3.3.5", 1337 | "imurmurhash": "0.1.4", 1338 | "inquirer": "3.2.3", 1339 | "is-resolvable": "1.0.0", 1340 | "js-yaml": "3.9.1", 1341 | "json-stable-stringify": "1.0.1", 1342 | "levn": "0.3.0", 1343 | "lodash": "4.17.4", 1344 | "minimatch": "3.0.4", 1345 | "mkdirp": "0.5.1", 1346 | "natural-compare": "1.4.0", 1347 | "optionator": "0.8.2", 1348 | "path-is-inside": "1.0.2", 1349 | "pluralize": "4.0.0", 1350 | "progress": "2.0.0", 1351 | "require-uncached": "1.0.3", 1352 | "semver": "5.4.1", 1353 | "strip-ansi": "4.0.0", 1354 | "strip-json-comments": "2.0.1", 1355 | "table": "4.0.1", 1356 | "text-table": "0.2.0" 1357 | }, 1358 | "dependencies": { 1359 | "ajv": { 1360 | "version": "5.2.2", 1361 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", 1362 | "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", 1363 | "dev": true, 1364 | "requires": { 1365 | "co": "4.6.0", 1366 | "fast-deep-equal": "1.0.0", 1367 | "json-schema-traverse": "0.3.1", 1368 | "json-stable-stringify": "1.0.1" 1369 | } 1370 | }, 1371 | "ansi-regex": { 1372 | "version": "3.0.0", 1373 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1374 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1375 | "dev": true 1376 | }, 1377 | "ansi-styles": { 1378 | "version": "3.2.0", 1379 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 1380 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 1381 | "dev": true, 1382 | "requires": { 1383 | "color-convert": "1.9.0" 1384 | } 1385 | }, 1386 | "chalk": { 1387 | "version": "2.1.0", 1388 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", 1389 | "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", 1390 | "dev": true, 1391 | "requires": { 1392 | "ansi-styles": "3.2.0", 1393 | "escape-string-regexp": "1.0.5", 1394 | "supports-color": "4.4.0" 1395 | } 1396 | }, 1397 | "semver": { 1398 | "version": "5.4.1", 1399 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 1400 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 1401 | "dev": true 1402 | }, 1403 | "strip-ansi": { 1404 | "version": "4.0.0", 1405 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1406 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1407 | "dev": true, 1408 | "requires": { 1409 | "ansi-regex": "3.0.0" 1410 | } 1411 | }, 1412 | "supports-color": { 1413 | "version": "4.4.0", 1414 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 1415 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 1416 | "dev": true, 1417 | "requires": { 1418 | "has-flag": "2.0.0" 1419 | } 1420 | } 1421 | } 1422 | }, 1423 | "eslint-scope": { 1424 | "version": "3.7.1", 1425 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", 1426 | "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", 1427 | "dev": true, 1428 | "requires": { 1429 | "esrecurse": "4.2.0", 1430 | "estraverse": "4.2.0" 1431 | } 1432 | }, 1433 | "espree": { 1434 | "version": "3.5.0", 1435 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", 1436 | "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", 1437 | "dev": true, 1438 | "requires": { 1439 | "acorn": "5.1.2", 1440 | "acorn-jsx": "3.0.1" 1441 | } 1442 | }, 1443 | "esprima": { 1444 | "version": "4.0.0", 1445 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 1446 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 1447 | "dev": true 1448 | }, 1449 | "esquery": { 1450 | "version": "1.0.0", 1451 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", 1452 | "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", 1453 | "dev": true, 1454 | "requires": { 1455 | "estraverse": "4.2.0" 1456 | } 1457 | }, 1458 | "esrecurse": { 1459 | "version": "4.2.0", 1460 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", 1461 | "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", 1462 | "dev": true, 1463 | "requires": { 1464 | "estraverse": "4.2.0", 1465 | "object-assign": "4.1.1" 1466 | } 1467 | }, 1468 | "estraverse": { 1469 | "version": "4.2.0", 1470 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 1471 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 1472 | "dev": true 1473 | }, 1474 | "esutils": { 1475 | "version": "2.0.2", 1476 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1477 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1478 | "dev": true 1479 | }, 1480 | "eventemitter3": { 1481 | "version": "1.2.0", 1482 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", 1483 | "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" 1484 | }, 1485 | "extend": { 1486 | "version": "3.0.1", 1487 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 1488 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 1489 | }, 1490 | "external-editor": { 1491 | "version": "2.0.4", 1492 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", 1493 | "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", 1494 | "dev": true, 1495 | "requires": { 1496 | "iconv-lite": "0.4.18", 1497 | "jschardet": "1.5.1", 1498 | "tmp": "0.0.31" 1499 | } 1500 | }, 1501 | "extsprintf": { 1502 | "version": "1.3.0", 1503 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1504 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1505 | }, 1506 | "eyes": { 1507 | "version": "0.1.8", 1508 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 1509 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" 1510 | }, 1511 | "fast-deep-equal": { 1512 | "version": "1.0.0", 1513 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 1514 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", 1515 | "dev": true 1516 | }, 1517 | "fast-levenshtein": { 1518 | "version": "2.0.6", 1519 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1520 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1521 | "dev": true 1522 | }, 1523 | "figures": { 1524 | "version": "2.0.0", 1525 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1526 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1527 | "dev": true, 1528 | "requires": { 1529 | "escape-string-regexp": "1.0.5" 1530 | } 1531 | }, 1532 | "file-entry-cache": { 1533 | "version": "2.0.0", 1534 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 1535 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 1536 | "dev": true, 1537 | "requires": { 1538 | "flat-cache": "1.2.2", 1539 | "object-assign": "4.1.1" 1540 | } 1541 | }, 1542 | "flat-cache": { 1543 | "version": "1.2.2", 1544 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", 1545 | "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", 1546 | "dev": true, 1547 | "requires": { 1548 | "circular-json": "0.3.3", 1549 | "del": "2.2.2", 1550 | "graceful-fs": "4.1.11", 1551 | "write": "0.2.1" 1552 | } 1553 | }, 1554 | "forever-agent": { 1555 | "version": "0.6.1", 1556 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1557 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1558 | }, 1559 | "form-data": { 1560 | "version": "2.1.4", 1561 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 1562 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 1563 | "requires": { 1564 | "asynckit": "0.4.0", 1565 | "combined-stream": "1.0.5", 1566 | "mime-types": "2.1.17" 1567 | } 1568 | }, 1569 | "fs.realpath": { 1570 | "version": "1.0.0", 1571 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1572 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1573 | }, 1574 | "fstream": { 1575 | "version": "1.0.11", 1576 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", 1577 | "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", 1578 | "requires": { 1579 | "graceful-fs": "4.1.11", 1580 | "inherits": "2.0.3", 1581 | "mkdirp": "0.5.1", 1582 | "rimraf": "2.6.1" 1583 | } 1584 | }, 1585 | "fstream-ignore": { 1586 | "version": "1.0.5", 1587 | "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", 1588 | "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", 1589 | "requires": { 1590 | "fstream": "1.0.11", 1591 | "inherits": "2.0.3", 1592 | "minimatch": "3.0.4" 1593 | } 1594 | }, 1595 | "functional-red-black-tree": { 1596 | "version": "1.0.1", 1597 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1598 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1599 | "dev": true 1600 | }, 1601 | "gauge": { 1602 | "version": "2.7.4", 1603 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 1604 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 1605 | "requires": { 1606 | "aproba": "1.1.2", 1607 | "console-control-strings": "1.1.0", 1608 | "has-unicode": "2.0.1", 1609 | "object-assign": "4.1.1", 1610 | "signal-exit": "3.0.2", 1611 | "string-width": "1.0.2", 1612 | "strip-ansi": "3.0.1", 1613 | "wide-align": "1.1.2" 1614 | }, 1615 | "dependencies": { 1616 | "is-fullwidth-code-point": { 1617 | "version": "1.0.0", 1618 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1619 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1620 | "requires": { 1621 | "number-is-nan": "1.0.1" 1622 | } 1623 | }, 1624 | "string-width": { 1625 | "version": "1.0.2", 1626 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1627 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1628 | "requires": { 1629 | "code-point-at": "1.1.0", 1630 | "is-fullwidth-code-point": "1.0.0", 1631 | "strip-ansi": "3.0.1" 1632 | } 1633 | } 1634 | } 1635 | }, 1636 | "generic-pool": { 1637 | "version": "3.1.7", 1638 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.1.7.tgz", 1639 | "integrity": "sha1-2sIrLHp6BOQXMvfY0tJaMDyI9mI=" 1640 | }, 1641 | "getpass": { 1642 | "version": "0.1.7", 1643 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1644 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1645 | "requires": { 1646 | "assert-plus": "1.0.0" 1647 | }, 1648 | "dependencies": { 1649 | "assert-plus": { 1650 | "version": "1.0.0", 1651 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1652 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1653 | } 1654 | } 1655 | }, 1656 | "glob": { 1657 | "version": "7.1.2", 1658 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1659 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1660 | "requires": { 1661 | "fs.realpath": "1.0.0", 1662 | "inflight": "1.0.6", 1663 | "inherits": "2.0.3", 1664 | "minimatch": "3.0.4", 1665 | "once": "1.4.0", 1666 | "path-is-absolute": "1.0.1" 1667 | } 1668 | }, 1669 | "globals": { 1670 | "version": "9.18.0", 1671 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 1672 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 1673 | "dev": true 1674 | }, 1675 | "globby": { 1676 | "version": "5.0.0", 1677 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 1678 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 1679 | "dev": true, 1680 | "requires": { 1681 | "array-union": "1.0.2", 1682 | "arrify": "1.0.1", 1683 | "glob": "7.1.2", 1684 | "object-assign": "4.1.1", 1685 | "pify": "2.3.0", 1686 | "pinkie-promise": "2.0.1" 1687 | } 1688 | }, 1689 | "good": { 1690 | "version": "7.3.0", 1691 | "resolved": "https://registry.npmjs.org/good/-/good-7.3.0.tgz", 1692 | "integrity": "sha512-bZ4clzBw75zI424QUOrOnzwSM/7BrJ/2xTX75IT3spIZ052OPYEzLqdSt4mj/zZfs2OU52+/428QEmvyKUscUQ==", 1693 | "requires": { 1694 | "hoek": "4.2.0", 1695 | "joi": "10.6.0", 1696 | "oppsy": "1.0.2", 1697 | "pumpify": "1.3.5" 1698 | }, 1699 | "dependencies": { 1700 | "hoek": { 1701 | "version": "4.2.0", 1702 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1703 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1704 | } 1705 | } 1706 | }, 1707 | "good-console": { 1708 | "version": "6.4.0", 1709 | "resolved": "https://registry.npmjs.org/good-console/-/good-console-6.4.0.tgz", 1710 | "integrity": "sha1-cpTJ2QxMnwWaCC4YBiVJWWbSulk=", 1711 | "requires": { 1712 | "hoek": "4.2.0", 1713 | "joi": "8.1.1", 1714 | "json-stringify-safe": "5.0.1", 1715 | "moment": "2.15.2" 1716 | }, 1717 | "dependencies": { 1718 | "hoek": { 1719 | "version": "4.2.0", 1720 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1721 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1722 | }, 1723 | "joi": { 1724 | "version": "8.1.1", 1725 | "resolved": "https://registry.npmjs.org/joi/-/joi-8.1.1.tgz", 1726 | "integrity": "sha1-LYtSpdkJ0hftRySFd+7+ixeY9I8=", 1727 | "requires": { 1728 | "hoek": "4.2.0", 1729 | "isemail": "2.2.1", 1730 | "moment": "2.15.2", 1731 | "topo": "2.0.2" 1732 | } 1733 | }, 1734 | "moment": { 1735 | "version": "2.15.2", 1736 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.15.2.tgz", 1737 | "integrity": "sha1-G/3t9qbjRfMi/pVtXfW9CKjOhNw=" 1738 | } 1739 | } 1740 | }, 1741 | "graceful-fs": { 1742 | "version": "4.1.11", 1743 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1744 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 1745 | }, 1746 | "hapi": { 1747 | "version": "16.5.2", 1748 | "resolved": "https://registry.npmjs.org/hapi/-/hapi-16.5.2.tgz", 1749 | "integrity": "sha512-8aXEiC2IT1bfF/5RYz9LtWqm99oGVDd2JcQ3KRRvFGDngEE35kZl9Bk2jproY97fBrmAlvkNrmQKWf3jb2lNxw==", 1750 | "requires": { 1751 | "accept": "2.1.4", 1752 | "ammo": "2.0.4", 1753 | "boom": "5.2.0", 1754 | "call": "4.0.2", 1755 | "catbox": "7.1.5", 1756 | "catbox-memory": "2.0.4", 1757 | "cryptiles": "3.1.2", 1758 | "heavy": "4.0.4", 1759 | "hoek": "4.2.0", 1760 | "iron": "4.0.5", 1761 | "items": "2.1.1", 1762 | "joi": "10.6.0", 1763 | "mimos": "3.0.3", 1764 | "podium": "1.3.0", 1765 | "shot": "3.4.2", 1766 | "statehood": "5.0.3", 1767 | "subtext": "5.0.0", 1768 | "topo": "2.0.2" 1769 | }, 1770 | "dependencies": { 1771 | "boom": { 1772 | "version": "5.2.0", 1773 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1774 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 1775 | "requires": { 1776 | "hoek": "4.2.0" 1777 | } 1778 | }, 1779 | "cryptiles": { 1780 | "version": "3.1.2", 1781 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 1782 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 1783 | "requires": { 1784 | "boom": "5.2.0" 1785 | } 1786 | }, 1787 | "hoek": { 1788 | "version": "4.2.0", 1789 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1790 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1791 | } 1792 | } 1793 | }, 1794 | "har-schema": { 1795 | "version": "1.0.5", 1796 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", 1797 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" 1798 | }, 1799 | "har-validator": { 1800 | "version": "4.2.1", 1801 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", 1802 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", 1803 | "requires": { 1804 | "ajv": "4.11.8", 1805 | "har-schema": "1.0.5" 1806 | } 1807 | }, 1808 | "has-ansi": { 1809 | "version": "2.0.0", 1810 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1811 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1812 | "dev": true, 1813 | "requires": { 1814 | "ansi-regex": "2.1.1" 1815 | } 1816 | }, 1817 | "has-flag": { 1818 | "version": "2.0.0", 1819 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1820 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 1821 | "dev": true 1822 | }, 1823 | "has-unicode": { 1824 | "version": "2.0.1", 1825 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1826 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 1827 | }, 1828 | "hawk": { 1829 | "version": "3.1.3", 1830 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1831 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1832 | "requires": { 1833 | "boom": "2.10.1", 1834 | "cryptiles": "2.0.5", 1835 | "hoek": "2.16.3", 1836 | "sntp": "1.0.9" 1837 | } 1838 | }, 1839 | "heavy": { 1840 | "version": "4.0.4", 1841 | "resolved": "https://registry.npmjs.org/heavy/-/heavy-4.0.4.tgz", 1842 | "integrity": "sha1-NskTNsAMz+hSyqTRUwhjNc0vAOk=", 1843 | "requires": { 1844 | "boom": "5.2.0", 1845 | "hoek": "4.2.0", 1846 | "joi": "10.6.0" 1847 | }, 1848 | "dependencies": { 1849 | "boom": { 1850 | "version": "5.2.0", 1851 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1852 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 1853 | "requires": { 1854 | "hoek": "4.2.0" 1855 | } 1856 | }, 1857 | "hoek": { 1858 | "version": "4.2.0", 1859 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1860 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1861 | } 1862 | } 1863 | }, 1864 | "hoek": { 1865 | "version": "2.16.3", 1866 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1867 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 1868 | }, 1869 | "home-or-tmp": { 1870 | "version": "2.0.0", 1871 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 1872 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", 1873 | "dev": true, 1874 | "requires": { 1875 | "os-homedir": "1.0.2", 1876 | "os-tmpdir": "1.0.2" 1877 | } 1878 | }, 1879 | "http-signature": { 1880 | "version": "1.1.1", 1881 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1882 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1883 | "requires": { 1884 | "assert-plus": "0.2.0", 1885 | "jsprim": "1.4.1", 1886 | "sshpk": "1.13.1" 1887 | } 1888 | }, 1889 | "https-proxy-agent": { 1890 | "version": "1.0.0", 1891 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", 1892 | "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", 1893 | "requires": { 1894 | "agent-base": "2.1.1", 1895 | "debug": "2.6.8", 1896 | "extend": "3.0.1" 1897 | } 1898 | }, 1899 | "iconv-lite": { 1900 | "version": "0.4.18", 1901 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", 1902 | "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", 1903 | "dev": true 1904 | }, 1905 | "ignore": { 1906 | "version": "3.3.5", 1907 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", 1908 | "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", 1909 | "dev": true 1910 | }, 1911 | "imurmurhash": { 1912 | "version": "0.1.4", 1913 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1914 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1915 | "dev": true 1916 | }, 1917 | "inflection": { 1918 | "version": "1.12.0", 1919 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", 1920 | "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" 1921 | }, 1922 | "inflight": { 1923 | "version": "1.0.6", 1924 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1925 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1926 | "requires": { 1927 | "once": "1.4.0", 1928 | "wrappy": "1.0.2" 1929 | } 1930 | }, 1931 | "inherits": { 1932 | "version": "2.0.3", 1933 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1934 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1935 | }, 1936 | "ini": { 1937 | "version": "1.3.4", 1938 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 1939 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" 1940 | }, 1941 | "inquirer": { 1942 | "version": "3.2.3", 1943 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.3.tgz", 1944 | "integrity": "sha512-Bc3KbimpDTOeQdDj18Ir/rlsGuhBSSNqdOnxaAuKhpkdnMMuKsEGbZD2v5KFF9oso2OU+BPh7+/u5obmFDRmWw==", 1945 | "dev": true, 1946 | "requires": { 1947 | "ansi-escapes": "2.0.0", 1948 | "chalk": "2.1.0", 1949 | "cli-cursor": "2.1.0", 1950 | "cli-width": "2.2.0", 1951 | "external-editor": "2.0.4", 1952 | "figures": "2.0.0", 1953 | "lodash": "4.17.4", 1954 | "mute-stream": "0.0.7", 1955 | "run-async": "2.3.0", 1956 | "rx-lite": "4.0.8", 1957 | "rx-lite-aggregates": "4.0.8", 1958 | "string-width": "2.1.1", 1959 | "strip-ansi": "4.0.0", 1960 | "through": "2.3.8" 1961 | }, 1962 | "dependencies": { 1963 | "ansi-regex": { 1964 | "version": "3.0.0", 1965 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1966 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1967 | "dev": true 1968 | }, 1969 | "ansi-styles": { 1970 | "version": "3.2.0", 1971 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 1972 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 1973 | "dev": true, 1974 | "requires": { 1975 | "color-convert": "1.9.0" 1976 | } 1977 | }, 1978 | "chalk": { 1979 | "version": "2.1.0", 1980 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", 1981 | "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", 1982 | "dev": true, 1983 | "requires": { 1984 | "ansi-styles": "3.2.0", 1985 | "escape-string-regexp": "1.0.5", 1986 | "supports-color": "4.4.0" 1987 | } 1988 | }, 1989 | "strip-ansi": { 1990 | "version": "4.0.0", 1991 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1992 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1993 | "dev": true, 1994 | "requires": { 1995 | "ansi-regex": "3.0.0" 1996 | } 1997 | }, 1998 | "supports-color": { 1999 | "version": "4.4.0", 2000 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 2001 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 2002 | "dev": true, 2003 | "requires": { 2004 | "has-flag": "2.0.0" 2005 | } 2006 | } 2007 | } 2008 | }, 2009 | "invariant": { 2010 | "version": "2.2.2", 2011 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 2012 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", 2013 | "dev": true, 2014 | "requires": { 2015 | "loose-envify": "1.3.1" 2016 | } 2017 | }, 2018 | "iron": { 2019 | "version": "4.0.5", 2020 | "resolved": "https://registry.npmjs.org/iron/-/iron-4.0.5.tgz", 2021 | "integrity": "sha1-TwQszri5c480a1mqc0yDqJvDFCg=", 2022 | "requires": { 2023 | "boom": "5.2.0", 2024 | "cryptiles": "3.1.2", 2025 | "hoek": "4.2.0" 2026 | }, 2027 | "dependencies": { 2028 | "boom": { 2029 | "version": "5.2.0", 2030 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 2031 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 2032 | "requires": { 2033 | "hoek": "4.2.0" 2034 | } 2035 | }, 2036 | "cryptiles": { 2037 | "version": "3.1.2", 2038 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 2039 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 2040 | "requires": { 2041 | "boom": "5.2.0" 2042 | } 2043 | }, 2044 | "hoek": { 2045 | "version": "4.2.0", 2046 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2047 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2048 | } 2049 | } 2050 | }, 2051 | "is-bluebird": { 2052 | "version": "1.0.2", 2053 | "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", 2054 | "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" 2055 | }, 2056 | "is-finite": { 2057 | "version": "1.0.2", 2058 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 2059 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 2060 | "dev": true, 2061 | "requires": { 2062 | "number-is-nan": "1.0.1" 2063 | } 2064 | }, 2065 | "is-fullwidth-code-point": { 2066 | "version": "2.0.0", 2067 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2068 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2069 | "dev": true 2070 | }, 2071 | "is-path-cwd": { 2072 | "version": "1.0.0", 2073 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 2074 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 2075 | "dev": true 2076 | }, 2077 | "is-path-in-cwd": { 2078 | "version": "1.0.0", 2079 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 2080 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 2081 | "dev": true, 2082 | "requires": { 2083 | "is-path-inside": "1.0.0" 2084 | } 2085 | }, 2086 | "is-path-inside": { 2087 | "version": "1.0.0", 2088 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 2089 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 2090 | "dev": true, 2091 | "requires": { 2092 | "path-is-inside": "1.0.2" 2093 | } 2094 | }, 2095 | "is-promise": { 2096 | "version": "2.1.0", 2097 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 2098 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 2099 | "dev": true 2100 | }, 2101 | "is-resolvable": { 2102 | "version": "1.0.0", 2103 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", 2104 | "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", 2105 | "dev": true, 2106 | "requires": { 2107 | "tryit": "1.0.3" 2108 | } 2109 | }, 2110 | "is-typedarray": { 2111 | "version": "1.0.0", 2112 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 2113 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 2114 | }, 2115 | "isarray": { 2116 | "version": "1.0.0", 2117 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2118 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 2119 | }, 2120 | "isemail": { 2121 | "version": "2.2.1", 2122 | "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", 2123 | "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" 2124 | }, 2125 | "isexe": { 2126 | "version": "2.0.0", 2127 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2128 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2129 | "dev": true 2130 | }, 2131 | "isstream": { 2132 | "version": "0.1.2", 2133 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 2134 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 2135 | }, 2136 | "items": { 2137 | "version": "2.1.1", 2138 | "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", 2139 | "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=" 2140 | }, 2141 | "joi": { 2142 | "version": "10.6.0", 2143 | "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", 2144 | "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==", 2145 | "requires": { 2146 | "hoek": "4.2.0", 2147 | "isemail": "2.2.1", 2148 | "items": "2.1.1", 2149 | "topo": "2.0.2" 2150 | }, 2151 | "dependencies": { 2152 | "hoek": { 2153 | "version": "4.2.0", 2154 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2155 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2156 | } 2157 | } 2158 | }, 2159 | "js-tokens": { 2160 | "version": "3.0.2", 2161 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 2162 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 2163 | "dev": true 2164 | }, 2165 | "js-yaml": { 2166 | "version": "3.9.1", 2167 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", 2168 | "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", 2169 | "dev": true, 2170 | "requires": { 2171 | "argparse": "1.0.9", 2172 | "esprima": "4.0.0" 2173 | } 2174 | }, 2175 | "jsbn": { 2176 | "version": "0.1.1", 2177 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 2178 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 2179 | "optional": true 2180 | }, 2181 | "jschardet": { 2182 | "version": "1.5.1", 2183 | "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", 2184 | "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==", 2185 | "dev": true 2186 | }, 2187 | "jsesc": { 2188 | "version": "1.3.0", 2189 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 2190 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", 2191 | "dev": true 2192 | }, 2193 | "json-schema": { 2194 | "version": "0.2.3", 2195 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 2196 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 2197 | }, 2198 | "json-schema-traverse": { 2199 | "version": "0.3.1", 2200 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 2201 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 2202 | "dev": true 2203 | }, 2204 | "json-stable-stringify": { 2205 | "version": "1.0.1", 2206 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 2207 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 2208 | "requires": { 2209 | "jsonify": "0.0.0" 2210 | } 2211 | }, 2212 | "json-stringify-safe": { 2213 | "version": "5.0.1", 2214 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2215 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 2216 | }, 2217 | "json5": { 2218 | "version": "0.4.0", 2219 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", 2220 | "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" 2221 | }, 2222 | "jsonify": { 2223 | "version": "0.0.0", 2224 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 2225 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 2226 | }, 2227 | "jsprim": { 2228 | "version": "1.4.1", 2229 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 2230 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 2231 | "requires": { 2232 | "assert-plus": "1.0.0", 2233 | "extsprintf": "1.3.0", 2234 | "json-schema": "0.2.3", 2235 | "verror": "1.10.0" 2236 | }, 2237 | "dependencies": { 2238 | "assert-plus": { 2239 | "version": "1.0.0", 2240 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 2241 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 2242 | } 2243 | } 2244 | }, 2245 | "levn": { 2246 | "version": "0.3.0", 2247 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 2248 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 2249 | "dev": true, 2250 | "requires": { 2251 | "prelude-ls": "1.1.2", 2252 | "type-check": "0.3.2" 2253 | } 2254 | }, 2255 | "lodash": { 2256 | "version": "4.17.4", 2257 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2258 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 2259 | }, 2260 | "loose-envify": { 2261 | "version": "1.3.1", 2262 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 2263 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 2264 | "dev": true, 2265 | "requires": { 2266 | "js-tokens": "3.0.2" 2267 | } 2268 | }, 2269 | "lru-cache": { 2270 | "version": "4.1.1", 2271 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 2272 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 2273 | "dev": true, 2274 | "requires": { 2275 | "pseudomap": "1.0.2", 2276 | "yallist": "2.1.2" 2277 | } 2278 | }, 2279 | "mime-db": { 2280 | "version": "1.30.0", 2281 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 2282 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 2283 | }, 2284 | "mime-types": { 2285 | "version": "2.1.17", 2286 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 2287 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 2288 | "requires": { 2289 | "mime-db": "1.30.0" 2290 | } 2291 | }, 2292 | "mimic-fn": { 2293 | "version": "1.1.0", 2294 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 2295 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", 2296 | "dev": true 2297 | }, 2298 | "mimos": { 2299 | "version": "3.0.3", 2300 | "resolved": "https://registry.npmjs.org/mimos/-/mimos-3.0.3.tgz", 2301 | "integrity": "sha1-uRCQcq03jCty9qAQHEPd+ys2ZB8=", 2302 | "requires": { 2303 | "hoek": "4.2.0", 2304 | "mime-db": "1.30.0" 2305 | }, 2306 | "dependencies": { 2307 | "hoek": { 2308 | "version": "4.2.0", 2309 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2310 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2311 | } 2312 | } 2313 | }, 2314 | "minimatch": { 2315 | "version": "3.0.4", 2316 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2317 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2318 | "requires": { 2319 | "brace-expansion": "1.1.8" 2320 | } 2321 | }, 2322 | "minimist": { 2323 | "version": "0.0.8", 2324 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2325 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 2326 | }, 2327 | "mkdirp": { 2328 | "version": "0.5.1", 2329 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2330 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2331 | "requires": { 2332 | "minimist": "0.0.8" 2333 | } 2334 | }, 2335 | "moment": { 2336 | "version": "2.18.1", 2337 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", 2338 | "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" 2339 | }, 2340 | "moment-timezone": { 2341 | "version": "0.5.13", 2342 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", 2343 | "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=", 2344 | "requires": { 2345 | "moment": "2.18.1" 2346 | } 2347 | }, 2348 | "ms": { 2349 | "version": "2.0.0", 2350 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2351 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2352 | }, 2353 | "mute-stream": { 2354 | "version": "0.0.7", 2355 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 2356 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 2357 | "dev": true 2358 | }, 2359 | "nan": { 2360 | "version": "2.6.2", 2361 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", 2362 | "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" 2363 | }, 2364 | "natural-compare": { 2365 | "version": "1.4.0", 2366 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2367 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2368 | "dev": true 2369 | }, 2370 | "nigel": { 2371 | "version": "2.0.2", 2372 | "resolved": "https://registry.npmjs.org/nigel/-/nigel-2.0.2.tgz", 2373 | "integrity": "sha1-k6GGb7DFLYc5CqdeKxYfS1x15bE=", 2374 | "requires": { 2375 | "hoek": "4.2.0", 2376 | "vise": "2.0.2" 2377 | }, 2378 | "dependencies": { 2379 | "hoek": { 2380 | "version": "4.2.0", 2381 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2382 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2383 | } 2384 | } 2385 | }, 2386 | "node-pre-gyp": { 2387 | "version": "0.6.36", 2388 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", 2389 | "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", 2390 | "requires": { 2391 | "mkdirp": "0.5.1", 2392 | "nopt": "4.0.1", 2393 | "npmlog": "4.1.2", 2394 | "rc": "1.2.1", 2395 | "request": "2.81.0", 2396 | "rimraf": "2.6.1", 2397 | "semver": "5.4.1", 2398 | "tar": "2.2.1", 2399 | "tar-pack": "3.4.0" 2400 | }, 2401 | "dependencies": { 2402 | "semver": { 2403 | "version": "5.4.1", 2404 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 2405 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" 2406 | } 2407 | } 2408 | }, 2409 | "nopt": { 2410 | "version": "4.0.1", 2411 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 2412 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 2413 | "requires": { 2414 | "abbrev": "1.1.0", 2415 | "osenv": "0.1.4" 2416 | } 2417 | }, 2418 | "npmlog": { 2419 | "version": "4.1.2", 2420 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 2421 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 2422 | "requires": { 2423 | "are-we-there-yet": "1.1.4", 2424 | "console-control-strings": "1.1.0", 2425 | "gauge": "2.7.4", 2426 | "set-blocking": "2.0.0" 2427 | } 2428 | }, 2429 | "number-is-nan": { 2430 | "version": "1.0.1", 2431 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2432 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2433 | }, 2434 | "oauth-sign": { 2435 | "version": "0.8.2", 2436 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2437 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 2438 | }, 2439 | "object-assign": { 2440 | "version": "4.1.1", 2441 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2442 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2443 | }, 2444 | "once": { 2445 | "version": "1.4.0", 2446 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2447 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2448 | "requires": { 2449 | "wrappy": "1.0.2" 2450 | } 2451 | }, 2452 | "onetime": { 2453 | "version": "2.0.1", 2454 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 2455 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 2456 | "dev": true, 2457 | "requires": { 2458 | "mimic-fn": "1.1.0" 2459 | } 2460 | }, 2461 | "oppsy": { 2462 | "version": "1.0.2", 2463 | "resolved": "https://registry.npmjs.org/oppsy/-/oppsy-1.0.2.tgz", 2464 | "integrity": "sha1-mAFM1pZ2U6g8//pVQibckAULqtQ=", 2465 | "requires": { 2466 | "hoek": "4.2.0", 2467 | "items": "2.1.1" 2468 | }, 2469 | "dependencies": { 2470 | "hoek": { 2471 | "version": "4.2.0", 2472 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2473 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2474 | } 2475 | } 2476 | }, 2477 | "optionator": { 2478 | "version": "0.8.2", 2479 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 2480 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 2481 | "dev": true, 2482 | "requires": { 2483 | "deep-is": "0.1.3", 2484 | "fast-levenshtein": "2.0.6", 2485 | "levn": "0.3.0", 2486 | "prelude-ls": "1.1.2", 2487 | "type-check": "0.3.2", 2488 | "wordwrap": "1.0.0" 2489 | } 2490 | }, 2491 | "options": { 2492 | "version": "0.0.6", 2493 | "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", 2494 | "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" 2495 | }, 2496 | "os-homedir": { 2497 | "version": "1.0.2", 2498 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2499 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 2500 | }, 2501 | "os-tmpdir": { 2502 | "version": "1.0.2", 2503 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2504 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 2505 | }, 2506 | "osenv": { 2507 | "version": "0.1.4", 2508 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", 2509 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", 2510 | "requires": { 2511 | "os-homedir": "1.0.2", 2512 | "os-tmpdir": "1.0.2" 2513 | } 2514 | }, 2515 | "path-is-absolute": { 2516 | "version": "1.0.1", 2517 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2518 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2519 | }, 2520 | "path-is-inside": { 2521 | "version": "1.0.2", 2522 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2523 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 2524 | "dev": true 2525 | }, 2526 | "performance-now": { 2527 | "version": "0.2.0", 2528 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", 2529 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" 2530 | }, 2531 | "pez": { 2532 | "version": "2.1.5", 2533 | "resolved": "https://registry.npmjs.org/pez/-/pez-2.1.5.tgz", 2534 | "integrity": "sha1-XsLMYlAMw+tCNtSkFM9aF7XrUAc=", 2535 | "requires": { 2536 | "b64": "3.0.3", 2537 | "boom": "5.2.0", 2538 | "content": "3.0.5", 2539 | "hoek": "4.2.0", 2540 | "nigel": "2.0.2" 2541 | }, 2542 | "dependencies": { 2543 | "boom": { 2544 | "version": "5.2.0", 2545 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 2546 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 2547 | "requires": { 2548 | "hoek": "4.2.0" 2549 | } 2550 | }, 2551 | "hoek": { 2552 | "version": "4.2.0", 2553 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2554 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2555 | } 2556 | } 2557 | }, 2558 | "pify": { 2559 | "version": "2.3.0", 2560 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2561 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2562 | "dev": true 2563 | }, 2564 | "pinkie": { 2565 | "version": "2.0.4", 2566 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2567 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2568 | "dev": true 2569 | }, 2570 | "pinkie-promise": { 2571 | "version": "2.0.1", 2572 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2573 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2574 | "dev": true, 2575 | "requires": { 2576 | "pinkie": "2.0.4" 2577 | } 2578 | }, 2579 | "pkginfo": { 2580 | "version": "0.4.1", 2581 | "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", 2582 | "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" 2583 | }, 2584 | "pluralize": { 2585 | "version": "4.0.0", 2586 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", 2587 | "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", 2588 | "dev": true 2589 | }, 2590 | "podium": { 2591 | "version": "1.3.0", 2592 | "resolved": "https://registry.npmjs.org/podium/-/podium-1.3.0.tgz", 2593 | "integrity": "sha512-ZIujqk1pv8bRZNVxwwwq0BhXilZ2udycQT3Kp8ah3f3TcTmVg7ILJsv/oLf47gRa2qeiP584lNq+pfvS9U3aow==", 2594 | "requires": { 2595 | "hoek": "4.2.0", 2596 | "items": "2.1.1", 2597 | "joi": "10.6.0" 2598 | }, 2599 | "dependencies": { 2600 | "hoek": { 2601 | "version": "4.2.0", 2602 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2603 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2604 | } 2605 | } 2606 | }, 2607 | "prelude-ls": { 2608 | "version": "1.1.2", 2609 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2610 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2611 | "dev": true 2612 | }, 2613 | "printf": { 2614 | "version": "0.1.3", 2615 | "resolved": "https://registry.npmjs.org/printf/-/printf-0.1.3.tgz", 2616 | "integrity": "sha1-J+k1uuT1XbH9wYNoaJ6VYc5VEiY=" 2617 | }, 2618 | "private": { 2619 | "version": "0.1.7", 2620 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", 2621 | "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", 2622 | "dev": true 2623 | }, 2624 | "process-nextick-args": { 2625 | "version": "1.0.7", 2626 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2627 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 2628 | }, 2629 | "progress": { 2630 | "version": "2.0.0", 2631 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", 2632 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", 2633 | "dev": true 2634 | }, 2635 | "pseudomap": { 2636 | "version": "1.0.2", 2637 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2638 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2639 | "dev": true 2640 | }, 2641 | "pump": { 2642 | "version": "1.0.2", 2643 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", 2644 | "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", 2645 | "requires": { 2646 | "end-of-stream": "1.4.0", 2647 | "once": "1.4.0" 2648 | } 2649 | }, 2650 | "pumpify": { 2651 | "version": "1.3.5", 2652 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", 2653 | "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", 2654 | "requires": { 2655 | "duplexify": "3.5.1", 2656 | "inherits": "2.0.3", 2657 | "pump": "1.0.2" 2658 | } 2659 | }, 2660 | "punycode": { 2661 | "version": "1.4.1", 2662 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2663 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2664 | }, 2665 | "qs": { 2666 | "version": "6.4.0", 2667 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 2668 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" 2669 | }, 2670 | "rc": { 2671 | "version": "1.2.1", 2672 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", 2673 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", 2674 | "requires": { 2675 | "deep-extend": "0.4.2", 2676 | "ini": "1.3.4", 2677 | "minimist": "1.2.0", 2678 | "strip-json-comments": "2.0.1" 2679 | }, 2680 | "dependencies": { 2681 | "minimist": { 2682 | "version": "1.2.0", 2683 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2684 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 2685 | } 2686 | } 2687 | }, 2688 | "readable-stream": { 2689 | "version": "2.3.3", 2690 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2691 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2692 | "requires": { 2693 | "core-util-is": "1.0.2", 2694 | "inherits": "2.0.3", 2695 | "isarray": "1.0.0", 2696 | "process-nextick-args": "1.0.7", 2697 | "safe-buffer": "5.1.1", 2698 | "string_decoder": "1.0.3", 2699 | "util-deprecate": "1.0.2" 2700 | } 2701 | }, 2702 | "regenerate": { 2703 | "version": "1.3.2", 2704 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", 2705 | "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", 2706 | "dev": true 2707 | }, 2708 | "regenerator-runtime": { 2709 | "version": "0.11.0", 2710 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", 2711 | "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", 2712 | "dev": true 2713 | }, 2714 | "regenerator-transform": { 2715 | "version": "0.10.1", 2716 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", 2717 | "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", 2718 | "dev": true, 2719 | "requires": { 2720 | "babel-runtime": "6.26.0", 2721 | "babel-types": "6.26.0", 2722 | "private": "0.1.7" 2723 | } 2724 | }, 2725 | "regexpu-core": { 2726 | "version": "2.0.0", 2727 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", 2728 | "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", 2729 | "dev": true, 2730 | "requires": { 2731 | "regenerate": "1.3.2", 2732 | "regjsgen": "0.2.0", 2733 | "regjsparser": "0.1.5" 2734 | } 2735 | }, 2736 | "regjsgen": { 2737 | "version": "0.2.0", 2738 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", 2739 | "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", 2740 | "dev": true 2741 | }, 2742 | "regjsparser": { 2743 | "version": "0.1.5", 2744 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", 2745 | "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", 2746 | "dev": true, 2747 | "requires": { 2748 | "jsesc": "0.5.0" 2749 | }, 2750 | "dependencies": { 2751 | "jsesc": { 2752 | "version": "0.5.0", 2753 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2754 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2755 | "dev": true 2756 | } 2757 | } 2758 | }, 2759 | "repeating": { 2760 | "version": "2.0.1", 2761 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 2762 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 2763 | "dev": true, 2764 | "requires": { 2765 | "is-finite": "1.0.2" 2766 | } 2767 | }, 2768 | "request": { 2769 | "version": "2.81.0", 2770 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", 2771 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", 2772 | "requires": { 2773 | "aws-sign2": "0.6.0", 2774 | "aws4": "1.6.0", 2775 | "caseless": "0.12.0", 2776 | "combined-stream": "1.0.5", 2777 | "extend": "3.0.1", 2778 | "forever-agent": "0.6.1", 2779 | "form-data": "2.1.4", 2780 | "har-validator": "4.2.1", 2781 | "hawk": "3.1.3", 2782 | "http-signature": "1.1.1", 2783 | "is-typedarray": "1.0.0", 2784 | "isstream": "0.1.2", 2785 | "json-stringify-safe": "5.0.1", 2786 | "mime-types": "2.1.17", 2787 | "oauth-sign": "0.8.2", 2788 | "performance-now": "0.2.0", 2789 | "qs": "6.4.0", 2790 | "safe-buffer": "5.1.1", 2791 | "stringstream": "0.0.5", 2792 | "tough-cookie": "2.3.2", 2793 | "tunnel-agent": "0.6.0", 2794 | "uuid": "3.1.0" 2795 | } 2796 | }, 2797 | "require-uncached": { 2798 | "version": "1.0.3", 2799 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 2800 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 2801 | "dev": true, 2802 | "requires": { 2803 | "caller-path": "0.1.0", 2804 | "resolve-from": "1.0.1" 2805 | } 2806 | }, 2807 | "resolve-from": { 2808 | "version": "1.0.1", 2809 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 2810 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 2811 | "dev": true 2812 | }, 2813 | "restore-cursor": { 2814 | "version": "2.0.0", 2815 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 2816 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 2817 | "dev": true, 2818 | "requires": { 2819 | "onetime": "2.0.1", 2820 | "signal-exit": "3.0.2" 2821 | } 2822 | }, 2823 | "retry": { 2824 | "version": "0.9.0", 2825 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.9.0.tgz", 2826 | "integrity": "sha1-b2l+UKDk3cjI9/tUeptg3q1DZ40=" 2827 | }, 2828 | "retry-as-promised": { 2829 | "version": "2.3.0", 2830 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.0.tgz", 2831 | "integrity": "sha1-J79czZmZMrMWZWloJc82MMJ8Vi0=", 2832 | "requires": { 2833 | "bluebird": "3.5.0", 2834 | "debug": "2.6.8" 2835 | } 2836 | }, 2837 | "rimraf": { 2838 | "version": "2.6.1", 2839 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", 2840 | "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", 2841 | "requires": { 2842 | "glob": "7.1.2" 2843 | } 2844 | }, 2845 | "rpi-gpio": { 2846 | "version": "0.8.1", 2847 | "resolved": "https://registry.npmjs.org/rpi-gpio/-/rpi-gpio-0.8.1.tgz", 2848 | "integrity": "sha1-jVHUHsDs4C7Hy6JumItg7ecokKc=", 2849 | "requires": { 2850 | "async": "1.5.2", 2851 | "debug": "2.6.8", 2852 | "epoll": "0.1.22" 2853 | } 2854 | }, 2855 | "run-async": { 2856 | "version": "2.3.0", 2857 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 2858 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 2859 | "dev": true, 2860 | "requires": { 2861 | "is-promise": "2.1.0" 2862 | } 2863 | }, 2864 | "rx-lite": { 2865 | "version": "4.0.8", 2866 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 2867 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 2868 | "dev": true 2869 | }, 2870 | "rx-lite-aggregates": { 2871 | "version": "4.0.8", 2872 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 2873 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 2874 | "dev": true, 2875 | "requires": { 2876 | "rx-lite": "4.0.8" 2877 | } 2878 | }, 2879 | "safe-buffer": { 2880 | "version": "5.1.1", 2881 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2882 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 2883 | }, 2884 | "semver": { 2885 | "version": "5.0.3", 2886 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", 2887 | "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" 2888 | }, 2889 | "sequelize": { 2890 | "version": "4.8.0", 2891 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.8.0.tgz", 2892 | "integrity": "sha1-GYepfezrdJ2n4lzScFmttp2/gcI=", 2893 | "requires": { 2894 | "bluebird": "3.5.0", 2895 | "cls-bluebird": "2.0.1", 2896 | "debug": "3.0.1", 2897 | "depd": "1.1.1", 2898 | "dottie": "2.0.0", 2899 | "generic-pool": "3.1.7", 2900 | "inflection": "1.12.0", 2901 | "lodash": "4.17.4", 2902 | "moment": "2.18.1", 2903 | "moment-timezone": "0.5.13", 2904 | "retry-as-promised": "2.3.0", 2905 | "semver": "5.0.3", 2906 | "terraformer-wkt-parser": "1.1.2", 2907 | "toposort-class": "1.0.1", 2908 | "uuid": "3.1.0", 2909 | "validator": "8.1.0", 2910 | "wkx": "0.4.1" 2911 | }, 2912 | "dependencies": { 2913 | "debug": { 2914 | "version": "3.0.1", 2915 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", 2916 | "integrity": "sha512-6nVc6S36qbt/mutyt+UGMnawAMrPDZUPQjRZI3FS9tCtDRhvxJbK79unYBLPi+z5SLXQ3ftoVBFCblQtNSls8w==", 2917 | "requires": { 2918 | "ms": "2.0.0" 2919 | } 2920 | } 2921 | } 2922 | }, 2923 | "set-blocking": { 2924 | "version": "2.0.0", 2925 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2926 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 2927 | }, 2928 | "shebang-command": { 2929 | "version": "1.2.0", 2930 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2931 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2932 | "dev": true, 2933 | "requires": { 2934 | "shebang-regex": "1.0.0" 2935 | } 2936 | }, 2937 | "shebang-regex": { 2938 | "version": "1.0.0", 2939 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2940 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2941 | "dev": true 2942 | }, 2943 | "shimmer": { 2944 | "version": "1.1.0", 2945 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", 2946 | "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" 2947 | }, 2948 | "shot": { 2949 | "version": "3.4.2", 2950 | "resolved": "https://registry.npmjs.org/shot/-/shot-3.4.2.tgz", 2951 | "integrity": "sha1-Hlw/bysmZJrcQvfrNQIUpaApHWc=", 2952 | "requires": { 2953 | "hoek": "4.2.0", 2954 | "joi": "10.6.0" 2955 | }, 2956 | "dependencies": { 2957 | "hoek": { 2958 | "version": "4.2.0", 2959 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 2960 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 2961 | } 2962 | } 2963 | }, 2964 | "signal-exit": { 2965 | "version": "3.0.2", 2966 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2967 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 2968 | }, 2969 | "slash": { 2970 | "version": "1.0.0", 2971 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 2972 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 2973 | "dev": true 2974 | }, 2975 | "slice-ansi": { 2976 | "version": "0.0.4", 2977 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", 2978 | "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", 2979 | "dev": true 2980 | }, 2981 | "sntp": { 2982 | "version": "1.0.9", 2983 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 2984 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 2985 | "requires": { 2986 | "hoek": "2.16.3" 2987 | } 2988 | }, 2989 | "source-map": { 2990 | "version": "0.5.7", 2991 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2992 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2993 | "dev": true 2994 | }, 2995 | "source-map-support": { 2996 | "version": "0.4.17", 2997 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.17.tgz", 2998 | "integrity": "sha512-30c1Ch8FSjV0FwC253iftbbj0dU/OXoSg1LAEGZJUlGgjTNj6cu+DVqJWWIZJY5RXLWV4eFtR+4ouo0VIOYOTg==", 2999 | "dev": true, 3000 | "requires": { 3001 | "source-map": "0.5.7" 3002 | } 3003 | }, 3004 | "sprintf-js": { 3005 | "version": "1.0.3", 3006 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3007 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 3008 | "dev": true 3009 | }, 3010 | "sqlite3": { 3011 | "version": "3.1.9", 3012 | "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.9.tgz", 3013 | "integrity": "sha1-suf7qjSDgDGNODQyORjDw1G4vxg=", 3014 | "requires": { 3015 | "nan": "2.6.2", 3016 | "node-pre-gyp": "0.6.36" 3017 | } 3018 | }, 3019 | "sshpk": { 3020 | "version": "1.13.1", 3021 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 3022 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 3023 | "requires": { 3024 | "asn1": "0.2.3", 3025 | "assert-plus": "1.0.0", 3026 | "bcrypt-pbkdf": "1.0.1", 3027 | "dashdash": "1.14.1", 3028 | "ecc-jsbn": "0.1.1", 3029 | "getpass": "0.1.7", 3030 | "jsbn": "0.1.1", 3031 | "tweetnacl": "0.14.5" 3032 | }, 3033 | "dependencies": { 3034 | "assert-plus": { 3035 | "version": "1.0.0", 3036 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3037 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 3038 | } 3039 | } 3040 | }, 3041 | "stack-trace": { 3042 | "version": "0.0.10", 3043 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 3044 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" 3045 | }, 3046 | "statehood": { 3047 | "version": "5.0.3", 3048 | "resolved": "https://registry.npmjs.org/statehood/-/statehood-5.0.3.tgz", 3049 | "integrity": "sha512-YrPrCt10t3ImH/JMO5szSwX7sCm8HoqVl3VFLOa9EZ1g/qJx/ZmMhN+2uzPPB/vaU6hpkJpXxcBWsgIkkG+MXA==", 3050 | "requires": { 3051 | "boom": "5.2.0", 3052 | "cryptiles": "3.1.2", 3053 | "hoek": "4.2.0", 3054 | "iron": "4.0.5", 3055 | "items": "2.1.1", 3056 | "joi": "10.6.0" 3057 | }, 3058 | "dependencies": { 3059 | "boom": { 3060 | "version": "5.2.0", 3061 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 3062 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 3063 | "requires": { 3064 | "hoek": "4.2.0" 3065 | } 3066 | }, 3067 | "cryptiles": { 3068 | "version": "3.1.2", 3069 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 3070 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 3071 | "requires": { 3072 | "boom": "5.2.0" 3073 | } 3074 | }, 3075 | "hoek": { 3076 | "version": "4.2.0", 3077 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 3078 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 3079 | } 3080 | } 3081 | }, 3082 | "stream-shift": { 3083 | "version": "1.0.0", 3084 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 3085 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" 3086 | }, 3087 | "string-width": { 3088 | "version": "2.1.1", 3089 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 3090 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 3091 | "dev": true, 3092 | "requires": { 3093 | "is-fullwidth-code-point": "2.0.0", 3094 | "strip-ansi": "4.0.0" 3095 | }, 3096 | "dependencies": { 3097 | "ansi-regex": { 3098 | "version": "3.0.0", 3099 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 3100 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 3101 | "dev": true 3102 | }, 3103 | "strip-ansi": { 3104 | "version": "4.0.0", 3105 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 3106 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 3107 | "dev": true, 3108 | "requires": { 3109 | "ansi-regex": "3.0.0" 3110 | } 3111 | } 3112 | } 3113 | }, 3114 | "string_decoder": { 3115 | "version": "1.0.3", 3116 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3117 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 3118 | "requires": { 3119 | "safe-buffer": "5.1.1" 3120 | } 3121 | }, 3122 | "stringstream": { 3123 | "version": "0.0.5", 3124 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 3125 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 3126 | }, 3127 | "strip-ansi": { 3128 | "version": "3.0.1", 3129 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3130 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3131 | "requires": { 3132 | "ansi-regex": "2.1.1" 3133 | } 3134 | }, 3135 | "strip-json-comments": { 3136 | "version": "2.0.1", 3137 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3138 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 3139 | }, 3140 | "subtext": { 3141 | "version": "5.0.0", 3142 | "resolved": "https://registry.npmjs.org/subtext/-/subtext-5.0.0.tgz", 3143 | "integrity": "sha512-2nXG1G1V+K64Z20cQII7k0s38J2DSycMXBLMAk9RXUFG0uAkAbLSVoa88croX9VhTdBCJbLAe9g6LmzKwpJhhQ==", 3144 | "requires": { 3145 | "boom": "5.2.0", 3146 | "content": "3.0.5", 3147 | "hoek": "4.2.0", 3148 | "pez": "2.1.5", 3149 | "wreck": "12.4.0" 3150 | }, 3151 | "dependencies": { 3152 | "boom": { 3153 | "version": "5.2.0", 3154 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 3155 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 3156 | "requires": { 3157 | "hoek": "4.2.0" 3158 | } 3159 | }, 3160 | "hoek": { 3161 | "version": "4.2.0", 3162 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 3163 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 3164 | } 3165 | } 3166 | }, 3167 | "supports-color": { 3168 | "version": "2.0.0", 3169 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 3170 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 3171 | "dev": true 3172 | }, 3173 | "table": { 3174 | "version": "4.0.1", 3175 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", 3176 | "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", 3177 | "dev": true, 3178 | "requires": { 3179 | "ajv": "4.11.8", 3180 | "ajv-keywords": "1.5.1", 3181 | "chalk": "1.1.3", 3182 | "lodash": "4.17.4", 3183 | "slice-ansi": "0.0.4", 3184 | "string-width": "2.1.1" 3185 | } 3186 | }, 3187 | "tar": { 3188 | "version": "2.2.1", 3189 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 3190 | "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", 3191 | "requires": { 3192 | "block-stream": "0.0.9", 3193 | "fstream": "1.0.11", 3194 | "inherits": "2.0.3" 3195 | } 3196 | }, 3197 | "tar-pack": { 3198 | "version": "3.4.0", 3199 | "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", 3200 | "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", 3201 | "requires": { 3202 | "debug": "2.6.8", 3203 | "fstream": "1.0.11", 3204 | "fstream-ignore": "1.0.5", 3205 | "once": "1.4.0", 3206 | "readable-stream": "2.3.3", 3207 | "rimraf": "2.6.1", 3208 | "tar": "2.2.1", 3209 | "uid-number": "0.0.6" 3210 | }, 3211 | "dependencies": { 3212 | "isarray": { 3213 | "version": "1.0.0", 3214 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 3215 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 3216 | }, 3217 | "readable-stream": { 3218 | "version": "2.3.3", 3219 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 3220 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 3221 | "requires": { 3222 | "core-util-is": "1.0.2", 3223 | "inherits": "2.0.3", 3224 | "isarray": "1.0.0", 3225 | "process-nextick-args": "1.0.7", 3226 | "safe-buffer": "5.1.1", 3227 | "string_decoder": "1.0.3", 3228 | "util-deprecate": "1.0.2" 3229 | } 3230 | }, 3231 | "string_decoder": { 3232 | "version": "1.0.3", 3233 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3234 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 3235 | "requires": { 3236 | "safe-buffer": "5.1.1" 3237 | } 3238 | } 3239 | } 3240 | }, 3241 | "terraformer": { 3242 | "version": "1.0.8", 3243 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", 3244 | "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", 3245 | "requires": { 3246 | "@types/geojson": "1.0.3" 3247 | } 3248 | }, 3249 | "terraformer-wkt-parser": { 3250 | "version": "1.1.2", 3251 | "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", 3252 | "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", 3253 | "requires": { 3254 | "terraformer": "1.0.8" 3255 | } 3256 | }, 3257 | "text-table": { 3258 | "version": "0.2.0", 3259 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3260 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 3261 | "dev": true 3262 | }, 3263 | "through": { 3264 | "version": "2.3.8", 3265 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3266 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3267 | "dev": true 3268 | }, 3269 | "tmp": { 3270 | "version": "0.0.31", 3271 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", 3272 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", 3273 | "dev": true, 3274 | "requires": { 3275 | "os-tmpdir": "1.0.2" 3276 | } 3277 | }, 3278 | "to-fast-properties": { 3279 | "version": "1.0.3", 3280 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 3281 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 3282 | "dev": true 3283 | }, 3284 | "topo": { 3285 | "version": "2.0.2", 3286 | "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", 3287 | "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", 3288 | "requires": { 3289 | "hoek": "4.2.0" 3290 | }, 3291 | "dependencies": { 3292 | "hoek": { 3293 | "version": "4.2.0", 3294 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 3295 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 3296 | } 3297 | } 3298 | }, 3299 | "toposort-class": { 3300 | "version": "1.0.1", 3301 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 3302 | "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" 3303 | }, 3304 | "tough-cookie": { 3305 | "version": "2.3.2", 3306 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", 3307 | "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", 3308 | "requires": { 3309 | "punycode": "1.4.1" 3310 | } 3311 | }, 3312 | "trim-right": { 3313 | "version": "1.0.1", 3314 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 3315 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 3316 | "dev": true 3317 | }, 3318 | "tryit": { 3319 | "version": "1.0.3", 3320 | "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", 3321 | "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", 3322 | "dev": true 3323 | }, 3324 | "tunnel-agent": { 3325 | "version": "0.6.0", 3326 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3327 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3328 | "requires": { 3329 | "safe-buffer": "5.1.1" 3330 | } 3331 | }, 3332 | "tweetnacl": { 3333 | "version": "0.14.5", 3334 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3335 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3336 | "optional": true 3337 | }, 3338 | "type-check": { 3339 | "version": "0.3.2", 3340 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 3341 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 3342 | "dev": true, 3343 | "requires": { 3344 | "prelude-ls": "1.1.2" 3345 | } 3346 | }, 3347 | "typedarray": { 3348 | "version": "0.0.6", 3349 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3350 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3351 | "dev": true 3352 | }, 3353 | "uid-number": { 3354 | "version": "0.0.6", 3355 | "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", 3356 | "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" 3357 | }, 3358 | "ultron": { 3359 | "version": "1.0.2", 3360 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", 3361 | "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" 3362 | }, 3363 | "underscore": { 3364 | "version": "1.8.3", 3365 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", 3366 | "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" 3367 | }, 3368 | "url-join": { 3369 | "version": "0.0.1", 3370 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", 3371 | "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" 3372 | }, 3373 | "util-deprecate": { 3374 | "version": "1.0.2", 3375 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3376 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 3377 | }, 3378 | "uuid": { 3379 | "version": "3.1.0", 3380 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 3381 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 3382 | }, 3383 | "validator": { 3384 | "version": "8.1.0", 3385 | "resolved": "https://registry.npmjs.org/validator/-/validator-8.1.0.tgz", 3386 | "integrity": "sha512-0j7K1/yFA2Us3Oo8yay5iJh0NzjYvqE7AendsJVu+x7HgMVtWjGxaaMehr2IJqGo+KZhbYbw39ekjq6W6aGqkw==" 3387 | }, 3388 | "verror": { 3389 | "version": "1.10.0", 3390 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3391 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3392 | "requires": { 3393 | "assert-plus": "1.0.0", 3394 | "core-util-is": "1.0.2", 3395 | "extsprintf": "1.3.0" 3396 | }, 3397 | "dependencies": { 3398 | "assert-plus": { 3399 | "version": "1.0.0", 3400 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3401 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 3402 | } 3403 | } 3404 | }, 3405 | "vise": { 3406 | "version": "2.0.2", 3407 | "resolved": "https://registry.npmjs.org/vise/-/vise-2.0.2.tgz", 3408 | "integrity": "sha1-awjo+0y3bjpQzW3Q7DczjoEaDTk=", 3409 | "requires": { 3410 | "hoek": "4.2.0" 3411 | }, 3412 | "dependencies": { 3413 | "hoek": { 3414 | "version": "4.2.0", 3415 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 3416 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 3417 | } 3418 | } 3419 | }, 3420 | "which": { 3421 | "version": "1.3.0", 3422 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 3423 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 3424 | "dev": true, 3425 | "requires": { 3426 | "isexe": "2.0.0" 3427 | } 3428 | }, 3429 | "wide-align": { 3430 | "version": "1.1.2", 3431 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", 3432 | "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", 3433 | "requires": { 3434 | "string-width": "1.0.2" 3435 | }, 3436 | "dependencies": { 3437 | "is-fullwidth-code-point": { 3438 | "version": "1.0.0", 3439 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 3440 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 3441 | "requires": { 3442 | "number-is-nan": "1.0.1" 3443 | } 3444 | }, 3445 | "string-width": { 3446 | "version": "1.0.2", 3447 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 3448 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 3449 | "requires": { 3450 | "code-point-at": "1.1.0", 3451 | "is-fullwidth-code-point": "1.0.0", 3452 | "strip-ansi": "3.0.1" 3453 | } 3454 | } 3455 | } 3456 | }, 3457 | "winston": { 3458 | "version": "2.3.1", 3459 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz", 3460 | "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", 3461 | "requires": { 3462 | "async": "1.0.0", 3463 | "colors": "1.0.3", 3464 | "cycle": "1.0.3", 3465 | "eyes": "0.1.8", 3466 | "isstream": "0.1.2", 3467 | "stack-trace": "0.0.10" 3468 | }, 3469 | "dependencies": { 3470 | "async": { 3471 | "version": "1.0.0", 3472 | "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", 3473 | "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" 3474 | } 3475 | } 3476 | }, 3477 | "wkx": { 3478 | "version": "0.4.1", 3479 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.1.tgz", 3480 | "integrity": "sha1-L8FxtenLVcYlb+9L3h8hvkE77+4=", 3481 | "requires": { 3482 | "@types/node": "6.0.88" 3483 | } 3484 | }, 3485 | "wordwrap": { 3486 | "version": "1.0.0", 3487 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 3488 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 3489 | "dev": true 3490 | }, 3491 | "wrappy": { 3492 | "version": "1.0.2", 3493 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3494 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 3495 | }, 3496 | "wreck": { 3497 | "version": "12.4.0", 3498 | "resolved": "https://registry.npmjs.org/wreck/-/wreck-12.4.0.tgz", 3499 | "integrity": "sha512-5QWJGTyt/yX9QIu6/bnAuiPnODVmIhnJNLyBSb5hb0NeGXKiMjm8bIhKJW5zNN09tGOQlnp2Awmo4Y5yI3uP+w==", 3500 | "requires": { 3501 | "boom": "5.2.0", 3502 | "hoek": "4.2.0" 3503 | }, 3504 | "dependencies": { 3505 | "boom": { 3506 | "version": "5.2.0", 3507 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 3508 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 3509 | "requires": { 3510 | "hoek": "4.2.0" 3511 | } 3512 | }, 3513 | "hoek": { 3514 | "version": "4.2.0", 3515 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 3516 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 3517 | } 3518 | } 3519 | }, 3520 | "write": { 3521 | "version": "0.2.1", 3522 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 3523 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 3524 | "dev": true, 3525 | "requires": { 3526 | "mkdirp": "0.5.1" 3527 | } 3528 | }, 3529 | "ws": { 3530 | "version": "1.1.4", 3531 | "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", 3532 | "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", 3533 | "requires": { 3534 | "options": "0.0.6", 3535 | "ultron": "1.0.2" 3536 | } 3537 | }, 3538 | "yallist": { 3539 | "version": "2.1.2", 3540 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3541 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 3542 | "dev": true 3543 | } 3544 | } 3545 | } 3546 | --------------------------------------------------------------------------------