├── .env.example
├── .gitignore
├── LICENSE
├── README.md
├── app.js
├── package-lock.json
├── package.json
├── public
├── css
│ ├── account.css
│ ├── common.css
│ └── login.css
├── images
│ └── saasbase.png
└── js
│ └── account.js
├── src
├── connect
│ ├── mongodb.js
│ └── stripe.js
├── middleware
│ ├── hasPlan.js
│ └── setCurrentUser.js
└── user
│ ├── index.js
│ ├── user.model.js
│ └── user.service.js
└── views
├── account.ejs
├── basic.ejs
├── index.ejs
├── login.ejs
├── none.ejs
└── pro.ejs
/.env.example:
--------------------------------------------------------------------------------
1 | STRIPE_SECRET_KEY=sk_test_51H8rImAkSQQctVkLmiefLPUxZhQdclj8BqTZuvHelgyQWum4COBNcIYP8viiH5dFBrEhM69Yt7Tc0hj8o26k9Pbs00tIYJkZvS
2 | PRODUCT_BASIC=price_1HcIFWAkSQQctVkLizPQ2Oum
3 | PRODUCT_PRO=price_1HdI8dAkSQQctVkLD9IeOYjS
4 | MONGODB=mongodb://localhost:27017/stripe
5 | STRIPE_WEBHOOK_SECRET=whsec_rYanPBSdQSswHjizrBz2pHAo6iYa2Ows
6 | TRIAL_DAYS=14
7 | DOMAIN=http://localhost:4242
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
3 | npm-debug.log
4 | .env
5 | .DS_Store
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Sukhpal Saini
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Recurring Subscriptions Billing using Stripe API
2 |
3 | ## Clone the project
4 |
5 | Clone the project at: [https://github.com/bdcorps/stripe-subscriptions-nodejs](https://github.com/bdcorps/stripe-subscriptions-nodejs)
6 |
7 | ```bash
8 | git clone https://github.com/bdcorps/stripe-subscriptions-nodejs
9 | ```
10 |
11 | ## Setting up the project
12 |
13 | Rename the .env.example to .env. We will replace the variables in the file one-by-one.
14 |
15 | ```bash
16 | STRIPE_SECRET_KEY=sk_test_51H8rImAkSQQctVkLmiefLPUxZhQdclj8BqTZuvHelgyQWum4COBNcIYP8viiH5dFBrEhM69Yt7Tc0hj8o26k9Pbs00tIYJkZvS
17 | PRODUCT_BASIC=price_1HcIFWAkSQQctVkLizPQ2Oum
18 | PRODUCT_PRO=price_1HdI8dAkSQQctVkLD9IeOYjS
19 | MONGODB=mongodb://localhost:27017/users
20 | STRIPE_WEBHOOK_SECRET=whsec_rYanPBSdQSswHjizrBz2pHAo6iYa2Ows
21 | TRIAL_DAYS=14
22 | ```
23 |
24 | ## Set up Stripe
25 |
26 | 1. Create a new Stripe account [here](https://dashboard.stripe.com/register).
27 | 2. Add a name for your account by clicking the `Add a name` button on the top left.
28 | 3. Copy Secret Key under Developers > API Keys and paste in .env file as the STRIPE_SECRET_KEY.
29 | 4. Replace the `publishableKey` in `public/js/account.js` with your own from Developers > API Keys.
30 |
31 | ## Add products: Basic and Pro
32 |
33 | 1. Add a new product by clicking on the `Product` button on the left side. Call the first one, Product – Basic. Set the Pricing to $10.00 CAD and `Recurring`. Set the Billing period to `Monthly`.
34 |
35 | [Image]
36 |
37 | 2. Copy the Price API ID and assign it to PRODUCT_BASIC in the .env file.
38 |
39 | 3. Repeat the process above for Product – Pro at $12.00 CAD, `Recurring`, and `Monthly`.
40 |
41 | 4. Copy the Price API ID and assign it to PRODUCT_PRO in the .env file.
42 |
43 | 5. Set a Trial Period with the TRIAL_DAYS in the .env file.
44 |
45 | ## Start the MongoDB
46 |
47 | Install MongoDB Community Edition from here. Run it by using,
48 |
49 | ```bash
50 | mongod
51 | ```
52 |
53 | The Mongo Server will start running at mongodb://localhost: 27017. We will use the `users` collection to save the customer information.
54 |
55 | If you have an external Mongo server running, replace the default connection string referenced in the MONGODB in .env file.
56 |
57 | ## Set up the Stripe Webhook
58 |
59 | Download Stripe CLI.
60 |
61 | ```bash
62 | stripe listen --forward-to localhost:4242/webhook
63 | ```
64 |
65 | Copy the webhook secret and assign it to STRIPE_WEBHOOK_SECRET in .env file.
66 |
67 | ## Start
68 |
69 | npm start
70 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | require('dotenv').config()
2 | require('./src/connect/mongodb')
3 | const bodyParser = require('body-parser')
4 | const express = require('express')
5 | const session = require('express-session')
6 | var MemoryStore = require('memorystore')(session)
7 | const UserService = require('./src/user')
8 | const Stripe = require('./src/connect/stripe')
9 | const setCurrentUser = require('./src/middleware/setCurrentUser')
10 | const hasPlan = require('./src/middleware/hasPlan')
11 |
12 | const app = express()
13 | app.use(session({
14 | saveUninitialized: false,
15 | cookie: { maxAge: 86400000 },
16 | store: new MemoryStore({
17 | checkPeriod: 86400000 // prune expired entries every 24h
18 | }),
19 | resave: false,
20 | secret: 'keyboard cat'
21 | }))
22 |
23 | app.use('/webhook', bodyParser.raw({ type: 'application/json' }))
24 |
25 | app.use(bodyParser.json())
26 | app.use(bodyParser.urlencoded({ extended: true }))
27 |
28 | app.use(express.static('public'))
29 | app.engine('html', require('ejs').renderFile)
30 |
31 | const productToPriceMap = {
32 | basic: process.env.PRODUCT_BASIC,
33 | pro: process.env.PRODUCT_PRO
34 | }
35 |
36 | app.get('/none', [setCurrentUser, hasPlan('none')], async function (
37 | req,
38 | res,
39 | next
40 | ) {
41 | res.status(200).render('none.ejs')
42 | })
43 |
44 | app.get('/basic', [setCurrentUser, hasPlan('basic')], async function (
45 | req,
46 | res,
47 | next
48 | ) {
49 | res.status(200).render('basic.ejs')
50 | })
51 |
52 | app.get('/pro', [setCurrentUser, hasPlan('pro')], async function (
53 | req,
54 | res,
55 | next
56 | ) {
57 | res.status(200).render('pro.ejs')
58 | })
59 |
60 | app.get('/', function (req, res) {
61 | res.render('login.ejs')
62 | })
63 |
64 | app.get('/account', async function (req, res) {
65 | let { email } = req.session
66 | let customer = await UserService.getUserByEmail(email)
67 | if (!customer) {
68 | res.redirect('/')
69 | } else {
70 | res.render('account.ejs', { customer })
71 | }
72 | })
73 |
74 | app.post('/login', async function (req, res) {
75 | const { email } = req.body
76 | console.log('email', email)
77 |
78 | let customer = await UserService.getUserByEmail(email)
79 | let customerInfo = {}
80 |
81 | if (!customer) {
82 | console.log(`email ${email} does not exist. Making one. `)
83 | try {
84 | customerInfo = await Stripe.addNewCustomer(email)
85 |
86 | customer = await UserService.addUser({
87 | email: customerInfo.email,
88 | billingID: customerInfo.id,
89 | plan: 'none',
90 | endDate: null
91 | })
92 |
93 | console.log(
94 | `A new user signed up and addded to DB. The ID for ${email} is ${JSON.stringify(
95 | customerInfo
96 | )}`
97 | )
98 |
99 | console.log(`User also added to DB. Information from DB: ${customer}`)
100 | } catch (e) {
101 | console.log(e)
102 | res.status(200).json({ e })
103 | return
104 | }
105 | } else {
106 | const isTrialExpired =
107 | customer.plan != 'none' && customer.endDate < new Date().getTime()
108 |
109 | if (isTrialExpired) {
110 | console.log('trial expired')
111 | customer.hasTrial = false
112 | customer.save()
113 | } else {
114 | console.log(
115 | 'no trial information',
116 | customer.hasTrial,
117 | customer.plan != 'none',
118 | customer.endDate < new Date().getTime()
119 | )
120 | }
121 |
122 | customerInfo = await Stripe.getCustomerByID(customer.billingID)
123 | console.log(
124 | `The existing ID for ${email} is ${JSON.stringify(customerInfo)}`
125 | )
126 | }
127 |
128 | req.session.email = email
129 |
130 | // res.render('account.ejs', {
131 | // customer,
132 | // customerInfo,
133 | // email
134 | // })
135 |
136 | res.redirect('/account')
137 | })
138 |
139 | app.post('/checkout', setCurrentUser, async (req, res) => {
140 | const customer = req.user
141 | const { product, customerID } = req.body
142 |
143 | const price = productToPriceMap[product]
144 |
145 | try {
146 | const session = await Stripe.createCheckoutSession(customerID, price)
147 |
148 | const ms =
149 | new Date().getTime() + 1000 * 60 * 60 * 24 * process.env.TRIAL_DAYS
150 | const n = new Date(ms)
151 |
152 | customer.plan = product
153 | customer.hasTrial = true
154 | customer.endDate = n
155 | customer.save()
156 |
157 | res.send({
158 | sessionId: session.id
159 | })
160 | } catch (e) {
161 | console.log(e)
162 | res.status(400)
163 | return res.send({
164 | error: {
165 | message: e.message
166 | }
167 | })
168 | }
169 | })
170 |
171 | app.post('/billing', setCurrentUser, async (req, res) => {
172 | const { customer } = req.body
173 | console.log('customer', customer)
174 |
175 | const session = await Stripe.createBillingSession(customer)
176 | console.log('session', session)
177 |
178 | res.json({ url: session.url })
179 | })
180 |
181 | app.post('/webhook', async (req, res) => {
182 | let event
183 |
184 | try {
185 | event = Stripe.createWebhook(req.body, req.header('Stripe-Signature'))
186 | } catch (err) {
187 | console.log(err)
188 | return res.sendStatus(400)
189 | }
190 |
191 | const data = event.data.object
192 |
193 | console.log(event.type, data)
194 | switch (event.type) {
195 | case 'customer.created':
196 | console.log(JSON.stringify(data))
197 | break
198 | case 'invoice.paid':
199 | break
200 | case 'customer.subscription.created': {
201 | const user = await UserService.getUserByBillingID(data.customer)
202 |
203 | if (data.plan.id === process.env.PRODUCT_BASIC) {
204 | console.log('You are talking about basic product')
205 | user.plan = 'basic'
206 | }
207 |
208 | if (data.plan.id === process.env.PRODUCT_PRO) {
209 | console.log('You are talking about pro product')
210 | user.plan = 'pro'
211 | }
212 |
213 | user.hasTrial = true
214 | user.endDate = new Date(data.current_period_end * 1000)
215 |
216 | await user.save()
217 |
218 | break
219 | }
220 | case 'customer.subscription.updated': {
221 | // started trial
222 | const user = await UserService.getUserByBillingID(data.customer)
223 |
224 | if (data.plan.id == process.env.PRODUCT_BASIC) {
225 | console.log('You are talking about basic product')
226 | user.plan = 'basic'
227 | }
228 |
229 | if (data.plan.id === process.env.PRODUCT_PRO) {
230 | console.log('You are talking about pro product')
231 | user.plan = 'pro'
232 | }
233 |
234 | const isOnTrial = data.status === 'trialing'
235 |
236 | if (isOnTrial) {
237 | user.hasTrial = true
238 | user.endDate = new Date(data.current_period_end * 1000)
239 | } else if (data.status === 'active') {
240 | user.hasTrial = false
241 | user.endDate = new Date(data.current_period_end * 1000)
242 | }
243 |
244 | if (data.canceled_at) {
245 | // cancelled
246 | console.log('You just canceled the subscription' + data.canceled_at)
247 | user.plan = 'none'
248 | user.hasTrial = false
249 | user.endDate = null
250 | }
251 | console.log('actual', user.hasTrial, data.current_period_end, user.plan)
252 |
253 | await user.save()
254 | console.log('customer changed', JSON.stringify(data))
255 | break
256 | }
257 | default:
258 | }
259 | res.sendStatus(200)
260 | })
261 |
262 | const port = process.env.PORT || 4242
263 |
264 | app.listen(port, () => console.log(`Listening on port ${port}!`))
265 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stripe-subscriptions-nodejs",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.10.4",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.10.4"
14 | }
15 | },
16 | "@babel/helper-validator-identifier": {
17 | "version": "7.10.4",
18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
19 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
20 | "dev": true
21 | },
22 | "@babel/highlight": {
23 | "version": "7.10.4",
24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/helper-validator-identifier": "^7.10.4",
29 | "chalk": "^2.0.0",
30 | "js-tokens": "^4.0.0"
31 | }
32 | },
33 | "@eslint/eslintrc": {
34 | "version": "0.2.1",
35 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz",
36 | "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==",
37 | "dev": true,
38 | "requires": {
39 | "ajv": "^6.12.4",
40 | "debug": "^4.1.1",
41 | "espree": "^7.3.0",
42 | "globals": "^12.1.0",
43 | "ignore": "^4.0.6",
44 | "import-fresh": "^3.2.1",
45 | "js-yaml": "^3.13.1",
46 | "lodash": "^4.17.19",
47 | "minimatch": "^3.0.4",
48 | "strip-json-comments": "^3.1.1"
49 | },
50 | "dependencies": {
51 | "debug": {
52 | "version": "4.3.1",
53 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
54 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
55 | "dev": true,
56 | "requires": {
57 | "ms": "2.1.2"
58 | }
59 | },
60 | "ms": {
61 | "version": "2.1.2",
62 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
63 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
64 | "dev": true
65 | },
66 | "strip-json-comments": {
67 | "version": "3.1.1",
68 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
69 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
70 | "dev": true
71 | }
72 | }
73 | },
74 | "@sindresorhus/is": {
75 | "version": "0.14.0",
76 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
77 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
78 | },
79 | "@szmarczak/http-timer": {
80 | "version": "1.1.2",
81 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
82 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
83 | "requires": {
84 | "defer-to-connect": "^1.0.1"
85 | }
86 | },
87 | "@types/json5": {
88 | "version": "0.0.29",
89 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
90 | "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
91 | "dev": true
92 | },
93 | "@types/node": {
94 | "version": "14.11.8",
95 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz",
96 | "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw=="
97 | },
98 | "abbrev": {
99 | "version": "1.1.1",
100 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
101 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
102 | },
103 | "accepts": {
104 | "version": "1.3.7",
105 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
106 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
107 | "requires": {
108 | "mime-types": "~2.1.24",
109 | "negotiator": "0.6.2"
110 | }
111 | },
112 | "acorn": {
113 | "version": "7.4.1",
114 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
115 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
116 | "dev": true
117 | },
118 | "acorn-jsx": {
119 | "version": "5.3.1",
120 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
121 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
122 | "dev": true
123 | },
124 | "ajv": {
125 | "version": "6.12.6",
126 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
127 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
128 | "dev": true,
129 | "requires": {
130 | "fast-deep-equal": "^3.1.1",
131 | "fast-json-stable-stringify": "^2.0.0",
132 | "json-schema-traverse": "^0.4.1",
133 | "uri-js": "^4.2.2"
134 | }
135 | },
136 | "ansi-align": {
137 | "version": "3.0.0",
138 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
139 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
140 | "requires": {
141 | "string-width": "^3.0.0"
142 | },
143 | "dependencies": {
144 | "string-width": {
145 | "version": "3.1.0",
146 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
147 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
148 | "requires": {
149 | "emoji-regex": "^7.0.1",
150 | "is-fullwidth-code-point": "^2.0.0",
151 | "strip-ansi": "^5.1.0"
152 | }
153 | }
154 | }
155 | },
156 | "ansi-colors": {
157 | "version": "4.1.1",
158 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
159 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
160 | "dev": true
161 | },
162 | "ansi-regex": {
163 | "version": "4.1.0",
164 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
165 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
166 | },
167 | "ansi-styles": {
168 | "version": "3.2.1",
169 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
170 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
171 | "requires": {
172 | "color-convert": "^1.9.0"
173 | }
174 | },
175 | "anymatch": {
176 | "version": "3.1.1",
177 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
178 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
179 | "requires": {
180 | "normalize-path": "^3.0.0",
181 | "picomatch": "^2.0.4"
182 | }
183 | },
184 | "argparse": {
185 | "version": "1.0.10",
186 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
187 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
188 | "dev": true,
189 | "requires": {
190 | "sprintf-js": "~1.0.2"
191 | }
192 | },
193 | "array-flatten": {
194 | "version": "1.1.1",
195 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
196 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
197 | },
198 | "array-includes": {
199 | "version": "3.1.2",
200 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz",
201 | "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==",
202 | "dev": true,
203 | "requires": {
204 | "call-bind": "^1.0.0",
205 | "define-properties": "^1.1.3",
206 | "es-abstract": "^1.18.0-next.1",
207 | "get-intrinsic": "^1.0.1",
208 | "is-string": "^1.0.5"
209 | }
210 | },
211 | "array.prototype.flat": {
212 | "version": "1.2.4",
213 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
214 | "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
215 | "dev": true,
216 | "requires": {
217 | "call-bind": "^1.0.0",
218 | "define-properties": "^1.1.3",
219 | "es-abstract": "^1.18.0-next.1"
220 | }
221 | },
222 | "array.prototype.flatmap": {
223 | "version": "1.2.4",
224 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz",
225 | "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==",
226 | "dev": true,
227 | "requires": {
228 | "call-bind": "^1.0.0",
229 | "define-properties": "^1.1.3",
230 | "es-abstract": "^1.18.0-next.1",
231 | "function-bind": "^1.1.1"
232 | }
233 | },
234 | "astral-regex": {
235 | "version": "1.0.0",
236 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
237 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
238 | "dev": true
239 | },
240 | "async": {
241 | "version": "0.9.2",
242 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
243 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
244 | },
245 | "balanced-match": {
246 | "version": "1.0.0",
247 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
248 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
249 | },
250 | "binary-extensions": {
251 | "version": "2.1.0",
252 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
253 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
254 | },
255 | "bl": {
256 | "version": "2.2.1",
257 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
258 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
259 | "requires": {
260 | "readable-stream": "^2.3.5",
261 | "safe-buffer": "^5.1.1"
262 | }
263 | },
264 | "bluebird": {
265 | "version": "3.5.1",
266 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
267 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
268 | },
269 | "body-parser": {
270 | "version": "1.19.0",
271 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
272 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
273 | "requires": {
274 | "bytes": "3.1.0",
275 | "content-type": "~1.0.4",
276 | "debug": "2.6.9",
277 | "depd": "~1.1.2",
278 | "http-errors": "1.7.2",
279 | "iconv-lite": "0.4.24",
280 | "on-finished": "~2.3.0",
281 | "qs": "6.7.0",
282 | "raw-body": "2.4.0",
283 | "type-is": "~1.6.17"
284 | },
285 | "dependencies": {
286 | "qs": {
287 | "version": "6.7.0",
288 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
289 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
290 | }
291 | }
292 | },
293 | "boxen": {
294 | "version": "4.2.0",
295 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
296 | "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
297 | "requires": {
298 | "ansi-align": "^3.0.0",
299 | "camelcase": "^5.3.1",
300 | "chalk": "^3.0.0",
301 | "cli-boxes": "^2.2.0",
302 | "string-width": "^4.1.0",
303 | "term-size": "^2.1.0",
304 | "type-fest": "^0.8.1",
305 | "widest-line": "^3.1.0"
306 | },
307 | "dependencies": {
308 | "ansi-styles": {
309 | "version": "4.3.0",
310 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
311 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
312 | "requires": {
313 | "color-convert": "^2.0.1"
314 | }
315 | },
316 | "chalk": {
317 | "version": "3.0.0",
318 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
319 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
320 | "requires": {
321 | "ansi-styles": "^4.1.0",
322 | "supports-color": "^7.1.0"
323 | }
324 | },
325 | "color-convert": {
326 | "version": "2.0.1",
327 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
328 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
329 | "requires": {
330 | "color-name": "~1.1.4"
331 | }
332 | },
333 | "color-name": {
334 | "version": "1.1.4",
335 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
336 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
337 | },
338 | "has-flag": {
339 | "version": "4.0.0",
340 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
341 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
342 | },
343 | "supports-color": {
344 | "version": "7.2.0",
345 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
346 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
347 | "requires": {
348 | "has-flag": "^4.0.0"
349 | }
350 | }
351 | }
352 | },
353 | "brace-expansion": {
354 | "version": "1.1.11",
355 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
356 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
357 | "requires": {
358 | "balanced-match": "^1.0.0",
359 | "concat-map": "0.0.1"
360 | }
361 | },
362 | "braces": {
363 | "version": "3.0.2",
364 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
365 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
366 | "requires": {
367 | "fill-range": "^7.0.1"
368 | }
369 | },
370 | "bson": {
371 | "version": "1.1.5",
372 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
373 | "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
374 | },
375 | "bytes": {
376 | "version": "3.1.0",
377 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
378 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
379 | },
380 | "cacheable-request": {
381 | "version": "6.1.0",
382 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
383 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
384 | "requires": {
385 | "clone-response": "^1.0.2",
386 | "get-stream": "^5.1.0",
387 | "http-cache-semantics": "^4.0.0",
388 | "keyv": "^3.0.0",
389 | "lowercase-keys": "^2.0.0",
390 | "normalize-url": "^4.1.0",
391 | "responselike": "^1.0.2"
392 | },
393 | "dependencies": {
394 | "get-stream": {
395 | "version": "5.2.0",
396 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
397 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
398 | "requires": {
399 | "pump": "^3.0.0"
400 | }
401 | },
402 | "lowercase-keys": {
403 | "version": "2.0.0",
404 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
405 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
406 | }
407 | }
408 | },
409 | "call-bind": {
410 | "version": "1.0.0",
411 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
412 | "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
413 | "dev": true,
414 | "requires": {
415 | "function-bind": "^1.1.1",
416 | "get-intrinsic": "^1.0.0"
417 | }
418 | },
419 | "callsites": {
420 | "version": "3.1.0",
421 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
422 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
423 | "dev": true
424 | },
425 | "camelcase": {
426 | "version": "5.3.1",
427 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
428 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
429 | },
430 | "chalk": {
431 | "version": "2.4.2",
432 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
433 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
434 | "requires": {
435 | "ansi-styles": "^3.2.1",
436 | "escape-string-regexp": "^1.0.5",
437 | "supports-color": "^5.3.0"
438 | }
439 | },
440 | "chokidar": {
441 | "version": "3.4.3",
442 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
443 | "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
444 | "requires": {
445 | "anymatch": "~3.1.1",
446 | "braces": "~3.0.2",
447 | "fsevents": "~2.1.2",
448 | "glob-parent": "~5.1.0",
449 | "is-binary-path": "~2.1.0",
450 | "is-glob": "~4.0.1",
451 | "normalize-path": "~3.0.0",
452 | "readdirp": "~3.5.0"
453 | }
454 | },
455 | "ci-info": {
456 | "version": "2.0.0",
457 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
458 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
459 | },
460 | "cli-boxes": {
461 | "version": "2.2.1",
462 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
463 | "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw=="
464 | },
465 | "clone-response": {
466 | "version": "1.0.2",
467 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
468 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
469 | "requires": {
470 | "mimic-response": "^1.0.0"
471 | }
472 | },
473 | "color-convert": {
474 | "version": "1.9.3",
475 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
476 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
477 | "requires": {
478 | "color-name": "1.1.3"
479 | }
480 | },
481 | "color-name": {
482 | "version": "1.1.3",
483 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
484 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
485 | },
486 | "concat-map": {
487 | "version": "0.0.1",
488 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
489 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
490 | },
491 | "configstore": {
492 | "version": "5.0.1",
493 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
494 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
495 | "requires": {
496 | "dot-prop": "^5.2.0",
497 | "graceful-fs": "^4.1.2",
498 | "make-dir": "^3.0.0",
499 | "unique-string": "^2.0.0",
500 | "write-file-atomic": "^3.0.0",
501 | "xdg-basedir": "^4.0.0"
502 | }
503 | },
504 | "contains-path": {
505 | "version": "0.1.0",
506 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
507 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
508 | "dev": true
509 | },
510 | "content-disposition": {
511 | "version": "0.5.3",
512 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
513 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
514 | "requires": {
515 | "safe-buffer": "5.1.2"
516 | }
517 | },
518 | "content-type": {
519 | "version": "1.0.4",
520 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
521 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
522 | },
523 | "cookie": {
524 | "version": "0.4.0",
525 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
526 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
527 | },
528 | "cookie-parser": {
529 | "version": "1.4.5",
530 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
531 | "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
532 | "requires": {
533 | "cookie": "0.4.0",
534 | "cookie-signature": "1.0.6"
535 | }
536 | },
537 | "cookie-signature": {
538 | "version": "1.0.6",
539 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
540 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
541 | },
542 | "core-util-is": {
543 | "version": "1.0.2",
544 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
545 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
546 | },
547 | "cross-spawn": {
548 | "version": "7.0.3",
549 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
550 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
551 | "dev": true,
552 | "requires": {
553 | "path-key": "^3.1.0",
554 | "shebang-command": "^2.0.0",
555 | "which": "^2.0.1"
556 | }
557 | },
558 | "crypto-random-string": {
559 | "version": "2.0.0",
560 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
561 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="
562 | },
563 | "debug": {
564 | "version": "2.6.9",
565 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
566 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
567 | "requires": {
568 | "ms": "2.0.0"
569 | }
570 | },
571 | "decompress-response": {
572 | "version": "3.3.0",
573 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
574 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
575 | "requires": {
576 | "mimic-response": "^1.0.0"
577 | }
578 | },
579 | "deep-extend": {
580 | "version": "0.6.0",
581 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
582 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
583 | },
584 | "deep-is": {
585 | "version": "0.1.3",
586 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
587 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
588 | "dev": true
589 | },
590 | "defer-to-connect": {
591 | "version": "1.1.3",
592 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
593 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
594 | },
595 | "define-properties": {
596 | "version": "1.1.3",
597 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
598 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
599 | "dev": true,
600 | "requires": {
601 | "object-keys": "^1.0.12"
602 | }
603 | },
604 | "denque": {
605 | "version": "1.4.1",
606 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
607 | "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
608 | },
609 | "depd": {
610 | "version": "1.1.2",
611 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
612 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
613 | },
614 | "destroy": {
615 | "version": "1.0.4",
616 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
617 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
618 | },
619 | "doctrine": {
620 | "version": "3.0.0",
621 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
622 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
623 | "dev": true,
624 | "requires": {
625 | "esutils": "^2.0.2"
626 | }
627 | },
628 | "dot-prop": {
629 | "version": "5.3.0",
630 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
631 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
632 | "requires": {
633 | "is-obj": "^2.0.0"
634 | }
635 | },
636 | "dotenv": {
637 | "version": "8.2.0",
638 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
639 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
640 | },
641 | "duplexer3": {
642 | "version": "0.1.4",
643 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
644 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
645 | },
646 | "ee-first": {
647 | "version": "1.1.1",
648 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
649 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
650 | },
651 | "ejs": {
652 | "version": "3.1.5",
653 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz",
654 | "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==",
655 | "requires": {
656 | "jake": "^10.6.1"
657 | }
658 | },
659 | "emoji-regex": {
660 | "version": "7.0.3",
661 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
662 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
663 | },
664 | "encodeurl": {
665 | "version": "1.0.2",
666 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
667 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
668 | },
669 | "end-of-stream": {
670 | "version": "1.4.4",
671 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
672 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
673 | "requires": {
674 | "once": "^1.4.0"
675 | }
676 | },
677 | "enquirer": {
678 | "version": "2.3.6",
679 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
680 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
681 | "dev": true,
682 | "requires": {
683 | "ansi-colors": "^4.1.1"
684 | }
685 | },
686 | "error-ex": {
687 | "version": "1.3.2",
688 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
689 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
690 | "dev": true,
691 | "requires": {
692 | "is-arrayish": "^0.2.1"
693 | }
694 | },
695 | "es-abstract": {
696 | "version": "1.18.0-next.1",
697 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
698 | "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
699 | "dev": true,
700 | "requires": {
701 | "es-to-primitive": "^1.2.1",
702 | "function-bind": "^1.1.1",
703 | "has": "^1.0.3",
704 | "has-symbols": "^1.0.1",
705 | "is-callable": "^1.2.2",
706 | "is-negative-zero": "^2.0.0",
707 | "is-regex": "^1.1.1",
708 | "object-inspect": "^1.8.0",
709 | "object-keys": "^1.1.1",
710 | "object.assign": "^4.1.1",
711 | "string.prototype.trimend": "^1.0.1",
712 | "string.prototype.trimstart": "^1.0.1"
713 | }
714 | },
715 | "es-to-primitive": {
716 | "version": "1.2.1",
717 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
718 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
719 | "dev": true,
720 | "requires": {
721 | "is-callable": "^1.1.4",
722 | "is-date-object": "^1.0.1",
723 | "is-symbol": "^1.0.2"
724 | }
725 | },
726 | "escape-goat": {
727 | "version": "2.1.1",
728 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
729 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q=="
730 | },
731 | "escape-html": {
732 | "version": "1.0.3",
733 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
734 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
735 | },
736 | "escape-string-regexp": {
737 | "version": "1.0.5",
738 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
739 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
740 | },
741 | "eslint": {
742 | "version": "7.13.0",
743 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz",
744 | "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==",
745 | "dev": true,
746 | "requires": {
747 | "@babel/code-frame": "^7.0.0",
748 | "@eslint/eslintrc": "^0.2.1",
749 | "ajv": "^6.10.0",
750 | "chalk": "^4.0.0",
751 | "cross-spawn": "^7.0.2",
752 | "debug": "^4.0.1",
753 | "doctrine": "^3.0.0",
754 | "enquirer": "^2.3.5",
755 | "eslint-scope": "^5.1.1",
756 | "eslint-utils": "^2.1.0",
757 | "eslint-visitor-keys": "^2.0.0",
758 | "espree": "^7.3.0",
759 | "esquery": "^1.2.0",
760 | "esutils": "^2.0.2",
761 | "file-entry-cache": "^5.0.1",
762 | "functional-red-black-tree": "^1.0.1",
763 | "glob-parent": "^5.0.0",
764 | "globals": "^12.1.0",
765 | "ignore": "^4.0.6",
766 | "import-fresh": "^3.0.0",
767 | "imurmurhash": "^0.1.4",
768 | "is-glob": "^4.0.0",
769 | "js-yaml": "^3.13.1",
770 | "json-stable-stringify-without-jsonify": "^1.0.1",
771 | "levn": "^0.4.1",
772 | "lodash": "^4.17.19",
773 | "minimatch": "^3.0.4",
774 | "natural-compare": "^1.4.0",
775 | "optionator": "^0.9.1",
776 | "progress": "^2.0.0",
777 | "regexpp": "^3.1.0",
778 | "semver": "^7.2.1",
779 | "strip-ansi": "^6.0.0",
780 | "strip-json-comments": "^3.1.0",
781 | "table": "^5.2.3",
782 | "text-table": "^0.2.0",
783 | "v8-compile-cache": "^2.0.3"
784 | },
785 | "dependencies": {
786 | "ansi-regex": {
787 | "version": "5.0.0",
788 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
789 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
790 | "dev": true
791 | },
792 | "ansi-styles": {
793 | "version": "4.3.0",
794 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
795 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
796 | "dev": true,
797 | "requires": {
798 | "color-convert": "^2.0.1"
799 | }
800 | },
801 | "chalk": {
802 | "version": "4.1.0",
803 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
804 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
805 | "dev": true,
806 | "requires": {
807 | "ansi-styles": "^4.1.0",
808 | "supports-color": "^7.1.0"
809 | }
810 | },
811 | "color-convert": {
812 | "version": "2.0.1",
813 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
814 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
815 | "dev": true,
816 | "requires": {
817 | "color-name": "~1.1.4"
818 | }
819 | },
820 | "color-name": {
821 | "version": "1.1.4",
822 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
823 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
824 | "dev": true
825 | },
826 | "debug": {
827 | "version": "4.3.1",
828 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
829 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
830 | "dev": true,
831 | "requires": {
832 | "ms": "2.1.2"
833 | }
834 | },
835 | "has-flag": {
836 | "version": "4.0.0",
837 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
838 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
839 | "dev": true
840 | },
841 | "ms": {
842 | "version": "2.1.2",
843 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
844 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
845 | "dev": true
846 | },
847 | "semver": {
848 | "version": "7.3.4",
849 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
850 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
851 | "dev": true,
852 | "requires": {
853 | "lru-cache": "^6.0.0"
854 | }
855 | },
856 | "strip-ansi": {
857 | "version": "6.0.0",
858 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
859 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
860 | "dev": true,
861 | "requires": {
862 | "ansi-regex": "^5.0.0"
863 | }
864 | },
865 | "strip-json-comments": {
866 | "version": "3.1.1",
867 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
868 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
869 | "dev": true
870 | },
871 | "supports-color": {
872 | "version": "7.2.0",
873 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
874 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
875 | "dev": true,
876 | "requires": {
877 | "has-flag": "^4.0.0"
878 | }
879 | }
880 | }
881 | },
882 | "eslint-config-standard": {
883 | "version": "16.0.2",
884 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz",
885 | "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==",
886 | "dev": true
887 | },
888 | "eslint-config-standard-jsx": {
889 | "version": "10.0.0",
890 | "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz",
891 | "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==",
892 | "dev": true
893 | },
894 | "eslint-import-resolver-node": {
895 | "version": "0.3.4",
896 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
897 | "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
898 | "dev": true,
899 | "requires": {
900 | "debug": "^2.6.9",
901 | "resolve": "^1.13.1"
902 | }
903 | },
904 | "eslint-module-utils": {
905 | "version": "2.6.0",
906 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
907 | "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
908 | "dev": true,
909 | "requires": {
910 | "debug": "^2.6.9",
911 | "pkg-dir": "^2.0.0"
912 | }
913 | },
914 | "eslint-plugin-es": {
915 | "version": "3.0.1",
916 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
917 | "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
918 | "dev": true,
919 | "requires": {
920 | "eslint-utils": "^2.0.0",
921 | "regexpp": "^3.0.0"
922 | }
923 | },
924 | "eslint-plugin-import": {
925 | "version": "2.22.1",
926 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
927 | "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==",
928 | "dev": true,
929 | "requires": {
930 | "array-includes": "^3.1.1",
931 | "array.prototype.flat": "^1.2.3",
932 | "contains-path": "^0.1.0",
933 | "debug": "^2.6.9",
934 | "doctrine": "1.5.0",
935 | "eslint-import-resolver-node": "^0.3.4",
936 | "eslint-module-utils": "^2.6.0",
937 | "has": "^1.0.3",
938 | "minimatch": "^3.0.4",
939 | "object.values": "^1.1.1",
940 | "read-pkg-up": "^2.0.0",
941 | "resolve": "^1.17.0",
942 | "tsconfig-paths": "^3.9.0"
943 | },
944 | "dependencies": {
945 | "doctrine": {
946 | "version": "1.5.0",
947 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
948 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
949 | "dev": true,
950 | "requires": {
951 | "esutils": "^2.0.2",
952 | "isarray": "^1.0.0"
953 | }
954 | }
955 | }
956 | },
957 | "eslint-plugin-node": {
958 | "version": "11.1.0",
959 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
960 | "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
961 | "dev": true,
962 | "requires": {
963 | "eslint-plugin-es": "^3.0.0",
964 | "eslint-utils": "^2.0.0",
965 | "ignore": "^5.1.1",
966 | "minimatch": "^3.0.4",
967 | "resolve": "^1.10.1",
968 | "semver": "^6.1.0"
969 | },
970 | "dependencies": {
971 | "ignore": {
972 | "version": "5.1.8",
973 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
974 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
975 | "dev": true
976 | },
977 | "semver": {
978 | "version": "6.3.0",
979 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
980 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
981 | "dev": true
982 | }
983 | }
984 | },
985 | "eslint-plugin-promise": {
986 | "version": "4.2.1",
987 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz",
988 | "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==",
989 | "dev": true
990 | },
991 | "eslint-plugin-react": {
992 | "version": "7.21.5",
993 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz",
994 | "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==",
995 | "dev": true,
996 | "requires": {
997 | "array-includes": "^3.1.1",
998 | "array.prototype.flatmap": "^1.2.3",
999 | "doctrine": "^2.1.0",
1000 | "has": "^1.0.3",
1001 | "jsx-ast-utils": "^2.4.1 || ^3.0.0",
1002 | "object.entries": "^1.1.2",
1003 | "object.fromentries": "^2.0.2",
1004 | "object.values": "^1.1.1",
1005 | "prop-types": "^15.7.2",
1006 | "resolve": "^1.18.1",
1007 | "string.prototype.matchall": "^4.0.2"
1008 | },
1009 | "dependencies": {
1010 | "doctrine": {
1011 | "version": "2.1.0",
1012 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
1013 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
1014 | "dev": true,
1015 | "requires": {
1016 | "esutils": "^2.0.2"
1017 | }
1018 | }
1019 | }
1020 | },
1021 | "eslint-scope": {
1022 | "version": "5.1.1",
1023 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1024 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1025 | "dev": true,
1026 | "requires": {
1027 | "esrecurse": "^4.3.0",
1028 | "estraverse": "^4.1.1"
1029 | }
1030 | },
1031 | "eslint-utils": {
1032 | "version": "2.1.0",
1033 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
1034 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
1035 | "dev": true,
1036 | "requires": {
1037 | "eslint-visitor-keys": "^1.1.0"
1038 | },
1039 | "dependencies": {
1040 | "eslint-visitor-keys": {
1041 | "version": "1.3.0",
1042 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
1043 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
1044 | "dev": true
1045 | }
1046 | }
1047 | },
1048 | "eslint-visitor-keys": {
1049 | "version": "2.0.0",
1050 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
1051 | "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
1052 | "dev": true
1053 | },
1054 | "espree": {
1055 | "version": "7.3.0",
1056 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
1057 | "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
1058 | "dev": true,
1059 | "requires": {
1060 | "acorn": "^7.4.0",
1061 | "acorn-jsx": "^5.2.0",
1062 | "eslint-visitor-keys": "^1.3.0"
1063 | },
1064 | "dependencies": {
1065 | "eslint-visitor-keys": {
1066 | "version": "1.3.0",
1067 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
1068 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
1069 | "dev": true
1070 | }
1071 | }
1072 | },
1073 | "esprima": {
1074 | "version": "4.0.1",
1075 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1076 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1077 | "dev": true
1078 | },
1079 | "esquery": {
1080 | "version": "1.3.1",
1081 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
1082 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
1083 | "dev": true,
1084 | "requires": {
1085 | "estraverse": "^5.1.0"
1086 | },
1087 | "dependencies": {
1088 | "estraverse": {
1089 | "version": "5.2.0",
1090 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
1091 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
1092 | "dev": true
1093 | }
1094 | }
1095 | },
1096 | "esrecurse": {
1097 | "version": "4.3.0",
1098 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1099 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1100 | "dev": true,
1101 | "requires": {
1102 | "estraverse": "^5.2.0"
1103 | },
1104 | "dependencies": {
1105 | "estraverse": {
1106 | "version": "5.2.0",
1107 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
1108 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
1109 | "dev": true
1110 | }
1111 | }
1112 | },
1113 | "estraverse": {
1114 | "version": "4.3.0",
1115 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1116 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1117 | "dev": true
1118 | },
1119 | "esutils": {
1120 | "version": "2.0.3",
1121 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1122 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1123 | "dev": true
1124 | },
1125 | "etag": {
1126 | "version": "1.8.1",
1127 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1128 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
1129 | },
1130 | "express": {
1131 | "version": "4.17.1",
1132 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
1133 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
1134 | "requires": {
1135 | "accepts": "~1.3.7",
1136 | "array-flatten": "1.1.1",
1137 | "body-parser": "1.19.0",
1138 | "content-disposition": "0.5.3",
1139 | "content-type": "~1.0.4",
1140 | "cookie": "0.4.0",
1141 | "cookie-signature": "1.0.6",
1142 | "debug": "2.6.9",
1143 | "depd": "~1.1.2",
1144 | "encodeurl": "~1.0.2",
1145 | "escape-html": "~1.0.3",
1146 | "etag": "~1.8.1",
1147 | "finalhandler": "~1.1.2",
1148 | "fresh": "0.5.2",
1149 | "merge-descriptors": "1.0.1",
1150 | "methods": "~1.1.2",
1151 | "on-finished": "~2.3.0",
1152 | "parseurl": "~1.3.3",
1153 | "path-to-regexp": "0.1.7",
1154 | "proxy-addr": "~2.0.5",
1155 | "qs": "6.7.0",
1156 | "range-parser": "~1.2.1",
1157 | "safe-buffer": "5.1.2",
1158 | "send": "0.17.1",
1159 | "serve-static": "1.14.1",
1160 | "setprototypeof": "1.1.1",
1161 | "statuses": "~1.5.0",
1162 | "type-is": "~1.6.18",
1163 | "utils-merge": "1.0.1",
1164 | "vary": "~1.1.2"
1165 | },
1166 | "dependencies": {
1167 | "qs": {
1168 | "version": "6.7.0",
1169 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1170 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1171 | }
1172 | }
1173 | },
1174 | "express-session": {
1175 | "version": "1.17.1",
1176 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz",
1177 | "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==",
1178 | "requires": {
1179 | "cookie": "0.4.0",
1180 | "cookie-signature": "1.0.6",
1181 | "debug": "2.6.9",
1182 | "depd": "~2.0.0",
1183 | "on-headers": "~1.0.2",
1184 | "parseurl": "~1.3.3",
1185 | "safe-buffer": "5.2.0",
1186 | "uid-safe": "~2.1.5"
1187 | },
1188 | "dependencies": {
1189 | "depd": {
1190 | "version": "2.0.0",
1191 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1192 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
1193 | },
1194 | "safe-buffer": {
1195 | "version": "5.2.0",
1196 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
1197 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
1198 | }
1199 | }
1200 | },
1201 | "fast-deep-equal": {
1202 | "version": "3.1.3",
1203 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1204 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1205 | "dev": true
1206 | },
1207 | "fast-json-stable-stringify": {
1208 | "version": "2.1.0",
1209 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1210 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1211 | "dev": true
1212 | },
1213 | "fast-levenshtein": {
1214 | "version": "2.0.6",
1215 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1216 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
1217 | "dev": true
1218 | },
1219 | "file-entry-cache": {
1220 | "version": "5.0.1",
1221 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
1222 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
1223 | "dev": true,
1224 | "requires": {
1225 | "flat-cache": "^2.0.1"
1226 | }
1227 | },
1228 | "filelist": {
1229 | "version": "1.0.1",
1230 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz",
1231 | "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==",
1232 | "requires": {
1233 | "minimatch": "^3.0.4"
1234 | }
1235 | },
1236 | "fill-range": {
1237 | "version": "7.0.1",
1238 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1239 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1240 | "requires": {
1241 | "to-regex-range": "^5.0.1"
1242 | }
1243 | },
1244 | "finalhandler": {
1245 | "version": "1.1.2",
1246 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
1247 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
1248 | "requires": {
1249 | "debug": "2.6.9",
1250 | "encodeurl": "~1.0.2",
1251 | "escape-html": "~1.0.3",
1252 | "on-finished": "~2.3.0",
1253 | "parseurl": "~1.3.3",
1254 | "statuses": "~1.5.0",
1255 | "unpipe": "~1.0.0"
1256 | }
1257 | },
1258 | "find-up": {
1259 | "version": "2.1.0",
1260 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
1261 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
1262 | "dev": true,
1263 | "requires": {
1264 | "locate-path": "^2.0.0"
1265 | }
1266 | },
1267 | "flat-cache": {
1268 | "version": "2.0.1",
1269 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
1270 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
1271 | "dev": true,
1272 | "requires": {
1273 | "flatted": "^2.0.0",
1274 | "rimraf": "2.6.3",
1275 | "write": "1.0.3"
1276 | }
1277 | },
1278 | "flatted": {
1279 | "version": "2.0.2",
1280 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
1281 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
1282 | "dev": true
1283 | },
1284 | "forwarded": {
1285 | "version": "0.1.2",
1286 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
1287 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
1288 | },
1289 | "fresh": {
1290 | "version": "0.5.2",
1291 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1292 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
1293 | },
1294 | "fs.realpath": {
1295 | "version": "1.0.0",
1296 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1297 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1298 | "dev": true
1299 | },
1300 | "fsevents": {
1301 | "version": "2.1.3",
1302 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
1303 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
1304 | "optional": true
1305 | },
1306 | "function-bind": {
1307 | "version": "1.1.1",
1308 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1309 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1310 | "dev": true
1311 | },
1312 | "functional-red-black-tree": {
1313 | "version": "1.0.1",
1314 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
1315 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
1316 | "dev": true
1317 | },
1318 | "get-intrinsic": {
1319 | "version": "1.0.1",
1320 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
1321 | "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
1322 | "dev": true,
1323 | "requires": {
1324 | "function-bind": "^1.1.1",
1325 | "has": "^1.0.3",
1326 | "has-symbols": "^1.0.1"
1327 | }
1328 | },
1329 | "get-stdin": {
1330 | "version": "8.0.0",
1331 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
1332 | "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
1333 | "dev": true
1334 | },
1335 | "get-stream": {
1336 | "version": "4.1.0",
1337 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
1338 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
1339 | "requires": {
1340 | "pump": "^3.0.0"
1341 | }
1342 | },
1343 | "glob": {
1344 | "version": "7.1.6",
1345 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
1346 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
1347 | "dev": true,
1348 | "requires": {
1349 | "fs.realpath": "^1.0.0",
1350 | "inflight": "^1.0.4",
1351 | "inherits": "2",
1352 | "minimatch": "^3.0.4",
1353 | "once": "^1.3.0",
1354 | "path-is-absolute": "^1.0.0"
1355 | }
1356 | },
1357 | "glob-parent": {
1358 | "version": "5.1.1",
1359 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
1360 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
1361 | "requires": {
1362 | "is-glob": "^4.0.1"
1363 | }
1364 | },
1365 | "global-dirs": {
1366 | "version": "2.0.1",
1367 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
1368 | "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
1369 | "requires": {
1370 | "ini": "^1.3.5"
1371 | }
1372 | },
1373 | "globals": {
1374 | "version": "12.4.0",
1375 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
1376 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
1377 | "dev": true,
1378 | "requires": {
1379 | "type-fest": "^0.8.1"
1380 | }
1381 | },
1382 | "got": {
1383 | "version": "9.6.0",
1384 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
1385 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
1386 | "requires": {
1387 | "@sindresorhus/is": "^0.14.0",
1388 | "@szmarczak/http-timer": "^1.1.2",
1389 | "cacheable-request": "^6.0.0",
1390 | "decompress-response": "^3.3.0",
1391 | "duplexer3": "^0.1.4",
1392 | "get-stream": "^4.1.0",
1393 | "lowercase-keys": "^1.0.1",
1394 | "mimic-response": "^1.0.1",
1395 | "p-cancelable": "^1.0.0",
1396 | "to-readable-stream": "^1.0.0",
1397 | "url-parse-lax": "^3.0.0"
1398 | }
1399 | },
1400 | "graceful-fs": {
1401 | "version": "4.2.4",
1402 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
1403 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
1404 | },
1405 | "has": {
1406 | "version": "1.0.3",
1407 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1408 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1409 | "dev": true,
1410 | "requires": {
1411 | "function-bind": "^1.1.1"
1412 | }
1413 | },
1414 | "has-flag": {
1415 | "version": "3.0.0",
1416 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1417 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
1418 | },
1419 | "has-symbols": {
1420 | "version": "1.0.1",
1421 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
1422 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
1423 | "dev": true
1424 | },
1425 | "has-yarn": {
1426 | "version": "2.1.0",
1427 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
1428 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw=="
1429 | },
1430 | "hosted-git-info": {
1431 | "version": "2.8.8",
1432 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
1433 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
1434 | "dev": true
1435 | },
1436 | "http-cache-semantics": {
1437 | "version": "4.1.0",
1438 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
1439 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
1440 | },
1441 | "http-errors": {
1442 | "version": "1.7.2",
1443 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1444 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1445 | "requires": {
1446 | "depd": "~1.1.2",
1447 | "inherits": "2.0.3",
1448 | "setprototypeof": "1.1.1",
1449 | "statuses": ">= 1.5.0 < 2",
1450 | "toidentifier": "1.0.0"
1451 | }
1452 | },
1453 | "iconv-lite": {
1454 | "version": "0.4.24",
1455 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1456 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1457 | "requires": {
1458 | "safer-buffer": ">= 2.1.2 < 3"
1459 | }
1460 | },
1461 | "ignore": {
1462 | "version": "4.0.6",
1463 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
1464 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
1465 | "dev": true
1466 | },
1467 | "ignore-by-default": {
1468 | "version": "1.0.1",
1469 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
1470 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk="
1471 | },
1472 | "import-fresh": {
1473 | "version": "3.2.2",
1474 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
1475 | "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
1476 | "dev": true,
1477 | "requires": {
1478 | "parent-module": "^1.0.0",
1479 | "resolve-from": "^4.0.0"
1480 | },
1481 | "dependencies": {
1482 | "resolve-from": {
1483 | "version": "4.0.0",
1484 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1485 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1486 | "dev": true
1487 | }
1488 | }
1489 | },
1490 | "import-lazy": {
1491 | "version": "2.1.0",
1492 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
1493 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
1494 | },
1495 | "imurmurhash": {
1496 | "version": "0.1.4",
1497 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1498 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
1499 | },
1500 | "inflight": {
1501 | "version": "1.0.6",
1502 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1503 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1504 | "dev": true,
1505 | "requires": {
1506 | "once": "^1.3.0",
1507 | "wrappy": "1"
1508 | }
1509 | },
1510 | "inherits": {
1511 | "version": "2.0.3",
1512 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1513 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1514 | },
1515 | "ini": {
1516 | "version": "1.3.5",
1517 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
1518 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
1519 | },
1520 | "internal-slot": {
1521 | "version": "1.0.2",
1522 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz",
1523 | "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==",
1524 | "dev": true,
1525 | "requires": {
1526 | "es-abstract": "^1.17.0-next.1",
1527 | "has": "^1.0.3",
1528 | "side-channel": "^1.0.2"
1529 | },
1530 | "dependencies": {
1531 | "es-abstract": {
1532 | "version": "1.17.7",
1533 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
1534 | "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
1535 | "dev": true,
1536 | "requires": {
1537 | "es-to-primitive": "^1.2.1",
1538 | "function-bind": "^1.1.1",
1539 | "has": "^1.0.3",
1540 | "has-symbols": "^1.0.1",
1541 | "is-callable": "^1.2.2",
1542 | "is-regex": "^1.1.1",
1543 | "object-inspect": "^1.8.0",
1544 | "object-keys": "^1.1.1",
1545 | "object.assign": "^4.1.1",
1546 | "string.prototype.trimend": "^1.0.1",
1547 | "string.prototype.trimstart": "^1.0.1"
1548 | }
1549 | }
1550 | }
1551 | },
1552 | "ipaddr.js": {
1553 | "version": "1.9.1",
1554 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1555 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1556 | },
1557 | "is-arrayish": {
1558 | "version": "0.2.1",
1559 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1560 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1561 | "dev": true
1562 | },
1563 | "is-binary-path": {
1564 | "version": "2.1.0",
1565 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1566 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1567 | "requires": {
1568 | "binary-extensions": "^2.0.0"
1569 | }
1570 | },
1571 | "is-callable": {
1572 | "version": "1.2.2",
1573 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
1574 | "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
1575 | "dev": true
1576 | },
1577 | "is-ci": {
1578 | "version": "2.0.0",
1579 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
1580 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
1581 | "requires": {
1582 | "ci-info": "^2.0.0"
1583 | }
1584 | },
1585 | "is-core-module": {
1586 | "version": "2.2.0",
1587 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
1588 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
1589 | "dev": true,
1590 | "requires": {
1591 | "has": "^1.0.3"
1592 | }
1593 | },
1594 | "is-date-object": {
1595 | "version": "1.0.2",
1596 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
1597 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
1598 | "dev": true
1599 | },
1600 | "is-extglob": {
1601 | "version": "2.1.1",
1602 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1603 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
1604 | },
1605 | "is-fullwidth-code-point": {
1606 | "version": "2.0.0",
1607 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1608 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
1609 | },
1610 | "is-glob": {
1611 | "version": "4.0.1",
1612 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1613 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1614 | "requires": {
1615 | "is-extglob": "^2.1.1"
1616 | }
1617 | },
1618 | "is-installed-globally": {
1619 | "version": "0.3.2",
1620 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
1621 | "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
1622 | "requires": {
1623 | "global-dirs": "^2.0.1",
1624 | "is-path-inside": "^3.0.1"
1625 | }
1626 | },
1627 | "is-negative-zero": {
1628 | "version": "2.0.0",
1629 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
1630 | "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
1631 | "dev": true
1632 | },
1633 | "is-npm": {
1634 | "version": "4.0.0",
1635 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
1636 | "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig=="
1637 | },
1638 | "is-number": {
1639 | "version": "7.0.0",
1640 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1641 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
1642 | },
1643 | "is-obj": {
1644 | "version": "2.0.0",
1645 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
1646 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
1647 | },
1648 | "is-path-inside": {
1649 | "version": "3.0.2",
1650 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
1651 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg=="
1652 | },
1653 | "is-regex": {
1654 | "version": "1.1.1",
1655 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
1656 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
1657 | "dev": true,
1658 | "requires": {
1659 | "has-symbols": "^1.0.1"
1660 | }
1661 | },
1662 | "is-string": {
1663 | "version": "1.0.5",
1664 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
1665 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
1666 | "dev": true
1667 | },
1668 | "is-symbol": {
1669 | "version": "1.0.3",
1670 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
1671 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
1672 | "dev": true,
1673 | "requires": {
1674 | "has-symbols": "^1.0.1"
1675 | }
1676 | },
1677 | "is-typedarray": {
1678 | "version": "1.0.0",
1679 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1680 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
1681 | },
1682 | "is-yarn-global": {
1683 | "version": "0.3.0",
1684 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
1685 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="
1686 | },
1687 | "isarray": {
1688 | "version": "1.0.0",
1689 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1690 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1691 | },
1692 | "isexe": {
1693 | "version": "2.0.0",
1694 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1695 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1696 | "dev": true
1697 | },
1698 | "jake": {
1699 | "version": "10.8.2",
1700 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
1701 | "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
1702 | "requires": {
1703 | "async": "0.9.x",
1704 | "chalk": "^2.4.2",
1705 | "filelist": "^1.0.1",
1706 | "minimatch": "^3.0.4"
1707 | }
1708 | },
1709 | "js-tokens": {
1710 | "version": "4.0.0",
1711 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1712 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1713 | "dev": true
1714 | },
1715 | "js-yaml": {
1716 | "version": "3.14.0",
1717 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
1718 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
1719 | "dev": true,
1720 | "requires": {
1721 | "argparse": "^1.0.7",
1722 | "esprima": "^4.0.0"
1723 | }
1724 | },
1725 | "json-buffer": {
1726 | "version": "3.0.0",
1727 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
1728 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
1729 | },
1730 | "json-parse-better-errors": {
1731 | "version": "1.0.2",
1732 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1733 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1734 | "dev": true
1735 | },
1736 | "json-schema-traverse": {
1737 | "version": "0.4.1",
1738 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1739 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1740 | "dev": true
1741 | },
1742 | "json-stable-stringify-without-jsonify": {
1743 | "version": "1.0.1",
1744 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1745 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
1746 | "dev": true
1747 | },
1748 | "json5": {
1749 | "version": "1.0.1",
1750 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
1751 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
1752 | "dev": true,
1753 | "requires": {
1754 | "minimist": "^1.2.0"
1755 | }
1756 | },
1757 | "jsx-ast-utils": {
1758 | "version": "3.1.0",
1759 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz",
1760 | "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==",
1761 | "dev": true,
1762 | "requires": {
1763 | "array-includes": "^3.1.1",
1764 | "object.assign": "^4.1.1"
1765 | }
1766 | },
1767 | "kareem": {
1768 | "version": "2.3.1",
1769 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
1770 | "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
1771 | },
1772 | "keyv": {
1773 | "version": "3.1.0",
1774 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
1775 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
1776 | "requires": {
1777 | "json-buffer": "3.0.0"
1778 | }
1779 | },
1780 | "latest-version": {
1781 | "version": "5.1.0",
1782 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
1783 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
1784 | "requires": {
1785 | "package-json": "^6.3.0"
1786 | }
1787 | },
1788 | "levn": {
1789 | "version": "0.4.1",
1790 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1791 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1792 | "dev": true,
1793 | "requires": {
1794 | "prelude-ls": "^1.2.1",
1795 | "type-check": "~0.4.0"
1796 | }
1797 | },
1798 | "load-json-file": {
1799 | "version": "2.0.0",
1800 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
1801 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
1802 | "dev": true,
1803 | "requires": {
1804 | "graceful-fs": "^4.1.2",
1805 | "parse-json": "^2.2.0",
1806 | "pify": "^2.0.0",
1807 | "strip-bom": "^3.0.0"
1808 | }
1809 | },
1810 | "locate-path": {
1811 | "version": "2.0.0",
1812 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
1813 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
1814 | "dev": true,
1815 | "requires": {
1816 | "p-locate": "^2.0.0",
1817 | "path-exists": "^3.0.0"
1818 | }
1819 | },
1820 | "lodash": {
1821 | "version": "4.17.20",
1822 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
1823 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
1824 | "dev": true
1825 | },
1826 | "loose-envify": {
1827 | "version": "1.4.0",
1828 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1829 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1830 | "dev": true,
1831 | "requires": {
1832 | "js-tokens": "^3.0.0 || ^4.0.0"
1833 | }
1834 | },
1835 | "lowercase-keys": {
1836 | "version": "1.0.1",
1837 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
1838 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
1839 | },
1840 | "lru-cache": {
1841 | "version": "6.0.0",
1842 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1843 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1844 | "dev": true,
1845 | "requires": {
1846 | "yallist": "^4.0.0"
1847 | }
1848 | },
1849 | "make-dir": {
1850 | "version": "3.1.0",
1851 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1852 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1853 | "requires": {
1854 | "semver": "^6.0.0"
1855 | },
1856 | "dependencies": {
1857 | "semver": {
1858 | "version": "6.3.0",
1859 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1860 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
1861 | }
1862 | }
1863 | },
1864 | "media-typer": {
1865 | "version": "0.3.0",
1866 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1867 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1868 | },
1869 | "memory-pager": {
1870 | "version": "1.5.0",
1871 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
1872 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
1873 | "optional": true
1874 | },
1875 | "memorystore": {
1876 | "version": "1.6.4",
1877 | "resolved": "https://registry.npmjs.org/memorystore/-/memorystore-1.6.4.tgz",
1878 | "integrity": "sha512-51j4kUedbqkWGby44hAhf5f/hj8GOvHoLX00/YHURBNxOMf5k8JbPuGfmeNpZEXhc3vrmfnFben4+rOOx3HjEQ==",
1879 | "requires": {
1880 | "debug": "^4.3.0",
1881 | "lru-cache": "^4.0.3"
1882 | },
1883 | "dependencies": {
1884 | "debug": {
1885 | "version": "4.3.1",
1886 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
1887 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
1888 | "requires": {
1889 | "ms": "2.1.2"
1890 | }
1891 | },
1892 | "lru-cache": {
1893 | "version": "4.1.5",
1894 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
1895 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
1896 | "requires": {
1897 | "pseudomap": "^1.0.2",
1898 | "yallist": "^2.1.2"
1899 | }
1900 | },
1901 | "ms": {
1902 | "version": "2.1.2",
1903 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1904 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1905 | },
1906 | "yallist": {
1907 | "version": "2.1.2",
1908 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
1909 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
1910 | }
1911 | }
1912 | },
1913 | "merge-descriptors": {
1914 | "version": "1.0.1",
1915 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1916 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1917 | },
1918 | "methods": {
1919 | "version": "1.1.2",
1920 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1921 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1922 | },
1923 | "mime": {
1924 | "version": "1.6.0",
1925 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1926 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1927 | },
1928 | "mime-db": {
1929 | "version": "1.44.0",
1930 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
1931 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
1932 | },
1933 | "mime-types": {
1934 | "version": "2.1.27",
1935 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
1936 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
1937 | "requires": {
1938 | "mime-db": "1.44.0"
1939 | }
1940 | },
1941 | "mimic-response": {
1942 | "version": "1.0.1",
1943 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
1944 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
1945 | },
1946 | "minimatch": {
1947 | "version": "3.0.4",
1948 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1949 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1950 | "requires": {
1951 | "brace-expansion": "^1.1.7"
1952 | }
1953 | },
1954 | "minimist": {
1955 | "version": "1.2.5",
1956 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1957 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
1958 | },
1959 | "mkdirp": {
1960 | "version": "0.5.5",
1961 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1962 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1963 | "dev": true,
1964 | "requires": {
1965 | "minimist": "^1.2.5"
1966 | }
1967 | },
1968 | "mongodb": {
1969 | "version": "3.6.2",
1970 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz",
1971 | "integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==",
1972 | "requires": {
1973 | "bl": "^2.2.1",
1974 | "bson": "^1.1.4",
1975 | "denque": "^1.4.1",
1976 | "require_optional": "^1.0.1",
1977 | "safe-buffer": "^5.1.2",
1978 | "saslprep": "^1.0.0"
1979 | }
1980 | },
1981 | "mongoose": {
1982 | "version": "5.10.11",
1983 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.11.tgz",
1984 | "integrity": "sha512-R5BFitKW94/S/Z48w+X+qi/eto66jWBcVEVA8nYVkBoBAPFGq7JSYP/0uso+ZHs+7XjSzTuui+SUllzxIrf9yA==",
1985 | "requires": {
1986 | "bson": "^1.1.4",
1987 | "kareem": "2.3.1",
1988 | "mongodb": "3.6.2",
1989 | "mongoose-legacy-pluralize": "1.0.2",
1990 | "mpath": "0.7.0",
1991 | "mquery": "3.2.2",
1992 | "ms": "2.1.2",
1993 | "regexp-clone": "1.0.0",
1994 | "safe-buffer": "5.2.1",
1995 | "sift": "7.0.1",
1996 | "sliced": "1.0.1"
1997 | },
1998 | "dependencies": {
1999 | "ms": {
2000 | "version": "2.1.2",
2001 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2002 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2003 | },
2004 | "safe-buffer": {
2005 | "version": "5.2.1",
2006 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2007 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
2008 | }
2009 | }
2010 | },
2011 | "mongoose-legacy-pluralize": {
2012 | "version": "1.0.2",
2013 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
2014 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
2015 | },
2016 | "mpath": {
2017 | "version": "0.7.0",
2018 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz",
2019 | "integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg=="
2020 | },
2021 | "mquery": {
2022 | "version": "3.2.2",
2023 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz",
2024 | "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==",
2025 | "requires": {
2026 | "bluebird": "3.5.1",
2027 | "debug": "3.1.0",
2028 | "regexp-clone": "^1.0.0",
2029 | "safe-buffer": "5.1.2",
2030 | "sliced": "1.0.1"
2031 | },
2032 | "dependencies": {
2033 | "debug": {
2034 | "version": "3.1.0",
2035 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
2036 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
2037 | "requires": {
2038 | "ms": "2.0.0"
2039 | }
2040 | }
2041 | }
2042 | },
2043 | "ms": {
2044 | "version": "2.0.0",
2045 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2046 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
2047 | },
2048 | "natural-compare": {
2049 | "version": "1.4.0",
2050 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2051 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
2052 | "dev": true
2053 | },
2054 | "negotiator": {
2055 | "version": "0.6.2",
2056 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
2057 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
2058 | },
2059 | "nodemon": {
2060 | "version": "2.0.5",
2061 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.5.tgz",
2062 | "integrity": "sha512-6/jqtZvJdk092pVnD2AIH19KQ9GQZAKOZVy/yT1ueL6aoV+Ix7a1lVZStXzvEh0fP4zE41DDWlkVoHjR6WlozA==",
2063 | "requires": {
2064 | "chokidar": "^3.2.2",
2065 | "debug": "^3.2.6",
2066 | "ignore-by-default": "^1.0.1",
2067 | "minimatch": "^3.0.4",
2068 | "pstree.remy": "^1.1.7",
2069 | "semver": "^5.7.1",
2070 | "supports-color": "^5.5.0",
2071 | "touch": "^3.1.0",
2072 | "undefsafe": "^2.0.3",
2073 | "update-notifier": "^4.1.0"
2074 | },
2075 | "dependencies": {
2076 | "debug": {
2077 | "version": "3.2.6",
2078 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
2079 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
2080 | "requires": {
2081 | "ms": "^2.1.1"
2082 | }
2083 | },
2084 | "ms": {
2085 | "version": "2.1.2",
2086 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2087 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2088 | }
2089 | }
2090 | },
2091 | "nopt": {
2092 | "version": "1.0.10",
2093 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
2094 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
2095 | "requires": {
2096 | "abbrev": "1"
2097 | }
2098 | },
2099 | "normalize-package-data": {
2100 | "version": "2.5.0",
2101 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
2102 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
2103 | "dev": true,
2104 | "requires": {
2105 | "hosted-git-info": "^2.1.4",
2106 | "resolve": "^1.10.0",
2107 | "semver": "2 || 3 || 4 || 5",
2108 | "validate-npm-package-license": "^3.0.1"
2109 | }
2110 | },
2111 | "normalize-path": {
2112 | "version": "3.0.0",
2113 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2114 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
2115 | },
2116 | "normalize-url": {
2117 | "version": "4.5.0",
2118 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
2119 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
2120 | },
2121 | "object-assign": {
2122 | "version": "4.1.1",
2123 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2124 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
2125 | "dev": true
2126 | },
2127 | "object-inspect": {
2128 | "version": "1.9.0",
2129 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
2130 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
2131 | "dev": true
2132 | },
2133 | "object-keys": {
2134 | "version": "1.1.1",
2135 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2136 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
2137 | "dev": true
2138 | },
2139 | "object.assign": {
2140 | "version": "4.1.2",
2141 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
2142 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
2143 | "dev": true,
2144 | "requires": {
2145 | "call-bind": "^1.0.0",
2146 | "define-properties": "^1.1.3",
2147 | "has-symbols": "^1.0.1",
2148 | "object-keys": "^1.1.1"
2149 | }
2150 | },
2151 | "object.entries": {
2152 | "version": "1.1.3",
2153 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz",
2154 | "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==",
2155 | "dev": true,
2156 | "requires": {
2157 | "call-bind": "^1.0.0",
2158 | "define-properties": "^1.1.3",
2159 | "es-abstract": "^1.18.0-next.1",
2160 | "has": "^1.0.3"
2161 | }
2162 | },
2163 | "object.fromentries": {
2164 | "version": "2.0.3",
2165 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz",
2166 | "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==",
2167 | "dev": true,
2168 | "requires": {
2169 | "call-bind": "^1.0.0",
2170 | "define-properties": "^1.1.3",
2171 | "es-abstract": "^1.18.0-next.1",
2172 | "has": "^1.0.3"
2173 | }
2174 | },
2175 | "object.values": {
2176 | "version": "1.1.2",
2177 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
2178 | "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
2179 | "dev": true,
2180 | "requires": {
2181 | "call-bind": "^1.0.0",
2182 | "define-properties": "^1.1.3",
2183 | "es-abstract": "^1.18.0-next.1",
2184 | "has": "^1.0.3"
2185 | }
2186 | },
2187 | "on-finished": {
2188 | "version": "2.3.0",
2189 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
2190 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
2191 | "requires": {
2192 | "ee-first": "1.1.1"
2193 | }
2194 | },
2195 | "on-headers": {
2196 | "version": "1.0.2",
2197 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
2198 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
2199 | },
2200 | "once": {
2201 | "version": "1.4.0",
2202 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2203 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2204 | "requires": {
2205 | "wrappy": "1"
2206 | }
2207 | },
2208 | "optionator": {
2209 | "version": "0.9.1",
2210 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
2211 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
2212 | "dev": true,
2213 | "requires": {
2214 | "deep-is": "^0.1.3",
2215 | "fast-levenshtein": "^2.0.6",
2216 | "levn": "^0.4.1",
2217 | "prelude-ls": "^1.2.1",
2218 | "type-check": "^0.4.0",
2219 | "word-wrap": "^1.2.3"
2220 | }
2221 | },
2222 | "p-cancelable": {
2223 | "version": "1.1.0",
2224 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
2225 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
2226 | },
2227 | "p-limit": {
2228 | "version": "1.3.0",
2229 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
2230 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
2231 | "dev": true,
2232 | "requires": {
2233 | "p-try": "^1.0.0"
2234 | }
2235 | },
2236 | "p-locate": {
2237 | "version": "2.0.0",
2238 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
2239 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
2240 | "dev": true,
2241 | "requires": {
2242 | "p-limit": "^1.1.0"
2243 | }
2244 | },
2245 | "p-try": {
2246 | "version": "1.0.0",
2247 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
2248 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
2249 | "dev": true
2250 | },
2251 | "package-json": {
2252 | "version": "6.5.0",
2253 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
2254 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
2255 | "requires": {
2256 | "got": "^9.6.0",
2257 | "registry-auth-token": "^4.0.0",
2258 | "registry-url": "^5.0.0",
2259 | "semver": "^6.2.0"
2260 | },
2261 | "dependencies": {
2262 | "semver": {
2263 | "version": "6.3.0",
2264 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2265 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
2266 | }
2267 | }
2268 | },
2269 | "parent-module": {
2270 | "version": "1.0.1",
2271 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2272 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2273 | "dev": true,
2274 | "requires": {
2275 | "callsites": "^3.0.0"
2276 | }
2277 | },
2278 | "parse-json": {
2279 | "version": "2.2.0",
2280 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
2281 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
2282 | "dev": true,
2283 | "requires": {
2284 | "error-ex": "^1.2.0"
2285 | }
2286 | },
2287 | "parseurl": {
2288 | "version": "1.3.3",
2289 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
2290 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
2291 | },
2292 | "path-exists": {
2293 | "version": "3.0.0",
2294 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
2295 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
2296 | "dev": true
2297 | },
2298 | "path-is-absolute": {
2299 | "version": "1.0.1",
2300 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2301 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2302 | "dev": true
2303 | },
2304 | "path-key": {
2305 | "version": "3.1.1",
2306 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2307 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2308 | "dev": true
2309 | },
2310 | "path-parse": {
2311 | "version": "1.0.6",
2312 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
2313 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
2314 | "dev": true
2315 | },
2316 | "path-to-regexp": {
2317 | "version": "0.1.7",
2318 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
2319 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
2320 | },
2321 | "path-type": {
2322 | "version": "2.0.0",
2323 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
2324 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
2325 | "dev": true,
2326 | "requires": {
2327 | "pify": "^2.0.0"
2328 | }
2329 | },
2330 | "picomatch": {
2331 | "version": "2.2.2",
2332 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
2333 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
2334 | },
2335 | "pify": {
2336 | "version": "2.3.0",
2337 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2338 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
2339 | "dev": true
2340 | },
2341 | "pkg-conf": {
2342 | "version": "3.1.0",
2343 | "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz",
2344 | "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==",
2345 | "dev": true,
2346 | "requires": {
2347 | "find-up": "^3.0.0",
2348 | "load-json-file": "^5.2.0"
2349 | },
2350 | "dependencies": {
2351 | "find-up": {
2352 | "version": "3.0.0",
2353 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
2354 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
2355 | "dev": true,
2356 | "requires": {
2357 | "locate-path": "^3.0.0"
2358 | }
2359 | },
2360 | "load-json-file": {
2361 | "version": "5.3.0",
2362 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz",
2363 | "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==",
2364 | "dev": true,
2365 | "requires": {
2366 | "graceful-fs": "^4.1.15",
2367 | "parse-json": "^4.0.0",
2368 | "pify": "^4.0.1",
2369 | "strip-bom": "^3.0.0",
2370 | "type-fest": "^0.3.0"
2371 | }
2372 | },
2373 | "locate-path": {
2374 | "version": "3.0.0",
2375 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
2376 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
2377 | "dev": true,
2378 | "requires": {
2379 | "p-locate": "^3.0.0",
2380 | "path-exists": "^3.0.0"
2381 | }
2382 | },
2383 | "p-limit": {
2384 | "version": "2.3.0",
2385 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
2386 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
2387 | "dev": true,
2388 | "requires": {
2389 | "p-try": "^2.0.0"
2390 | }
2391 | },
2392 | "p-locate": {
2393 | "version": "3.0.0",
2394 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
2395 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
2396 | "dev": true,
2397 | "requires": {
2398 | "p-limit": "^2.0.0"
2399 | }
2400 | },
2401 | "p-try": {
2402 | "version": "2.2.0",
2403 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2404 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2405 | "dev": true
2406 | },
2407 | "parse-json": {
2408 | "version": "4.0.0",
2409 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
2410 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
2411 | "dev": true,
2412 | "requires": {
2413 | "error-ex": "^1.3.1",
2414 | "json-parse-better-errors": "^1.0.1"
2415 | }
2416 | },
2417 | "pify": {
2418 | "version": "4.0.1",
2419 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
2420 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
2421 | "dev": true
2422 | },
2423 | "type-fest": {
2424 | "version": "0.3.1",
2425 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
2426 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
2427 | "dev": true
2428 | }
2429 | }
2430 | },
2431 | "pkg-dir": {
2432 | "version": "2.0.0",
2433 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
2434 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
2435 | "dev": true,
2436 | "requires": {
2437 | "find-up": "^2.1.0"
2438 | }
2439 | },
2440 | "prelude-ls": {
2441 | "version": "1.2.1",
2442 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2443 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2444 | "dev": true
2445 | },
2446 | "prepend-http": {
2447 | "version": "2.0.0",
2448 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
2449 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
2450 | },
2451 | "process-nextick-args": {
2452 | "version": "2.0.1",
2453 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2454 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
2455 | },
2456 | "progress": {
2457 | "version": "2.0.3",
2458 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
2459 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
2460 | "dev": true
2461 | },
2462 | "prop-types": {
2463 | "version": "15.7.2",
2464 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
2465 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
2466 | "dev": true,
2467 | "requires": {
2468 | "loose-envify": "^1.4.0",
2469 | "object-assign": "^4.1.1",
2470 | "react-is": "^16.8.1"
2471 | }
2472 | },
2473 | "proxy-addr": {
2474 | "version": "2.0.6",
2475 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
2476 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
2477 | "requires": {
2478 | "forwarded": "~0.1.2",
2479 | "ipaddr.js": "1.9.1"
2480 | }
2481 | },
2482 | "pseudomap": {
2483 | "version": "1.0.2",
2484 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
2485 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
2486 | },
2487 | "pstree.remy": {
2488 | "version": "1.1.8",
2489 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
2490 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
2491 | },
2492 | "pump": {
2493 | "version": "3.0.0",
2494 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2495 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2496 | "requires": {
2497 | "end-of-stream": "^1.1.0",
2498 | "once": "^1.3.1"
2499 | }
2500 | },
2501 | "punycode": {
2502 | "version": "2.1.1",
2503 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2504 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2505 | "dev": true
2506 | },
2507 | "pupa": {
2508 | "version": "2.0.1",
2509 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz",
2510 | "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==",
2511 | "requires": {
2512 | "escape-goat": "^2.0.0"
2513 | }
2514 | },
2515 | "qs": {
2516 | "version": "6.9.4",
2517 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
2518 | "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
2519 | },
2520 | "random-bytes": {
2521 | "version": "1.0.0",
2522 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
2523 | "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
2524 | },
2525 | "range-parser": {
2526 | "version": "1.2.1",
2527 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
2528 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
2529 | },
2530 | "raw-body": {
2531 | "version": "2.4.0",
2532 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
2533 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
2534 | "requires": {
2535 | "bytes": "3.1.0",
2536 | "http-errors": "1.7.2",
2537 | "iconv-lite": "0.4.24",
2538 | "unpipe": "1.0.0"
2539 | }
2540 | },
2541 | "rc": {
2542 | "version": "1.2.8",
2543 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
2544 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
2545 | "requires": {
2546 | "deep-extend": "^0.6.0",
2547 | "ini": "~1.3.0",
2548 | "minimist": "^1.2.0",
2549 | "strip-json-comments": "~2.0.1"
2550 | }
2551 | },
2552 | "react-is": {
2553 | "version": "16.13.1",
2554 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
2555 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
2556 | "dev": true
2557 | },
2558 | "read-pkg": {
2559 | "version": "2.0.0",
2560 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
2561 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
2562 | "dev": true,
2563 | "requires": {
2564 | "load-json-file": "^2.0.0",
2565 | "normalize-package-data": "^2.3.2",
2566 | "path-type": "^2.0.0"
2567 | }
2568 | },
2569 | "read-pkg-up": {
2570 | "version": "2.0.0",
2571 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
2572 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
2573 | "dev": true,
2574 | "requires": {
2575 | "find-up": "^2.0.0",
2576 | "read-pkg": "^2.0.0"
2577 | }
2578 | },
2579 | "readable-stream": {
2580 | "version": "2.3.7",
2581 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
2582 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
2583 | "requires": {
2584 | "core-util-is": "~1.0.0",
2585 | "inherits": "~2.0.3",
2586 | "isarray": "~1.0.0",
2587 | "process-nextick-args": "~2.0.0",
2588 | "safe-buffer": "~5.1.1",
2589 | "string_decoder": "~1.1.1",
2590 | "util-deprecate": "~1.0.1"
2591 | }
2592 | },
2593 | "readdirp": {
2594 | "version": "3.5.0",
2595 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
2596 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
2597 | "requires": {
2598 | "picomatch": "^2.2.1"
2599 | }
2600 | },
2601 | "regexp-clone": {
2602 | "version": "1.0.0",
2603 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
2604 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
2605 | },
2606 | "regexp.prototype.flags": {
2607 | "version": "1.3.0",
2608 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
2609 | "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
2610 | "dev": true,
2611 | "requires": {
2612 | "define-properties": "^1.1.3",
2613 | "es-abstract": "^1.17.0-next.1"
2614 | },
2615 | "dependencies": {
2616 | "es-abstract": {
2617 | "version": "1.17.7",
2618 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
2619 | "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
2620 | "dev": true,
2621 | "requires": {
2622 | "es-to-primitive": "^1.2.1",
2623 | "function-bind": "^1.1.1",
2624 | "has": "^1.0.3",
2625 | "has-symbols": "^1.0.1",
2626 | "is-callable": "^1.2.2",
2627 | "is-regex": "^1.1.1",
2628 | "object-inspect": "^1.8.0",
2629 | "object-keys": "^1.1.1",
2630 | "object.assign": "^4.1.1",
2631 | "string.prototype.trimend": "^1.0.1",
2632 | "string.prototype.trimstart": "^1.0.1"
2633 | }
2634 | }
2635 | }
2636 | },
2637 | "regexpp": {
2638 | "version": "3.1.0",
2639 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
2640 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
2641 | "dev": true
2642 | },
2643 | "registry-auth-token": {
2644 | "version": "4.2.0",
2645 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
2646 | "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
2647 | "requires": {
2648 | "rc": "^1.2.8"
2649 | }
2650 | },
2651 | "registry-url": {
2652 | "version": "5.1.0",
2653 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
2654 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
2655 | "requires": {
2656 | "rc": "^1.2.8"
2657 | }
2658 | },
2659 | "require_optional": {
2660 | "version": "1.0.1",
2661 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
2662 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
2663 | "requires": {
2664 | "resolve-from": "^2.0.0",
2665 | "semver": "^5.1.0"
2666 | }
2667 | },
2668 | "resolve": {
2669 | "version": "1.19.0",
2670 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
2671 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
2672 | "dev": true,
2673 | "requires": {
2674 | "is-core-module": "^2.1.0",
2675 | "path-parse": "^1.0.6"
2676 | }
2677 | },
2678 | "resolve-from": {
2679 | "version": "2.0.0",
2680 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
2681 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
2682 | },
2683 | "responselike": {
2684 | "version": "1.0.2",
2685 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
2686 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
2687 | "requires": {
2688 | "lowercase-keys": "^1.0.0"
2689 | }
2690 | },
2691 | "rimraf": {
2692 | "version": "2.6.3",
2693 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
2694 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
2695 | "dev": true,
2696 | "requires": {
2697 | "glob": "^7.1.3"
2698 | }
2699 | },
2700 | "safe-buffer": {
2701 | "version": "5.1.2",
2702 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2703 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
2704 | },
2705 | "safer-buffer": {
2706 | "version": "2.1.2",
2707 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2708 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2709 | },
2710 | "saslprep": {
2711 | "version": "1.0.3",
2712 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
2713 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
2714 | "optional": true,
2715 | "requires": {
2716 | "sparse-bitfield": "^3.0.3"
2717 | }
2718 | },
2719 | "semver": {
2720 | "version": "5.7.1",
2721 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2722 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
2723 | },
2724 | "semver-diff": {
2725 | "version": "3.1.1",
2726 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
2727 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
2728 | "requires": {
2729 | "semver": "^6.3.0"
2730 | },
2731 | "dependencies": {
2732 | "semver": {
2733 | "version": "6.3.0",
2734 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2735 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
2736 | }
2737 | }
2738 | },
2739 | "send": {
2740 | "version": "0.17.1",
2741 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
2742 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
2743 | "requires": {
2744 | "debug": "2.6.9",
2745 | "depd": "~1.1.2",
2746 | "destroy": "~1.0.4",
2747 | "encodeurl": "~1.0.2",
2748 | "escape-html": "~1.0.3",
2749 | "etag": "~1.8.1",
2750 | "fresh": "0.5.2",
2751 | "http-errors": "~1.7.2",
2752 | "mime": "1.6.0",
2753 | "ms": "2.1.1",
2754 | "on-finished": "~2.3.0",
2755 | "range-parser": "~1.2.1",
2756 | "statuses": "~1.5.0"
2757 | },
2758 | "dependencies": {
2759 | "ms": {
2760 | "version": "2.1.1",
2761 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
2762 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
2763 | }
2764 | }
2765 | },
2766 | "serve-static": {
2767 | "version": "1.14.1",
2768 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
2769 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
2770 | "requires": {
2771 | "encodeurl": "~1.0.2",
2772 | "escape-html": "~1.0.3",
2773 | "parseurl": "~1.3.3",
2774 | "send": "0.17.1"
2775 | }
2776 | },
2777 | "setprototypeof": {
2778 | "version": "1.1.1",
2779 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
2780 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
2781 | },
2782 | "shebang-command": {
2783 | "version": "2.0.0",
2784 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2785 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2786 | "dev": true,
2787 | "requires": {
2788 | "shebang-regex": "^3.0.0"
2789 | }
2790 | },
2791 | "shebang-regex": {
2792 | "version": "3.0.0",
2793 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2794 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2795 | "dev": true
2796 | },
2797 | "side-channel": {
2798 | "version": "1.0.3",
2799 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz",
2800 | "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==",
2801 | "dev": true,
2802 | "requires": {
2803 | "es-abstract": "^1.18.0-next.0",
2804 | "object-inspect": "^1.8.0"
2805 | }
2806 | },
2807 | "sift": {
2808 | "version": "7.0.1",
2809 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
2810 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
2811 | },
2812 | "signal-exit": {
2813 | "version": "3.0.3",
2814 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
2815 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
2816 | },
2817 | "slice-ansi": {
2818 | "version": "2.1.0",
2819 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
2820 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
2821 | "dev": true,
2822 | "requires": {
2823 | "ansi-styles": "^3.2.0",
2824 | "astral-regex": "^1.0.0",
2825 | "is-fullwidth-code-point": "^2.0.0"
2826 | }
2827 | },
2828 | "sliced": {
2829 | "version": "1.0.1",
2830 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
2831 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
2832 | },
2833 | "sparse-bitfield": {
2834 | "version": "3.0.3",
2835 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
2836 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
2837 | "optional": true,
2838 | "requires": {
2839 | "memory-pager": "^1.0.2"
2840 | }
2841 | },
2842 | "spdx-correct": {
2843 | "version": "3.1.1",
2844 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
2845 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
2846 | "dev": true,
2847 | "requires": {
2848 | "spdx-expression-parse": "^3.0.0",
2849 | "spdx-license-ids": "^3.0.0"
2850 | }
2851 | },
2852 | "spdx-exceptions": {
2853 | "version": "2.3.0",
2854 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
2855 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
2856 | "dev": true
2857 | },
2858 | "spdx-expression-parse": {
2859 | "version": "3.0.1",
2860 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2861 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
2862 | "dev": true,
2863 | "requires": {
2864 | "spdx-exceptions": "^2.1.0",
2865 | "spdx-license-ids": "^3.0.0"
2866 | }
2867 | },
2868 | "spdx-license-ids": {
2869 | "version": "3.0.7",
2870 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
2871 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
2872 | "dev": true
2873 | },
2874 | "sprintf-js": {
2875 | "version": "1.0.3",
2876 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2877 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2878 | "dev": true
2879 | },
2880 | "standard": {
2881 | "version": "16.0.3",
2882 | "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz",
2883 | "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==",
2884 | "dev": true,
2885 | "requires": {
2886 | "eslint": "~7.13.0",
2887 | "eslint-config-standard": "16.0.2",
2888 | "eslint-config-standard-jsx": "10.0.0",
2889 | "eslint-plugin-import": "~2.22.1",
2890 | "eslint-plugin-node": "~11.1.0",
2891 | "eslint-plugin-promise": "~4.2.1",
2892 | "eslint-plugin-react": "~7.21.5",
2893 | "standard-engine": "^14.0.1"
2894 | }
2895 | },
2896 | "standard-engine": {
2897 | "version": "14.0.1",
2898 | "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz",
2899 | "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==",
2900 | "dev": true,
2901 | "requires": {
2902 | "get-stdin": "^8.0.0",
2903 | "minimist": "^1.2.5",
2904 | "pkg-conf": "^3.1.0",
2905 | "xdg-basedir": "^4.0.0"
2906 | }
2907 | },
2908 | "statuses": {
2909 | "version": "1.5.0",
2910 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
2911 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
2912 | },
2913 | "string-width": {
2914 | "version": "4.2.0",
2915 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
2916 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
2917 | "requires": {
2918 | "emoji-regex": "^8.0.0",
2919 | "is-fullwidth-code-point": "^3.0.0",
2920 | "strip-ansi": "^6.0.0"
2921 | },
2922 | "dependencies": {
2923 | "ansi-regex": {
2924 | "version": "5.0.0",
2925 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
2926 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
2927 | },
2928 | "emoji-regex": {
2929 | "version": "8.0.0",
2930 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2931 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
2932 | },
2933 | "is-fullwidth-code-point": {
2934 | "version": "3.0.0",
2935 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2936 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
2937 | },
2938 | "strip-ansi": {
2939 | "version": "6.0.0",
2940 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2941 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2942 | "requires": {
2943 | "ansi-regex": "^5.0.0"
2944 | }
2945 | }
2946 | }
2947 | },
2948 | "string.prototype.matchall": {
2949 | "version": "4.0.3",
2950 | "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz",
2951 | "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==",
2952 | "dev": true,
2953 | "requires": {
2954 | "call-bind": "^1.0.0",
2955 | "define-properties": "^1.1.3",
2956 | "es-abstract": "^1.18.0-next.1",
2957 | "has-symbols": "^1.0.1",
2958 | "internal-slot": "^1.0.2",
2959 | "regexp.prototype.flags": "^1.3.0",
2960 | "side-channel": "^1.0.3"
2961 | }
2962 | },
2963 | "string.prototype.trimend": {
2964 | "version": "1.0.3",
2965 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
2966 | "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
2967 | "dev": true,
2968 | "requires": {
2969 | "call-bind": "^1.0.0",
2970 | "define-properties": "^1.1.3"
2971 | }
2972 | },
2973 | "string.prototype.trimstart": {
2974 | "version": "1.0.3",
2975 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
2976 | "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
2977 | "dev": true,
2978 | "requires": {
2979 | "call-bind": "^1.0.0",
2980 | "define-properties": "^1.1.3"
2981 | }
2982 | },
2983 | "string_decoder": {
2984 | "version": "1.1.1",
2985 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2986 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2987 | "requires": {
2988 | "safe-buffer": "~5.1.0"
2989 | }
2990 | },
2991 | "strip-ansi": {
2992 | "version": "5.2.0",
2993 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2994 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2995 | "requires": {
2996 | "ansi-regex": "^4.1.0"
2997 | }
2998 | },
2999 | "strip-bom": {
3000 | "version": "3.0.0",
3001 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
3002 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
3003 | "dev": true
3004 | },
3005 | "strip-json-comments": {
3006 | "version": "2.0.1",
3007 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
3008 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
3009 | },
3010 | "stripe": {
3011 | "version": "8.114.0",
3012 | "resolved": "https://registry.npmjs.org/stripe/-/stripe-8.114.0.tgz",
3013 | "integrity": "sha512-CaFK5aO2/gxR9kLLH7E0iL/DCPQAxTlYMYreofCqJ8AAzundZ6DdtVk0znlHpBVAEnq06SOxAQILdyDfRBr3vA==",
3014 | "requires": {
3015 | "@types/node": ">=8.1.0",
3016 | "qs": "^6.6.0"
3017 | }
3018 | },
3019 | "supports-color": {
3020 | "version": "5.5.0",
3021 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
3022 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
3023 | "requires": {
3024 | "has-flag": "^3.0.0"
3025 | }
3026 | },
3027 | "table": {
3028 | "version": "5.4.6",
3029 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
3030 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
3031 | "dev": true,
3032 | "requires": {
3033 | "ajv": "^6.10.2",
3034 | "lodash": "^4.17.14",
3035 | "slice-ansi": "^2.1.0",
3036 | "string-width": "^3.0.0"
3037 | },
3038 | "dependencies": {
3039 | "string-width": {
3040 | "version": "3.1.0",
3041 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
3042 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
3043 | "dev": true,
3044 | "requires": {
3045 | "emoji-regex": "^7.0.1",
3046 | "is-fullwidth-code-point": "^2.0.0",
3047 | "strip-ansi": "^5.1.0"
3048 | }
3049 | }
3050 | }
3051 | },
3052 | "term-size": {
3053 | "version": "2.2.0",
3054 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz",
3055 | "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw=="
3056 | },
3057 | "text-table": {
3058 | "version": "0.2.0",
3059 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
3060 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
3061 | "dev": true
3062 | },
3063 | "to-readable-stream": {
3064 | "version": "1.0.0",
3065 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
3066 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
3067 | },
3068 | "to-regex-range": {
3069 | "version": "5.0.1",
3070 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3071 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3072 | "requires": {
3073 | "is-number": "^7.0.0"
3074 | }
3075 | },
3076 | "toidentifier": {
3077 | "version": "1.0.0",
3078 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
3079 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
3080 | },
3081 | "touch": {
3082 | "version": "3.1.0",
3083 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
3084 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
3085 | "requires": {
3086 | "nopt": "~1.0.10"
3087 | }
3088 | },
3089 | "tsconfig-paths": {
3090 | "version": "3.9.0",
3091 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
3092 | "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
3093 | "dev": true,
3094 | "requires": {
3095 | "@types/json5": "^0.0.29",
3096 | "json5": "^1.0.1",
3097 | "minimist": "^1.2.0",
3098 | "strip-bom": "^3.0.0"
3099 | }
3100 | },
3101 | "type-check": {
3102 | "version": "0.4.0",
3103 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
3104 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
3105 | "dev": true,
3106 | "requires": {
3107 | "prelude-ls": "^1.2.1"
3108 | }
3109 | },
3110 | "type-fest": {
3111 | "version": "0.8.1",
3112 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
3113 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
3114 | },
3115 | "type-is": {
3116 | "version": "1.6.18",
3117 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
3118 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
3119 | "requires": {
3120 | "media-typer": "0.3.0",
3121 | "mime-types": "~2.1.24"
3122 | }
3123 | },
3124 | "typedarray-to-buffer": {
3125 | "version": "3.1.5",
3126 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
3127 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
3128 | "requires": {
3129 | "is-typedarray": "^1.0.0"
3130 | }
3131 | },
3132 | "uid-safe": {
3133 | "version": "2.1.5",
3134 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
3135 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
3136 | "requires": {
3137 | "random-bytes": "~1.0.0"
3138 | }
3139 | },
3140 | "undefsafe": {
3141 | "version": "2.0.3",
3142 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
3143 | "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
3144 | "requires": {
3145 | "debug": "^2.2.0"
3146 | }
3147 | },
3148 | "unique-string": {
3149 | "version": "2.0.0",
3150 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
3151 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
3152 | "requires": {
3153 | "crypto-random-string": "^2.0.0"
3154 | }
3155 | },
3156 | "unpipe": {
3157 | "version": "1.0.0",
3158 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
3159 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
3160 | },
3161 | "update-notifier": {
3162 | "version": "4.1.3",
3163 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
3164 | "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
3165 | "requires": {
3166 | "boxen": "^4.2.0",
3167 | "chalk": "^3.0.0",
3168 | "configstore": "^5.0.1",
3169 | "has-yarn": "^2.1.0",
3170 | "import-lazy": "^2.1.0",
3171 | "is-ci": "^2.0.0",
3172 | "is-installed-globally": "^0.3.1",
3173 | "is-npm": "^4.0.0",
3174 | "is-yarn-global": "^0.3.0",
3175 | "latest-version": "^5.0.0",
3176 | "pupa": "^2.0.1",
3177 | "semver-diff": "^3.1.1",
3178 | "xdg-basedir": "^4.0.0"
3179 | },
3180 | "dependencies": {
3181 | "ansi-styles": {
3182 | "version": "4.3.0",
3183 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
3184 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
3185 | "requires": {
3186 | "color-convert": "^2.0.1"
3187 | }
3188 | },
3189 | "chalk": {
3190 | "version": "3.0.0",
3191 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
3192 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
3193 | "requires": {
3194 | "ansi-styles": "^4.1.0",
3195 | "supports-color": "^7.1.0"
3196 | }
3197 | },
3198 | "color-convert": {
3199 | "version": "2.0.1",
3200 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
3201 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
3202 | "requires": {
3203 | "color-name": "~1.1.4"
3204 | }
3205 | },
3206 | "color-name": {
3207 | "version": "1.1.4",
3208 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3209 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
3210 | },
3211 | "has-flag": {
3212 | "version": "4.0.0",
3213 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
3214 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
3215 | },
3216 | "supports-color": {
3217 | "version": "7.2.0",
3218 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
3219 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
3220 | "requires": {
3221 | "has-flag": "^4.0.0"
3222 | }
3223 | }
3224 | }
3225 | },
3226 | "uri-js": {
3227 | "version": "4.4.0",
3228 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
3229 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
3230 | "dev": true,
3231 | "requires": {
3232 | "punycode": "^2.1.0"
3233 | }
3234 | },
3235 | "url-parse-lax": {
3236 | "version": "3.0.0",
3237 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
3238 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
3239 | "requires": {
3240 | "prepend-http": "^2.0.0"
3241 | }
3242 | },
3243 | "util-deprecate": {
3244 | "version": "1.0.2",
3245 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3246 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
3247 | },
3248 | "utils-merge": {
3249 | "version": "1.0.1",
3250 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
3251 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
3252 | },
3253 | "v8-compile-cache": {
3254 | "version": "2.2.0",
3255 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
3256 | "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
3257 | "dev": true
3258 | },
3259 | "validate-npm-package-license": {
3260 | "version": "3.0.4",
3261 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
3262 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
3263 | "dev": true,
3264 | "requires": {
3265 | "spdx-correct": "^3.0.0",
3266 | "spdx-expression-parse": "^3.0.0"
3267 | }
3268 | },
3269 | "vary": {
3270 | "version": "1.1.2",
3271 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
3272 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
3273 | },
3274 | "which": {
3275 | "version": "2.0.2",
3276 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3277 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3278 | "dev": true,
3279 | "requires": {
3280 | "isexe": "^2.0.0"
3281 | }
3282 | },
3283 | "widest-line": {
3284 | "version": "3.1.0",
3285 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
3286 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
3287 | "requires": {
3288 | "string-width": "^4.0.0"
3289 | }
3290 | },
3291 | "word-wrap": {
3292 | "version": "1.2.3",
3293 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
3294 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
3295 | "dev": true
3296 | },
3297 | "wrappy": {
3298 | "version": "1.0.2",
3299 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3300 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
3301 | },
3302 | "write": {
3303 | "version": "1.0.3",
3304 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
3305 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
3306 | "dev": true,
3307 | "requires": {
3308 | "mkdirp": "^0.5.1"
3309 | }
3310 | },
3311 | "write-file-atomic": {
3312 | "version": "3.0.3",
3313 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
3314 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
3315 | "requires": {
3316 | "imurmurhash": "^0.1.4",
3317 | "is-typedarray": "^1.0.0",
3318 | "signal-exit": "^3.0.2",
3319 | "typedarray-to-buffer": "^3.1.5"
3320 | }
3321 | },
3322 | "xdg-basedir": {
3323 | "version": "4.0.0",
3324 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
3325 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="
3326 | },
3327 | "yallist": {
3328 | "version": "4.0.0",
3329 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3330 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
3331 | "dev": true
3332 | }
3333 | }
3334 | }
3335 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stripe-subscriptions-nodejs",
3 | "version": "1.0.0",
4 | "author": "sssaini",
5 | "description": "Add Stripe Subscriptions Payments using Node.js",
6 | "main": "index.js",
7 | "scripts": {
8 | "start": "nodemon app.js",
9 | "lint": "standard",
10 | "lint:fix": "standard --fix"
11 | },
12 | "license": "ISC",
13 | "dependencies": {
14 | "body-parser": "^1.19.0",
15 | "cookie-parser": "^1.4.5",
16 | "dotenv": "^8.2.0",
17 | "ejs": "^3.1.5",
18 | "express": "^4.17.1",
19 | "express-session": "^1.17.1",
20 | "memorystore": "^1.6.4",
21 | "mongoose": "^5.10.11",
22 | "nodemon": "^2.0.5",
23 | "stripe": "^8.114.0"
24 | },
25 | "devDependencies": {
26 | "standard": "^16.0.3"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/public/css/account.css:
--------------------------------------------------------------------------------
1 |
2 | .container {
3 | width: auto;
4 | max-width: 680px;
5 | padding: 0 15px;
6 | }
7 |
8 | .footer {
9 | background-color: #f5f5f5;
10 | }
11 |
--------------------------------------------------------------------------------
/public/css/common.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | height: 100%;
4 | }
5 |
6 | .btn-primary {
7 | background-color: #5000ff;
8 | }
9 | .btn-primary:hover {
10 | background-color: #4d02ee;
11 | }
12 |
--------------------------------------------------------------------------------
/public/css/login.css:
--------------------------------------------------------------------------------
1 | body {
2 | height: 100vh;
3 | display: flex;
4 | align-items: center;
5 | background-color: #f5f5f5;
6 | }
7 |
8 | .form-login {
9 | width: 100%;
10 | max-width: 330px;
11 | padding: 15px;
12 | margin: 0 auto;
13 | }
14 |
15 | .form-login .form-control {
16 | position: relative;
17 | box-sizing: border-box;
18 | height: auto;
19 | padding: 10px;
20 | font-size: 16px;
21 | }
22 |
23 | .form-login input[type="email"] {
24 | margin-bottom: -1px;
25 | }
26 |
--------------------------------------------------------------------------------
/public/images/saasbase.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bdcorps/stripe-subscriptions-nodejs/d4d9a4ef1d02e15259e43b8aae2a4e37f4113f7e/public/images/saasbase.png
--------------------------------------------------------------------------------
/public/js/account.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function () {
2 | const publishableKey = 'pk_test_51IEFXDJeiR9mmQ6KE6JlSvpx7Ze91qtWgWbf9oQH3sQ9qnD6yH6N6qVIg0DXsVrvnrm738wjg5rcw9B8sC48ybyS007EciEbVs'
3 |
4 | const stripe = Stripe(
5 | publishableKey)
6 | const checkoutButton = $('#checkout-button')
7 | const manageBillingButton = $('#manage-billing-button')
8 |
9 | checkoutButton.click(function () {
10 | const product = $("input[name='product']:checked").val()
11 |
12 | fetch('/checkout', {
13 | method: 'POST',
14 | headers: {
15 | 'Content-Type': 'application/json',
16 | 'email': customer.email
17 | },
18 | body: JSON.stringify({
19 | product,
20 | customerID: customer.billingID
21 | })
22 | })
23 | .then((result) => result.json())
24 | .then(({ sessionId }) => stripe.redirectToCheckout({ sessionId }))
25 | })
26 |
27 | manageBillingButton.click(function () {
28 | const requestOptions = {
29 | method: 'POST',
30 | headers: {
31 | 'Content-Type': 'application/json',
32 | email: customer.email
33 | },
34 | body: JSON.stringify({
35 | customer: customer.billingID
36 | })
37 | }
38 |
39 | fetch('/billing', requestOptions)
40 | .then((response) => response.json())
41 | .then((result) => window.location.replace(result.url))
42 | .catch((error) => console.log('error', error))
43 | })
44 | })
45 |
--------------------------------------------------------------------------------
/src/connect/mongodb.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 | mongoose.Promise = global.Promise
3 |
4 | const db = process.env.MONGODB
5 |
6 | mongoose.connect(db, {
7 | useUnifiedTopology: true,
8 | useNewUrlParser: true
9 | })
10 |
11 | mongoose.connection.on('connected', function () {
12 | console.log('Mongoose default connection open to ' + process.env.MONGODB)
13 | })
14 |
15 | mongoose.connection.on('error', function (err) {
16 | console.log('Mongoose default connection error: ' + err)
17 | })
18 |
19 | mongoose.connection.on('disconnected', function () {
20 | console.log('Mongoose default connection disconnected')
21 | })
22 |
23 | process.on('SIGINT', function () {
24 | mongoose.connection.close(function () {
25 | console.log(
26 | 'Mongoose default connection disconnected through app termination'
27 | )
28 | process.exit(0)
29 | })
30 | })
31 |
--------------------------------------------------------------------------------
/src/connect/stripe.js:
--------------------------------------------------------------------------------
1 | const stripe = require('stripe')
2 |
3 | const Stripe = stripe(process.env.STRIPE_SECRET_KEY, {
4 | apiVersion: '2020-08-27'
5 | })
6 |
7 | const createCheckoutSession = async (customerID, price) => {
8 | const session = await Stripe.checkout.sessions.create({
9 | mode: 'subscription',
10 | payment_method_types: ['card'],
11 | customer: customerID,
12 | line_items: [
13 | {
14 | price,
15 | quantity: 1
16 | }
17 | ],
18 | subscription_data: {
19 | trial_period_days: process.env.TRIAL_DAYS
20 | },
21 |
22 | success_url: `${process.env.DOMAIN}?session_id={CHECKOUT_SESSION_ID}`,
23 | cancel_url: `${process.env.DOMAIN}`
24 | })
25 |
26 | return session
27 | }
28 |
29 | const createBillingSession = async (customer) => {
30 | const session = await Stripe.billingPortal.sessions.create({
31 | customer,
32 | return_url: 'https://localhost:4242'
33 | })
34 | return session
35 | }
36 |
37 | const getCustomerByID = async (id) => {
38 | const customer = await Stripe.customers.retrieve(id)
39 | return customer
40 | }
41 |
42 | const addNewCustomer = async (email) => {
43 | const customer = await Stripe.customers.create({
44 | email,
45 | description: 'New Customer'
46 | })
47 |
48 | return customer
49 | }
50 |
51 | const createWebhook = (rawBody, sig) => {
52 | const event = Stripe.webhooks.constructEvent(
53 | rawBody,
54 | sig,
55 | process.env.STRIPE_WEBHOOK_SECRET
56 | )
57 | return event
58 | }
59 |
60 | module.exports = {
61 | getCustomerByID,
62 | addNewCustomer,
63 | createCheckoutSession,
64 | createBillingSession,
65 | createWebhook
66 | }
67 |
--------------------------------------------------------------------------------
/src/middleware/hasPlan.js:
--------------------------------------------------------------------------------
1 | module.exports = function hasPlan (plan) {
2 | return async (req, res, next) => {
3 | if (req.user && req.user.plan == plan) {
4 | next()
5 | } else {
6 | res.status(401).send('Unauthorized')
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/middleware/setCurrentUser.js:
--------------------------------------------------------------------------------
1 | const UserService = require('../user')
2 |
3 | module.exports = async function setCurrentUser (req, res, next) {
4 | const { email } = req.session
5 |
6 | if (email) {
7 | user = await UserService.getUserByEmail(email)
8 |
9 | req.user = user
10 | next()
11 | } else {
12 | res.redirect('/')
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/user/index.js:
--------------------------------------------------------------------------------
1 | const User = require('./user.model')
2 | const UserService = require('./user.service')
3 |
4 | module.exports = UserService(User)
5 |
--------------------------------------------------------------------------------
/src/user/user.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 | const Schema = mongoose.Schema
3 |
4 | const userSchema = new Schema({
5 | email: String,
6 | billingID: String,
7 | plan: { type: String, enum: ['none', 'basic', 'pro'], default: 'none' },
8 | hasTrial: { type: Boolean, default: false },
9 | endDate: { type: Date, default: null }
10 | })
11 |
12 | const userModel = mongoose.model('user', userSchema, 'user')
13 |
14 | module.exports = userModel
15 |
--------------------------------------------------------------------------------
/src/user/user.service.js:
--------------------------------------------------------------------------------
1 | const addUser = (User) => ({ email, billingID, plan, endDate }) => {
2 | if (!email || !billingID || !plan) { throw new Error('Missing Data. Please provide values for email, billingID, plan') }
3 |
4 | const user = new User({ email, billingID, plan, endDate })
5 | return user.save()
6 | }
7 |
8 | const getUsers = (User) => () => {
9 | return User.find({})
10 | }
11 |
12 | const getUserByEmail = (User) => async (email) => {
13 | return await User.findOne({ email })
14 | }
15 |
16 | const getUserByBillingID = (User) => async (billingID) => {
17 | return await User.findOne({ billingID })
18 | }
19 |
20 | const updatePlan = (User) => (email, plan) => {
21 | return User.findOneAndUpdate({ email, plan })
22 | }
23 |
24 | module.exports = (User) => {
25 | return {
26 | addUser: addUser(User),
27 | getUsers: getUsers(User),
28 | getUserByEmail: getUserByEmail(User),
29 | updatePlan: updatePlan(User),
30 | getUserByBillingID: getUserByBillingID(User)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/views/account.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 | SaaSBase - Stripe Subscriptions
11 |
12 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
Account Dashboard
28 |
29 | <%if (customer ) { %>
30 |
Hi <%- customer.email %>
31 |
32 | <%if (customer.plan=="none" ) { %>
33 |
34 | You are currently not on any plan. Purchase a subscription below.
35 |
36 |
37 |
38 |
39 |
40 |
41 |
44 |
45 | <% } else{ %>
46 |
47 | You are currently on the <%- customer.plan %> plan %>
48 |
49 |
50 | <% if (customer.hasTrial) { %>
51 |
52 |
Trial active until <%- customer.endDate %>
53 |
54 | <% } else{ %>
55 |
56 |
57 | Trial inactive. Plan will end on <%- customer.endDate %>
58 |
59 | <% } %>
60 |
61 |
62 |
You can access your content by clicking one of the buttons below.
63 |
64 |
69 |
70 |
71 | Not happy with your current plan? Cancel or Upgrade by clicking the
72 | button below.
73 |
74 |
75 |
82 |
83 | <% } %> <% } else{ %> User does not exist in the database <% } %>
84 |
85 |
86 |
87 |
88 |
89 |
97 |
102 |
107 |
108 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/views/basic.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | SaaSBase - Stripe Subscriptions
9 |
10 |
11 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
View - For Basic plan customers only
25 |
If you're able to view this page - Success! You have purchased the Basic plan.
26 |
Update the content on this page by editing the ./views/basic.ejs file
27 |
Account Dashboard
28 |
29 |
30 |
31 |
36 |
41 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Document
7 |
8 |
9 |
10 | Stripe Subscriptions
11 |
12 |
13 |
--------------------------------------------------------------------------------
/views/login.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 | SaaSBase - Stripe Subscriptions
11 |
12 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
51 |
52 |
57 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/views/none.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | SaaSBase - Stripe Subscriptions
9 |
10 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
View - For customers with no plan only
23 |
You have not yet purchased any plan.
24 |
Update the content on this page by editing the ./views/none.ejs file
25 |
Account Dashboard
26 |
27 |
28 |
29 |
34 |
39 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/views/pro.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | SaaSBase - Stripe Subscriptions
9 |
10 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
View - For Pro plan customers only
23 |
If you're able to view this page - Success! You have purchased the Pro plan.
24 |
Update the content on this page by editing the ./views/pro.ejs file
25 |
Account Dashboard
26 |
27 |
28 |
29 |
34 |
39 |
44 |
45 |
46 |
--------------------------------------------------------------------------------