├── firebase.json
├── functions
├── .gitignore
├── package.json
├── index.js
└── yarn.lock
├── screenshots
├── relationship.png
├── heroku-config-vars.png
├── love-language-table.png
├── firebase-authentication.png
├── realtime-database-rules.png
├── loved-language-permission.png
├── programming-language-table.png
└── programming-language-permission.png
├── react-web-app
├── .prettierrc
├── public
│ ├── favicon.ico
│ ├── manifest.json
│ └── index.html
├── .gitignore
├── src
│ ├── index.css
│ ├── index.js
│ ├── Auth.js
│ ├── App.js
│ └── serviceWorker.js
└── package.json
├── .gitignore
└── README.md
/firebase.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/functions/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/screenshots/relationship.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/relationship.png
--------------------------------------------------------------------------------
/react-web-app/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all",
3 | "semi": false,
4 | "singleQuote": true
5 | }
6 |
--------------------------------------------------------------------------------
/react-web-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/react-web-app/public/favicon.ico
--------------------------------------------------------------------------------
/screenshots/heroku-config-vars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/heroku-config-vars.png
--------------------------------------------------------------------------------
/screenshots/love-language-table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/love-language-table.png
--------------------------------------------------------------------------------
/screenshots/firebase-authentication.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/firebase-authentication.png
--------------------------------------------------------------------------------
/screenshots/realtime-database-rules.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/realtime-database-rules.png
--------------------------------------------------------------------------------
/screenshots/loved-language-permission.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/loved-language-permission.png
--------------------------------------------------------------------------------
/screenshots/programming-language-table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/programming-language-table.png
--------------------------------------------------------------------------------
/screenshots/programming-language-permission.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thezjy/hasura-vote/HEAD/screenshots/programming-language-permission.png
--------------------------------------------------------------------------------
/react-web-app/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/react-web-app/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/react-web-app/src/index.css:
--------------------------------------------------------------------------------
1 | div.auth {
2 | max-width: 600px;
3 | margin: 0px auto;
4 | }
5 |
6 | ul.pl-list {
7 | padding: 0px;
8 | width: 100%;
9 | }
10 |
11 | .pl-list li {
12 | list-style: none;
13 | padding: 12px 0px;
14 | border-bottom: 1px solid black;
15 |
16 | display: flex;
17 | justify-content: space-between;
18 | align-items: center;
19 | }
20 |
21 | .pl-list button {
22 | margin-left: 10px;
23 | }
24 |
--------------------------------------------------------------------------------
/react-web-app/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 | import Auth from './Auth'
4 | import './index.css'
5 | import * as serviceWorker from './serviceWorker'
6 |
7 | ReactDOM.render( , document.getElementById('root'))
8 |
9 | // If you want your app to work offline and load faster, you can change
10 | // unregister() to register() below. Note this comes with some pitfalls.
11 | // Learn more about service workers: http://bit.ly/CRA-PWA
12 | serviceWorker.unregister()
13 |
--------------------------------------------------------------------------------
/functions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "firebase-admin": "~7.0.0",
4 | "firebase-functions": "^2.0.3"
5 | },
6 | "description": "Cloud Functions for Firebase",
7 | "engines": {
8 | "node": "8"
9 | },
10 | "name": "functions",
11 | "private": true,
12 | "scripts": {
13 | "deploy": "firebase deploy --only functions",
14 | "logs": "firebase functions:log",
15 | "serve": "firebase serve --only functions",
16 | "shell": "firebase functions:shell",
17 | "start": "npm run shell"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/react-web-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "browserslist": [
3 | ">0.2%",
4 | "not dead",
5 | "not ie <= 11",
6 | "not op_mini all"
7 | ],
8 | "dependencies": {
9 | "apollo-cache-inmemory": "^1.6.2",
10 | "apollo-client": "^2.6.2",
11 | "apollo-link": "^1.2.11",
12 | "apollo-link-error": "^1.1.10",
13 | "apollo-link-http": "^1.5.14",
14 | "apollo-link-ws": "^1.0.17",
15 | "firebase": "^6.1.1",
16 | "graphql": "^14.3.1",
17 | "graphql-tag": "^2.10.1",
18 | "react": "^16.8.6",
19 | "react-apollo": "^2.5.6",
20 | "react-dom": "^16.8.6",
21 | "react-scripts": "3.0.1",
22 | "subscriptions-transport-ws": "^0.9.16"
23 | },
24 | "devDependencies": {
25 | "prettier": "^1.18.2"
26 | },
27 | "eslintConfig": {
28 | "extends": "react-app"
29 | },
30 | "name": "hasura-vote",
31 | "private": true,
32 | "scripts": {
33 | "build": "react-scripts build",
34 | "eject": "react-scripts eject",
35 | "start": "react-scripts start",
36 | "test": "react-scripts test"
37 | },
38 | "version": "0.1.0"
39 | }
40 |
--------------------------------------------------------------------------------
/functions/index.js:
--------------------------------------------------------------------------------
1 | const functions = require("firebase-functions");
2 | const admin = require("firebase-admin");
3 | admin.initializeApp(functions.config().firebase);
4 |
5 | // On sign up.
6 | exports.processSignUp = functions.auth.user().onCreate(user => {
7 | const customClaims = {
8 | "https://hasura.io/jwt/claims": {
9 | "x-hasura-default-role": "user",
10 | "x-hasura-allowed-roles": ["user"],
11 | "x-hasura-user-id": user.uid
12 | }
13 | };
14 |
15 | // Set custom user claims on this newly created user.
16 | return admin
17 | .auth()
18 | .setCustomUserClaims(user.uid, customClaims)
19 | .then(() => {
20 | // Update real-time database to notify client to force refresh.
21 | const metadataRef = admin.database().ref("metadata/" + user.uid);
22 | // Set the refresh time to the current UTC timestamp.
23 | // This will be captured on the client to force a token refresh.
24 | return metadataRef.set({ refreshTime: new Date().getTime() });
25 | })
26 | .catch(error => {
27 | console.log(error);
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | firebase-debug.log*
8 |
9 | # Firebase cache
10 | .firebase/
11 |
12 | # Firebase config
13 |
14 | # Uncomment this if you'd like others to create their own Firebase project.
15 | # For a team working on the same Firebase project(s), it is recommended to leave
16 | # it commented so all members can deploy to the same project(s) in .firebaserc.
17 | # .firebaserc
18 |
19 | # Runtime data
20 | pids
21 | *.pid
22 | *.seed
23 | *.pid.lock
24 |
25 | # Directory for instrumented libs generated by jscoverage/JSCover
26 | lib-cov
27 |
28 | # Coverage directory used by tools like istanbul
29 | coverage
30 |
31 | # nyc test coverage
32 | .nyc_output
33 |
34 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
35 | .grunt
36 |
37 | # Bower dependency directory (https://bower.io/)
38 | bower_components
39 |
40 | # node-waf configuration
41 | .lock-wscript
42 |
43 | # Compiled binary addons (http://nodejs.org/api/addons.html)
44 | build/Release
45 |
46 | # Dependency directories
47 | node_modules/
48 |
49 | # Optional npm cache directory
50 | .npm
51 |
52 | # Optional eslint cache
53 | .eslintcache
54 |
55 | # Optional REPL history
56 | .node_repl_history
57 |
58 | # Output of 'npm pack'
59 | *.tgz
60 |
61 | # Yarn Integrity file
62 | .yarn-integrity
63 |
64 | # dotenv environment variables file
65 | .env
66 |
67 | .DS_Store
--------------------------------------------------------------------------------
/react-web-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
11 |
15 |
16 |
25 | Hasura Vote
26 |
27 |
28 | You need to enable JavaScript to run this app.
29 |
30 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/react-web-app/src/Auth.js:
--------------------------------------------------------------------------------
1 | import firebase from 'firebase/app'
2 | import 'firebase/auth'
3 | import 'firebase/database'
4 | import React, { useState, useEffect } from 'react'
5 | import App from './App'
6 |
7 | const provider = new firebase.auth.GoogleAuthProvider()
8 |
9 | firebase.initializeApp({
10 | apiKey: 'xxx',
11 | authDomain: 'xxx',
12 | databaseURL: 'xxx',
13 | projectId: 'xxx',
14 | storageBucket: 'xxx',
15 | messagingSenderId: 'xxx',
16 | })
17 |
18 | export default function Auth() {
19 | const [authState, setAuthState] = useState({ status: 'loading' })
20 |
21 | useEffect(() => {
22 | return firebase.auth().onAuthStateChanged(async user => {
23 | if (user) {
24 | const token = await user.getIdToken()
25 | const idTokenResult = await user.getIdTokenResult()
26 | const hasuraClaim = idTokenResult.claims['https://hasura.io/jwt/claims']
27 |
28 | if (hasuraClaim) {
29 | setAuthState({ status: 'in', user, token })
30 | } else {
31 | // Check if refresh is required.
32 | const metadataRef = firebase
33 | .database()
34 | .ref('metadata/' + user.uid + '/refreshTime')
35 |
36 | metadataRef.on('value', async data => {
37 | if (!data.exists) {
38 | return
39 | }
40 | // Force refresh to pick up the latest custom claims changes.
41 | // Note this is always triggered on first call. Further optimization could be
42 | // added to avoid the initial trigger when the token is issued and already contains
43 | // the latest claims.
44 | const token = await user.getIdToken(true)
45 | setAuthState({ status: 'in', user, token })
46 | })
47 | }
48 | } else {
49 | setAuthState({ status: 'out' })
50 | }
51 | })
52 | }, [])
53 |
54 | const signInWithGoogle = async () => {
55 | try {
56 | await firebase.auth().signInWithPopup(provider)
57 | } catch (error) {
58 | console.log(error)
59 | }
60 | }
61 |
62 | const signOut = async () => {
63 | try {
64 | setAuthState({ status: 'loading' })
65 | await firebase.auth().signOut()
66 | setAuthState({ status: 'out' })
67 | } catch (error) {
68 | console.log(error)
69 | }
70 | }
71 |
72 | let content
73 | if (authState.status === 'loading') {
74 | content = null
75 | } else {
76 | content = (
77 | <>
78 |
79 | {authState.status === 'in' ? (
80 |
81 |
Welcome, {authState.user.displayName}
82 | Sign out
83 |
84 | ) : (
85 |
Sign in with Google
86 | )}
87 |
88 |
89 |
90 | >
91 | )
92 | }
93 |
94 | return {content}
95 | }
96 |
--------------------------------------------------------------------------------
/react-web-app/src/App.js:
--------------------------------------------------------------------------------
1 | import { InMemoryCache } from 'apollo-cache-inmemory'
2 | import ApolloClient from 'apollo-client'
3 | import { split } from 'apollo-link'
4 | import { HttpLink } from 'apollo-link-http'
5 | import { WebSocketLink } from 'apollo-link-ws'
6 | import { getMainDefinition } from 'apollo-utilities'
7 | import gql from 'graphql-tag'
8 | import React from 'react'
9 | import { ApolloProvider, Mutation, Subscription } from 'react-apollo'
10 |
11 | const PL_SUB = gql`
12 | subscription PL {
13 | programming_language(order_by: { vote_count: desc }) {
14 | name
15 | vote_count
16 | }
17 | }
18 | `
19 |
20 | const PL_WITH_LOVE_SUB = gql`
21 | subscription PL_WITH_LOVE($userId: String!) {
22 | programming_language(order_by: { vote_count: desc }) {
23 | name
24 | vote_count
25 | lovedLanguagesByname_aggregate(where: { user_id: { _eq: $userId } }) {
26 | aggregate {
27 | count
28 | }
29 | }
30 | }
31 | }
32 | `
33 | const VOTE_MUTATION = gql`
34 | mutation Vote($name: String!) {
35 | update_programming_language(
36 | _inc: { vote_count: 1 }
37 | where: { name: { _eq: $name } }
38 | ) {
39 | returning {
40 | vote_count
41 | }
42 | }
43 | }
44 | `
45 | const LOVE_MUTATION = gql`
46 | mutation Love($name: String!) {
47 | insert_loved_language(objects: { name: $name }) {
48 | affected_rows
49 | }
50 | }
51 | `
52 |
53 | const UNLOVE_MUTATION = gql`
54 | mutation Unlove($name: String!) {
55 | delete_loved_language(where: { name: { _eq: $name } }) {
56 | affected_rows
57 | }
58 | }
59 | `
60 |
61 | export default function App({ authState }) {
62 | const isIn = authState.status === 'in'
63 |
64 | const headers = isIn ? { Authorization: `Bearer ${authState.token}` } : {}
65 |
66 | const httpLink = new HttpLink({
67 | uri: 'https://your-heroku-domain/v1alpha1/graphql',
68 | headers,
69 | })
70 |
71 | const wsLink = new WebSocketLink({
72 | uri: 'wss://your-heroku-domain/v1alpha1/graphql',
73 | options: {
74 | reconnect: true,
75 | connectionParams: {
76 | headers,
77 | },
78 | },
79 | })
80 |
81 | const link = split(
82 | ({ query }) => {
83 | const { kind, operation } = getMainDefinition(query)
84 | return kind === 'OperationDefinition' && operation === 'subscription'
85 | },
86 | wsLink,
87 | httpLink,
88 | )
89 |
90 | const client = new ApolloClient({
91 | link,
92 | cache: new InMemoryCache(),
93 | })
94 |
95 | return (
96 |
97 |
107 | {({ data, loading, error }) => {
108 | if (loading) return 'loading...'
109 | if (error) return error.message
110 |
111 | return (
112 |
113 | {data.programming_language.map(pl => {
114 | const { name, vote_count } = pl
115 |
116 | let content = null
117 | if (isIn) {
118 | const isLoved =
119 | pl.lovedLanguagesByname_aggregate.aggregate.count === 1
120 | if (isLoved) {
121 | content = (
122 |
123 | {unlove => Unlove }
124 |
125 | )
126 | } else {
127 | content = (
128 |
129 | {love => Love }
130 |
131 | )
132 | }
133 | }
134 |
135 | return (
136 |
137 | {`${name} - ${vote_count}`}
138 |
139 |
140 | {vote => Vote }
141 |
142 | {content}
143 |
144 |
145 | )
146 | })}
147 |
148 | )
149 | }}
150 |
151 |
152 | )
153 | }
154 |
--------------------------------------------------------------------------------
/react-web-app/src/serviceWorker.js:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read http://bit.ly/CRA-PWA
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.1/8 is considered localhost for IPv4.
18 | window.location.hostname.match(
19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,
20 | ),
21 | )
22 |
23 | export function register(config) {
24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
25 | // The URL constructor is available in all browsers that support SW.
26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)
27 | if (publicUrl.origin !== window.location.origin) {
28 | // Our service worker won't work if PUBLIC_URL is on a different origin
29 | // from what our page is served on. This might happen if a CDN is used to
30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
31 | return
32 | }
33 |
34 | window.addEventListener('load', () => {
35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`
36 |
37 | if (isLocalhost) {
38 | // This is running on localhost. Let's check if a service worker still exists or not.
39 | checkValidServiceWorker(swUrl, config)
40 |
41 | // Add some additional logging to localhost, pointing developers to the
42 | // service worker/PWA documentation.
43 | navigator.serviceWorker.ready.then(() => {
44 | console.log(
45 | 'This web app is being served cache-first by a service ' +
46 | 'worker. To learn more, visit http://bit.ly/CRA-PWA',
47 | )
48 | })
49 | } else {
50 | // Is not localhost. Just register service worker
51 | registerValidSW(swUrl, config)
52 | }
53 | })
54 | }
55 | }
56 |
57 | function registerValidSW(swUrl, config) {
58 | navigator.serviceWorker
59 | .register(swUrl)
60 | .then(registration => {
61 | registration.onupdatefound = () => {
62 | const installingWorker = registration.installing
63 | if (installingWorker == null) {
64 | return
65 | }
66 | installingWorker.onstatechange = () => {
67 | if (installingWorker.state === 'installed') {
68 | if (navigator.serviceWorker.controller) {
69 | // At this point, the updated precached content has been fetched,
70 | // but the previous service worker will still serve the older
71 | // content until all client tabs are closed.
72 | console.log(
73 | 'New content is available and will be used when all ' +
74 | 'tabs for this page are closed. See http://bit.ly/CRA-PWA.',
75 | )
76 |
77 | // Execute callback
78 | if (config && config.onUpdate) {
79 | config.onUpdate(registration)
80 | }
81 | } else {
82 | // At this point, everything has been precached.
83 | // It's the perfect time to display a
84 | // "Content is cached for offline use." message.
85 | console.log('Content is cached for offline use.')
86 |
87 | // Execute callback
88 | if (config && config.onSuccess) {
89 | config.onSuccess(registration)
90 | }
91 | }
92 | }
93 | }
94 | }
95 | })
96 | .catch(error => {
97 | console.error('Error during service worker registration:', error)
98 | })
99 | }
100 |
101 | function checkValidServiceWorker(swUrl, config) {
102 | // Check if the service worker can be found. If it can't reload the page.
103 | fetch(swUrl)
104 | .then(response => {
105 | // Ensure service worker exists, and that we really are getting a JS file.
106 | const contentType = response.headers.get('content-type')
107 | if (
108 | response.status === 404 ||
109 | (contentType != null && contentType.indexOf('javascript') === -1)
110 | ) {
111 | // No service worker found. Probably a different app. Reload the page.
112 | navigator.serviceWorker.ready.then(registration => {
113 | registration.unregister().then(() => {
114 | window.location.reload()
115 | })
116 | })
117 | } else {
118 | // Service worker found. Proceed as normal.
119 | registerValidSW(swUrl, config)
120 | }
121 | })
122 | .catch(() => {
123 | console.log(
124 | 'No internet connection found. App is running in offline mode.',
125 | )
126 | })
127 | }
128 |
129 | export function unregister() {
130 | if ('serviceWorker' in navigator) {
131 | navigator.serviceWorker.ready.then(registration => {
132 | registration.unregister()
133 | })
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Build a real-time app with authentication and authorization in Hasura
2 |
3 | Hasura helps you build production-level [3factor](https://3factor.app/) apps really fast. In addition to generating CRUD GraphQL APIs from your PostgreSQL database, it also provides ways to **authenticate** users using webhooks or JWT and helps you define granular access controls rules for your GraphQL schema (**authorization**). However, integrating an auth system with Hasura backend and some frontend still requires a lot of effort, and can be tricky sometimes. This tutorial aims to demonstrate how to do that by making a real-time voting app like the [official sample](https://realtime-poll.demo.hasura.app/) but with auth built in. We are going to use Hasura for the backend, Firebase Authentication for authentication and React for the frontend.
4 |
5 | It takes mainly 3 steps:
6 |
7 | 1. Set up Hasura and create the data model using the Hasura Console.
8 | 2. Set up Authentication.
9 | 3. Build the React web app.
10 |
11 | ## Prerequisites
12 |
13 | - React
14 | - GraphQL
15 | - Some SQL
16 |
17 | ## Try the demo
18 |
19 | The demo is live at [hasura-vote.now.sh](https://hasura-vote.now.sh/), you can try it! It's a simple app in which you can vote for your favorite programming languages. The votes are updated in real time. After you signed in, you can also mark languages as "loved".
20 |
21 | ## Using Firebase Authentication versus building your own
22 |
23 | Building a robust authentication system is no small effort. It's so important that it can break or make your app. Because the main focus of this tutorial is to **integrate** an auth system with Hasura and React, we are going to use the off-the-shelf Firebase Authentication. It's secure, has many useful features such as third-party sign-in and passwordless sign-in and has a generous free tier.
24 |
25 | ## Step One: Hasura
26 |
27 | It's very easy to get Hasura running. Just follow the [Deploy Hasura to Heroku Guide](https://docs.hasura.io/1.0/graphql/manual/getting-started/heroku-simple.html) and in the end, you will have a brand new instance running at a domain that looks like "https://[your-heroku-project-name].herokuapp.com".
28 |
29 | 
30 |
31 | We need to set some environment variables as we are in the Heroku console. Set `HASURA_GRAPHQL_ADMIN_SECRET` to some secret and write it down before you forget it, thus out API can't be accessed by some random guy on the Internet. Since we will use JWT from Firebase, set `HASURA_GRAPHQL_JWT_SECRET` to `{"type":"RS512", "jwk_url": "https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com"}`. Finally, set `HASURA_GRAPHQL_UNAUTHORIZED_ROLE` to `anonymous` because we do allow unauthenticated users to write and read some data.
32 |
33 | Now it's time for data modeling. First, we need a "programming_language" table with "name" and "vote_count" field.
34 |
35 | 
36 |
37 | Also, we need a "loved_language" table to record whether a language is loved by some user. Since a user can only love a language once, we need to set the primary key as name and user_id combined. There is no way to do that in the "Add Table" UI, but Hasura conveniently provides a way to execute raw SQL:
38 |
39 | ```sql
40 | CREATE TABLE "public"."loved_language" (
41 | "name" text NOT NULL,
42 | "user_id" text NOT NULL,
43 | CONSTRAINT loved_language_pkey PRIMARY KEY (name, user_id),
44 | CONSTRAINT loved_language_programming_language_fky FOREIGN KEY (name) REFERENCES programming_language(name),
45 | )
46 | ```
47 |
48 | 
49 |
50 | After you create these two tables, Hasura would notice the one-to-many relationship between them and help you create the corresponding GraphQL relationship.
51 |
52 | 
53 |
54 | Hooray! Now that we have a data model, you can play with the API in GraphiQL. Insert some of your favorite languages. Give them some vote. Love them by some random "user_id". Since we are signed in as admin, we can do anything we want. But we need to set proper permissions for the "anonymous" and "user" role. We allow both of them to select and update "programming_language":
55 |
56 | 
57 |
58 | For "loved_language", we only allow the "user" role to insert, select and delete. Notice for insert the "user_id" must come from "X-Hasura-User-Id".
59 |
60 | 
61 |
62 | With permissions set, all we need is a secure way to get the "X-Hasura-User-Id".
63 |
64 | ## Step Two: Firebase Auth
65 |
66 | Go to the [Firebase website](https://firebase.google.com/) to create a new project. By default it's on the free plan, so don't worry about the charge.
67 |
68 | In the Authentication section of the Firebase console, turn on the Google sign-in provider. In this tutorial, we only use Google sign-in, but adding other providers is trivial. Notice at the bottom of the page, in "Authorized domains", `localhost` and a Firebase domain are automatically added. If you later decide to deploy the React app to another domain, you need to add it here for Google sign-in to work.
69 |
70 | 
71 |
72 | Now we can sign in users and get their id token for Hasura in the React app, using the Firebase JS SDK. But for Hasura to know the identity of these users, whose data are stored in Firebase, we need to add some specific "custom claims" required by Hasura to the token. We will use Cloud Functions for Firebase to do that, following the [example](https://github.com/hasura/graphql-engine/tree/master/community/sample-apps/firebase-jwt) in the Hasura repo.
73 |
74 | A cloud function is, well, some function that automatically runs "in response to events triggered by Firebase features and HTTPS requests". In our case the event is firebase user creation. When that happens, we'd like to add some extra data to the user's id token. The code is straghtforward:
75 |
76 | ```js
77 | const functions = require("firebase-functions");
78 | const admin = require("firebase-admin");
79 | admin.initializeApp(functions.config().firebase);
80 |
81 | // On sign up.
82 | exports.processSignUp = functions.auth.user().onCreate(user => {
83 | const customClaims = {
84 | "https://hasura.io/jwt/claims": {
85 | "x-hasura-default-role": "user",
86 | "x-hasura-allowed-roles": ["user"],
87 | "x-hasura-user-id": user.uid
88 | }
89 | };
90 |
91 | return admin
92 | .auth()
93 | .setCustomUserClaims(user.uid, customClaims)
94 | .then(() => {
95 | // Update real-time database to notify client to force refresh.
96 | const metadataRef = admin.database().ref("metadata/" + user.uid);
97 | // Set the refresh time to the current UTC timestamp.
98 | // This will be captured on the client to force a token refresh.
99 | return metadataRef.set({ refreshTime: new Date().getTime() });
100 | })
101 | .catch(error => {
102 | console.log(error);
103 | });
104 | });
105 | ```
106 |
107 | The code with comments needs some more explanation. When a user signs in our React app, Firebase immediately gives us that user's data, including the id token we need to send to Hasura. But if it's the first time, in which the user is just created, the token may not include those custom claims. That's the reason we use Firebase real-time database to listen to a token refresh.
108 |
109 | Deploying cloud function is simple. Follow the official [Get started guide](https://firebase.google.com/docs/functions/get-started), replace `index.js` with the code above and run `firebase deploy --only functions`. That's it.
110 |
111 | Before you leave the Firebase console, you need to do one more setting. Go to the Realtime Database Rules section and change "read" from "false" to "true". Otherwise, the client won't be able to listen to the token refresh.
112 |
113 | 
114 |
115 | ## Step Three: React
116 |
117 | Finally, it's time for us to build the exciting UI. We will use Apollo Client to query our GraphQL API. Follow the [client setup guide](https://www.apollographql.com/docs/react/advanced/subscriptions.html#subscriptions-client) to add all the needed npm packages.
118 |
119 | Since the app is simple, we are only going to build two components: "Auth" and "App". "Auth" uses Firebase SDK to sign in users and pass that state to "App". "App" includes all the business logic: subscribing to the real-time data, voting and loving languages.
120 |
121 | Auth:
122 |
123 | ```js
124 | import firebase from "firebase/app";
125 | import "firebase/auth";
126 | import "firebase/database";
127 | import React, { useState, useEffect } from "react";
128 | import App from "./App";
129 |
130 | const provider = new firebase.auth.GoogleAuthProvider();
131 |
132 | // Find these options in your Firebase console
133 | firebase.initializeApp({
134 | apiKey: "xxx",
135 | authDomain: "xxx",
136 | databaseURL: "xxx",
137 | projectId: "xxx",
138 | storageBucket: "xxx",
139 | messagingSenderId: "xxx"
140 | });
141 |
142 | export default function Auth() {
143 | const [authState, setAuthState] = useState({ status: "loading" });
144 |
145 | useEffect(() => {
146 | return firebase.auth().onAuthStateChanged(async user => {
147 | if (user) {
148 | const token = await user.getIdToken();
149 | const idTokenResult = await user.getIdTokenResult();
150 | const hasuraClaim =
151 | idTokenResult.claims["https://hasura.io/jwt/claims"];
152 |
153 | if (hasuraClaim) {
154 | setAuthState({ status: "in", user, token });
155 | } else {
156 | // Check if refresh is required.
157 | const metadataRef = firebase
158 | .database()
159 | .ref("metadata/" + user.uid + "/refreshTime");
160 |
161 | metadataRef.on("value", async data => {
162 | if (!data.exists) {
163 | return;
164 | }
165 | // Force refresh to pick up the latest custom claims changes.
166 | const token = await user.getIdToken(true);
167 | setAuthState({ status: "in", user, token });
168 | });
169 | }
170 | } else {
171 | setAuthState({ status: "out" });
172 | }
173 | });
174 | }, []);
175 |
176 | const signInWithGoogle = async () => {
177 | try {
178 | await firebase.auth().signInWithPopup(provider);
179 | } catch (error) {
180 | console.log(error);
181 | }
182 | };
183 |
184 | const signOut = async () => {
185 | try {
186 | setAuthState({ status: "loading" });
187 | await firebase.auth().signOut();
188 | setAuthState({ status: "out" });
189 | } catch (error) {
190 | console.log(error);
191 | }
192 | };
193 |
194 | let content;
195 | if (authState.status === "loading") {
196 | content = null;
197 | } else {
198 | content = (
199 | <>
200 |
201 | {authState.status === "in" ? (
202 |
203 |
Welcome, {authState.user.displayName}
204 | Sign out
205 |
206 | ) : (
207 |
Sign in with Google
208 | )}
209 |
210 |
211 |
212 | >
213 | );
214 | }
215 |
216 | return {content}
;
217 | }
218 | ```
219 |
220 | The code is straight forward if you are familiar with the new [Hooks API](https://reactjs.org/docs/hooks-intro.html). Notice how we use the Firebase realtime database to listen to the refreshTime which we set up in the Firebase cloud function. Also, we check whether a user's id token already contains custom claims to avoid useless refreshing.
221 |
222 | App:
223 |
224 | ```js
225 | import { InMemoryCache } from "apollo-cache-inmemory";
226 | import ApolloClient from "apollo-client";
227 | import { split } from "apollo-link";
228 | import { HttpLink } from "apollo-link-http";
229 | import { WebSocketLink } from "apollo-link-ws";
230 | import { getMainDefinition } from "apollo-utilities";
231 | import gql from "graphql-tag";
232 | import React from "react";
233 | import { ApolloProvider, Mutation, Subscription } from "react-apollo";
234 |
235 | const PL_SUB = gql`
236 | subscription PL {
237 | programming_language(order_by: { vote_count: desc }) {
238 | name
239 | vote_count
240 | }
241 | }
242 | `;
243 |
244 | const PL_WITH_LOVE_SUB = gql`
245 | subscription PL_WITH_LOVE($userId: String!) {
246 | programming_language(order_by: { vote_count: desc }) {
247 | name
248 | vote_count
249 | lovedLanguagesByname_aggregate(where: { user_id: { _eq: $userId } }) {
250 | aggregate {
251 | count
252 | }
253 | }
254 | }
255 | }
256 | `;
257 |
258 | const VOTE_MUTATION = gql`
259 | mutation Vote($name: String!) {
260 | update_programming_language(
261 | _inc: { vote_count: 1 }
262 | where: { name: { _eq: $name } }
263 | ) {
264 | returning {
265 | vote_count
266 | }
267 | }
268 | }
269 | `;
270 |
271 | const LOVE_MUTATION = gql`
272 | mutation Love($name: String!) {
273 | insert_loved_language(objects: { name: $name }) {
274 | affected_rows
275 | }
276 | }
277 | `;
278 |
279 | const UNLOVE_MUTATION = gql`
280 | mutation Unlove($name: String!) {
281 | delete_loved_language(where: { name: { _eq: $name } }) {
282 | affected_rows
283 | }
284 | }
285 | `;
286 |
287 | export default function App({ authState }) {
288 | const isIn = authState.status === "in";
289 |
290 | const headers = isIn ? { Authorization: `Bearer ${authState.token}` } : {};
291 |
292 | const httpLink = new HttpLink({
293 | uri: "https://your-heroku-domain/v1alpha1/graphql",
294 | headers
295 | });
296 |
297 | const wsLink = new WebSocketLink({
298 | uri: "wss://your-heroku-domain/v1alpha1/graphql",
299 | options: {
300 | reconnect: true,
301 | connectionParams: {
302 | headers
303 | }
304 | }
305 | });
306 |
307 | const link = split(
308 | ({ query }) => {
309 | const { kind, operation } = getMainDefinition(query);
310 | return kind === "OperationDefinition" && operation === "subscription";
311 | },
312 | wsLink,
313 | httpLink
314 | );
315 |
316 | const client = new ApolloClient({
317 | link,
318 | cache: new InMemoryCache()
319 | });
320 |
321 | return (
322 |
323 |
333 | {({ data, loading, error }) => {
334 | if (loading) return "loading...";
335 | if (error) return error.message;
336 |
337 | return (
338 |
339 | {data.programming_language.map(pl => {
340 | const { name, vote_count } = pl;
341 |
342 | let content = null;
343 | if (isIn) {
344 | const isLoved =
345 | pl.lovedLanguagesByname_aggregate.aggregate.count === 1;
346 | if (isLoved) {
347 | content = (
348 |
349 | {unlove => Unlove }
350 |
351 | );
352 | } else {
353 | content = (
354 |
355 | {love => Love }
356 |
357 | );
358 | }
359 | }
360 |
361 | return (
362 |
363 | {`${name} - ${vote_count}`}
364 |
365 |
366 | {vote => Vote }
367 |
368 | {content}
369 |
370 |
371 | );
372 | })}
373 |
374 | );
375 | }}
376 |
377 |
378 | );
379 | }
380 | ```
381 |
382 | Notice how Hasura and GraphQL enable us to flexibly query data we need based on different auth state.
383 |
384 | ## Wrapping up
385 |
386 | In this tutorial, we build a real-time voting app with Hasura. We integrate a robust auth system both on the backend and frontend. You can see how Hasura makes tedious and hard jobs easy by providing a pluggable GraphQL and auth interface. Based on this model, there really is no limit on what kind of amazing apps you can build.
387 |
388 | All the code in this tutorial are in the [Github repo](https://github.com/thezjy/hasura-vote).
389 |
--------------------------------------------------------------------------------
/functions/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@firebase/app-types@0.3.4":
6 | version "0.3.4"
7 | resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.3.4.tgz#ea0b9d23c93efb139a90247bf7361b774eb80aeb"
8 | integrity sha512-XIc1wu7CJ0469STQPwyuokcBGFpRr7BVKKdajj/wAxzNntatDTXo1jdGfmjA8UYcuvW+QJmMkOE9KIOf5HgSzw==
9 |
10 | "@firebase/app@^0.3.4":
11 | version "0.3.9"
12 | resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.3.9.tgz#c1455a3706df682f35828e076192b0d30a3cc029"
13 | integrity sha512-mjgBSQsjln5vAV4zDIn3gjsRlcvn6KxMVNGdhdJmrHRPfjBYUQJycn2X3xwF0krwB41WS8SQCsHHQssXY+kfVQ==
14 | dependencies:
15 | "@firebase/app-types" "0.3.4"
16 | "@firebase/util" "0.2.7"
17 | dom-storage "2.1.0"
18 | tslib "1.9.0"
19 | xmlhttprequest "1.8.0"
20 |
21 | "@firebase/database-types@0.3.5":
22 | version "0.3.5"
23 | resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.3.5.tgz#9c4937e16b44b4b458e1c2ad70a7dd15cf9bf3f4"
24 | integrity sha512-MB98w9DsZtTN45sf651s5z4f2zdn5gPi2SMaZk32HLihPDgKv5pepzZ+grxioM7z5ZU1EvjjXRL7oM81OH3mZQ==
25 |
26 | "@firebase/database@^0.3.6":
27 | version "0.3.12"
28 | resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.3.12.tgz#abedab62318c1f0b54fd9b482eef1090ee68e66d"
29 | integrity sha512-Gim1kYUXBOX7xYwrBY6sOgQerOkhYGYvwwPCFeuBTXVy6X8b98SCSk7oMrmrG0+tG6gosmq7CT59AOxZEx4/0Q==
30 | dependencies:
31 | "@firebase/database-types" "0.3.5"
32 | "@firebase/logger" "0.1.6"
33 | "@firebase/util" "0.2.7"
34 | faye-websocket "0.11.1"
35 | tslib "1.9.0"
36 |
37 | "@firebase/logger@0.1.6":
38 | version "0.1.6"
39 | resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.1.6.tgz#0528048b16c53c66d87fb75b9e33ac03bae0109b"
40 | integrity sha512-74COMdYK/CZBgCSzEJGtQYpi1wGg1QlCUTQ/BrqqEIGg7GcnEcUCyjtRLogRQPYj3P7qaJLzHTSErJ8ZUAGotQ==
41 |
42 | "@firebase/util@0.2.7":
43 | version "0.2.7"
44 | resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.2.7.tgz#c13818ec5a01ed74586208db58d166f61681c9dc"
45 | integrity sha512-I6rN6smH1XEXUIDySI2jr4pM8r2tBnE40mANYco2lbzs2D0nk9aiwKp5MTWRAmqRy4WDe7sx9sqs0cFefzsD6A==
46 | dependencies:
47 | tslib "1.9.0"
48 |
49 | "@google-cloud/common@^0.31.0":
50 | version "0.31.0"
51 | resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.31.0.tgz#51a82d681043e2718bd32708586d3131b019d7a8"
52 | integrity sha512-mO7WFavzqmr24btNb2zimUh+M3fGnIKGbkR1VT6ZG3yDV+S7BiZPmPiFHKRJVrxwi5sA9U6X6fpNpHgj7j2a2w==
53 | dependencies:
54 | "@google-cloud/projectify" "^0.3.2"
55 | "@google-cloud/promisify" "^0.3.0"
56 | "@types/duplexify" "^3.5.0"
57 | "@types/request" "^2.47.0"
58 | arrify "^1.0.1"
59 | duplexify "^3.6.0"
60 | ent "^2.2.0"
61 | extend "^3.0.1"
62 | google-auth-library "^3.0.0"
63 | pify "^4.0.0"
64 | retry-request "^4.0.0"
65 |
66 | "@google-cloud/firestore@^1.0.1":
67 | version "1.0.1"
68 | resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-1.0.1.tgz#7e8fd44e026dc3cd28663ec9050bc1bc2f708fae"
69 | integrity sha512-h8DxYkrP62VZjmwUJWwsm9F+fUagne2ANML9eIOPT3JWBS+41ZBxNgxOjH8hR5Htxz6GD+xsrr0KYxKBd1eepQ==
70 | dependencies:
71 | "@google-cloud/projectify" "^0.3.0"
72 | bun "^0.0.12"
73 | deep-equal "^1.0.1"
74 | extend "^3.0.1"
75 | functional-red-black-tree "^1.0.1"
76 | google-gax "^0.24.0"
77 | is "^3.2.1"
78 | lodash.merge "^4.6.1"
79 | protobufjs "^6.8.6"
80 | through2 "^3.0.0"
81 |
82 | "@google-cloud/paginator@^0.1.0":
83 | version "0.1.2"
84 | resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-0.1.2.tgz#a7e6579e43f153055b4c65035a6729490a611a60"
85 | integrity sha512-XL09cuPSEPyyNifavxWJRYkUFr5zCJ9njcFjqc1AqSQ2QIKycwdTxOP/zHsAWj0xN3rw1ApevA8o+8VAD4R6hw==
86 | dependencies:
87 | arrify "^1.0.1"
88 | extend "^3.0.1"
89 | is "^3.2.1"
90 | split-array-stream "^2.0.0"
91 | stream-events "^1.0.4"
92 |
93 | "@google-cloud/projectify@^0.3.0", "@google-cloud/projectify@^0.3.2":
94 | version "0.3.2"
95 | resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-0.3.2.tgz#ed54c98cae646dc03a742eac288184a13d33a4c2"
96 | integrity sha512-t1bs5gE105IpgikX7zPCJZzVyXM5xZ/1kJomUPim2E2pNp4OUUFNyvKm/T2aM6GBP2F30o8abCD+/wbOhHWYYA==
97 |
98 | "@google-cloud/promisify@^0.3.0":
99 | version "0.3.1"
100 | resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-0.3.1.tgz#f641e6d944a8e0a05ee0cb1091dfa60089becdba"
101 | integrity sha512-QzB0/IMvB0eFxFK7Eqh+bfC8NLv3E9ScjWQrPOk6GgfNroxcVITdTlT8NRsRrcp5+QQJVPLkRqKG0PUdaWXmHw==
102 |
103 | "@google-cloud/storage@^2.3.0":
104 | version "2.4.2"
105 | resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-2.4.2.tgz#24c3ea68e3368ec42193532a7b6e22e16bc3ea49"
106 | integrity sha512-G4rlt5h2oypPYU2ZtmF3N0FpE47aRvsxp8NmZEdlScd5LgjDAu5Ha01hMOA/ZHBVsUlOGFfa+TxU5Ei/56+0Gg==
107 | dependencies:
108 | "@google-cloud/common" "^0.31.0"
109 | "@google-cloud/paginator" "^0.1.0"
110 | "@google-cloud/promisify" "^0.3.0"
111 | arrify "^1.0.0"
112 | async "^2.0.1"
113 | compressible "^2.0.12"
114 | concat-stream "^2.0.0"
115 | duplexify "^3.5.0"
116 | extend "^3.0.0"
117 | gcs-resumable-upload "^0.14.1"
118 | hash-stream-validation "^0.2.1"
119 | mime "^2.2.0"
120 | mime-types "^2.0.8"
121 | once "^1.3.1"
122 | pumpify "^1.5.1"
123 | snakeize "^0.1.0"
124 | stream-events "^1.0.1"
125 | teeny-request "^3.11.3"
126 | through2 "^3.0.0"
127 | xdg-basedir "^3.0.0"
128 |
129 | "@grpc/grpc-js@^0.3.0":
130 | version "0.3.5"
131 | resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.3.5.tgz#849235a60e961672232111cb221021242252206a"
132 | integrity sha512-LAzNgWYr5FHIkn1XPVTOO5qt6an6sBz0dPSKGOjoBwm6eUgHCVGvyxc72DGXgRHwT8hBfT1VwBmhwGHwfdtjeA==
133 | dependencies:
134 | semver "^5.5.0"
135 |
136 | "@grpc/proto-loader@^0.4.0":
137 | version "0.4.0"
138 | resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.4.0.tgz#a823a51eb2fde58369bef1deb5445fd808d70901"
139 | integrity sha512-Jm6o+75uWT7E6+lt8edg4J1F/9+BedOjaMgwE14pxS/AO43/0ZqK+rCLVVrXLoExwSAZvgvOD2B0ivy3Spsspw==
140 | dependencies:
141 | lodash.camelcase "^4.3.0"
142 | protobufjs "^6.8.6"
143 |
144 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
145 | version "1.1.2"
146 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
147 | integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
148 |
149 | "@protobufjs/base64@^1.1.2":
150 | version "1.1.2"
151 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
152 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
153 |
154 | "@protobufjs/codegen@^2.0.4":
155 | version "2.0.4"
156 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
157 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
158 |
159 | "@protobufjs/eventemitter@^1.1.0":
160 | version "1.1.0"
161 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
162 | integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
163 |
164 | "@protobufjs/fetch@^1.1.0":
165 | version "1.1.0"
166 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
167 | integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
168 | dependencies:
169 | "@protobufjs/aspromise" "^1.1.1"
170 | "@protobufjs/inquire" "^1.1.0"
171 |
172 | "@protobufjs/float@^1.0.2":
173 | version "1.0.2"
174 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
175 | integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
176 |
177 | "@protobufjs/inquire@^1.1.0":
178 | version "1.1.0"
179 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
180 | integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
181 |
182 | "@protobufjs/path@^1.1.2":
183 | version "1.1.2"
184 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
185 | integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
186 |
187 | "@protobufjs/pool@^1.1.0":
188 | version "1.1.0"
189 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
190 | integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
191 |
192 | "@protobufjs/utf8@^1.1.0":
193 | version "1.1.0"
194 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
195 | integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
196 |
197 | "@types/body-parser@*":
198 | version "1.17.0"
199 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
200 | integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==
201 | dependencies:
202 | "@types/connect" "*"
203 | "@types/node" "*"
204 |
205 | "@types/caseless@*":
206 | version "0.12.1"
207 | resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.1.tgz#9794c69c8385d0192acc471a540d1f8e0d16218a"
208 | integrity sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==
209 |
210 | "@types/connect@*":
211 | version "3.4.32"
212 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
213 | integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
214 | dependencies:
215 | "@types/node" "*"
216 |
217 | "@types/cors@^2.8.1":
218 | version "2.8.4"
219 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0"
220 | integrity sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==
221 | dependencies:
222 | "@types/express" "*"
223 |
224 | "@types/duplexify@^3.5.0":
225 | version "3.6.0"
226 | resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.0.tgz#dfc82b64bd3a2168f5bd26444af165bf0237dcd8"
227 | integrity sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==
228 | dependencies:
229 | "@types/node" "*"
230 |
231 | "@types/express-serve-static-core@*":
232 | version "4.16.1"
233 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz#35df7b302299a4ab138a643617bd44078e74d44e"
234 | integrity sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA==
235 | dependencies:
236 | "@types/node" "*"
237 | "@types/range-parser" "*"
238 |
239 | "@types/express@*", "@types/express@^4.11.1":
240 | version "4.16.1"
241 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0"
242 | integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==
243 | dependencies:
244 | "@types/body-parser" "*"
245 | "@types/express-serve-static-core" "*"
246 | "@types/serve-static" "*"
247 |
248 | "@types/form-data@*":
249 | version "2.2.1"
250 | resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.1.tgz#ee2b3b8eaa11c0938289953606b745b738c54b1e"
251 | integrity sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==
252 | dependencies:
253 | "@types/node" "*"
254 |
255 | "@types/jsonwebtoken@^7.2.6":
256 | version "7.2.8"
257 | resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz#8d199dab4ddb5bba3234f8311b804d2027af2b3a"
258 | integrity sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==
259 | dependencies:
260 | "@types/node" "*"
261 |
262 | "@types/lodash@^4.14.34":
263 | version "4.14.121"
264 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9"
265 | integrity sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ==
266 |
267 | "@types/long@^4.0.0":
268 | version "4.0.0"
269 | resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
270 | integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==
271 |
272 | "@types/mime@*":
273 | version "2.0.1"
274 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
275 | integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
276 |
277 | "@types/node@*":
278 | version "11.9.5"
279 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.5.tgz#011eece9d3f839a806b63973e228f85967b79ed3"
280 | integrity sha512-vVjM0SVzgaOUpflq4GYBvCpozes8OgIIS5gVXVka+OfK3hvnkC1i93U8WiY2OtNE4XUWyyy/86Kf6e0IHTQw1Q==
281 |
282 | "@types/node@^10.1.0":
283 | version "10.12.27"
284 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.27.tgz#eb3843f15d0ba0986cc7e4d734d2ee8b50709ef8"
285 | integrity sha512-e9wgeY6gaY21on3ve0xAjgBVjGDWq/xUteK0ujsE53bUoxycMkqfnkUgMt6ffZtykZ5X12Mg3T7Pw4TRCObDKg==
286 |
287 | "@types/node@^8.0.53":
288 | version "8.10.40"
289 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.40.tgz#4314888d5cd537945d73e9ce165c04cc550144a4"
290 | integrity sha512-RRSjdwz63kS4u7edIwJUn8NqKLLQ6LyqF/X4+4jp38MBT3Vwetewi2N4dgJEshLbDwNgOJXNYoOwzVZUSSLhkQ==
291 |
292 | "@types/range-parser@*":
293 | version "1.2.3"
294 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
295 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
296 |
297 | "@types/request@^2.47.0":
298 | version "2.48.1"
299 | resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.1.tgz#e402d691aa6670fbbff1957b15f1270230ab42fa"
300 | integrity sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==
301 | dependencies:
302 | "@types/caseless" "*"
303 | "@types/form-data" "*"
304 | "@types/node" "*"
305 | "@types/tough-cookie" "*"
306 |
307 | "@types/serve-static@*":
308 | version "1.13.2"
309 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
310 | integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==
311 | dependencies:
312 | "@types/express-serve-static-core" "*"
313 | "@types/mime" "*"
314 |
315 | "@types/tough-cookie@*":
316 | version "2.3.5"
317 | resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d"
318 | integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==
319 |
320 | abbrev@1:
321 | version "1.1.1"
322 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
323 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
324 |
325 | abort-controller@^2.0.2:
326 | version "2.0.2"
327 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-2.0.2.tgz#f0c059173ac7fdc4dba73e3833102def407a6a29"
328 | integrity sha512-JXEYGxxMwiNl9EUdLysK0K0DwB7ENw6KeeaLHgofijTfJYPB/vOer3Mb+IcP913dCfWiQsd05MmVNl0H5PanrQ==
329 | dependencies:
330 | event-target-shim "^5.0.0"
331 |
332 | accepts@~1.3.5:
333 | version "1.3.5"
334 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
335 | integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
336 | dependencies:
337 | mime-types "~2.1.18"
338 | negotiator "0.6.1"
339 |
340 | agent-base@^4.1.0:
341 | version "4.2.1"
342 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
343 | integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
344 | dependencies:
345 | es6-promisify "^5.0.0"
346 |
347 | ajv@^6.5.5:
348 | version "6.9.2"
349 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.2.tgz#4927adb83e7f48e5a32b45729744c71ec39c9c7b"
350 | integrity sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==
351 | dependencies:
352 | fast-deep-equal "^2.0.1"
353 | fast-json-stable-stringify "^2.0.0"
354 | json-schema-traverse "^0.4.1"
355 | uri-js "^4.2.2"
356 |
357 | ansi-regex@^2.0.0:
358 | version "2.1.1"
359 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
360 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
361 |
362 | ansi-regex@^3.0.0:
363 | version "3.0.0"
364 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
365 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
366 |
367 | aproba@^1.0.3:
368 | version "1.2.0"
369 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
370 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
371 |
372 | are-we-there-yet@~1.1.2:
373 | version "1.1.5"
374 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
375 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
376 | dependencies:
377 | delegates "^1.0.0"
378 | readable-stream "^2.0.6"
379 |
380 | array-flatten@1.1.1:
381 | version "1.1.1"
382 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
383 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
384 |
385 | arrify@^1.0.0, arrify@^1.0.1:
386 | version "1.0.1"
387 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
388 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
389 |
390 | ascli@~1:
391 | version "1.0.1"
392 | resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
393 | integrity sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=
394 | dependencies:
395 | colour "~0.7.1"
396 | optjs "~3.2.2"
397 |
398 | asn1@~0.2.3:
399 | version "0.2.4"
400 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
401 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
402 | dependencies:
403 | safer-buffer "~2.1.0"
404 |
405 | assert-plus@1.0.0, assert-plus@^1.0.0:
406 | version "1.0.0"
407 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
408 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
409 |
410 | async@^2.0.1:
411 | version "2.6.2"
412 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
413 | integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
414 | dependencies:
415 | lodash "^4.17.11"
416 |
417 | asynckit@^0.4.0:
418 | version "0.4.0"
419 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
420 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
421 |
422 | aws-sign2@~0.7.0:
423 | version "0.7.0"
424 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
425 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
426 |
427 | aws4@^1.8.0:
428 | version "1.8.0"
429 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
430 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
431 |
432 | balanced-match@^1.0.0:
433 | version "1.0.0"
434 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
435 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
436 |
437 | base64-js@^1.3.0:
438 | version "1.3.0"
439 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
440 | integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
441 |
442 | bcrypt-pbkdf@^1.0.0:
443 | version "1.0.2"
444 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
445 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
446 | dependencies:
447 | tweetnacl "^0.14.3"
448 |
449 | bignumber.js@^7.0.0:
450 | version "7.2.1"
451 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f"
452 | integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==
453 |
454 | body-parser@1.18.3:
455 | version "1.18.3"
456 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
457 | integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
458 | dependencies:
459 | bytes "3.0.0"
460 | content-type "~1.0.4"
461 | debug "2.6.9"
462 | depd "~1.1.2"
463 | http-errors "~1.6.3"
464 | iconv-lite "0.4.23"
465 | on-finished "~2.3.0"
466 | qs "6.5.2"
467 | raw-body "2.3.3"
468 | type-is "~1.6.16"
469 |
470 | brace-expansion@^1.1.7:
471 | version "1.1.11"
472 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
473 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
474 | dependencies:
475 | balanced-match "^1.0.0"
476 | concat-map "0.0.1"
477 |
478 | buffer-equal-constant-time@1.0.1:
479 | version "1.0.1"
480 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
481 | integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
482 |
483 | buffer-from@^1.0.0:
484 | version "1.1.1"
485 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
486 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
487 |
488 | bun@^0.0.12:
489 | version "0.0.12"
490 | resolved "https://registry.yarnpkg.com/bun/-/bun-0.0.12.tgz#d54fae69f895557f275423bc14b404030b20a5fc"
491 | integrity sha512-Toms18J9DqnT+IfWkwxVTB2EaBprHvjlMWrTIsfX4xbu3ZBqVBwrERU0em1IgtRe04wT+wJxMlKHZok24hrcSQ==
492 | dependencies:
493 | readable-stream "~1.0.32"
494 |
495 | bytebuffer@~5:
496 | version "5.0.1"
497 | resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
498 | integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=
499 | dependencies:
500 | long "~3"
501 |
502 | bytes@3.0.0:
503 | version "3.0.0"
504 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
505 | integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
506 |
507 | camelcase@^2.0.1:
508 | version "2.1.1"
509 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
510 | integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
511 |
512 | caseless@~0.12.0:
513 | version "0.12.0"
514 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
515 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
516 |
517 | chownr@^1.1.1:
518 | version "1.1.1"
519 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
520 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
521 |
522 | cliui@^3.0.3:
523 | version "3.2.0"
524 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
525 | integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
526 | dependencies:
527 | string-width "^1.0.1"
528 | strip-ansi "^3.0.1"
529 | wrap-ansi "^2.0.0"
530 |
531 | code-point-at@^1.0.0:
532 | version "1.1.0"
533 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
534 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
535 |
536 | colour@~0.7.1:
537 | version "0.7.1"
538 | resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
539 | integrity sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=
540 |
541 | combined-stream@^1.0.6, combined-stream@~1.0.6:
542 | version "1.0.7"
543 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
544 | integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
545 | dependencies:
546 | delayed-stream "~1.0.0"
547 |
548 | compressible@^2.0.12:
549 | version "2.0.16"
550 | resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f"
551 | integrity sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==
552 | dependencies:
553 | mime-db ">= 1.38.0 < 2"
554 |
555 | concat-map@0.0.1:
556 | version "0.0.1"
557 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
558 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
559 |
560 | concat-stream@^2.0.0:
561 | version "2.0.0"
562 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
563 | integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
564 | dependencies:
565 | buffer-from "^1.0.0"
566 | inherits "^2.0.3"
567 | readable-stream "^3.0.2"
568 | typedarray "^0.0.6"
569 |
570 | configstore@^4.0.0:
571 | version "4.0.0"
572 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7"
573 | integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==
574 | dependencies:
575 | dot-prop "^4.1.0"
576 | graceful-fs "^4.1.2"
577 | make-dir "^1.0.0"
578 | unique-string "^1.0.0"
579 | write-file-atomic "^2.0.0"
580 | xdg-basedir "^3.0.0"
581 |
582 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
583 | version "1.1.0"
584 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
585 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
586 |
587 | content-disposition@0.5.2:
588 | version "0.5.2"
589 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
590 | integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
591 |
592 | content-type@~1.0.4:
593 | version "1.0.4"
594 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
595 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
596 |
597 | cookie-signature@1.0.6:
598 | version "1.0.6"
599 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
600 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
601 |
602 | cookie@0.3.1:
603 | version "0.3.1"
604 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
605 | integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
606 |
607 | core-util-is@1.0.2, core-util-is@~1.0.0:
608 | version "1.0.2"
609 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
610 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
611 |
612 | cors@^2.8.4:
613 | version "2.8.5"
614 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
615 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
616 | dependencies:
617 | object-assign "^4"
618 | vary "^1"
619 |
620 | crypto-random-string@^1.0.0:
621 | version "1.0.0"
622 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
623 | integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
624 |
625 | dashdash@^1.12.0:
626 | version "1.14.1"
627 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
628 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
629 | dependencies:
630 | assert-plus "^1.0.0"
631 |
632 | debug@2.6.9, debug@^2.1.2:
633 | version "2.6.9"
634 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
635 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
636 | dependencies:
637 | ms "2.0.0"
638 |
639 | debug@^3.1.0:
640 | version "3.2.6"
641 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
642 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
643 | dependencies:
644 | ms "^2.1.1"
645 |
646 | decamelize@^1.1.1:
647 | version "1.2.0"
648 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
649 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
650 |
651 | deep-equal@^1.0.1:
652 | version "1.0.1"
653 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
654 | integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
655 |
656 | deep-extend@^0.6.0:
657 | version "0.6.0"
658 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
659 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
660 |
661 | delayed-stream@~1.0.0:
662 | version "1.0.0"
663 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
664 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
665 |
666 | delegates@^1.0.0:
667 | version "1.0.0"
668 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
669 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
670 |
671 | depd@~1.1.2:
672 | version "1.1.2"
673 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
674 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
675 |
676 | destroy@~1.0.4:
677 | version "1.0.4"
678 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
679 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
680 |
681 | detect-libc@^1.0.2:
682 | version "1.0.3"
683 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
684 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
685 |
686 | dom-storage@2.1.0:
687 | version "2.1.0"
688 | resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39"
689 | integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==
690 |
691 | dot-prop@^4.1.0:
692 | version "4.2.0"
693 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
694 | integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
695 | dependencies:
696 | is-obj "^1.0.0"
697 |
698 | duplexify@^3.5.0, duplexify@^3.6.0:
699 | version "3.7.1"
700 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
701 | integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
702 | dependencies:
703 | end-of-stream "^1.0.0"
704 | inherits "^2.0.1"
705 | readable-stream "^2.0.0"
706 | stream-shift "^1.0.0"
707 |
708 | ecc-jsbn@~0.1.1:
709 | version "0.1.2"
710 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
711 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
712 | dependencies:
713 | jsbn "~0.1.0"
714 | safer-buffer "^2.1.0"
715 |
716 | ecdsa-sig-formatter@1.0.11:
717 | version "1.0.11"
718 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
719 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
720 | dependencies:
721 | safe-buffer "^5.0.1"
722 |
723 | ee-first@1.1.1:
724 | version "1.1.1"
725 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
726 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
727 |
728 | encodeurl@~1.0.2:
729 | version "1.0.2"
730 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
731 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
732 |
733 | end-of-stream@^1.0.0, end-of-stream@^1.1.0:
734 | version "1.4.1"
735 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
736 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
737 | dependencies:
738 | once "^1.4.0"
739 |
740 | ent@^2.2.0:
741 | version "2.2.0"
742 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
743 | integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
744 |
745 | es6-promise@^4.0.3:
746 | version "4.2.6"
747 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
748 | integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
749 |
750 | es6-promisify@^5.0.0:
751 | version "5.0.0"
752 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
753 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
754 | dependencies:
755 | es6-promise "^4.0.3"
756 |
757 | escape-html@~1.0.3:
758 | version "1.0.3"
759 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
760 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
761 |
762 | etag@~1.8.1:
763 | version "1.8.1"
764 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
765 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
766 |
767 | event-target-shim@^5.0.0:
768 | version "5.0.1"
769 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
770 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
771 |
772 | express@^4.16.2:
773 | version "4.16.4"
774 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
775 | integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
776 | dependencies:
777 | accepts "~1.3.5"
778 | array-flatten "1.1.1"
779 | body-parser "1.18.3"
780 | content-disposition "0.5.2"
781 | content-type "~1.0.4"
782 | cookie "0.3.1"
783 | cookie-signature "1.0.6"
784 | debug "2.6.9"
785 | depd "~1.1.2"
786 | encodeurl "~1.0.2"
787 | escape-html "~1.0.3"
788 | etag "~1.8.1"
789 | finalhandler "1.1.1"
790 | fresh "0.5.2"
791 | merge-descriptors "1.0.1"
792 | methods "~1.1.2"
793 | on-finished "~2.3.0"
794 | parseurl "~1.3.2"
795 | path-to-regexp "0.1.7"
796 | proxy-addr "~2.0.4"
797 | qs "6.5.2"
798 | range-parser "~1.2.0"
799 | safe-buffer "5.1.2"
800 | send "0.16.2"
801 | serve-static "1.13.2"
802 | setprototypeof "1.1.0"
803 | statuses "~1.4.0"
804 | type-is "~1.6.16"
805 | utils-merge "1.0.1"
806 | vary "~1.1.2"
807 |
808 | extend@^3.0.0, extend@^3.0.1, extend@^3.0.2, extend@~3.0.2:
809 | version "3.0.2"
810 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
811 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
812 |
813 | extsprintf@1.3.0:
814 | version "1.3.0"
815 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
816 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
817 |
818 | extsprintf@^1.2.0:
819 | version "1.4.0"
820 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
821 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
822 |
823 | fast-deep-equal@^2.0.1:
824 | version "2.0.1"
825 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
826 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
827 |
828 | fast-json-stable-stringify@^2.0.0:
829 | version "2.0.0"
830 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
831 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
832 |
833 | fast-text-encoding@^1.0.0:
834 | version "1.0.0"
835 | resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef"
836 | integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==
837 |
838 | faye-websocket@0.11.1:
839 | version "0.11.1"
840 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
841 | integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
842 | dependencies:
843 | websocket-driver ">=0.5.1"
844 |
845 | finalhandler@1.1.1:
846 | version "1.1.1"
847 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
848 | integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
849 | dependencies:
850 | debug "2.6.9"
851 | encodeurl "~1.0.2"
852 | escape-html "~1.0.3"
853 | on-finished "~2.3.0"
854 | parseurl "~1.3.2"
855 | statuses "~1.4.0"
856 | unpipe "~1.0.0"
857 |
858 | firebase-admin@~7.0.0:
859 | version "7.0.0"
860 | resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-7.0.0.tgz#0075c650f3bf7f009eb320477683a011074765dc"
861 | integrity sha512-uYJVRuq8/b9PeJrgZwE2OIfr/MQAVhWxUpOa4AnWEEjzM7hzw2CQjY2iFzH6o0/7rTyAiGeFPQQQLBMg/xuQ6w==
862 | dependencies:
863 | "@firebase/app" "^0.3.4"
864 | "@firebase/database" "^0.3.6"
865 | "@types/node" "^8.0.53"
866 | jsonwebtoken "8.1.0"
867 | node-forge "0.7.4"
868 | optionalDependencies:
869 | "@google-cloud/firestore" "^1.0.1"
870 | "@google-cloud/storage" "^2.3.0"
871 |
872 | firebase-functions@^2.0.3:
873 | version "2.2.0"
874 | resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-2.2.0.tgz#499d4703f97b15cd59420b0fb4f0e5e5014484cc"
875 | integrity sha512-83rJvXreTH98q1XEEUZ4G9nFZ0sUVaqkxPC+v25L9FuXsWgAFpW7G28K0MJ9DBPNo/RaeNNw0zvZVtDw11CEbQ==
876 | dependencies:
877 | "@types/cors" "^2.8.1"
878 | "@types/express" "^4.11.1"
879 | "@types/jsonwebtoken" "^7.2.6"
880 | "@types/lodash" "^4.14.34"
881 | cors "^2.8.4"
882 | express "^4.16.2"
883 | jsonwebtoken "^8.2.1"
884 | lodash "^4.6.1"
885 |
886 | forever-agent@~0.6.1:
887 | version "0.6.1"
888 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
889 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
890 |
891 | form-data@~2.3.2:
892 | version "2.3.3"
893 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
894 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
895 | dependencies:
896 | asynckit "^0.4.0"
897 | combined-stream "^1.0.6"
898 | mime-types "^2.1.12"
899 |
900 | forwarded@~0.1.2:
901 | version "0.1.2"
902 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
903 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
904 |
905 | fresh@0.5.2:
906 | version "0.5.2"
907 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
908 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
909 |
910 | fs-minipass@^1.2.5:
911 | version "1.2.5"
912 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
913 | integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
914 | dependencies:
915 | minipass "^2.2.1"
916 |
917 | fs.realpath@^1.0.0:
918 | version "1.0.0"
919 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
920 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
921 |
922 | functional-red-black-tree@^1.0.1:
923 | version "1.0.1"
924 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
925 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
926 |
927 | gauge@~2.7.3:
928 | version "2.7.4"
929 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
930 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
931 | dependencies:
932 | aproba "^1.0.3"
933 | console-control-strings "^1.0.0"
934 | has-unicode "^2.0.0"
935 | object-assign "^4.1.0"
936 | signal-exit "^3.0.0"
937 | string-width "^1.0.1"
938 | strip-ansi "^3.0.1"
939 | wide-align "^1.1.0"
940 |
941 | gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1:
942 | version "1.7.0"
943 | resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.7.0.tgz#cf1638426411cb362403038e0787105f5bf08d22"
944 | integrity sha512-2SaZTtaEgnSMgRrBVnPA5O9Tc8xWfnL48fuxFL7zOHZwnam3HiNOkoosnRgnkNBZoEZrH1Aja3wMCrrDtOEqUw==
945 | dependencies:
946 | abort-controller "^2.0.2"
947 | extend "^3.0.2"
948 | https-proxy-agent "^2.2.1"
949 | node-fetch "^2.2.0"
950 |
951 | gcp-metadata@^0.9.3:
952 | version "0.9.3"
953 | resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.9.3.tgz#1f9d7495f7460a14526481f29e11596dd563dd26"
954 | integrity sha512-caV4S84xAjENtpezLCT/GILEAF5h/bC4cNqZFmt/tjTn8t+JBtTkQrgBrJu3857YdsnlM8rxX/PMcKGtE8hUlw==
955 | dependencies:
956 | gaxios "^1.0.2"
957 | json-bigint "^0.3.0"
958 |
959 | gcs-resumable-upload@^0.14.1:
960 | version "0.14.1"
961 | resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.14.1.tgz#d0b0b2acc608d63e4164329b0a1231227383b532"
962 | integrity sha512-vkIxLeVyW20DdcyhI8GvOkISV62y7+fKAdelUTn8F5en8AmPduqro5xz3VoHkj/RJ3PQmqNovYYaYPyPHwebzw==
963 | dependencies:
964 | configstore "^4.0.0"
965 | google-auth-library "^3.0.0"
966 | pumpify "^1.5.1"
967 | request "^2.87.0"
968 | stream-events "^1.0.4"
969 |
970 | getpass@^0.1.1:
971 | version "0.1.7"
972 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
973 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
974 | dependencies:
975 | assert-plus "^1.0.0"
976 |
977 | glob@^7.0.5, glob@^7.1.3:
978 | version "7.1.3"
979 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
980 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
981 | dependencies:
982 | fs.realpath "^1.0.0"
983 | inflight "^1.0.4"
984 | inherits "2"
985 | minimatch "^3.0.4"
986 | once "^1.3.0"
987 | path-is-absolute "^1.0.0"
988 |
989 | google-auth-library@^3.0.0:
990 | version "3.1.0"
991 | resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-3.1.0.tgz#6378ea3e56067312209eee58223e5a00adaec639"
992 | integrity sha512-EntjrOgSffw5EhZGoV8+ROPwEK/aQpoMZaULw3bKailEGdjaUI25PmmFc4AN6vG/Q24YEUiuLxtTXa1Usar5Eg==
993 | dependencies:
994 | base64-js "^1.3.0"
995 | fast-text-encoding "^1.0.0"
996 | gaxios "^1.2.1"
997 | gcp-metadata "^0.9.3"
998 | gtoken "^2.3.2"
999 | https-proxy-agent "^2.2.1"
1000 | jws "^3.1.5"
1001 | lru-cache "^5.0.0"
1002 | semver "^5.5.0"
1003 |
1004 | google-gax@^0.24.0:
1005 | version "0.24.0"
1006 | resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-0.24.0.tgz#accf46a8d038c6e394c6b38de894ff4f99f029bf"
1007 | integrity sha512-x+eeMgHlAFXScvuw3gm0r/DkN8519QtdST8U0KMt934dwfsavF2iFvOhnXaNvEL99CXtDImOON+NqkTfIzq/FQ==
1008 | dependencies:
1009 | "@grpc/grpc-js" "^0.3.0"
1010 | "@grpc/proto-loader" "^0.4.0"
1011 | duplexify "^3.6.0"
1012 | google-auth-library "^3.0.0"
1013 | google-proto-files "^0.18.0"
1014 | grpc "^1.16.0"
1015 | is-stream-ended "^0.1.4"
1016 | lodash.at "^4.6.0"
1017 | lodash.has "^4.5.2"
1018 | protobufjs "^6.8.8"
1019 | retry-request "^4.0.0"
1020 | semver "^5.5.1"
1021 | walkdir "0.0.12"
1022 |
1023 | google-p12-pem@^1.0.0:
1024 | version "1.0.3"
1025 | resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.3.tgz#3d8acc140573339a5bca7b2f6a4b206bbea6d8d7"
1026 | integrity sha512-KGnAiMMWaJp4j4tYVvAjfP3wCKZRLv9M1Nir2wRRNWUYO7j1aX8O9Qgz+a8/EQ5rAvuo4SIu79n6SIdkNl7Msg==
1027 | dependencies:
1028 | node-forge "^0.7.5"
1029 | pify "^4.0.0"
1030 |
1031 | google-proto-files@^0.18.0:
1032 | version "0.18.0"
1033 | resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.18.0.tgz#5be91bac15b38dbeae00393b0e47b9acb6c51cf2"
1034 | integrity sha512-blJ5rA3TWEiZIw7Qm0GHNERDdZeezDj46wE4O5uGnOWpZI/STQjeI6rPbqiwjmxzG+b592Hrp2+GKYfbmKR+Lg==
1035 | dependencies:
1036 | protobufjs "^6.8.0"
1037 | walkdir "0.0.12"
1038 |
1039 | graceful-fs@^4.1.11, graceful-fs@^4.1.2:
1040 | version "4.1.15"
1041 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
1042 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
1043 |
1044 | grpc@^1.16.0:
1045 | version "1.18.0"
1046 | resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.18.0.tgz#a550a464f787073f305c0a136ecc4b74fffbf94c"
1047 | integrity sha512-M0K67Zhv2ZzCjrTbQvjWgYFPB929L+qAVnbNgXepbfO5kJxUYc30dP8m8vb+o8QdahLHAeYfIqRoIzZRcCB98Q==
1048 | dependencies:
1049 | lodash.camelcase "^4.3.0"
1050 | lodash.clone "^4.5.0"
1051 | nan "^2.0.0"
1052 | node-pre-gyp "^0.12.0"
1053 | protobufjs "^5.0.3"
1054 |
1055 | gtoken@^2.3.2:
1056 | version "2.3.2"
1057 | resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.2.tgz#49890a866c1f44e173099be95515db5872a92151"
1058 | integrity sha512-F8EObUGyC8Qd3WXTloNULZBwfUsOABoHElihB1F6zGhT/cy38iPL09wGLRY712I+hQnOyA+sYlgPFX2cOKz0qg==
1059 | dependencies:
1060 | gaxios "^1.0.4"
1061 | google-p12-pem "^1.0.0"
1062 | jws "^3.1.5"
1063 | mime "^2.2.0"
1064 | pify "^4.0.0"
1065 |
1066 | har-schema@^2.0.0:
1067 | version "2.0.0"
1068 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
1069 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
1070 |
1071 | har-validator@~5.1.0:
1072 | version "5.1.3"
1073 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
1074 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
1075 | dependencies:
1076 | ajv "^6.5.5"
1077 | har-schema "^2.0.0"
1078 |
1079 | has-unicode@^2.0.0:
1080 | version "2.0.1"
1081 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
1082 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
1083 |
1084 | hash-stream-validation@^0.2.1:
1085 | version "0.2.1"
1086 | resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz#ecc9b997b218be5bb31298628bb807869b73dcd1"
1087 | integrity sha1-7Mm5l7IYvluzEphii7gHhptz3NE=
1088 | dependencies:
1089 | through2 "^2.0.0"
1090 |
1091 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
1092 | version "1.6.3"
1093 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
1094 | integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
1095 | dependencies:
1096 | depd "~1.1.2"
1097 | inherits "2.0.3"
1098 | setprototypeof "1.1.0"
1099 | statuses ">= 1.4.0 < 2"
1100 |
1101 | http-parser-js@>=0.4.0:
1102 | version "0.5.0"
1103 | resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8"
1104 | integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==
1105 |
1106 | http-signature@~1.2.0:
1107 | version "1.2.0"
1108 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
1109 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
1110 | dependencies:
1111 | assert-plus "^1.0.0"
1112 | jsprim "^1.2.2"
1113 | sshpk "^1.7.0"
1114 |
1115 | https-proxy-agent@^2.2.1:
1116 | version "2.2.1"
1117 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
1118 | integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
1119 | dependencies:
1120 | agent-base "^4.1.0"
1121 | debug "^3.1.0"
1122 |
1123 | iconv-lite@0.4.23:
1124 | version "0.4.23"
1125 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
1126 | integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
1127 | dependencies:
1128 | safer-buffer ">= 2.1.2 < 3"
1129 |
1130 | iconv-lite@^0.4.4:
1131 | version "0.4.24"
1132 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1133 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1134 | dependencies:
1135 | safer-buffer ">= 2.1.2 < 3"
1136 |
1137 | ignore-walk@^3.0.1:
1138 | version "3.0.1"
1139 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
1140 | integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
1141 | dependencies:
1142 | minimatch "^3.0.4"
1143 |
1144 | imurmurhash@^0.1.4:
1145 | version "0.1.4"
1146 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1147 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1148 |
1149 | inflight@^1.0.4:
1150 | version "1.0.6"
1151 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1152 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1153 | dependencies:
1154 | once "^1.3.0"
1155 | wrappy "1"
1156 |
1157 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
1158 | version "2.0.3"
1159 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1160 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1161 |
1162 | ini@~1.3.0:
1163 | version "1.3.5"
1164 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
1165 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
1166 |
1167 | invert-kv@^1.0.0:
1168 | version "1.0.0"
1169 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
1170 | integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
1171 |
1172 | ipaddr.js@1.8.0:
1173 | version "1.8.0"
1174 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
1175 | integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4=
1176 |
1177 | is-fullwidth-code-point@^1.0.0:
1178 | version "1.0.0"
1179 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1180 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
1181 | dependencies:
1182 | number-is-nan "^1.0.0"
1183 |
1184 | is-fullwidth-code-point@^2.0.0:
1185 | version "2.0.0"
1186 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
1187 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
1188 |
1189 | is-obj@^1.0.0:
1190 | version "1.0.1"
1191 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
1192 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
1193 |
1194 | is-stream-ended@^0.1.4:
1195 | version "0.1.4"
1196 | resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda"
1197 | integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==
1198 |
1199 | is-typedarray@~1.0.0:
1200 | version "1.0.0"
1201 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1202 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
1203 |
1204 | is@^3.2.1:
1205 | version "3.3.0"
1206 | resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79"
1207 | integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==
1208 |
1209 | isarray@0.0.1:
1210 | version "0.0.1"
1211 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
1212 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
1213 |
1214 | isarray@~1.0.0:
1215 | version "1.0.0"
1216 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1217 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1218 |
1219 | isstream@~0.1.2:
1220 | version "0.1.2"
1221 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1222 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
1223 |
1224 | jsbn@~0.1.0:
1225 | version "0.1.1"
1226 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1227 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
1228 |
1229 | json-bigint@^0.3.0:
1230 | version "0.3.0"
1231 | resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e"
1232 | integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=
1233 | dependencies:
1234 | bignumber.js "^7.0.0"
1235 |
1236 | json-schema-traverse@^0.4.1:
1237 | version "0.4.1"
1238 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1239 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1240 |
1241 | json-schema@0.2.3:
1242 | version "0.2.3"
1243 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1244 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
1245 |
1246 | json-stringify-safe@~5.0.1:
1247 | version "5.0.1"
1248 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1249 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
1250 |
1251 | jsonwebtoken@8.1.0:
1252 | version "8.1.0"
1253 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz#c6397cd2e5fd583d65c007a83dc7bb78e6982b83"
1254 | integrity sha1-xjl80uX9WD1lwAeoPce7eOaYK4M=
1255 | dependencies:
1256 | jws "^3.1.4"
1257 | lodash.includes "^4.3.0"
1258 | lodash.isboolean "^3.0.3"
1259 | lodash.isinteger "^4.0.4"
1260 | lodash.isnumber "^3.0.3"
1261 | lodash.isplainobject "^4.0.6"
1262 | lodash.isstring "^4.0.1"
1263 | lodash.once "^4.0.0"
1264 | ms "^2.0.0"
1265 | xtend "^4.0.1"
1266 |
1267 | jsonwebtoken@^8.2.1:
1268 | version "8.5.0"
1269 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#ebd0ca2a69797816e1c5af65b6c759787252947e"
1270 | integrity sha512-IqEycp0znWHNA11TpYi77bVgyBO/pGESDh7Ajhas+u0ttkGkKYIIAjniL4Bw5+oVejVF+SYkaI7XKfwCCyeTuA==
1271 | dependencies:
1272 | jws "^3.2.1"
1273 | lodash.includes "^4.3.0"
1274 | lodash.isboolean "^3.0.3"
1275 | lodash.isinteger "^4.0.4"
1276 | lodash.isnumber "^3.0.3"
1277 | lodash.isplainobject "^4.0.6"
1278 | lodash.isstring "^4.0.1"
1279 | lodash.once "^4.0.0"
1280 | ms "^2.1.1"
1281 | semver "^5.6.0"
1282 |
1283 | jsprim@^1.2.2:
1284 | version "1.4.1"
1285 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
1286 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
1287 | dependencies:
1288 | assert-plus "1.0.0"
1289 | extsprintf "1.3.0"
1290 | json-schema "0.2.3"
1291 | verror "1.10.0"
1292 |
1293 | jwa@^1.2.0:
1294 | version "1.3.0"
1295 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.3.0.tgz#061a7c3bb8ab2b3434bb2f432005a8bb7fca0efa"
1296 | integrity sha512-SxObIyzv9a6MYuZYaSN6DhSm9j3+qkokwvCB0/OTSV5ylPq1wUQiygZQcHT5Qlux0I5kmISx3J86TxKhuefItg==
1297 | dependencies:
1298 | buffer-equal-constant-time "1.0.1"
1299 | ecdsa-sig-formatter "1.0.11"
1300 | safe-buffer "^5.0.1"
1301 |
1302 | jws@^3.1.4, jws@^3.1.5, jws@^3.2.1:
1303 | version "3.2.1"
1304 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.1.tgz#d79d4216a62c9afa0a3d5e8b5356d75abdeb2be5"
1305 | integrity sha512-bGA2omSrFUkd72dhh05bIAN832znP4wOU3lfuXtRBuGTbsmNmDXMQg28f0Vsxaxgk4myF5YkKQpz6qeRpMgX9g==
1306 | dependencies:
1307 | jwa "^1.2.0"
1308 | safe-buffer "^5.0.1"
1309 |
1310 | lcid@^1.0.0:
1311 | version "1.0.0"
1312 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
1313 | integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
1314 | dependencies:
1315 | invert-kv "^1.0.0"
1316 |
1317 | lodash.at@^4.6.0:
1318 | version "4.6.0"
1319 | resolved "https://registry.yarnpkg.com/lodash.at/-/lodash.at-4.6.0.tgz#93cdce664f0a1994ea33dd7cd40e23afd11b0ff8"
1320 | integrity sha1-k83OZk8KGZTqM9181A4jr9EbD/g=
1321 |
1322 | lodash.camelcase@^4.3.0:
1323 | version "4.3.0"
1324 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
1325 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
1326 |
1327 | lodash.clone@^4.5.0:
1328 | version "4.5.0"
1329 | resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6"
1330 | integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=
1331 |
1332 | lodash.has@^4.5.2:
1333 | version "4.5.2"
1334 | resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
1335 | integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=
1336 |
1337 | lodash.includes@^4.3.0:
1338 | version "4.3.0"
1339 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
1340 | integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
1341 |
1342 | lodash.isboolean@^3.0.3:
1343 | version "3.0.3"
1344 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
1345 | integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
1346 |
1347 | lodash.isinteger@^4.0.4:
1348 | version "4.0.4"
1349 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
1350 | integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
1351 |
1352 | lodash.isnumber@^3.0.3:
1353 | version "3.0.3"
1354 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
1355 | integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
1356 |
1357 | lodash.isplainobject@^4.0.6:
1358 | version "4.0.6"
1359 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
1360 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
1361 |
1362 | lodash.isstring@^4.0.1:
1363 | version "4.0.1"
1364 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
1365 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
1366 |
1367 | lodash.merge@^4.6.1:
1368 | version "4.6.1"
1369 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
1370 | integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==
1371 |
1372 | lodash.once@^4.0.0:
1373 | version "4.1.1"
1374 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
1375 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
1376 |
1377 | lodash@^4.17.11, lodash@^4.6.1:
1378 | version "4.17.11"
1379 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
1380 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
1381 |
1382 | long@^4.0.0:
1383 | version "4.0.0"
1384 | resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
1385 | integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
1386 |
1387 | long@~3:
1388 | version "3.2.0"
1389 | resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
1390 | integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=
1391 |
1392 | lru-cache@^5.0.0:
1393 | version "5.1.1"
1394 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1395 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1396 | dependencies:
1397 | yallist "^3.0.2"
1398 |
1399 | make-dir@^1.0.0:
1400 | version "1.3.0"
1401 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
1402 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
1403 | dependencies:
1404 | pify "^3.0.0"
1405 |
1406 | media-typer@0.3.0:
1407 | version "0.3.0"
1408 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1409 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
1410 |
1411 | merge-descriptors@1.0.1:
1412 | version "1.0.1"
1413 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
1414 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
1415 |
1416 | methods@~1.1.2:
1417 | version "1.1.2"
1418 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
1419 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
1420 |
1421 | "mime-db@>= 1.38.0 < 2", mime-db@~1.38.0:
1422 | version "1.38.0"
1423 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
1424 | integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
1425 |
1426 | mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19:
1427 | version "2.1.22"
1428 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
1429 | integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==
1430 | dependencies:
1431 | mime-db "~1.38.0"
1432 |
1433 | mime@1.4.1:
1434 | version "1.4.1"
1435 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
1436 | integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
1437 |
1438 | mime@^2.2.0:
1439 | version "2.4.0"
1440 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6"
1441 | integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==
1442 |
1443 | minimatch@^3.0.4:
1444 | version "3.0.4"
1445 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1446 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1447 | dependencies:
1448 | brace-expansion "^1.1.7"
1449 |
1450 | minimist@0.0.8:
1451 | version "0.0.8"
1452 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1453 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
1454 |
1455 | minimist@^1.2.0:
1456 | version "1.2.0"
1457 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1458 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
1459 |
1460 | minipass@^2.2.1, minipass@^2.3.4:
1461 | version "2.3.5"
1462 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
1463 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
1464 | dependencies:
1465 | safe-buffer "^5.1.2"
1466 | yallist "^3.0.0"
1467 |
1468 | minizlib@^1.1.1:
1469 | version "1.2.1"
1470 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
1471 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
1472 | dependencies:
1473 | minipass "^2.2.1"
1474 |
1475 | mkdirp@^0.5.0, mkdirp@^0.5.1:
1476 | version "0.5.1"
1477 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1478 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
1479 | dependencies:
1480 | minimist "0.0.8"
1481 |
1482 | ms@2.0.0:
1483 | version "2.0.0"
1484 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1485 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1486 |
1487 | ms@^2.0.0, ms@^2.1.1:
1488 | version "2.1.1"
1489 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1490 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
1491 |
1492 | nan@^2.0.0:
1493 | version "2.12.1"
1494 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
1495 | integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
1496 |
1497 | needle@^2.2.1:
1498 | version "2.2.4"
1499 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
1500 | integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
1501 | dependencies:
1502 | debug "^2.1.2"
1503 | iconv-lite "^0.4.4"
1504 | sax "^1.2.4"
1505 |
1506 | negotiator@0.6.1:
1507 | version "0.6.1"
1508 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
1509 | integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
1510 |
1511 | node-fetch@^2.2.0:
1512 | version "2.3.0"
1513 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
1514 | integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
1515 |
1516 | node-forge@0.7.4:
1517 | version "0.7.4"
1518 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.4.tgz#8e6e9f563a1e32213aa7508cded22aa791dbf986"
1519 | integrity sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA==
1520 |
1521 | node-forge@^0.7.5:
1522 | version "0.7.6"
1523 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz#fdf3b418aee1f94f0ef642cd63486c77ca9724ac"
1524 | integrity sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==
1525 |
1526 | node-pre-gyp@^0.12.0:
1527 | version "0.12.0"
1528 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
1529 | integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
1530 | dependencies:
1531 | detect-libc "^1.0.2"
1532 | mkdirp "^0.5.1"
1533 | needle "^2.2.1"
1534 | nopt "^4.0.1"
1535 | npm-packlist "^1.1.6"
1536 | npmlog "^4.0.2"
1537 | rc "^1.2.7"
1538 | rimraf "^2.6.1"
1539 | semver "^5.3.0"
1540 | tar "^4"
1541 |
1542 | nopt@^4.0.1:
1543 | version "4.0.1"
1544 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
1545 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
1546 | dependencies:
1547 | abbrev "1"
1548 | osenv "^0.1.4"
1549 |
1550 | npm-bundled@^1.0.1:
1551 | version "1.0.6"
1552 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
1553 | integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
1554 |
1555 | npm-packlist@^1.1.6:
1556 | version "1.4.1"
1557 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
1558 | integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
1559 | dependencies:
1560 | ignore-walk "^3.0.1"
1561 | npm-bundled "^1.0.1"
1562 |
1563 | npmlog@^4.0.2:
1564 | version "4.1.2"
1565 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1566 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
1567 | dependencies:
1568 | are-we-there-yet "~1.1.2"
1569 | console-control-strings "~1.1.0"
1570 | gauge "~2.7.3"
1571 | set-blocking "~2.0.0"
1572 |
1573 | number-is-nan@^1.0.0:
1574 | version "1.0.1"
1575 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1576 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
1577 |
1578 | oauth-sign@~0.9.0:
1579 | version "0.9.0"
1580 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
1581 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
1582 |
1583 | object-assign@^4, object-assign@^4.1.0:
1584 | version "4.1.1"
1585 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1586 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1587 |
1588 | on-finished@~2.3.0:
1589 | version "2.3.0"
1590 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1591 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
1592 | dependencies:
1593 | ee-first "1.1.1"
1594 |
1595 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
1596 | version "1.4.0"
1597 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1598 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1599 | dependencies:
1600 | wrappy "1"
1601 |
1602 | optjs@~3.2.2:
1603 | version "3.2.2"
1604 | resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
1605 | integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4=
1606 |
1607 | os-homedir@^1.0.0:
1608 | version "1.0.2"
1609 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1610 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1611 |
1612 | os-locale@^1.4.0:
1613 | version "1.4.0"
1614 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
1615 | integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
1616 | dependencies:
1617 | lcid "^1.0.0"
1618 |
1619 | os-tmpdir@^1.0.0:
1620 | version "1.0.2"
1621 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1622 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1623 |
1624 | osenv@^0.1.4:
1625 | version "0.1.5"
1626 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1627 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
1628 | dependencies:
1629 | os-homedir "^1.0.0"
1630 | os-tmpdir "^1.0.0"
1631 |
1632 | parseurl@~1.3.2:
1633 | version "1.3.2"
1634 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
1635 | integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
1636 |
1637 | path-is-absolute@^1.0.0:
1638 | version "1.0.1"
1639 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1640 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1641 |
1642 | path-to-regexp@0.1.7:
1643 | version "0.1.7"
1644 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
1645 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
1646 |
1647 | performance-now@^2.1.0:
1648 | version "2.1.0"
1649 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
1650 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
1651 |
1652 | pify@^3.0.0:
1653 | version "3.0.0"
1654 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
1655 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
1656 |
1657 | pify@^4.0.0:
1658 | version "4.0.1"
1659 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
1660 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
1661 |
1662 | process-nextick-args@~2.0.0:
1663 | version "2.0.0"
1664 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
1665 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
1666 |
1667 | protobufjs@^5.0.3:
1668 | version "5.0.3"
1669 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17"
1670 | integrity sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==
1671 | dependencies:
1672 | ascli "~1"
1673 | bytebuffer "~5"
1674 | glob "^7.0.5"
1675 | yargs "^3.10.0"
1676 |
1677 | protobufjs@^6.8.0, protobufjs@^6.8.6, protobufjs@^6.8.8:
1678 | version "6.8.8"
1679 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c"
1680 | integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==
1681 | dependencies:
1682 | "@protobufjs/aspromise" "^1.1.2"
1683 | "@protobufjs/base64" "^1.1.2"
1684 | "@protobufjs/codegen" "^2.0.4"
1685 | "@protobufjs/eventemitter" "^1.1.0"
1686 | "@protobufjs/fetch" "^1.1.0"
1687 | "@protobufjs/float" "^1.0.2"
1688 | "@protobufjs/inquire" "^1.1.0"
1689 | "@protobufjs/path" "^1.1.2"
1690 | "@protobufjs/pool" "^1.1.0"
1691 | "@protobufjs/utf8" "^1.1.0"
1692 | "@types/long" "^4.0.0"
1693 | "@types/node" "^10.1.0"
1694 | long "^4.0.0"
1695 |
1696 | proxy-addr@~2.0.4:
1697 | version "2.0.4"
1698 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
1699 | integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==
1700 | dependencies:
1701 | forwarded "~0.1.2"
1702 | ipaddr.js "1.8.0"
1703 |
1704 | psl@^1.1.24:
1705 | version "1.1.31"
1706 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
1707 | integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
1708 |
1709 | pump@^2.0.0:
1710 | version "2.0.1"
1711 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
1712 | integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
1713 | dependencies:
1714 | end-of-stream "^1.1.0"
1715 | once "^1.3.1"
1716 |
1717 | pumpify@^1.5.1:
1718 | version "1.5.1"
1719 | resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
1720 | integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
1721 | dependencies:
1722 | duplexify "^3.6.0"
1723 | inherits "^2.0.3"
1724 | pump "^2.0.0"
1725 |
1726 | punycode@^1.4.1:
1727 | version "1.4.1"
1728 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1729 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
1730 |
1731 | punycode@^2.1.0:
1732 | version "2.1.1"
1733 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1734 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1735 |
1736 | qs@6.5.2, qs@~6.5.2:
1737 | version "6.5.2"
1738 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
1739 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
1740 |
1741 | range-parser@~1.2.0:
1742 | version "1.2.0"
1743 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
1744 | integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
1745 |
1746 | raw-body@2.3.3:
1747 | version "2.3.3"
1748 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
1749 | integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
1750 | dependencies:
1751 | bytes "3.0.0"
1752 | http-errors "1.6.3"
1753 | iconv-lite "0.4.23"
1754 | unpipe "1.0.0"
1755 |
1756 | rc@^1.2.7:
1757 | version "1.2.8"
1758 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
1759 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
1760 | dependencies:
1761 | deep-extend "^0.6.0"
1762 | ini "~1.3.0"
1763 | minimist "^1.2.0"
1764 | strip-json-comments "~2.0.1"
1765 |
1766 | "readable-stream@2 || 3", readable-stream@^3.0.2:
1767 | version "3.1.1"
1768 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06"
1769 | integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==
1770 | dependencies:
1771 | inherits "^2.0.3"
1772 | string_decoder "^1.1.1"
1773 | util-deprecate "^1.0.1"
1774 |
1775 | readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@~2.3.6:
1776 | version "2.3.6"
1777 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
1778 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
1779 | dependencies:
1780 | core-util-is "~1.0.0"
1781 | inherits "~2.0.3"
1782 | isarray "~1.0.0"
1783 | process-nextick-args "~2.0.0"
1784 | safe-buffer "~5.1.1"
1785 | string_decoder "~1.1.1"
1786 | util-deprecate "~1.0.1"
1787 |
1788 | readable-stream@~1.0.32:
1789 | version "1.0.34"
1790 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
1791 | integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
1792 | dependencies:
1793 | core-util-is "~1.0.0"
1794 | inherits "~2.0.1"
1795 | isarray "0.0.1"
1796 | string_decoder "~0.10.x"
1797 |
1798 | request@^2.87.0:
1799 | version "2.88.0"
1800 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
1801 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
1802 | dependencies:
1803 | aws-sign2 "~0.7.0"
1804 | aws4 "^1.8.0"
1805 | caseless "~0.12.0"
1806 | combined-stream "~1.0.6"
1807 | extend "~3.0.2"
1808 | forever-agent "~0.6.1"
1809 | form-data "~2.3.2"
1810 | har-validator "~5.1.0"
1811 | http-signature "~1.2.0"
1812 | is-typedarray "~1.0.0"
1813 | isstream "~0.1.2"
1814 | json-stringify-safe "~5.0.1"
1815 | mime-types "~2.1.19"
1816 | oauth-sign "~0.9.0"
1817 | performance-now "^2.1.0"
1818 | qs "~6.5.2"
1819 | safe-buffer "^5.1.2"
1820 | tough-cookie "~2.4.3"
1821 | tunnel-agent "^0.6.0"
1822 | uuid "^3.3.2"
1823 |
1824 | retry-request@^4.0.0:
1825 | version "4.0.0"
1826 | resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.0.0.tgz#5c366166279b3e10e9d7aa13274467a05cb69290"
1827 | integrity sha512-S4HNLaWcMP6r8E4TMH52Y7/pM8uNayOcTDDQNBwsCccL1uI+Ol2TljxRDPzaNfbhOB30+XWP5NnZkB3LiJxi1w==
1828 | dependencies:
1829 | through2 "^2.0.0"
1830 |
1831 | rimraf@^2.6.1:
1832 | version "2.6.3"
1833 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
1834 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
1835 | dependencies:
1836 | glob "^7.1.3"
1837 |
1838 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1839 | version "5.1.2"
1840 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1841 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1842 |
1843 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
1844 | version "2.1.2"
1845 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1846 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1847 |
1848 | sax@^1.2.4:
1849 | version "1.2.4"
1850 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
1851 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
1852 |
1853 | semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
1854 | version "5.6.0"
1855 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
1856 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
1857 |
1858 | send@0.16.2:
1859 | version "0.16.2"
1860 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
1861 | integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
1862 | dependencies:
1863 | debug "2.6.9"
1864 | depd "~1.1.2"
1865 | destroy "~1.0.4"
1866 | encodeurl "~1.0.2"
1867 | escape-html "~1.0.3"
1868 | etag "~1.8.1"
1869 | fresh "0.5.2"
1870 | http-errors "~1.6.2"
1871 | mime "1.4.1"
1872 | ms "2.0.0"
1873 | on-finished "~2.3.0"
1874 | range-parser "~1.2.0"
1875 | statuses "~1.4.0"
1876 |
1877 | serve-static@1.13.2:
1878 | version "1.13.2"
1879 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
1880 | integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
1881 | dependencies:
1882 | encodeurl "~1.0.2"
1883 | escape-html "~1.0.3"
1884 | parseurl "~1.3.2"
1885 | send "0.16.2"
1886 |
1887 | set-blocking@~2.0.0:
1888 | version "2.0.0"
1889 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1890 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
1891 |
1892 | setprototypeof@1.1.0:
1893 | version "1.1.0"
1894 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
1895 | integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
1896 |
1897 | signal-exit@^3.0.0, signal-exit@^3.0.2:
1898 | version "3.0.2"
1899 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1900 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
1901 |
1902 | snakeize@^0.1.0:
1903 | version "0.1.0"
1904 | resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d"
1905 | integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=
1906 |
1907 | split-array-stream@^2.0.0:
1908 | version "2.0.0"
1909 | resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-2.0.0.tgz#85a4f8bfe14421d7bca7f33a6d176d0c076a53b1"
1910 | integrity sha512-hmMswlVY91WvGMxs0k8MRgq8zb2mSen4FmDNc5AFiTWtrBpdZN6nwD6kROVe4vNL+ywrvbCKsWVCnEd4riELIg==
1911 | dependencies:
1912 | is-stream-ended "^0.1.4"
1913 |
1914 | sshpk@^1.7.0:
1915 | version "1.16.1"
1916 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
1917 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
1918 | dependencies:
1919 | asn1 "~0.2.3"
1920 | assert-plus "^1.0.0"
1921 | bcrypt-pbkdf "^1.0.0"
1922 | dashdash "^1.12.0"
1923 | ecc-jsbn "~0.1.1"
1924 | getpass "^0.1.1"
1925 | jsbn "~0.1.0"
1926 | safer-buffer "^2.0.2"
1927 | tweetnacl "~0.14.0"
1928 |
1929 | "statuses@>= 1.4.0 < 2":
1930 | version "1.5.0"
1931 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
1932 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
1933 |
1934 | statuses@~1.4.0:
1935 | version "1.4.0"
1936 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
1937 | integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
1938 |
1939 | stream-events@^1.0.1, stream-events@^1.0.4:
1940 | version "1.0.5"
1941 | resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5"
1942 | integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==
1943 | dependencies:
1944 | stubs "^3.0.0"
1945 |
1946 | stream-shift@^1.0.0:
1947 | version "1.0.0"
1948 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
1949 | integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
1950 |
1951 | string-width@^1.0.1:
1952 | version "1.0.2"
1953 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1954 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
1955 | dependencies:
1956 | code-point-at "^1.0.0"
1957 | is-fullwidth-code-point "^1.0.0"
1958 | strip-ansi "^3.0.0"
1959 |
1960 | "string-width@^1.0.2 || 2":
1961 | version "2.1.1"
1962 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1963 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
1964 | dependencies:
1965 | is-fullwidth-code-point "^2.0.0"
1966 | strip-ansi "^4.0.0"
1967 |
1968 | string_decoder@^1.1.1:
1969 | version "1.2.0"
1970 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
1971 | integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
1972 | dependencies:
1973 | safe-buffer "~5.1.0"
1974 |
1975 | string_decoder@~0.10.x:
1976 | version "0.10.31"
1977 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1978 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
1979 |
1980 | string_decoder@~1.1.1:
1981 | version "1.1.1"
1982 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1983 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1984 | dependencies:
1985 | safe-buffer "~5.1.0"
1986 |
1987 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1988 | version "3.0.1"
1989 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1990 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
1991 | dependencies:
1992 | ansi-regex "^2.0.0"
1993 |
1994 | strip-ansi@^4.0.0:
1995 | version "4.0.0"
1996 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1997 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
1998 | dependencies:
1999 | ansi-regex "^3.0.0"
2000 |
2001 | strip-json-comments@~2.0.1:
2002 | version "2.0.1"
2003 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2004 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
2005 |
2006 | stubs@^3.0.0:
2007 | version "3.0.0"
2008 | resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
2009 | integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls=
2010 |
2011 | tar@^4:
2012 | version "4.4.8"
2013 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
2014 | integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
2015 | dependencies:
2016 | chownr "^1.1.1"
2017 | fs-minipass "^1.2.5"
2018 | minipass "^2.3.4"
2019 | minizlib "^1.1.1"
2020 | mkdirp "^0.5.0"
2021 | safe-buffer "^5.1.2"
2022 | yallist "^3.0.2"
2023 |
2024 | teeny-request@^3.11.3:
2025 | version "3.11.3"
2026 | resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-3.11.3.tgz#335c629f7645e5d6599362df2f3230c4cbc23a55"
2027 | integrity sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==
2028 | dependencies:
2029 | https-proxy-agent "^2.2.1"
2030 | node-fetch "^2.2.0"
2031 | uuid "^3.3.2"
2032 |
2033 | through2@^2.0.0:
2034 | version "2.0.5"
2035 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
2036 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
2037 | dependencies:
2038 | readable-stream "~2.3.6"
2039 | xtend "~4.0.1"
2040 |
2041 | through2@^3.0.0:
2042 | version "3.0.0"
2043 | resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2"
2044 | integrity sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==
2045 | dependencies:
2046 | readable-stream "2 || 3"
2047 | xtend "~4.0.1"
2048 |
2049 | tough-cookie@~2.4.3:
2050 | version "2.4.3"
2051 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
2052 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
2053 | dependencies:
2054 | psl "^1.1.24"
2055 | punycode "^1.4.1"
2056 |
2057 | tslib@1.9.0:
2058 | version "1.9.0"
2059 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
2060 | integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
2061 |
2062 | tunnel-agent@^0.6.0:
2063 | version "0.6.0"
2064 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
2065 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
2066 | dependencies:
2067 | safe-buffer "^5.0.1"
2068 |
2069 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
2070 | version "0.14.5"
2071 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
2072 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
2073 |
2074 | type-is@~1.6.16:
2075 | version "1.6.16"
2076 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
2077 | integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==
2078 | dependencies:
2079 | media-typer "0.3.0"
2080 | mime-types "~2.1.18"
2081 |
2082 | typedarray@^0.0.6:
2083 | version "0.0.6"
2084 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
2085 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
2086 |
2087 | unique-string@^1.0.0:
2088 | version "1.0.0"
2089 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
2090 | integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
2091 | dependencies:
2092 | crypto-random-string "^1.0.0"
2093 |
2094 | unpipe@1.0.0, unpipe@~1.0.0:
2095 | version "1.0.0"
2096 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
2097 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
2098 |
2099 | uri-js@^4.2.2:
2100 | version "4.2.2"
2101 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
2102 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
2103 | dependencies:
2104 | punycode "^2.1.0"
2105 |
2106 | util-deprecate@^1.0.1, util-deprecate@~1.0.1:
2107 | version "1.0.2"
2108 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2109 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2110 |
2111 | utils-merge@1.0.1:
2112 | version "1.0.1"
2113 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
2114 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
2115 |
2116 | uuid@^3.3.2:
2117 | version "3.3.2"
2118 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
2119 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
2120 |
2121 | vary@^1, vary@~1.1.2:
2122 | version "1.1.2"
2123 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
2124 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
2125 |
2126 | verror@1.10.0:
2127 | version "1.10.0"
2128 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
2129 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
2130 | dependencies:
2131 | assert-plus "^1.0.0"
2132 | core-util-is "1.0.2"
2133 | extsprintf "^1.2.0"
2134 |
2135 | walkdir@0.0.12:
2136 | version "0.0.12"
2137 | resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.12.tgz#2f24f1ade64aab1e458591d4442c8868356e9281"
2138 | integrity sha512-HFhaD4mMWPzFSqhpyDG48KDdrjfn409YQuVW7ckZYhW4sE87mYtWifdB/+73RA7+p4s4K18n5Jfx1kHthE1gBw==
2139 |
2140 | websocket-driver@>=0.5.1:
2141 | version "0.7.0"
2142 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
2143 | integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=
2144 | dependencies:
2145 | http-parser-js ">=0.4.0"
2146 | websocket-extensions ">=0.1.1"
2147 |
2148 | websocket-extensions@>=0.1.1:
2149 | version "0.1.3"
2150 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
2151 | integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
2152 |
2153 | wide-align@^1.1.0:
2154 | version "1.1.3"
2155 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
2156 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
2157 | dependencies:
2158 | string-width "^1.0.2 || 2"
2159 |
2160 | window-size@^0.1.4:
2161 | version "0.1.4"
2162 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
2163 | integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=
2164 |
2165 | wrap-ansi@^2.0.0:
2166 | version "2.1.0"
2167 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
2168 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
2169 | dependencies:
2170 | string-width "^1.0.1"
2171 | strip-ansi "^3.0.1"
2172 |
2173 | wrappy@1:
2174 | version "1.0.2"
2175 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2176 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2177 |
2178 | write-file-atomic@^2.0.0:
2179 | version "2.4.2"
2180 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9"
2181 | integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==
2182 | dependencies:
2183 | graceful-fs "^4.1.11"
2184 | imurmurhash "^0.1.4"
2185 | signal-exit "^3.0.2"
2186 |
2187 | xdg-basedir@^3.0.0:
2188 | version "3.0.0"
2189 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
2190 | integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
2191 |
2192 | xmlhttprequest@1.8.0:
2193 | version "1.8.0"
2194 | resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
2195 | integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=
2196 |
2197 | xtend@^4.0.1, xtend@~4.0.1:
2198 | version "4.0.1"
2199 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
2200 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
2201 |
2202 | y18n@^3.2.0:
2203 | version "3.2.1"
2204 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
2205 | integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
2206 |
2207 | yallist@^3.0.0, yallist@^3.0.2:
2208 | version "3.0.3"
2209 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
2210 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
2211 |
2212 | yargs@^3.10.0:
2213 | version "3.32.0"
2214 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
2215 | integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=
2216 | dependencies:
2217 | camelcase "^2.0.1"
2218 | cliui "^3.0.3"
2219 | decamelize "^1.1.1"
2220 | os-locale "^1.4.0"
2221 | string-width "^1.0.1"
2222 | window-size "^0.1.4"
2223 | y18n "^3.2.0"
2224 |
--------------------------------------------------------------------------------