├── .angular-cli.json ├── .editorconfig ├── .firebaserc ├── .gitignore ├── README.md ├── e2e ├── app.e2e-spec.ts ├── app.po.ts └── tsconfig.e2e.json ├── firebase.json ├── functions ├── index.js ├── package-lock.json └── package.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── protractor.conf.js ├── src ├── app │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── chat │ │ ├── chat-dialog │ │ │ ├── chat-dialog.component.html │ │ │ ├── chat-dialog.component.scss │ │ │ ├── chat-dialog.component.spec.ts │ │ │ └── chat-dialog.component.ts │ │ ├── chat.module.ts │ │ ├── chat.service.spec.ts │ │ ├── chat.service.ts │ │ ├── markdown.service.spec.ts │ │ └── markdown.service.ts │ ├── core │ │ └── material.module.ts │ └── shared │ │ ├── md-to-html.pipe.spec.ts │ │ ├── md-to-html.pipe.ts │ │ └── shared.module.ts ├── assets │ ├── .gitkeep │ └── logo.png ├── environments │ └── environment.prod.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.scss ├── test.ts ├── tsconfig.app.json ├── tsconfig.spec.json └── typings.d.ts ├── tsconfig.json └── tslint.json /.angular-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "project": { 4 | "name": "chatbot" 5 | }, 6 | "apps": [ 7 | { 8 | "root": "src", 9 | "outDir": "dist", 10 | "assets": [ 11 | "assets", 12 | "favicon.ico" 13 | ], 14 | "index": "index.html", 15 | "main": "main.ts", 16 | "polyfills": "polyfills.ts", 17 | "test": "test.ts", 18 | "tsconfig": "tsconfig.app.json", 19 | "testTsconfig": "tsconfig.spec.json", 20 | "prefix": "", 21 | "styles": [ 22 | "styles.scss" 23 | ], 24 | "scripts": [], 25 | "environmentSource": "environments/environment.ts", 26 | "environments": { 27 | "dev": "environments/environment.ts", 28 | "prod": "environments/environment.prod.ts" 29 | } 30 | } 31 | ], 32 | "e2e": { 33 | "protractor": { 34 | "config": "./protractor.conf.js" 35 | } 36 | }, 37 | "lint": [ 38 | { 39 | "project": "src/tsconfig.app.json", 40 | "exclude": "**/node_modules/**" 41 | }, 42 | { 43 | "project": "src/tsconfig.spec.json", 44 | "exclude": "**/node_modules/**" 45 | }, 46 | { 47 | "project": "e2e/tsconfig.e2e.json", 48 | "exclude": "**/node_modules/**" 49 | } 50 | ], 51 | "test": { 52 | "karma": { 53 | "config": "./karma.conf.js" 54 | } 55 | }, 56 | "defaults": { 57 | "styleExt": "scss", 58 | "class": { 59 | "spec": false 60 | }, 61 | "component": {} 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "angularchatbot" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | /src/environments/environment.prod.ts 4 | /src/environments/environment.ts 5 | 6 | # compiled output 7 | /dist 8 | /tmp 9 | /out-tsc 10 | 11 | # dependencies 12 | /node_modules 13 | /functions/node_modules 14 | 15 | # IDEs and editors 16 | /.idea 17 | .project 18 | .classpath 19 | .c9/ 20 | *.launch 21 | .settings/ 22 | *.sublime-workspace 23 | 24 | # IDE - VSCode 25 | .vscode/* 26 | !.vscode/settings.json 27 | !.vscode/tasks.json 28 | !.vscode/launch.json 29 | !.vscode/extensions.json 30 | 31 | # misc 32 | /.sass-cache 33 | /connect.lock 34 | /coverage 35 | /libpeerconnection.log 36 | npm-debug.log 37 | testem.log 38 | /typings 39 | 40 | # e2e 41 | /e2e/*.js 42 | /e2e/*.map 43 | 44 | # System Files 45 | .DS_Store 46 | Thumbs.db 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | [![Slack](https://firebasestorage.googleapis.com/v0/b/firestarter-96e46.appspot.com/o/assets%2Fslack-badge.svg?alt=media&token=3e68acef-3e00-4925-9710-e11cee5923e4)](https://join.slack.com/angularfirebase/shared_invite/MjA2NTgxMTI0MTk2LTE0OTg4NTQ4MDAtMjhhZDIzMjc0Mg) 3 | 4 | [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) 5 | 6 | # AngularChatbot 7 | 8 | Status: Pre-alpha 9 | 10 | A Dialogflow chatbot with profound knowledge of the Angular Framework. 11 | 12 | ## Contribute? 13 | 14 | Join the slack team and check into the #chatbot-dev channel if you want to help make it better. 15 | -------------------------------------------------------------------------------- /e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('chatbot App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('Welcome to app!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "jasminewd2", 11 | "node" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /functions/index.js: -------------------------------------------------------------------------------- 1 | const functions = require('firebase-functions'); 2 | 3 | // const admin = require('firebase-admin'); 4 | // admin.initializeApp(functions.config().firebase); 5 | 6 | 7 | exports.dialogflowFirebaseFulfillment = functions.https.onRequest((req, res) => { 8 | 9 | console.log('Request headers: ' + JSON.stringify(req.headers)); 10 | console.log('Request body: ' + JSON.stringify(req.body)); 11 | // An action is a string used to identify what needs to be done in fulfillment 12 | let action = req.body.result.action; 13 | // Parameters are any entites that Dialogflow has extracted from the request. 14 | const parameters = req.body.result.parameters; 15 | 16 | // Contexts are objects used to track and store conversation state 17 | const inputContexts = req.body.result.contexts; 18 | 19 | // Get the request source slack/facebook/et 20 | const requestSource = (req.body.originalRequest) ? req.body.originalRequest.source : undefined; 21 | 22 | 23 | const actionHandlers = { 24 | 25 | 'learn.component': () => { 26 | // todo 27 | 28 | }, 29 | 'default': () => { 30 | const data = formatResponse('Hi. I am the default response from the Cloud Function') 31 | } 32 | 33 | } 34 | 35 | if (!actionHandlers[action]) { 36 | action = 'default'; 37 | } 38 | 39 | // Call the handler with action type 40 | actionHandlers[action](); 41 | 42 | }); 43 | 44 | 45 | function formatResponse(text) { 46 | return { 47 | speech: text, 48 | displayText: text, 49 | data: {}, 50 | contextOut: [], 51 | source: '', 52 | followupEvent: {} 53 | } 54 | } -------------------------------------------------------------------------------- /functions/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "requires": true, 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "@types/express": { 7 | "version": "4.0.37", 8 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.37.tgz", 9 | "integrity": "sha512-tIULTLzQpFFs5/PKnFIAFOsXQxss76glppbVKR3/jddPK26SBsD5HF5grn5G2jOGtpRWSBvYmDYoduVv+3wOXg==", 10 | "requires": { 11 | "@types/express-serve-static-core": "4.0.53", 12 | "@types/serve-static": "1.7.32" 13 | } 14 | }, 15 | "@types/express-serve-static-core": { 16 | "version": "4.0.53", 17 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.0.53.tgz", 18 | "integrity": "sha512-zaGeOpEYp5G2EhjaUFdVwysDrfEYc6Q6iPhd3Kl4ip30x0tvVv7SuJvY3yzCUSuFlzAG8N5KsyY6BJg93/cn+Q==", 19 | "requires": { 20 | "@types/node": "8.0.46" 21 | } 22 | }, 23 | "@types/jsonwebtoken": { 24 | "version": "7.2.3", 25 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.3.tgz", 26 | "integrity": "sha512-cVhxZfVCyTZd1P+2a+xXSR9to7hZTulNRLLCQMVfAevUqx2Ee+EgsiD/7pX8qvdXWP3nWgSoTjKRLMrIpdPVjQ==", 27 | "requires": { 28 | "@types/node": "8.0.46" 29 | } 30 | }, 31 | "@types/lodash": { 32 | "version": "4.14.78", 33 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.78.tgz", 34 | "integrity": "sha512-AflcpYyLyf/VIgSJbG/WMx7Bk00UejtSjYUW176K7erXChVcZENFdgOKOKfOXX9MmcXKoZW1QVFbqYapkhn1rA==" 35 | }, 36 | "@types/mime": { 37 | "version": "2.0.0", 38 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", 39 | "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" 40 | }, 41 | "@types/node": { 42 | "version": "8.0.46", 43 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.46.tgz", 44 | "integrity": "sha512-rRkP4kb5JYIfAoRKaDbcdPZBcTNOgzSApyzhPN9e6rhViSJAWQGlSXIX5gc75iR02jikhpzy3usu31wMHllfFw==" 45 | }, 46 | "@types/serve-static": { 47 | "version": "1.7.32", 48 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.7.32.tgz", 49 | "integrity": "sha512-WpI0g7M1FiOmJ/a97Qrjafq2I938tjAZ3hZr9O7sXyA6oUhH3bqUNZIt7r1KZg8TQAKxcvxt6JjQ5XuLfIBFvg==", 50 | "requires": { 51 | "@types/express-serve-static-core": "4.0.53", 52 | "@types/mime": "2.0.0" 53 | } 54 | }, 55 | "@types/sha1": { 56 | "version": "1.1.0", 57 | "resolved": "https://registry.npmjs.org/@types/sha1/-/sha1-1.1.0.tgz", 58 | "integrity": "sha1-Rh6xiQbSXo0HxGeKDtT5ygfkbdk=", 59 | "requires": { 60 | "@types/node": "8.0.46" 61 | } 62 | }, 63 | "accepts": { 64 | "version": "1.3.4", 65 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", 66 | "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", 67 | "requires": { 68 | "mime-types": "2.1.17", 69 | "negotiator": "0.6.1" 70 | } 71 | }, 72 | "array-flatten": { 73 | "version": "1.1.1", 74 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 75 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 76 | }, 77 | "base64url": { 78 | "version": "2.0.0", 79 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", 80 | "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" 81 | }, 82 | "body-parser": { 83 | "version": "1.18.2", 84 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 85 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 86 | "requires": { 87 | "bytes": "3.0.0", 88 | "content-type": "1.0.4", 89 | "debug": "2.6.9", 90 | "depd": "1.1.1", 91 | "http-errors": "1.6.2", 92 | "iconv-lite": "0.4.19", 93 | "on-finished": "2.3.0", 94 | "qs": "6.5.1", 95 | "raw-body": "2.3.2", 96 | "type-is": "1.6.15" 97 | } 98 | }, 99 | "buffer-equal-constant-time": { 100 | "version": "1.0.1", 101 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 102 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 103 | }, 104 | "bytes": { 105 | "version": "3.0.0", 106 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 107 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 108 | }, 109 | "charenc": { 110 | "version": "0.0.2", 111 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 112 | "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" 113 | }, 114 | "content-disposition": { 115 | "version": "0.5.2", 116 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 117 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 118 | }, 119 | "content-type": { 120 | "version": "1.0.4", 121 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 122 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 123 | }, 124 | "cookie": { 125 | "version": "0.3.1", 126 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 127 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 128 | }, 129 | "cookie-signature": { 130 | "version": "1.0.6", 131 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 132 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 133 | }, 134 | "crypt": { 135 | "version": "0.0.2", 136 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 137 | "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" 138 | }, 139 | "debug": { 140 | "version": "2.6.9", 141 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 142 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 143 | "requires": { 144 | "ms": "2.0.0" 145 | } 146 | }, 147 | "depd": { 148 | "version": "1.1.1", 149 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 150 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 151 | }, 152 | "destroy": { 153 | "version": "1.0.4", 154 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 155 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 156 | }, 157 | "ecdsa-sig-formatter": { 158 | "version": "1.0.9", 159 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", 160 | "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", 161 | "requires": { 162 | "base64url": "2.0.0", 163 | "safe-buffer": "5.1.1" 164 | } 165 | }, 166 | "ee-first": { 167 | "version": "1.1.1", 168 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 169 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 170 | }, 171 | "encodeurl": { 172 | "version": "1.0.1", 173 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 174 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" 175 | }, 176 | "escape-html": { 177 | "version": "1.0.3", 178 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 179 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 180 | }, 181 | "etag": { 182 | "version": "1.8.1", 183 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 184 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 185 | }, 186 | "express": { 187 | "version": "4.16.2", 188 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", 189 | "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", 190 | "requires": { 191 | "accepts": "1.3.4", 192 | "array-flatten": "1.1.1", 193 | "body-parser": "1.18.2", 194 | "content-disposition": "0.5.2", 195 | "content-type": "1.0.4", 196 | "cookie": "0.3.1", 197 | "cookie-signature": "1.0.6", 198 | "debug": "2.6.9", 199 | "depd": "1.1.1", 200 | "encodeurl": "1.0.1", 201 | "escape-html": "1.0.3", 202 | "etag": "1.8.1", 203 | "finalhandler": "1.1.0", 204 | "fresh": "0.5.2", 205 | "merge-descriptors": "1.0.1", 206 | "methods": "1.1.2", 207 | "on-finished": "2.3.0", 208 | "parseurl": "1.3.2", 209 | "path-to-regexp": "0.1.7", 210 | "proxy-addr": "2.0.2", 211 | "qs": "6.5.1", 212 | "range-parser": "1.2.0", 213 | "safe-buffer": "5.1.1", 214 | "send": "0.16.1", 215 | "serve-static": "1.13.1", 216 | "setprototypeof": "1.1.0", 217 | "statuses": "1.3.1", 218 | "type-is": "1.6.15", 219 | "utils-merge": "1.0.1", 220 | "vary": "1.1.2" 221 | } 222 | }, 223 | "finalhandler": { 224 | "version": "1.1.0", 225 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", 226 | "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", 227 | "requires": { 228 | "debug": "2.6.9", 229 | "encodeurl": "1.0.1", 230 | "escape-html": "1.0.3", 231 | "on-finished": "2.3.0", 232 | "parseurl": "1.3.2", 233 | "statuses": "1.3.1", 234 | "unpipe": "1.0.0" 235 | } 236 | }, 237 | "firebase-admin": { 238 | "version": "5.4.2", 239 | "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-5.4.2.tgz", 240 | "integrity": "sha1-AC9YvirYkBIp5SXsVfpybRL5BOs=", 241 | "requires": { 242 | "@google-cloud/firestore": "0.8.2", 243 | "@google-cloud/storage": "1.3.1", 244 | "@types/google-cloud__storage": "1.1.5", 245 | "@types/jsonwebtoken": "7.2.3", 246 | "@types/node": "8.0.33", 247 | "faye-websocket": "0.9.3", 248 | "google-auth-library": "0.10.0", 249 | "jsonwebtoken": "7.1.9", 250 | "lodash": "4.17.4", 251 | "node-forge": "0.7.1" 252 | }, 253 | "dependencies": { 254 | "@google-cloud/common": { 255 | "version": "0.13.6", 256 | "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-0.13.6.tgz", 257 | "integrity": "sha1-qdjhN7xCmkSrqWif5qDkMxeE+FM=", 258 | "requires": { 259 | "array-uniq": "1.0.3", 260 | "arrify": "1.0.1", 261 | "concat-stream": "1.6.0", 262 | "create-error-class": "3.0.2", 263 | "duplexify": "3.5.1", 264 | "ent": "2.2.0", 265 | "extend": "3.0.1", 266 | "google-auto-auth": "0.7.2", 267 | "is": "3.2.1", 268 | "log-driver": "1.2.5", 269 | "methmeth": "1.1.0", 270 | "modelo": "4.2.0", 271 | "request": "2.83.0", 272 | "retry-request": "3.0.0", 273 | "split-array-stream": "1.0.3", 274 | "stream-events": "1.0.2", 275 | "string-format-obj": "1.1.0", 276 | "through2": "2.0.3" 277 | } 278 | }, 279 | "@google-cloud/common-grpc": { 280 | "version": "0.4.1", 281 | "resolved": "https://registry.npmjs.org/@google-cloud/common-grpc/-/common-grpc-0.4.1.tgz", 282 | "integrity": "sha1-CSZGB++4k0MJr/1jhJmG+7gPkhg=", 283 | "requires": { 284 | "@google-cloud/common": "0.13.6", 285 | "dot-prop": "2.4.0", 286 | "duplexify": "3.5.1", 287 | "extend": "3.0.1", 288 | "grpc": "1.6.6", 289 | "is": "3.2.1", 290 | "modelo": "4.2.0", 291 | "retry-request": "3.0.0", 292 | "through2": "2.0.3" 293 | } 294 | }, 295 | "@google-cloud/firestore": { 296 | "version": "0.8.2", 297 | "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-0.8.2.tgz", 298 | "integrity": "sha512-Z9hoiZIIn1MN7lUZE0pStvkrTdzJnSyFyxDJ4VojkzF/lL4EAUr9USyWXol6HZYcERPjXIasHSXXTYwuXx8tmA==", 299 | "requires": { 300 | "@google-cloud/common": "0.13.6", 301 | "@google-cloud/common-grpc": "0.4.1", 302 | "bun": "0.0.12", 303 | "extend": "3.0.1", 304 | "functional-red-black-tree": "1.0.1", 305 | "google-gax": "0.14.1", 306 | "grpc": "1.6.6", 307 | "is": "3.2.1", 308 | "through2": "2.0.3" 309 | } 310 | }, 311 | "@google-cloud/storage": { 312 | "version": "1.3.1", 313 | "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-1.3.1.tgz", 314 | "integrity": "sha512-tN2YttvQ33KwXuG2tpP3lEtxkZWV1yifc84YOusMjBCDoAal5GWXDPuCeFBI7cMs5LW+V2o3I9ZusOJZwYA8ug==", 315 | "requires": { 316 | "@google-cloud/common": "0.13.6", 317 | "arrify": "1.0.1", 318 | "async": "2.5.0", 319 | "concat-stream": "1.6.0", 320 | "create-error-class": "3.0.2", 321 | "duplexify": "3.5.1", 322 | "extend": "3.0.1", 323 | "gcs-resumable-upload": "0.8.2", 324 | "hash-stream-validation": "0.2.1", 325 | "is": "3.2.1", 326 | "mime-types": "2.1.17", 327 | "once": "1.4.0", 328 | "pumpify": "1.3.5", 329 | "safe-buffer": "5.1.1", 330 | "stream-events": "1.0.2", 331 | "string-format-obj": "1.1.0", 332 | "through2": "2.0.3" 333 | } 334 | }, 335 | "@protobufjs/aspromise": { 336 | "version": "1.1.2", 337 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 338 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 339 | }, 340 | "@protobufjs/base64": { 341 | "version": "1.1.2", 342 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 343 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 344 | }, 345 | "@protobufjs/codegen": { 346 | "version": "2.0.4", 347 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 348 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 349 | }, 350 | "@protobufjs/eventemitter": { 351 | "version": "1.1.0", 352 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 353 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 354 | }, 355 | "@protobufjs/fetch": { 356 | "version": "1.1.0", 357 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 358 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 359 | "requires": { 360 | "@protobufjs/aspromise": "1.1.2", 361 | "@protobufjs/inquire": "1.1.0" 362 | } 363 | }, 364 | "@protobufjs/float": { 365 | "version": "1.0.2", 366 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 367 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 368 | }, 369 | "@protobufjs/inquire": { 370 | "version": "1.1.0", 371 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 372 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 373 | }, 374 | "@protobufjs/path": { 375 | "version": "1.1.2", 376 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 377 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 378 | }, 379 | "@protobufjs/pool": { 380 | "version": "1.1.0", 381 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 382 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 383 | }, 384 | "@protobufjs/utf8": { 385 | "version": "1.1.0", 386 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 387 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 388 | }, 389 | "@types/google-cloud__storage": { 390 | "version": "1.1.5", 391 | "resolved": "https://registry.npmjs.org/@types/google-cloud__storage/-/google-cloud__storage-1.1.5.tgz", 392 | "integrity": "sha512-c82GoxSyQZASfOTpyMx8nvpIwySR+vXnkzymya9MQR7L+60ckLQVzn6yUMnOWgTDFM7EUzk79X5p8uSDx9jDVw==", 393 | "requires": { 394 | "@types/node": "8.0.33" 395 | } 396 | }, 397 | "@types/jsonwebtoken": { 398 | "version": "7.2.3", 399 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.3.tgz", 400 | "integrity": "sha512-cVhxZfVCyTZd1P+2a+xXSR9to7hZTulNRLLCQMVfAevUqx2Ee+EgsiD/7pX8qvdXWP3nWgSoTjKRLMrIpdPVjQ==", 401 | "requires": { 402 | "@types/node": "8.0.33" 403 | } 404 | }, 405 | "@types/long": { 406 | "version": "3.0.32", 407 | "resolved": "https://registry.npmjs.org/@types/long/-/long-3.0.32.tgz", 408 | "integrity": "sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==" 409 | }, 410 | "@types/node": { 411 | "version": "8.0.33", 412 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.33.tgz", 413 | "integrity": "sha512-vmCdO8Bm1ExT+FWfC9sd9r4jwqM7o97gGy2WBshkkXbf/2nLAJQUrZfIhw27yVOtLUev6kSZc4cav/46KbDd8A==" 414 | }, 415 | "ajv": { 416 | "version": "5.2.3", 417 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", 418 | "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", 419 | "requires": { 420 | "co": "4.6.0", 421 | "fast-deep-equal": "1.0.0", 422 | "json-schema-traverse": "0.3.1", 423 | "json-stable-stringify": "1.0.1" 424 | } 425 | }, 426 | "ansi-regex": { 427 | "version": "2.1.1", 428 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 429 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 430 | }, 431 | "arguejs": { 432 | "version": "0.2.3", 433 | "resolved": "https://registry.npmjs.org/arguejs/-/arguejs-0.2.3.tgz", 434 | "integrity": "sha1-tvk59f4OPNHz+T4qqSYkJL8xKvc=" 435 | }, 436 | "array-union": { 437 | "version": "1.0.2", 438 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 439 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 440 | "requires": { 441 | "array-uniq": "1.0.3" 442 | } 443 | }, 444 | "array-uniq": { 445 | "version": "1.0.3", 446 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 447 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" 448 | }, 449 | "arrify": { 450 | "version": "1.0.1", 451 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 452 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" 453 | }, 454 | "ascli": { 455 | "version": "1.0.1", 456 | "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", 457 | "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", 458 | "requires": { 459 | "colour": "0.7.1", 460 | "optjs": "3.2.2" 461 | } 462 | }, 463 | "asn1": { 464 | "version": "0.2.3", 465 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 466 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 467 | }, 468 | "assert-plus": { 469 | "version": "1.0.0", 470 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 471 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 472 | }, 473 | "async": { 474 | "version": "2.5.0", 475 | "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", 476 | "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", 477 | "requires": { 478 | "lodash": "4.17.4" 479 | } 480 | }, 481 | "asynckit": { 482 | "version": "0.4.0", 483 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 484 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 485 | }, 486 | "aws-sign2": { 487 | "version": "0.7.0", 488 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 489 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 490 | }, 491 | "aws4": { 492 | "version": "1.6.0", 493 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 494 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 495 | }, 496 | "balanced-match": { 497 | "version": "1.0.0", 498 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 499 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 500 | }, 501 | "base64url": { 502 | "version": "2.0.0", 503 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", 504 | "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" 505 | }, 506 | "bcrypt-pbkdf": { 507 | "version": "1.0.1", 508 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 509 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 510 | "optional": true, 511 | "requires": { 512 | "tweetnacl": "0.14.5" 513 | } 514 | }, 515 | "boom": { 516 | "version": "4.3.1", 517 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 518 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 519 | "requires": { 520 | "hoek": "4.2.0" 521 | } 522 | }, 523 | "brace-expansion": { 524 | "version": "1.1.8", 525 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 526 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 527 | "requires": { 528 | "balanced-match": "1.0.0", 529 | "concat-map": "0.0.1" 530 | } 531 | }, 532 | "buffer-equal": { 533 | "version": "1.0.0", 534 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", 535 | "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" 536 | }, 537 | "buffer-equal-constant-time": { 538 | "version": "1.0.1", 539 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 540 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 541 | }, 542 | "bun": { 543 | "version": "0.0.12", 544 | "resolved": "https://registry.npmjs.org/bun/-/bun-0.0.12.tgz", 545 | "integrity": "sha512-Toms18J9DqnT+IfWkwxVTB2EaBprHvjlMWrTIsfX4xbu3ZBqVBwrERU0em1IgtRe04wT+wJxMlKHZok24hrcSQ==", 546 | "requires": { 547 | "readable-stream": "1.0.34" 548 | }, 549 | "dependencies": { 550 | "isarray": { 551 | "version": "0.0.1", 552 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 553 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 554 | }, 555 | "readable-stream": { 556 | "version": "1.0.34", 557 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 558 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 559 | "requires": { 560 | "core-util-is": "1.0.2", 561 | "inherits": "2.0.3", 562 | "isarray": "0.0.1", 563 | "string_decoder": "0.10.31" 564 | } 565 | }, 566 | "string_decoder": { 567 | "version": "0.10.31", 568 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 569 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 570 | } 571 | } 572 | }, 573 | "bytebuffer": { 574 | "version": "5.0.1", 575 | "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", 576 | "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", 577 | "requires": { 578 | "long": "3.2.0" 579 | } 580 | }, 581 | "camelcase": { 582 | "version": "2.1.1", 583 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 584 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" 585 | }, 586 | "capture-stack-trace": { 587 | "version": "1.0.0", 588 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", 589 | "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" 590 | }, 591 | "caseless": { 592 | "version": "0.12.0", 593 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 594 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 595 | }, 596 | "cliui": { 597 | "version": "3.2.0", 598 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 599 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 600 | "requires": { 601 | "string-width": "1.0.2", 602 | "strip-ansi": "3.0.1", 603 | "wrap-ansi": "2.1.0" 604 | } 605 | }, 606 | "co": { 607 | "version": "4.6.0", 608 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 609 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 610 | }, 611 | "code-point-at": { 612 | "version": "1.1.0", 613 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 614 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 615 | }, 616 | "colour": { 617 | "version": "0.7.1", 618 | "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", 619 | "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" 620 | }, 621 | "combined-stream": { 622 | "version": "1.0.5", 623 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 624 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 625 | "requires": { 626 | "delayed-stream": "1.0.0" 627 | } 628 | }, 629 | "concat-map": { 630 | "version": "0.0.1", 631 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 632 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 633 | }, 634 | "concat-stream": { 635 | "version": "1.6.0", 636 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 637 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 638 | "requires": { 639 | "inherits": "2.0.3", 640 | "readable-stream": "2.3.3", 641 | "typedarray": "0.0.6" 642 | } 643 | }, 644 | "configstore": { 645 | "version": "3.1.1", 646 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", 647 | "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", 648 | "requires": { 649 | "dot-prop": "4.2.0", 650 | "graceful-fs": "4.1.11", 651 | "make-dir": "1.0.0", 652 | "unique-string": "1.0.0", 653 | "write-file-atomic": "2.3.0", 654 | "xdg-basedir": "3.0.0" 655 | }, 656 | "dependencies": { 657 | "dot-prop": { 658 | "version": "4.2.0", 659 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 660 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 661 | "requires": { 662 | "is-obj": "1.0.1" 663 | } 664 | } 665 | } 666 | }, 667 | "core-util-is": { 668 | "version": "1.0.2", 669 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 670 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 671 | }, 672 | "create-error-class": { 673 | "version": "3.0.2", 674 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 675 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 676 | "requires": { 677 | "capture-stack-trace": "1.0.0" 678 | } 679 | }, 680 | "cryptiles": { 681 | "version": "3.1.2", 682 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 683 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 684 | "requires": { 685 | "boom": "5.2.0" 686 | }, 687 | "dependencies": { 688 | "boom": { 689 | "version": "5.2.0", 690 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 691 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 692 | "requires": { 693 | "hoek": "4.2.0" 694 | } 695 | } 696 | } 697 | }, 698 | "crypto-random-string": { 699 | "version": "1.0.0", 700 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 701 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" 702 | }, 703 | "dashdash": { 704 | "version": "1.14.1", 705 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 706 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 707 | "requires": { 708 | "assert-plus": "1.0.0" 709 | } 710 | }, 711 | "decamelize": { 712 | "version": "1.2.0", 713 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 714 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 715 | }, 716 | "delayed-stream": { 717 | "version": "1.0.0", 718 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 719 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 720 | }, 721 | "dot-prop": { 722 | "version": "2.4.0", 723 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-2.4.0.tgz", 724 | "integrity": "sha1-hI4o9/HVB0DGdHqzywdnBGK2+Jw=", 725 | "requires": { 726 | "is-obj": "1.0.1" 727 | } 728 | }, 729 | "duplexify": { 730 | "version": "3.5.1", 731 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", 732 | "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", 733 | "requires": { 734 | "end-of-stream": "1.4.0", 735 | "inherits": "2.0.3", 736 | "readable-stream": "2.3.3", 737 | "stream-shift": "1.0.0" 738 | } 739 | }, 740 | "ecc-jsbn": { 741 | "version": "0.1.1", 742 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 743 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 744 | "optional": true, 745 | "requires": { 746 | "jsbn": "0.1.1" 747 | } 748 | }, 749 | "ecdsa-sig-formatter": { 750 | "version": "1.0.9", 751 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", 752 | "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", 753 | "requires": { 754 | "base64url": "2.0.0", 755 | "safe-buffer": "5.1.1" 756 | } 757 | }, 758 | "end-of-stream": { 759 | "version": "1.4.0", 760 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", 761 | "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", 762 | "requires": { 763 | "once": "1.4.0" 764 | } 765 | }, 766 | "ent": { 767 | "version": "2.2.0", 768 | "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", 769 | "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" 770 | }, 771 | "extend": { 772 | "version": "3.0.1", 773 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 774 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 775 | }, 776 | "extsprintf": { 777 | "version": "1.3.0", 778 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 779 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 780 | }, 781 | "fast-deep-equal": { 782 | "version": "1.0.0", 783 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 784 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" 785 | }, 786 | "faye-websocket": { 787 | "version": "0.9.3", 788 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", 789 | "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", 790 | "requires": { 791 | "websocket-driver": "0.7.0" 792 | } 793 | }, 794 | "forever-agent": { 795 | "version": "0.6.1", 796 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 797 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 798 | }, 799 | "form-data": { 800 | "version": "2.3.1", 801 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 802 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 803 | "requires": { 804 | "asynckit": "0.4.0", 805 | "combined-stream": "1.0.5", 806 | "mime-types": "2.1.17" 807 | } 808 | }, 809 | "fs.realpath": { 810 | "version": "1.0.0", 811 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 812 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 813 | }, 814 | "functional-red-black-tree": { 815 | "version": "1.0.1", 816 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 817 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" 818 | }, 819 | "gcp-metadata": { 820 | "version": "0.3.1", 821 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.3.1.tgz", 822 | "integrity": "sha512-5kJPX/RXuqoLmHiOOgkSDk/LI0QaXpEvZ3pvQP4ifjGGDKZKVSOjL/GcDjXA5kLxppFCOjmmsu0Uoop9d1upaQ==", 823 | "requires": { 824 | "extend": "3.0.1", 825 | "retry-request": "3.0.0" 826 | } 827 | }, 828 | "gcs-resumable-upload": { 829 | "version": "0.8.2", 830 | "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-0.8.2.tgz", 831 | "integrity": "sha512-PBl1OFABYxubxfYPh000I0+JLbQzBRtNqxzgxYboIQk2tdw7BvjJ2dVukk3YH4QM6GiUwqItyNqWBuxjLH8GhA==", 832 | "requires": { 833 | "buffer-equal": "1.0.0", 834 | "configstore": "3.1.1", 835 | "google-auto-auth": "0.7.2", 836 | "pumpify": "1.3.5", 837 | "request": "2.83.0", 838 | "stream-events": "1.0.2", 839 | "through2": "2.0.3" 840 | } 841 | }, 842 | "getpass": { 843 | "version": "0.1.7", 844 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 845 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 846 | "requires": { 847 | "assert-plus": "1.0.0" 848 | } 849 | }, 850 | "glob": { 851 | "version": "7.1.2", 852 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 853 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 854 | "requires": { 855 | "fs.realpath": "1.0.0", 856 | "inflight": "1.0.6", 857 | "inherits": "2.0.3", 858 | "minimatch": "3.0.4", 859 | "once": "1.4.0", 860 | "path-is-absolute": "1.0.1" 861 | } 862 | }, 863 | "globby": { 864 | "version": "6.1.0", 865 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 866 | "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", 867 | "requires": { 868 | "array-union": "1.0.2", 869 | "glob": "7.1.2", 870 | "object-assign": "4.1.1", 871 | "pify": "2.3.0", 872 | "pinkie-promise": "2.0.1" 873 | } 874 | }, 875 | "google-auth-library": { 876 | "version": "0.10.0", 877 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-0.10.0.tgz", 878 | "integrity": "sha1-bhW6vuhf0d0U2NEoopW2g41SE24=", 879 | "requires": { 880 | "gtoken": "1.2.2", 881 | "jws": "3.1.4", 882 | "lodash.noop": "3.0.1", 883 | "request": "2.83.0" 884 | } 885 | }, 886 | "google-auto-auth": { 887 | "version": "0.7.2", 888 | "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.7.2.tgz", 889 | "integrity": "sha512-ux2n2AE2g3+vcLXwL4dP/M12SFMRX5dzCzBfhAEkTeAB7dpyGdOIEj7nmUx0BHKaCcUQrRWg9kT63X/Mmtk1+A==", 890 | "requires": { 891 | "async": "2.5.0", 892 | "gcp-metadata": "0.3.1", 893 | "google-auth-library": "0.10.0", 894 | "request": "2.83.0" 895 | } 896 | }, 897 | "google-gax": { 898 | "version": "0.14.1", 899 | "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-0.14.1.tgz", 900 | "integrity": "sha1-/oj7nVAw0mJ3xjUIp5r3s3F54Tk=", 901 | "requires": { 902 | "extend": "3.0.1", 903 | "globby": "6.1.0", 904 | "google-auto-auth": "0.5.4", 905 | "google-proto-files": "0.13.1", 906 | "grpc": "1.6.6", 907 | "is-stream-ended": "0.1.3", 908 | "lodash": "4.17.4", 909 | "process-nextick-args": "1.0.7", 910 | "protobufjs": "6.8.0", 911 | "readable-stream": "2.3.3", 912 | "through2": "2.0.3" 913 | }, 914 | "dependencies": { 915 | "@types/node": { 916 | "version": "7.0.43", 917 | "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.43.tgz", 918 | "integrity": "sha512-7scYwwfHNppXvH/9JzakbVxk0o0QUILVk1Lv64GRaxwPuGpnF1QBiwdvhDpLcymb8BpomQL3KYoWKq3wUdDMhQ==" 919 | }, 920 | "google-auto-auth": { 921 | "version": "0.5.4", 922 | "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.5.4.tgz", 923 | "integrity": "sha1-HYbHko1jPnWpwasDSlJ+/M5KQLE=", 924 | "requires": { 925 | "async": "2.5.0", 926 | "google-auth-library": "0.10.0", 927 | "object-assign": "3.0.0", 928 | "request": "2.83.0" 929 | } 930 | }, 931 | "object-assign": { 932 | "version": "3.0.0", 933 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", 934 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" 935 | }, 936 | "protobufjs": { 937 | "version": "6.8.0", 938 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.0.tgz", 939 | "integrity": "sha512-47Y49f5JN5Qsbxas2TyI2zFO8j9GpQAQm5thf54fr2O8qcP/jkIXYxmYx1hN2WQFAhESU1xpVn5NWVDBB8WFnw==", 940 | "requires": { 941 | "@protobufjs/aspromise": "1.1.2", 942 | "@protobufjs/base64": "1.1.2", 943 | "@protobufjs/codegen": "2.0.4", 944 | "@protobufjs/eventemitter": "1.1.0", 945 | "@protobufjs/fetch": "1.1.0", 946 | "@protobufjs/float": "1.0.2", 947 | "@protobufjs/inquire": "1.1.0", 948 | "@protobufjs/path": "1.1.2", 949 | "@protobufjs/pool": "1.1.0", 950 | "@protobufjs/utf8": "1.1.0", 951 | "@types/long": "3.0.32", 952 | "@types/node": "7.0.43", 953 | "long": "3.2.0" 954 | } 955 | } 956 | } 957 | }, 958 | "google-p12-pem": { 959 | "version": "0.1.2", 960 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-0.1.2.tgz", 961 | "integrity": "sha1-M8RqsCGqc0+gMys5YKmj/8svMXc=", 962 | "requires": { 963 | "node-forge": "0.7.1" 964 | } 965 | }, 966 | "google-proto-files": { 967 | "version": "0.13.1", 968 | "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-0.13.1.tgz", 969 | "integrity": "sha512-CivI3rZ85dMPTCAyxq6lq9s7vDkeWEIFxweopC1vEjjRmFMJwOX/MOmFZ90a0BGal/Dsb63vq7Ael9ryeokz0g==" 970 | }, 971 | "graceful-fs": { 972 | "version": "4.1.11", 973 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 974 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 975 | }, 976 | "grpc": { 977 | "version": "1.6.6", 978 | "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.6.6.tgz", 979 | "integrity": "sha1-IFF4T2vWE0aB+ixLXnXcgsbCP/o=", 980 | "requires": { 981 | "arguejs": "0.2.3", 982 | "lodash": "4.17.4", 983 | "nan": "2.7.0", 984 | "node-pre-gyp": "0.6.38", 985 | "protobufjs": "5.0.2" 986 | }, 987 | "dependencies": { 988 | "abbrev": { 989 | "version": "1.1.1", 990 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 991 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 992 | }, 993 | "ajv": { 994 | "version": "4.11.8", 995 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 996 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 997 | "requires": { 998 | "co": "4.6.0", 999 | "json-stable-stringify": "1.0.1" 1000 | } 1001 | }, 1002 | "ansi-regex": { 1003 | "version": "2.1.1", 1004 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1005 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 1006 | }, 1007 | "aproba": { 1008 | "version": "1.2.0", 1009 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 1010 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 1011 | }, 1012 | "are-we-there-yet": { 1013 | "version": "1.1.4", 1014 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", 1015 | "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", 1016 | "requires": { 1017 | "delegates": "1.0.0", 1018 | "readable-stream": "2.3.3" 1019 | } 1020 | }, 1021 | "asn1": { 1022 | "version": "0.2.3", 1023 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 1024 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 1025 | }, 1026 | "assert-plus": { 1027 | "version": "0.2.0", 1028 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 1029 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" 1030 | }, 1031 | "asynckit": { 1032 | "version": "0.4.0", 1033 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1034 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1035 | }, 1036 | "aws-sign2": { 1037 | "version": "0.6.0", 1038 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 1039 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" 1040 | }, 1041 | "aws4": { 1042 | "version": "1.6.0", 1043 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 1044 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 1045 | }, 1046 | "balanced-match": { 1047 | "version": "1.0.0", 1048 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1049 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 1050 | }, 1051 | "bcrypt-pbkdf": { 1052 | "version": "1.0.1", 1053 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 1054 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 1055 | "optional": true, 1056 | "requires": { 1057 | "tweetnacl": "0.14.5" 1058 | } 1059 | }, 1060 | "block-stream": { 1061 | "version": "0.0.9", 1062 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 1063 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 1064 | "requires": { 1065 | "inherits": "2.0.3" 1066 | } 1067 | }, 1068 | "boom": { 1069 | "version": "2.10.1", 1070 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 1071 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 1072 | "requires": { 1073 | "hoek": "2.16.3" 1074 | } 1075 | }, 1076 | "brace-expansion": { 1077 | "version": "1.1.8", 1078 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 1079 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 1080 | "requires": { 1081 | "balanced-match": "1.0.0", 1082 | "concat-map": "0.0.1" 1083 | } 1084 | }, 1085 | "caseless": { 1086 | "version": "0.12.0", 1087 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1088 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1089 | }, 1090 | "co": { 1091 | "version": "4.6.0", 1092 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1093 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 1094 | }, 1095 | "code-point-at": { 1096 | "version": "1.1.0", 1097 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 1098 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 1099 | }, 1100 | "combined-stream": { 1101 | "version": "1.0.5", 1102 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 1103 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 1104 | "requires": { 1105 | "delayed-stream": "1.0.0" 1106 | } 1107 | }, 1108 | "concat-map": { 1109 | "version": "0.0.1", 1110 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1111 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1112 | }, 1113 | "console-control-strings": { 1114 | "version": "1.1.0", 1115 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 1116 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 1117 | }, 1118 | "core-util-is": { 1119 | "version": "1.0.2", 1120 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1121 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1122 | }, 1123 | "cryptiles": { 1124 | "version": "2.0.5", 1125 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 1126 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 1127 | "requires": { 1128 | "boom": "2.10.1" 1129 | } 1130 | }, 1131 | "dashdash": { 1132 | "version": "1.14.1", 1133 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1134 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1135 | "requires": { 1136 | "assert-plus": "1.0.0" 1137 | }, 1138 | "dependencies": { 1139 | "assert-plus": { 1140 | "version": "1.0.0", 1141 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1142 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1143 | } 1144 | } 1145 | }, 1146 | "debug": { 1147 | "version": "2.6.9", 1148 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1149 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1150 | "requires": { 1151 | "ms": "2.0.0" 1152 | } 1153 | }, 1154 | "deep-extend": { 1155 | "version": "0.4.2", 1156 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", 1157 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" 1158 | }, 1159 | "delayed-stream": { 1160 | "version": "1.0.0", 1161 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1162 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1163 | }, 1164 | "delegates": { 1165 | "version": "1.0.0", 1166 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 1167 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 1168 | }, 1169 | "ecc-jsbn": { 1170 | "version": "0.1.1", 1171 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 1172 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 1173 | "optional": true, 1174 | "requires": { 1175 | "jsbn": "0.1.1" 1176 | } 1177 | }, 1178 | "extend": { 1179 | "version": "3.0.1", 1180 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 1181 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 1182 | }, 1183 | "extsprintf": { 1184 | "version": "1.3.0", 1185 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1186 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1187 | }, 1188 | "forever-agent": { 1189 | "version": "0.6.1", 1190 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1191 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1192 | }, 1193 | "form-data": { 1194 | "version": "2.1.4", 1195 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 1196 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 1197 | "requires": { 1198 | "asynckit": "0.4.0", 1199 | "combined-stream": "1.0.5", 1200 | "mime-types": "2.1.17" 1201 | } 1202 | }, 1203 | "fs.realpath": { 1204 | "version": "1.0.0", 1205 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1206 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1207 | }, 1208 | "fstream": { 1209 | "version": "1.0.11", 1210 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", 1211 | "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", 1212 | "requires": { 1213 | "graceful-fs": "4.1.11", 1214 | "inherits": "2.0.3", 1215 | "mkdirp": "0.5.1", 1216 | "rimraf": "2.6.2" 1217 | } 1218 | }, 1219 | "fstream-ignore": { 1220 | "version": "1.0.5", 1221 | "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", 1222 | "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", 1223 | "requires": { 1224 | "fstream": "1.0.11", 1225 | "inherits": "2.0.3", 1226 | "minimatch": "3.0.4" 1227 | } 1228 | }, 1229 | "gauge": { 1230 | "version": "2.7.4", 1231 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 1232 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 1233 | "requires": { 1234 | "aproba": "1.2.0", 1235 | "console-control-strings": "1.1.0", 1236 | "has-unicode": "2.0.1", 1237 | "object-assign": "4.1.1", 1238 | "signal-exit": "3.0.2", 1239 | "string-width": "1.0.2", 1240 | "strip-ansi": "3.0.1", 1241 | "wide-align": "1.1.2" 1242 | } 1243 | }, 1244 | "getpass": { 1245 | "version": "0.1.7", 1246 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1247 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1248 | "requires": { 1249 | "assert-plus": "1.0.0" 1250 | }, 1251 | "dependencies": { 1252 | "assert-plus": { 1253 | "version": "1.0.0", 1254 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1255 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1256 | } 1257 | } 1258 | }, 1259 | "glob": { 1260 | "version": "7.1.2", 1261 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1262 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1263 | "requires": { 1264 | "fs.realpath": "1.0.0", 1265 | "inflight": "1.0.6", 1266 | "inherits": "2.0.3", 1267 | "minimatch": "3.0.4", 1268 | "once": "1.4.0", 1269 | "path-is-absolute": "1.0.1" 1270 | } 1271 | }, 1272 | "graceful-fs": { 1273 | "version": "4.1.11", 1274 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1275 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 1276 | }, 1277 | "har-schema": { 1278 | "version": "1.0.5", 1279 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", 1280 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" 1281 | }, 1282 | "har-validator": { 1283 | "version": "4.2.1", 1284 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", 1285 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", 1286 | "requires": { 1287 | "ajv": "4.11.8", 1288 | "har-schema": "1.0.5" 1289 | } 1290 | }, 1291 | "has-unicode": { 1292 | "version": "2.0.1", 1293 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1294 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 1295 | }, 1296 | "hawk": { 1297 | "version": "3.1.3", 1298 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1299 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1300 | "requires": { 1301 | "boom": "2.10.1", 1302 | "cryptiles": "2.0.5", 1303 | "hoek": "2.16.3", 1304 | "sntp": "1.0.9" 1305 | } 1306 | }, 1307 | "hoek": { 1308 | "version": "2.16.3", 1309 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1310 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 1311 | }, 1312 | "http-signature": { 1313 | "version": "1.1.1", 1314 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1315 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1316 | "requires": { 1317 | "assert-plus": "0.2.0", 1318 | "jsprim": "1.4.1", 1319 | "sshpk": "1.13.1" 1320 | } 1321 | }, 1322 | "inflight": { 1323 | "version": "1.0.6", 1324 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1325 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1326 | "requires": { 1327 | "once": "1.4.0", 1328 | "wrappy": "1.0.2" 1329 | } 1330 | }, 1331 | "inherits": { 1332 | "version": "2.0.3", 1333 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1334 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1335 | }, 1336 | "ini": { 1337 | "version": "1.3.4", 1338 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 1339 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" 1340 | }, 1341 | "is-fullwidth-code-point": { 1342 | "version": "1.0.0", 1343 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1344 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1345 | "requires": { 1346 | "number-is-nan": "1.0.1" 1347 | } 1348 | }, 1349 | "is-typedarray": { 1350 | "version": "1.0.0", 1351 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1352 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1353 | }, 1354 | "isarray": { 1355 | "version": "1.0.0", 1356 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1357 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1358 | }, 1359 | "isstream": { 1360 | "version": "0.1.2", 1361 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1362 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1363 | }, 1364 | "jsbn": { 1365 | "version": "0.1.1", 1366 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1367 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1368 | "optional": true 1369 | }, 1370 | "json-schema": { 1371 | "version": "0.2.3", 1372 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1373 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1374 | }, 1375 | "json-stable-stringify": { 1376 | "version": "1.0.1", 1377 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1378 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1379 | "requires": { 1380 | "jsonify": "0.0.0" 1381 | } 1382 | }, 1383 | "json-stringify-safe": { 1384 | "version": "5.0.1", 1385 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1386 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1387 | }, 1388 | "jsonify": { 1389 | "version": "0.0.0", 1390 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1391 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 1392 | }, 1393 | "jsprim": { 1394 | "version": "1.4.1", 1395 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1396 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1397 | "requires": { 1398 | "assert-plus": "1.0.0", 1399 | "extsprintf": "1.3.0", 1400 | "json-schema": "0.2.3", 1401 | "verror": "1.10.0" 1402 | }, 1403 | "dependencies": { 1404 | "assert-plus": { 1405 | "version": "1.0.0", 1406 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1407 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1408 | } 1409 | } 1410 | }, 1411 | "mime-db": { 1412 | "version": "1.30.0", 1413 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 1414 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 1415 | }, 1416 | "mime-types": { 1417 | "version": "2.1.17", 1418 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 1419 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 1420 | "requires": { 1421 | "mime-db": "1.30.0" 1422 | } 1423 | }, 1424 | "minimatch": { 1425 | "version": "3.0.4", 1426 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1427 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1428 | "requires": { 1429 | "brace-expansion": "1.1.8" 1430 | } 1431 | }, 1432 | "minimist": { 1433 | "version": "1.2.0", 1434 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1435 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 1436 | }, 1437 | "mkdirp": { 1438 | "version": "0.5.1", 1439 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1440 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1441 | "requires": { 1442 | "minimist": "0.0.8" 1443 | }, 1444 | "dependencies": { 1445 | "minimist": { 1446 | "version": "0.0.8", 1447 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1448 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1449 | } 1450 | } 1451 | }, 1452 | "ms": { 1453 | "version": "2.0.0", 1454 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1455 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1456 | }, 1457 | "node-pre-gyp": { 1458 | "version": "0.6.38", 1459 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz", 1460 | "integrity": "sha1-6Sog+DQWQVu0CG9tH7eLPac9ET0=", 1461 | "requires": { 1462 | "hawk": "3.1.3", 1463 | "mkdirp": "0.5.1", 1464 | "nopt": "4.0.1", 1465 | "npmlog": "4.1.2", 1466 | "rc": "1.2.1", 1467 | "request": "2.81.0", 1468 | "rimraf": "2.6.2", 1469 | "semver": "5.4.1", 1470 | "tar": "2.2.1", 1471 | "tar-pack": "3.4.0" 1472 | } 1473 | }, 1474 | "nopt": { 1475 | "version": "4.0.1", 1476 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 1477 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 1478 | "requires": { 1479 | "abbrev": "1.1.1", 1480 | "osenv": "0.1.4" 1481 | } 1482 | }, 1483 | "npmlog": { 1484 | "version": "4.1.2", 1485 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 1486 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 1487 | "requires": { 1488 | "are-we-there-yet": "1.1.4", 1489 | "console-control-strings": "1.1.0", 1490 | "gauge": "2.7.4", 1491 | "set-blocking": "2.0.0" 1492 | } 1493 | }, 1494 | "number-is-nan": { 1495 | "version": "1.0.1", 1496 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1497 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1498 | }, 1499 | "oauth-sign": { 1500 | "version": "0.8.2", 1501 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1502 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 1503 | }, 1504 | "object-assign": { 1505 | "version": "4.1.1", 1506 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1507 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1508 | }, 1509 | "once": { 1510 | "version": "1.4.0", 1511 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1512 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1513 | "requires": { 1514 | "wrappy": "1.0.2" 1515 | } 1516 | }, 1517 | "os-homedir": { 1518 | "version": "1.0.2", 1519 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1520 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 1521 | }, 1522 | "os-tmpdir": { 1523 | "version": "1.0.2", 1524 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1525 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1526 | }, 1527 | "osenv": { 1528 | "version": "0.1.4", 1529 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", 1530 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", 1531 | "requires": { 1532 | "os-homedir": "1.0.2", 1533 | "os-tmpdir": "1.0.2" 1534 | } 1535 | }, 1536 | "path-is-absolute": { 1537 | "version": "1.0.1", 1538 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1539 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1540 | }, 1541 | "performance-now": { 1542 | "version": "0.2.0", 1543 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", 1544 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" 1545 | }, 1546 | "process-nextick-args": { 1547 | "version": "1.0.7", 1548 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1549 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1550 | }, 1551 | "punycode": { 1552 | "version": "1.4.1", 1553 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1554 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1555 | }, 1556 | "qs": { 1557 | "version": "6.4.0", 1558 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 1559 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" 1560 | }, 1561 | "rc": { 1562 | "version": "1.2.1", 1563 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", 1564 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", 1565 | "requires": { 1566 | "deep-extend": "0.4.2", 1567 | "ini": "1.3.4", 1568 | "minimist": "1.2.0", 1569 | "strip-json-comments": "2.0.1" 1570 | } 1571 | }, 1572 | "readable-stream": { 1573 | "version": "2.3.3", 1574 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1575 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1576 | "requires": { 1577 | "core-util-is": "1.0.2", 1578 | "inherits": "2.0.3", 1579 | "isarray": "1.0.0", 1580 | "process-nextick-args": "1.0.7", 1581 | "safe-buffer": "5.1.1", 1582 | "string_decoder": "1.0.3", 1583 | "util-deprecate": "1.0.2" 1584 | } 1585 | }, 1586 | "request": { 1587 | "version": "2.81.0", 1588 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", 1589 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", 1590 | "requires": { 1591 | "aws-sign2": "0.6.0", 1592 | "aws4": "1.6.0", 1593 | "caseless": "0.12.0", 1594 | "combined-stream": "1.0.5", 1595 | "extend": "3.0.1", 1596 | "forever-agent": "0.6.1", 1597 | "form-data": "2.1.4", 1598 | "har-validator": "4.2.1", 1599 | "hawk": "3.1.3", 1600 | "http-signature": "1.1.1", 1601 | "is-typedarray": "1.0.0", 1602 | "isstream": "0.1.2", 1603 | "json-stringify-safe": "5.0.1", 1604 | "mime-types": "2.1.17", 1605 | "oauth-sign": "0.8.2", 1606 | "performance-now": "0.2.0", 1607 | "qs": "6.4.0", 1608 | "safe-buffer": "5.1.1", 1609 | "stringstream": "0.0.5", 1610 | "tough-cookie": "2.3.3", 1611 | "tunnel-agent": "0.6.0", 1612 | "uuid": "3.1.0" 1613 | } 1614 | }, 1615 | "rimraf": { 1616 | "version": "2.6.2", 1617 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1618 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1619 | "requires": { 1620 | "glob": "7.1.2" 1621 | } 1622 | }, 1623 | "safe-buffer": { 1624 | "version": "5.1.1", 1625 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1626 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 1627 | }, 1628 | "semver": { 1629 | "version": "5.4.1", 1630 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 1631 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" 1632 | }, 1633 | "set-blocking": { 1634 | "version": "2.0.0", 1635 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1636 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1637 | }, 1638 | "signal-exit": { 1639 | "version": "3.0.2", 1640 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1641 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1642 | }, 1643 | "sntp": { 1644 | "version": "1.0.9", 1645 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 1646 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 1647 | "requires": { 1648 | "hoek": "2.16.3" 1649 | } 1650 | }, 1651 | "sshpk": { 1652 | "version": "1.13.1", 1653 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 1654 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 1655 | "requires": { 1656 | "asn1": "0.2.3", 1657 | "assert-plus": "1.0.0", 1658 | "bcrypt-pbkdf": "1.0.1", 1659 | "dashdash": "1.14.1", 1660 | "ecc-jsbn": "0.1.1", 1661 | "getpass": "0.1.7", 1662 | "jsbn": "0.1.1", 1663 | "tweetnacl": "0.14.5" 1664 | }, 1665 | "dependencies": { 1666 | "assert-plus": { 1667 | "version": "1.0.0", 1668 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1669 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1670 | } 1671 | } 1672 | }, 1673 | "string-width": { 1674 | "version": "1.0.2", 1675 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1676 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1677 | "requires": { 1678 | "code-point-at": "1.1.0", 1679 | "is-fullwidth-code-point": "1.0.0", 1680 | "strip-ansi": "3.0.1" 1681 | } 1682 | }, 1683 | "string_decoder": { 1684 | "version": "1.0.3", 1685 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1686 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1687 | "requires": { 1688 | "safe-buffer": "5.1.1" 1689 | } 1690 | }, 1691 | "stringstream": { 1692 | "version": "0.0.5", 1693 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 1694 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 1695 | }, 1696 | "strip-ansi": { 1697 | "version": "3.0.1", 1698 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1699 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1700 | "requires": { 1701 | "ansi-regex": "2.1.1" 1702 | } 1703 | }, 1704 | "strip-json-comments": { 1705 | "version": "2.0.1", 1706 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1707 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 1708 | }, 1709 | "tar": { 1710 | "version": "2.2.1", 1711 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 1712 | "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", 1713 | "requires": { 1714 | "block-stream": "0.0.9", 1715 | "fstream": "1.0.11", 1716 | "inherits": "2.0.3" 1717 | } 1718 | }, 1719 | "tar-pack": { 1720 | "version": "3.4.0", 1721 | "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", 1722 | "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", 1723 | "requires": { 1724 | "debug": "2.6.9", 1725 | "fstream": "1.0.11", 1726 | "fstream-ignore": "1.0.5", 1727 | "once": "1.4.0", 1728 | "readable-stream": "2.3.3", 1729 | "rimraf": "2.6.2", 1730 | "tar": "2.2.1", 1731 | "uid-number": "0.0.6" 1732 | } 1733 | }, 1734 | "tough-cookie": { 1735 | "version": "2.3.3", 1736 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 1737 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 1738 | "requires": { 1739 | "punycode": "1.4.1" 1740 | } 1741 | }, 1742 | "tunnel-agent": { 1743 | "version": "0.6.0", 1744 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1745 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1746 | "requires": { 1747 | "safe-buffer": "5.1.1" 1748 | } 1749 | }, 1750 | "tweetnacl": { 1751 | "version": "0.14.5", 1752 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1753 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1754 | "optional": true 1755 | }, 1756 | "uid-number": { 1757 | "version": "0.0.6", 1758 | "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", 1759 | "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" 1760 | }, 1761 | "util-deprecate": { 1762 | "version": "1.0.2", 1763 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1764 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1765 | }, 1766 | "uuid": { 1767 | "version": "3.1.0", 1768 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 1769 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 1770 | }, 1771 | "verror": { 1772 | "version": "1.10.0", 1773 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1774 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1775 | "requires": { 1776 | "assert-plus": "1.0.0", 1777 | "core-util-is": "1.0.2", 1778 | "extsprintf": "1.3.0" 1779 | }, 1780 | "dependencies": { 1781 | "assert-plus": { 1782 | "version": "1.0.0", 1783 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1784 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1785 | } 1786 | } 1787 | }, 1788 | "wide-align": { 1789 | "version": "1.1.2", 1790 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", 1791 | "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", 1792 | "requires": { 1793 | "string-width": "1.0.2" 1794 | } 1795 | }, 1796 | "wrappy": { 1797 | "version": "1.0.2", 1798 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1799 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1800 | } 1801 | } 1802 | }, 1803 | "gtoken": { 1804 | "version": "1.2.2", 1805 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-1.2.2.tgz", 1806 | "integrity": "sha1-Fyd2oanZasCfwioA9b6DzubeiCA=", 1807 | "requires": { 1808 | "google-p12-pem": "0.1.2", 1809 | "jws": "3.1.4", 1810 | "mime": "1.4.1", 1811 | "request": "2.83.0" 1812 | } 1813 | }, 1814 | "har-schema": { 1815 | "version": "2.0.0", 1816 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1817 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1818 | }, 1819 | "har-validator": { 1820 | "version": "5.0.3", 1821 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 1822 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 1823 | "requires": { 1824 | "ajv": "5.2.3", 1825 | "har-schema": "2.0.0" 1826 | } 1827 | }, 1828 | "hash-stream-validation": { 1829 | "version": "0.2.1", 1830 | "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz", 1831 | "integrity": "sha1-7Mm5l7IYvluzEphii7gHhptz3NE=", 1832 | "requires": { 1833 | "through2": "2.0.3" 1834 | } 1835 | }, 1836 | "hawk": { 1837 | "version": "6.0.2", 1838 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 1839 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 1840 | "requires": { 1841 | "boom": "4.3.1", 1842 | "cryptiles": "3.1.2", 1843 | "hoek": "4.2.0", 1844 | "sntp": "2.0.2" 1845 | } 1846 | }, 1847 | "hoek": { 1848 | "version": "4.2.0", 1849 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1850 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1851 | }, 1852 | "http-parser-js": { 1853 | "version": "0.4.9", 1854 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", 1855 | "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=" 1856 | }, 1857 | "http-signature": { 1858 | "version": "1.2.0", 1859 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1860 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1861 | "requires": { 1862 | "assert-plus": "1.0.0", 1863 | "jsprim": "1.4.1", 1864 | "sshpk": "1.13.1" 1865 | } 1866 | }, 1867 | "imurmurhash": { 1868 | "version": "0.1.4", 1869 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1870 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 1871 | }, 1872 | "inflight": { 1873 | "version": "1.0.6", 1874 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1875 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1876 | "requires": { 1877 | "once": "1.4.0", 1878 | "wrappy": "1.0.2" 1879 | } 1880 | }, 1881 | "inherits": { 1882 | "version": "2.0.3", 1883 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1884 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1885 | }, 1886 | "invert-kv": { 1887 | "version": "1.0.0", 1888 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 1889 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" 1890 | }, 1891 | "is": { 1892 | "version": "3.2.1", 1893 | "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", 1894 | "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" 1895 | }, 1896 | "is-fullwidth-code-point": { 1897 | "version": "1.0.0", 1898 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1899 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1900 | "requires": { 1901 | "number-is-nan": "1.0.1" 1902 | } 1903 | }, 1904 | "is-obj": { 1905 | "version": "1.0.1", 1906 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1907 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 1908 | }, 1909 | "is-stream-ended": { 1910 | "version": "0.1.3", 1911 | "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.3.tgz", 1912 | "integrity": "sha1-oEc7Jnx1ZjVIa+7cfjNE5UnRUqw=" 1913 | }, 1914 | "is-typedarray": { 1915 | "version": "1.0.0", 1916 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1917 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1918 | }, 1919 | "isarray": { 1920 | "version": "1.0.0", 1921 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1922 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1923 | }, 1924 | "isemail": { 1925 | "version": "1.2.0", 1926 | "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", 1927 | "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" 1928 | }, 1929 | "isstream": { 1930 | "version": "0.1.2", 1931 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1932 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1933 | }, 1934 | "joi": { 1935 | "version": "6.10.1", 1936 | "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", 1937 | "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", 1938 | "requires": { 1939 | "hoek": "2.16.3", 1940 | "isemail": "1.2.0", 1941 | "moment": "2.18.1", 1942 | "topo": "1.1.0" 1943 | }, 1944 | "dependencies": { 1945 | "hoek": { 1946 | "version": "2.16.3", 1947 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1948 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 1949 | } 1950 | } 1951 | }, 1952 | "jsbn": { 1953 | "version": "0.1.1", 1954 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1955 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1956 | "optional": true 1957 | }, 1958 | "json-schema": { 1959 | "version": "0.2.3", 1960 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1961 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1962 | }, 1963 | "json-schema-traverse": { 1964 | "version": "0.3.1", 1965 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1966 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 1967 | }, 1968 | "json-stable-stringify": { 1969 | "version": "1.0.1", 1970 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1971 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1972 | "requires": { 1973 | "jsonify": "0.0.0" 1974 | } 1975 | }, 1976 | "json-stringify-safe": { 1977 | "version": "5.0.1", 1978 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1979 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1980 | }, 1981 | "jsonify": { 1982 | "version": "0.0.0", 1983 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1984 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 1985 | }, 1986 | "jsonwebtoken": { 1987 | "version": "7.1.9", 1988 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz", 1989 | "integrity": "sha1-hHgE5SWL7FqUmajcSl56O64I1Yo=", 1990 | "requires": { 1991 | "joi": "6.10.1", 1992 | "jws": "3.1.4", 1993 | "lodash.once": "4.1.1", 1994 | "ms": "0.7.3", 1995 | "xtend": "4.0.1" 1996 | } 1997 | }, 1998 | "jsprim": { 1999 | "version": "1.4.1", 2000 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 2001 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 2002 | "requires": { 2003 | "assert-plus": "1.0.0", 2004 | "extsprintf": "1.3.0", 2005 | "json-schema": "0.2.3", 2006 | "verror": "1.10.0" 2007 | } 2008 | }, 2009 | "jwa": { 2010 | "version": "1.1.5", 2011 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", 2012 | "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", 2013 | "requires": { 2014 | "base64url": "2.0.0", 2015 | "buffer-equal-constant-time": "1.0.1", 2016 | "ecdsa-sig-formatter": "1.0.9", 2017 | "safe-buffer": "5.1.1" 2018 | } 2019 | }, 2020 | "jws": { 2021 | "version": "3.1.4", 2022 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", 2023 | "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", 2024 | "requires": { 2025 | "base64url": "2.0.0", 2026 | "jwa": "1.1.5", 2027 | "safe-buffer": "5.1.1" 2028 | } 2029 | }, 2030 | "lcid": { 2031 | "version": "1.0.0", 2032 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 2033 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 2034 | "requires": { 2035 | "invert-kv": "1.0.0" 2036 | } 2037 | }, 2038 | "lodash": { 2039 | "version": "4.17.4", 2040 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2041 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 2042 | }, 2043 | "lodash.noop": { 2044 | "version": "3.0.1", 2045 | "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-3.0.1.tgz", 2046 | "integrity": "sha1-OBiPTWUKOkdCWEObluxFsyYXEzw=" 2047 | }, 2048 | "lodash.once": { 2049 | "version": "4.1.1", 2050 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 2051 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 2052 | }, 2053 | "log-driver": { 2054 | "version": "1.2.5", 2055 | "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", 2056 | "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=" 2057 | }, 2058 | "long": { 2059 | "version": "3.2.0", 2060 | "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", 2061 | "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" 2062 | }, 2063 | "make-dir": { 2064 | "version": "1.0.0", 2065 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", 2066 | "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", 2067 | "requires": { 2068 | "pify": "2.3.0" 2069 | } 2070 | }, 2071 | "methmeth": { 2072 | "version": "1.1.0", 2073 | "resolved": "https://registry.npmjs.org/methmeth/-/methmeth-1.1.0.tgz", 2074 | "integrity": "sha1-6AomYY5S9cQiKGG7dIUQvRDikIk=" 2075 | }, 2076 | "mime": { 2077 | "version": "1.4.1", 2078 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 2079 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 2080 | }, 2081 | "mime-db": { 2082 | "version": "1.30.0", 2083 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 2084 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 2085 | }, 2086 | "mime-types": { 2087 | "version": "2.1.17", 2088 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 2089 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 2090 | "requires": { 2091 | "mime-db": "1.30.0" 2092 | } 2093 | }, 2094 | "minimatch": { 2095 | "version": "3.0.4", 2096 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2097 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2098 | "requires": { 2099 | "brace-expansion": "1.1.8" 2100 | } 2101 | }, 2102 | "modelo": { 2103 | "version": "4.2.0", 2104 | "resolved": "https://registry.npmjs.org/modelo/-/modelo-4.2.0.tgz", 2105 | "integrity": "sha1-O0tCACOmbKfjK9uhbnEJN+FNGws=" 2106 | }, 2107 | "moment": { 2108 | "version": "2.18.1", 2109 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", 2110 | "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" 2111 | }, 2112 | "ms": { 2113 | "version": "0.7.3", 2114 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", 2115 | "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" 2116 | }, 2117 | "nan": { 2118 | "version": "2.7.0", 2119 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", 2120 | "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" 2121 | }, 2122 | "node-forge": { 2123 | "version": "0.7.1", 2124 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", 2125 | "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=" 2126 | }, 2127 | "number-is-nan": { 2128 | "version": "1.0.1", 2129 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2130 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2131 | }, 2132 | "oauth-sign": { 2133 | "version": "0.8.2", 2134 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2135 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 2136 | }, 2137 | "object-assign": { 2138 | "version": "4.1.1", 2139 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2140 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2141 | }, 2142 | "once": { 2143 | "version": "1.4.0", 2144 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2145 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2146 | "requires": { 2147 | "wrappy": "1.0.2" 2148 | } 2149 | }, 2150 | "optjs": { 2151 | "version": "3.2.2", 2152 | "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", 2153 | "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" 2154 | }, 2155 | "os-locale": { 2156 | "version": "1.4.0", 2157 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", 2158 | "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", 2159 | "requires": { 2160 | "lcid": "1.0.0" 2161 | } 2162 | }, 2163 | "path-is-absolute": { 2164 | "version": "1.0.1", 2165 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2166 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2167 | }, 2168 | "performance-now": { 2169 | "version": "2.1.0", 2170 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2171 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 2172 | }, 2173 | "pify": { 2174 | "version": "2.3.0", 2175 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2176 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 2177 | }, 2178 | "pinkie": { 2179 | "version": "2.0.4", 2180 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2181 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 2182 | }, 2183 | "pinkie-promise": { 2184 | "version": "2.0.1", 2185 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2186 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2187 | "requires": { 2188 | "pinkie": "2.0.4" 2189 | } 2190 | }, 2191 | "process-nextick-args": { 2192 | "version": "1.0.7", 2193 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2194 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 2195 | }, 2196 | "protobufjs": { 2197 | "version": "5.0.2", 2198 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz", 2199 | "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=", 2200 | "requires": { 2201 | "ascli": "1.0.1", 2202 | "bytebuffer": "5.0.1", 2203 | "glob": "7.1.2", 2204 | "yargs": "3.32.0" 2205 | } 2206 | }, 2207 | "pump": { 2208 | "version": "1.0.2", 2209 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", 2210 | "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", 2211 | "requires": { 2212 | "end-of-stream": "1.4.0", 2213 | "once": "1.4.0" 2214 | } 2215 | }, 2216 | "pumpify": { 2217 | "version": "1.3.5", 2218 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", 2219 | "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", 2220 | "requires": { 2221 | "duplexify": "3.5.1", 2222 | "inherits": "2.0.3", 2223 | "pump": "1.0.2" 2224 | } 2225 | }, 2226 | "punycode": { 2227 | "version": "1.4.1", 2228 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2229 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2230 | }, 2231 | "qs": { 2232 | "version": "6.5.1", 2233 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 2234 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 2235 | }, 2236 | "readable-stream": { 2237 | "version": "2.3.3", 2238 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2239 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2240 | "requires": { 2241 | "core-util-is": "1.0.2", 2242 | "inherits": "2.0.3", 2243 | "isarray": "1.0.0", 2244 | "process-nextick-args": "1.0.7", 2245 | "safe-buffer": "5.1.1", 2246 | "string_decoder": "1.0.3", 2247 | "util-deprecate": "1.0.2" 2248 | } 2249 | }, 2250 | "request": { 2251 | "version": "2.83.0", 2252 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 2253 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 2254 | "requires": { 2255 | "aws-sign2": "0.7.0", 2256 | "aws4": "1.6.0", 2257 | "caseless": "0.12.0", 2258 | "combined-stream": "1.0.5", 2259 | "extend": "3.0.1", 2260 | "forever-agent": "0.6.1", 2261 | "form-data": "2.3.1", 2262 | "har-validator": "5.0.3", 2263 | "hawk": "6.0.2", 2264 | "http-signature": "1.2.0", 2265 | "is-typedarray": "1.0.0", 2266 | "isstream": "0.1.2", 2267 | "json-stringify-safe": "5.0.1", 2268 | "mime-types": "2.1.17", 2269 | "oauth-sign": "0.8.2", 2270 | "performance-now": "2.1.0", 2271 | "qs": "6.5.1", 2272 | "safe-buffer": "5.1.1", 2273 | "stringstream": "0.0.5", 2274 | "tough-cookie": "2.3.3", 2275 | "tunnel-agent": "0.6.0", 2276 | "uuid": "3.1.0" 2277 | } 2278 | }, 2279 | "retry-request": { 2280 | "version": "3.0.0", 2281 | "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-3.0.0.tgz", 2282 | "integrity": "sha1-i60rHc8Ek4uyEeLO2GLlkbgvGRc=", 2283 | "requires": { 2284 | "request": "2.83.0", 2285 | "through2": "2.0.3" 2286 | } 2287 | }, 2288 | "safe-buffer": { 2289 | "version": "5.1.1", 2290 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2291 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 2292 | }, 2293 | "signal-exit": { 2294 | "version": "3.0.2", 2295 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2296 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 2297 | }, 2298 | "sntp": { 2299 | "version": "2.0.2", 2300 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", 2301 | "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", 2302 | "requires": { 2303 | "hoek": "4.2.0" 2304 | } 2305 | }, 2306 | "split-array-stream": { 2307 | "version": "1.0.3", 2308 | "resolved": "https://registry.npmjs.org/split-array-stream/-/split-array-stream-1.0.3.tgz", 2309 | "integrity": "sha1-0rdajl4Ngk1S/eyLgiWDncLjXfo=", 2310 | "requires": { 2311 | "async": "2.5.0", 2312 | "is-stream-ended": "0.1.3" 2313 | } 2314 | }, 2315 | "sshpk": { 2316 | "version": "1.13.1", 2317 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 2318 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 2319 | "requires": { 2320 | "asn1": "0.2.3", 2321 | "assert-plus": "1.0.0", 2322 | "bcrypt-pbkdf": "1.0.1", 2323 | "dashdash": "1.14.1", 2324 | "ecc-jsbn": "0.1.1", 2325 | "getpass": "0.1.7", 2326 | "jsbn": "0.1.1", 2327 | "tweetnacl": "0.14.5" 2328 | } 2329 | }, 2330 | "stream-events": { 2331 | "version": "1.0.2", 2332 | "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.2.tgz", 2333 | "integrity": "sha1-q/OfZsCJCk63lbyNXoWbJhW1kLI=", 2334 | "requires": { 2335 | "stubs": "3.0.0" 2336 | } 2337 | }, 2338 | "stream-shift": { 2339 | "version": "1.0.0", 2340 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 2341 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" 2342 | }, 2343 | "string-format-obj": { 2344 | "version": "1.1.0", 2345 | "resolved": "https://registry.npmjs.org/string-format-obj/-/string-format-obj-1.1.0.tgz", 2346 | "integrity": "sha1-djVhCx7zlwE+hHi+mKFw4EmD0Gg=" 2347 | }, 2348 | "string-width": { 2349 | "version": "1.0.2", 2350 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2351 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2352 | "requires": { 2353 | "code-point-at": "1.1.0", 2354 | "is-fullwidth-code-point": "1.0.0", 2355 | "strip-ansi": "3.0.1" 2356 | } 2357 | }, 2358 | "string_decoder": { 2359 | "version": "1.0.3", 2360 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 2361 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 2362 | "requires": { 2363 | "safe-buffer": "5.1.1" 2364 | } 2365 | }, 2366 | "stringstream": { 2367 | "version": "0.0.5", 2368 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 2369 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 2370 | }, 2371 | "strip-ansi": { 2372 | "version": "3.0.1", 2373 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2374 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2375 | "requires": { 2376 | "ansi-regex": "2.1.1" 2377 | } 2378 | }, 2379 | "stubs": { 2380 | "version": "3.0.0", 2381 | "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", 2382 | "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" 2383 | }, 2384 | "through2": { 2385 | "version": "2.0.3", 2386 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 2387 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 2388 | "requires": { 2389 | "readable-stream": "2.3.3", 2390 | "xtend": "4.0.1" 2391 | } 2392 | }, 2393 | "topo": { 2394 | "version": "1.1.0", 2395 | "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", 2396 | "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", 2397 | "requires": { 2398 | "hoek": "2.16.3" 2399 | }, 2400 | "dependencies": { 2401 | "hoek": { 2402 | "version": "2.16.3", 2403 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 2404 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 2405 | } 2406 | } 2407 | }, 2408 | "tough-cookie": { 2409 | "version": "2.3.3", 2410 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 2411 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 2412 | "requires": { 2413 | "punycode": "1.4.1" 2414 | } 2415 | }, 2416 | "tunnel-agent": { 2417 | "version": "0.6.0", 2418 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2419 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2420 | "requires": { 2421 | "safe-buffer": "5.1.1" 2422 | } 2423 | }, 2424 | "tweetnacl": { 2425 | "version": "0.14.5", 2426 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2427 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2428 | "optional": true 2429 | }, 2430 | "typedarray": { 2431 | "version": "0.0.6", 2432 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2433 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 2434 | }, 2435 | "unique-string": { 2436 | "version": "1.0.0", 2437 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 2438 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 2439 | "requires": { 2440 | "crypto-random-string": "1.0.0" 2441 | } 2442 | }, 2443 | "util-deprecate": { 2444 | "version": "1.0.2", 2445 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2446 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2447 | }, 2448 | "uuid": { 2449 | "version": "3.1.0", 2450 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 2451 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 2452 | }, 2453 | "verror": { 2454 | "version": "1.10.0", 2455 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2456 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2457 | "requires": { 2458 | "assert-plus": "1.0.0", 2459 | "core-util-is": "1.0.2", 2460 | "extsprintf": "1.3.0" 2461 | } 2462 | }, 2463 | "websocket-driver": { 2464 | "version": "0.7.0", 2465 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", 2466 | "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", 2467 | "requires": { 2468 | "http-parser-js": "0.4.9", 2469 | "websocket-extensions": "0.1.2" 2470 | } 2471 | }, 2472 | "websocket-extensions": { 2473 | "version": "0.1.2", 2474 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", 2475 | "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=" 2476 | }, 2477 | "window-size": { 2478 | "version": "0.1.4", 2479 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", 2480 | "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" 2481 | }, 2482 | "wrap-ansi": { 2483 | "version": "2.1.0", 2484 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 2485 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 2486 | "requires": { 2487 | "string-width": "1.0.2", 2488 | "strip-ansi": "3.0.1" 2489 | } 2490 | }, 2491 | "wrappy": { 2492 | "version": "1.0.2", 2493 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2494 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2495 | }, 2496 | "write-file-atomic": { 2497 | "version": "2.3.0", 2498 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", 2499 | "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", 2500 | "requires": { 2501 | "graceful-fs": "4.1.11", 2502 | "imurmurhash": "0.1.4", 2503 | "signal-exit": "3.0.2" 2504 | } 2505 | }, 2506 | "xdg-basedir": { 2507 | "version": "3.0.0", 2508 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 2509 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" 2510 | }, 2511 | "xtend": { 2512 | "version": "4.0.1", 2513 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2514 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 2515 | }, 2516 | "y18n": { 2517 | "version": "3.2.1", 2518 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 2519 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" 2520 | }, 2521 | "yargs": { 2522 | "version": "3.32.0", 2523 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", 2524 | "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", 2525 | "requires": { 2526 | "camelcase": "2.1.1", 2527 | "cliui": "3.2.0", 2528 | "decamelize": "1.2.0", 2529 | "os-locale": "1.4.0", 2530 | "string-width": "1.0.2", 2531 | "window-size": "0.1.4", 2532 | "y18n": "3.2.1" 2533 | } 2534 | } 2535 | } 2536 | }, 2537 | "firebase-functions": { 2538 | "version": "0.7.1", 2539 | "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-0.7.1.tgz", 2540 | "integrity": "sha1-EluVD5V2nOJaRLV2tc2t3DJGtMo=", 2541 | "requires": { 2542 | "@types/express": "4.0.37", 2543 | "@types/jsonwebtoken": "7.2.3", 2544 | "@types/lodash": "4.14.78", 2545 | "@types/sha1": "1.1.0", 2546 | "express": "4.16.2", 2547 | "jsonwebtoken": "7.4.3", 2548 | "lodash": "4.17.4", 2549 | "sha1": "1.1.1" 2550 | } 2551 | }, 2552 | "forwarded": { 2553 | "version": "0.1.2", 2554 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 2555 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 2556 | }, 2557 | "fresh": { 2558 | "version": "0.5.2", 2559 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2560 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 2561 | }, 2562 | "hoek": { 2563 | "version": "2.16.3", 2564 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 2565 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 2566 | }, 2567 | "http-errors": { 2568 | "version": "1.6.2", 2569 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 2570 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 2571 | "requires": { 2572 | "depd": "1.1.1", 2573 | "inherits": "2.0.3", 2574 | "setprototypeof": "1.0.3", 2575 | "statuses": "1.3.1" 2576 | }, 2577 | "dependencies": { 2578 | "setprototypeof": { 2579 | "version": "1.0.3", 2580 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 2581 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 2582 | } 2583 | } 2584 | }, 2585 | "iconv-lite": { 2586 | "version": "0.4.19", 2587 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 2588 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 2589 | }, 2590 | "inherits": { 2591 | "version": "2.0.3", 2592 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2593 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 2594 | }, 2595 | "ipaddr.js": { 2596 | "version": "1.5.2", 2597 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", 2598 | "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" 2599 | }, 2600 | "isemail": { 2601 | "version": "1.2.0", 2602 | "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", 2603 | "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" 2604 | }, 2605 | "joi": { 2606 | "version": "6.10.1", 2607 | "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", 2608 | "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", 2609 | "requires": { 2610 | "hoek": "2.16.3", 2611 | "isemail": "1.2.0", 2612 | "moment": "2.19.1", 2613 | "topo": "1.1.0" 2614 | } 2615 | }, 2616 | "jsonwebtoken": { 2617 | "version": "7.4.3", 2618 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", 2619 | "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", 2620 | "requires": { 2621 | "joi": "6.10.1", 2622 | "jws": "3.1.4", 2623 | "lodash.once": "4.1.1", 2624 | "ms": "2.0.0", 2625 | "xtend": "4.0.1" 2626 | } 2627 | }, 2628 | "jwa": { 2629 | "version": "1.1.5", 2630 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", 2631 | "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", 2632 | "requires": { 2633 | "base64url": "2.0.0", 2634 | "buffer-equal-constant-time": "1.0.1", 2635 | "ecdsa-sig-formatter": "1.0.9", 2636 | "safe-buffer": "5.1.1" 2637 | } 2638 | }, 2639 | "jws": { 2640 | "version": "3.1.4", 2641 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", 2642 | "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", 2643 | "requires": { 2644 | "base64url": "2.0.0", 2645 | "jwa": "1.1.5", 2646 | "safe-buffer": "5.1.1" 2647 | } 2648 | }, 2649 | "lodash": { 2650 | "version": "4.17.4", 2651 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2652 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 2653 | }, 2654 | "lodash.once": { 2655 | "version": "4.1.1", 2656 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 2657 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 2658 | }, 2659 | "media-typer": { 2660 | "version": "0.3.0", 2661 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2662 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 2663 | }, 2664 | "merge-descriptors": { 2665 | "version": "1.0.1", 2666 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2667 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 2668 | }, 2669 | "methods": { 2670 | "version": "1.1.2", 2671 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2672 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 2673 | }, 2674 | "mime": { 2675 | "version": "1.4.1", 2676 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 2677 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 2678 | }, 2679 | "mime-db": { 2680 | "version": "1.30.0", 2681 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 2682 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 2683 | }, 2684 | "mime-types": { 2685 | "version": "2.1.17", 2686 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 2687 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 2688 | "requires": { 2689 | "mime-db": "1.30.0" 2690 | } 2691 | }, 2692 | "moment": { 2693 | "version": "2.19.1", 2694 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", 2695 | "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=" 2696 | }, 2697 | "ms": { 2698 | "version": "2.0.0", 2699 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2700 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2701 | }, 2702 | "negotiator": { 2703 | "version": "0.6.1", 2704 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 2705 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 2706 | }, 2707 | "on-finished": { 2708 | "version": "2.3.0", 2709 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2710 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2711 | "requires": { 2712 | "ee-first": "1.1.1" 2713 | } 2714 | }, 2715 | "parseurl": { 2716 | "version": "1.3.2", 2717 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 2718 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 2719 | }, 2720 | "path-to-regexp": { 2721 | "version": "0.1.7", 2722 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2723 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 2724 | }, 2725 | "proxy-addr": { 2726 | "version": "2.0.2", 2727 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", 2728 | "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", 2729 | "requires": { 2730 | "forwarded": "0.1.2", 2731 | "ipaddr.js": "1.5.2" 2732 | } 2733 | }, 2734 | "qs": { 2735 | "version": "6.5.1", 2736 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 2737 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 2738 | }, 2739 | "range-parser": { 2740 | "version": "1.2.0", 2741 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2742 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 2743 | }, 2744 | "raw-body": { 2745 | "version": "2.3.2", 2746 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 2747 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 2748 | "requires": { 2749 | "bytes": "3.0.0", 2750 | "http-errors": "1.6.2", 2751 | "iconv-lite": "0.4.19", 2752 | "unpipe": "1.0.0" 2753 | } 2754 | }, 2755 | "safe-buffer": { 2756 | "version": "5.1.1", 2757 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2758 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 2759 | }, 2760 | "send": { 2761 | "version": "0.16.1", 2762 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", 2763 | "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", 2764 | "requires": { 2765 | "debug": "2.6.9", 2766 | "depd": "1.1.1", 2767 | "destroy": "1.0.4", 2768 | "encodeurl": "1.0.1", 2769 | "escape-html": "1.0.3", 2770 | "etag": "1.8.1", 2771 | "fresh": "0.5.2", 2772 | "http-errors": "1.6.2", 2773 | "mime": "1.4.1", 2774 | "ms": "2.0.0", 2775 | "on-finished": "2.3.0", 2776 | "range-parser": "1.2.0", 2777 | "statuses": "1.3.1" 2778 | } 2779 | }, 2780 | "serve-static": { 2781 | "version": "1.13.1", 2782 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", 2783 | "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", 2784 | "requires": { 2785 | "encodeurl": "1.0.1", 2786 | "escape-html": "1.0.3", 2787 | "parseurl": "1.3.2", 2788 | "send": "0.16.1" 2789 | } 2790 | }, 2791 | "setprototypeof": { 2792 | "version": "1.1.0", 2793 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 2794 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 2795 | }, 2796 | "sha1": { 2797 | "version": "1.1.1", 2798 | "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", 2799 | "integrity": "sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=", 2800 | "requires": { 2801 | "charenc": "0.0.2", 2802 | "crypt": "0.0.2" 2803 | } 2804 | }, 2805 | "statuses": { 2806 | "version": "1.3.1", 2807 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 2808 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 2809 | }, 2810 | "topo": { 2811 | "version": "1.1.0", 2812 | "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", 2813 | "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", 2814 | "requires": { 2815 | "hoek": "2.16.3" 2816 | } 2817 | }, 2818 | "type-is": { 2819 | "version": "1.6.15", 2820 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 2821 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 2822 | "requires": { 2823 | "media-typer": "0.3.0", 2824 | "mime-types": "2.1.17" 2825 | } 2826 | }, 2827 | "unpipe": { 2828 | "version": "1.0.0", 2829 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2830 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2831 | }, 2832 | "utils-merge": { 2833 | "version": "1.0.1", 2834 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2835 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2836 | }, 2837 | "vary": { 2838 | "version": "1.1.2", 2839 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2840 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2841 | }, 2842 | "xtend": { 2843 | "version": "4.0.1", 2844 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2845 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 2846 | } 2847 | } 2848 | } 2849 | -------------------------------------------------------------------------------- /functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "dependencies": { 5 | "firebase-admin": "^5.4.2", 6 | "firebase-functions": "^0.7.1" 7 | }, 8 | "private": true 9 | } 10 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular/cli'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular/cli/plugins/karma') 14 | ], 15 | client:{ 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | reports: [ 'html', 'lcovonly' ], 20 | fixWebpackSourcePaths: true 21 | }, 22 | angularCli: { 23 | environment: 'dev' 24 | }, 25 | reporters: ['progress', 'kjhtml'], 26 | port: 9876, 27 | colors: true, 28 | logLevel: config.LOG_INFO, 29 | autoWatch: true, 30 | browsers: ['Chrome'], 31 | singleRun: false 32 | }); 33 | }; 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chatbot", 3 | "version": "0.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "ng": "ng", 7 | "start": "ng serve", 8 | "build": "ng build", 9 | "test": "ng test", 10 | "lint": "ng lint", 11 | "e2e": "ng e2e" 12 | }, 13 | "private": true, 14 | "dependencies": { 15 | "@angular/animations": "^5.0.2", 16 | "@angular/cdk": "^2.0.0-beta.12", 17 | "@angular/common": "^5.0.2", 18 | "@angular/compiler": "^5.0.2", 19 | "@angular/core": "^5.0.2", 20 | "@angular/forms": "^5.0.2", 21 | "@angular/http": "^5.0.2", 22 | "@angular/material": "^2.0.0-beta.12", 23 | "@angular/platform-browser": "^5.0.2", 24 | "@angular/platform-browser-dynamic": "^5.0.2", 25 | "@angular/platform-server": "^5.0.2", 26 | "@angular/router": "^5.0.2", 27 | "core-js": "^2.4.1", 28 | "marked": "^0.3.6", 29 | "rxjs": "^5.5.2", 30 | "zone.js": "^0.8.14" 31 | }, 32 | "devDependencies": { 33 | "@angular/cli": "1.4.9", 34 | "@angular/compiler-cli": "^5.0.2", 35 | "@angular/language-service": "^4.4.6", 36 | "@types/jasmine": "~2.5.53", 37 | "@types/jasminewd2": "~2.0.2", 38 | "@types/node": "~6.0.60", 39 | "angular-cli": "^1.0.0-beta.28.3", 40 | "api-ai-javascript": "^2.0.0-beta.21", 41 | "codelyzer": "~3.2.0", 42 | "jasmine-core": "~2.6.2", 43 | "jasmine-spec-reporter": "~4.1.0", 44 | "karma": "~1.7.0", 45 | "karma-chrome-launcher": "~2.1.1", 46 | "karma-cli": "~1.0.1", 47 | "karma-coverage-istanbul-reporter": "^1.2.1", 48 | "karma-jasmine": "~1.1.0", 49 | "karma-jasmine-html-reporter": "^0.2.2", 50 | "protractor": "~5.1.2", 51 | "ts-node": "~3.2.0", 52 | "tslint": "~5.7.0", 53 | "typescript": "^2.6.1" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './e2e/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | onPrepare() { 23 | require('ts-node').register({ 24 | project: 'e2e/tsconfig.e2e.json' 25 | }); 26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AngularFirebase/angular-chatbot/cbed66d5f6ecddbf204c8223389d9d3e9a0a0139/src/app/app.component.scss -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | import { AppComponent } from './app.component'; 3 | describe('AppComponent', () => { 4 | beforeEach(async(() => { 5 | TestBed.configureTestingModule({ 6 | declarations: [ 7 | AppComponent 8 | ], 9 | }).compileComponents(); 10 | })); 11 | it('should create the app', async(() => { 12 | const fixture = TestBed.createComponent(AppComponent); 13 | const app = fixture.debugElement.componentInstance; 14 | expect(app).toBeTruthy(); 15 | })); 16 | it(`should have as title 'app'`, async(() => { 17 | const fixture = TestBed.createComponent(AppComponent); 18 | const app = fixture.debugElement.componentInstance; 19 | expect(app.title).toEqual('app'); 20 | })); 21 | it('should render title in a h1 tag', async(() => { 22 | const fixture = TestBed.createComponent(AppComponent); 23 | fixture.detectChanges(); 24 | const compiled = fixture.debugElement.nativeElement; 25 | expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!'); 26 | })); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.scss'] 7 | }) 8 | export class AppComponent { 9 | title = 'app'; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { NgModule } from '@angular/core'; 4 | 5 | import { AppComponent } from './app.component'; 6 | 7 | import { MaterialModule } from './core/material.module'; 8 | import { ChatModule } from './chat/chat.module'; 9 | import { SharedModule } from './shared/shared.module'; 10 | 11 | @NgModule({ 12 | declarations: [ 13 | AppComponent 14 | ], 15 | imports: [ 16 | BrowserModule, 17 | BrowserAnimationsModule, 18 | MaterialModule, 19 | ChatModule, 20 | SharedModule 21 | ], 22 | providers: [], 23 | bootstrap: [AppComponent] 24 | }) 25 | export class AppModule { } 26 | -------------------------------------------------------------------------------- /src/app/chat/chat-dialog/chat-dialog.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | Angular Chatbot 6 | 7 | 8 |
9 | 10 | 11 | 12 |
14 |
15 | 16 |
17 |
18 | 19 |
20 | 21 |
22 | 23 |
24 | 25 | 27 | 28 |
29 | 30 |
31 |
-------------------------------------------------------------------------------- /src/app/chat/chat-dialog/chat-dialog.component.scss: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | margin: 2vh 15vw; 3 | border: 1px solid #ccc; 4 | box-shadow: 10px 10px 40px -10px rgba(0, 0, 0, 0.50); 5 | } 6 | 7 | 8 | 9 | .toolbar { 10 | position: relative; 11 | top: 0; 12 | z-index: 10; 13 | font-weight: 300; 14 | background: #2b303e; 15 | } 16 | 17 | .messages { 18 | overflow: auto; 19 | padding: 64px 0; 20 | height: 60vh; 21 | overflow-y: scroll; 22 | } 23 | 24 | .message-row { 25 | padding: 0 16px; 26 | margin: 8px; 27 | } 28 | .message { 29 | display: inline-block; 30 | border-radius: 6px; 31 | padding: 16px; 32 | font-weight: 300; 33 | } 34 | .message-row.to { 35 | text-align: right; 36 | .message { 37 | background-color: #2095FE; 38 | color: #fff; 39 | } 40 | } 41 | .message-row.from { 42 | text-align: left; 43 | .message { 44 | background-color: #E5E4E9; 45 | color: #363636; 46 | } 47 | } 48 | .message-row.to + .message-row.to, 49 | .message-row.from + .message-row.from { 50 | margin-top: -10px; 51 | } 52 | 53 | .send-message { 54 | height: 64px; 55 | border-top: 1px solid #ccc; 56 | position: relative; 57 | bottom: 0; 58 | padding: 0 16px; 59 | background-color: #fafafa; 60 | } 61 | 62 | ::ng-deep .send-message .mat-input-underline { 63 | display: none!important; 64 | } 65 | 66 | ::-webkit-scrollbar-track 67 | { 68 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 69 | background-color: #F5F5F5; 70 | } 71 | ::-webkit-scrollbar 72 | { 73 | width: 6px; 74 | background-color: #F5F5F5; 75 | } 76 | 77 | ::-webkit-scrollbar-thumb 78 | { 79 | background-color: #000000; 80 | } -------------------------------------------------------------------------------- /src/app/chat/chat-dialog/chat-dialog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ChatDialogComponent } from './chat-dialog.component'; 4 | 5 | describe('ChatDialogComponent', () => { 6 | let component: ChatDialogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ChatDialogComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChatDialogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/chat/chat-dialog/chat-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ChatService, Message } from '../chat.service'; 3 | import { Observable } from 'rxjs/Observable'; 4 | import 'rxjs/add/operator/scan'; 5 | 6 | 7 | @Component({ 8 | selector: 'chat-dialog', 9 | templateUrl: './chat-dialog.component.html', 10 | styleUrls: ['./chat-dialog.component.scss'] 11 | }) 12 | export class ChatDialogComponent implements OnInit { 13 | 14 | messages: Observable; 15 | formValue: string; 16 | 17 | constructor(public chat: ChatService) { } 18 | 19 | ngOnInit() { 20 | // appends to array after each new message is added to feedSource 21 | this.messages = this.chat.conversation.asObservable() 22 | .scan((acc, val) => acc.concat(val) ); 23 | } 24 | 25 | sendMessage() { 26 | this.chat.converse(this.formValue); 27 | this.formValue = ''; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/app/chat/chat.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { ChatDialogComponent } from './chat-dialog/chat-dialog.component'; 5 | import { ChatService } from './chat.service'; 6 | 7 | import { FormsModule } from '@angular/forms'; 8 | import { MaterialModule } from '../core/material.module'; 9 | import { SharedModule } from '../shared/shared.module'; 10 | import { MarkdownService } from './markdown.service'; 11 | 12 | @NgModule({ 13 | imports: [ 14 | CommonModule, 15 | FormsModule, 16 | MaterialModule, 17 | SharedModule 18 | ], 19 | declarations: [ 20 | ChatDialogComponent 21 | ], 22 | exports: [ ChatDialogComponent ], 23 | providers: [ChatService, MarkdownService] 24 | }) 25 | export class ChatModule { } 26 | -------------------------------------------------------------------------------- /src/app/chat/chat.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { ChatService } from './chat.service'; 4 | 5 | describe('ChatService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [ChatService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([ChatService], (service: ChatService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/chat/chat.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { environment } from '../../environments/environment'; 3 | 4 | import { ApiAiClient } from 'api-ai-javascript'; 5 | 6 | import { Observable } from 'rxjs/Observable'; 7 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 8 | 9 | 10 | export class Message { 11 | myRenderer; 12 | 13 | constructor(public content: string, public sentBy: string) {} 14 | } 15 | 16 | @Injectable() 17 | export class ChatService { 18 | 19 | readonly token = environment.dialogflow.angularBot; 20 | readonly client = new ApiAiClient({ accessToken: this.token }); 21 | 22 | conversation = new BehaviorSubject([]); 23 | 24 | constructor() {} 25 | 26 | // Sends and receives messages via DialogFlow 27 | converse(msg: string) { 28 | const userMessage = new Message(msg, 'user'); 29 | this.update(userMessage); 30 | 31 | return this.client.textRequest(msg) 32 | .then(res => { 33 | const speech = res.result.fulfillment.speech; 34 | const botMessage = new Message(speech, 'bot'); 35 | this.update(botMessage); 36 | }); 37 | } 38 | 39 | 40 | 41 | // Adds message to source 42 | update(msg: Message) { 43 | this.conversation.next([msg]); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/app/chat/markdown.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarkdownService } from './markdown.service'; 4 | 5 | describe('MarkdownService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [MarkdownService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([MarkdownService], (service: MarkdownService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/chat/markdown.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import * as marked from 'marked'; 3 | 4 | @Injectable() 5 | export class MarkdownService { 6 | 7 | renderer: any; 8 | 9 | constructor() { 10 | 11 | this.renderer = new marked.Renderer(); 12 | this.renderer.link = function(href, title, text) { 13 | var external, newWindow, out; 14 | external = /^https?:\/\/.+$/.test(href); 15 | newWindow = external || title === 'newWindow'; 16 | out = ""; 24 | }; 25 | 26 | marked.setOptions({ 27 | renderer: this.renderer, 28 | gfm: true 29 | }); 30 | } 31 | 32 | 33 | // convert markdown string to html 34 | markdownToHtml(md: string) { 35 | console.log(md); 36 | return marked(md); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/app/core/material.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { 4 | MatInputModule, 5 | MatButtonModule, 6 | MatTooltipModule, 7 | MatFormFieldModule, 8 | MatToolbarModule, 9 | MatIconModule, 10 | } from '@angular/material'; 11 | 12 | const modules = [ 13 | MatInputModule, 14 | MatButtonModule, 15 | MatTooltipModule, 16 | MatFormFieldModule, 17 | MatToolbarModule, 18 | MatIconModule, 19 | ]; 20 | 21 | @NgModule({ 22 | imports: modules, 23 | exports: modules 24 | }) 25 | export class MaterialModule { } 26 | -------------------------------------------------------------------------------- /src/app/shared/md-to-html.pipe.spec.ts: -------------------------------------------------------------------------------- 1 | import { MdToHtmlPipe } from './md-to-html.pipe'; 2 | 3 | describe('MdToHtmlPipe', () => { 4 | it('create an instance', () => { 5 | const pipe = new MdToHtmlPipe(); 6 | expect(pipe).toBeTruthy(); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /src/app/shared/md-to-html.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import { MarkdownService } from '../chat/markdown.service'; 3 | 4 | @Pipe({ 5 | name: 'mdToHtml' 6 | }) 7 | export class MdToHtmlPipe implements PipeTransform { 8 | 9 | constructor(private markdown: MarkdownService) {} 10 | transform(value: string): any { 11 | return this.markdown.markdownToHtml(value); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/app/shared/shared.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { MdToHtmlPipe } from './md-to-html.pipe'; 4 | 5 | @NgModule({ 6 | imports: [ 7 | CommonModule 8 | ], 9 | declarations: [MdToHtmlPipe], 10 | exports: [MdToHtmlPipe] 11 | }) 12 | export class SharedModule { } 13 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AngularFirebase/angular-chatbot/cbed66d5f6ecddbf204c8223389d9d3e9a0a0139/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AngularFirebase/angular-chatbot/cbed66d5f6ecddbf204c8223389d9d3e9a0a0139/src/assets/logo.png -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AngularFirebase/angular-chatbot/cbed66d5f6ecddbf204c8223389d9d3e9a0a0139/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Chatbot 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.log(err)); 13 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ 22 | // import 'core-js/es6/symbol'; 23 | // import 'core-js/es6/object'; 24 | // import 'core-js/es6/function'; 25 | // import 'core-js/es6/parse-int'; 26 | // import 'core-js/es6/parse-float'; 27 | // import 'core-js/es6/number'; 28 | // import 'core-js/es6/math'; 29 | // import 'core-js/es6/string'; 30 | // import 'core-js/es6/date'; 31 | // import 'core-js/es6/array'; 32 | // import 'core-js/es6/regexp'; 33 | // import 'core-js/es6/map'; 34 | // import 'core-js/es6/weak-map'; 35 | // import 'core-js/es6/set'; 36 | 37 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 38 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 39 | 40 | /** IE10 and IE11 requires the following for the Reflect API. */ 41 | // import 'core-js/es6/reflect'; 42 | 43 | 44 | /** Evergreen browsers require these. **/ 45 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. 46 | import 'core-js/es7/reflect'; 47 | 48 | 49 | /** 50 | * Required to support Web Animations `@angular/platform-browser/animations`. 51 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation 52 | **/ 53 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 54 | 55 | 56 | 57 | /*************************************************************************************************** 58 | * Zone JS is required by Angular itself. 59 | */ 60 | import 'zone.js/dist/zone'; // Included with Angular CLI. 61 | 62 | 63 | 64 | /*************************************************************************************************** 65 | * APPLICATION IMPORTS 66 | */ 67 | 68 | /** 69 | * Date, currency, decimal and percent pipes. 70 | * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 71 | */ 72 | // import 'intl'; // Run `npm install --save intl`. 73 | /** 74 | * Need to import at least one locale-data with intl. 75 | */ 76 | // import 'intl/locale-data/jsonp/en'; 77 | -------------------------------------------------------------------------------- /src/styles.scss: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @import "~@angular/material/prebuilt-themes/indigo-pink.css"; 3 | 4 | body { 5 | font-family: 'Roboto', sans-serif; 6 | } 7 | 8 | code { 9 | color: white; 10 | background: slateblue; 11 | padding: 3px; 12 | border-radius: 5px; 13 | font-size: 0.8em; 14 | } 15 | 16 | code { 17 | padding: 2px 4px; 18 | font-size: 90%; 19 | color: #c7254e; 20 | background-color: #f9f2f4; 21 | border-radius: 4px; 22 | } -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/long-stack-trace-zone'; 4 | import 'zone.js/dist/proxy.js'; 5 | import 'zone.js/dist/sync-test'; 6 | import 'zone.js/dist/jasmine-patch'; 7 | import 'zone.js/dist/async-test'; 8 | import 'zone.js/dist/fake-async-test'; 9 | import { getTestBed } from '@angular/core/testing'; 10 | import { 11 | BrowserDynamicTestingModule, 12 | platformBrowserDynamicTesting 13 | } from '@angular/platform-browser-dynamic/testing'; 14 | 15 | // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. 16 | declare const __karma__: any; 17 | declare const require: any; 18 | 19 | // Prevent Karma from running prematurely. 20 | __karma__.loaded = function () {}; 21 | 22 | // First, initialize the Angular testing environment. 23 | getTestBed().initTestEnvironment( 24 | BrowserDynamicTestingModule, 25 | platformBrowserDynamicTesting() 26 | ); 27 | // Then we find all the tests. 28 | const context = require.context('./', true, /\.spec\.ts$/); 29 | // And load the modules. 30 | context.keys().map(context); 31 | // Finally, start Karma to run the tests. 32 | __karma__.start(); 33 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts" 15 | ], 16 | "include": [ 17 | "**/*.spec.ts", 18 | "**/*.d.ts" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "outDir": "./dist/out-tsc", 5 | "sourceMap": true, 6 | "declaration": false, 7 | "moduleResolution": "node", 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "target": "es5", 11 | "typeRoots": [ 12 | "node_modules/@types" 13 | ], 14 | "lib": [ 15 | "es2017", 16 | "dom" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rulesDirectory": [ 3 | "node_modules/codelyzer" 4 | ], 5 | "rules": { 6 | "arrow-return-shorthand": true, 7 | "callable-types": true, 8 | "class-name": true, 9 | "comment-format": [ 10 | true, 11 | "check-space" 12 | ], 13 | "curly": true, 14 | "eofline": true, 15 | "forin": true, 16 | "import-blacklist": [ 17 | true, 18 | "rxjs", 19 | "rxjs/Rx" 20 | ], 21 | "import-spacing": true, 22 | "indent": [ 23 | true, 24 | "spaces" 25 | ], 26 | "interface-over-type-literal": true, 27 | "label-position": true, 28 | "max-line-length": [ 29 | true, 30 | 140 31 | ], 32 | "member-access": false, 33 | "member-ordering": [ 34 | true, 35 | { 36 | "order": [ 37 | "static-field", 38 | "instance-field", 39 | "static-method", 40 | "instance-method" 41 | ] 42 | } 43 | ], 44 | "no-arg": true, 45 | "no-bitwise": true, 46 | "no-console": [ 47 | true, 48 | "debug", 49 | "info", 50 | "time", 51 | "timeEnd", 52 | "trace" 53 | ], 54 | "no-construct": true, 55 | "no-debugger": true, 56 | "no-duplicate-super": true, 57 | "no-empty": false, 58 | "no-empty-interface": true, 59 | "no-eval": true, 60 | "no-inferrable-types": [ 61 | true, 62 | "ignore-params" 63 | ], 64 | "no-misused-new": true, 65 | "no-non-null-assertion": true, 66 | "no-shadowed-variable": true, 67 | "no-string-literal": false, 68 | "no-string-throw": true, 69 | "no-switch-case-fall-through": true, 70 | "no-trailing-whitespace": true, 71 | "no-unnecessary-initializer": true, 72 | "no-unused-expression": true, 73 | "no-use-before-declare": true, 74 | "no-var-keyword": true, 75 | "object-literal-sort-keys": false, 76 | "one-line": [ 77 | true, 78 | "check-open-brace", 79 | "check-catch", 80 | "check-else", 81 | "check-whitespace" 82 | ], 83 | "prefer-const": true, 84 | "quotemark": [ 85 | true, 86 | "single" 87 | ], 88 | "radix": true, 89 | "semicolon": [ 90 | true, 91 | "always" 92 | ], 93 | "triple-equals": [ 94 | true, 95 | "allow-null-check" 96 | ], 97 | "typedef-whitespace": [ 98 | true, 99 | { 100 | "call-signature": "nospace", 101 | "index-signature": "nospace", 102 | "parameter": "nospace", 103 | "property-declaration": "nospace", 104 | "variable-declaration": "nospace" 105 | } 106 | ], 107 | "typeof-compare": true, 108 | "unified-signatures": true, 109 | "variable-name": false, 110 | "whitespace": [ 111 | true, 112 | "check-branch", 113 | "check-decl", 114 | "check-operator", 115 | "check-separator", 116 | "check-type" 117 | ], 118 | "directive-selector": [ 119 | true, 120 | "attribute", 121 | "", 122 | "camelCase" 123 | ], 124 | "component-selector": [ 125 | true, 126 | "element", 127 | "", 128 | "kebab-case" 129 | ], 130 | "use-input-property-decorator": true, 131 | "use-output-property-decorator": true, 132 | "use-host-property-decorator": true, 133 | "no-input-rename": true, 134 | "no-output-rename": true, 135 | "use-life-cycle-interface": true, 136 | "use-pipe-transform-interface": true, 137 | "component-class-suffix": true, 138 | "directive-class-suffix": true, 139 | "invoke-injectable": true 140 | } 141 | } 142 | --------------------------------------------------------------------------------