├── .gitignore ├── README.md ├── middleware ├── withProtect.js └── withRoles.js ├── models ├── productModel.js ├── purchaseModel.js └── userModel.js ├── package-lock.json ├── package.json ├── pages ├── _app.js ├── api │ └── users │ │ ├── authLogin.js │ │ ├── authVerify │ │ └── [token].js │ │ ├── isLoggedIn.js │ │ └── logout.js └── index.js ├── public ├── favicon.ico └── vercel.svg ├── styles ├── Home.module.css └── globals.css └── utils ├── dbConnect.js ├── email.js └── filterObj.js /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Middlware in Next.js 2 | 3 | This repo is from a tutorial by [Skillthrive](https://youtu.be/XbvnxKzVXks) on YouTube. 4 | -------------------------------------------------------------------------------- /middleware/withProtect.js: -------------------------------------------------------------------------------- 1 | import { promisify } from 'util'; 2 | import jwt from 'jsonwebtoken'; 3 | import User from '../models/userModel'; 4 | 5 | const withProtect = (handler) => { 6 | return async (req, res) => { 7 | // Get token and check if it exists 8 | let token; 9 | 10 | if (req.cookies && req.cookies.app_accessToken) { 11 | token = req.cookies.app_accessToken; 12 | } 13 | 14 | if (!token) { 15 | return res.status(401).json({ 16 | success: false, 17 | message: 'Please log in to get access.', 18 | }); 19 | } 20 | 21 | try { 22 | // Verify token 23 | const decoded = await promisify(jwt.verify)( 24 | token, 25 | process.env.JWT_SECRET 26 | ); 27 | 28 | // Check if user exists with refresh token 29 | const currentUser = await User.findById(decoded.id); 30 | if (!currentUser) { 31 | return res.status(401).json({ 32 | success: false, 33 | message: 'The user belonging to this token no longer exist.', 34 | }); 35 | } 36 | 37 | // Grant access to protected route 38 | req.user = currentUser; 39 | 40 | return handler(req, res); 41 | } catch (error) { 42 | return res.status(401).json({ 43 | success: false, 44 | message: 'Please log in to get access.', 45 | }); 46 | } 47 | }; 48 | }; 49 | 50 | export default withProtect; 51 | -------------------------------------------------------------------------------- /middleware/withRoles.js: -------------------------------------------------------------------------------- 1 | const withRoles = (handler, ...roles) => { 2 | return async (req, res) => { 3 | // Roles in an array 4 | if (!roles.includes(req.user.role)) { 5 | return res.status(403).json({ 6 | success: false, 7 | message: 'You do not have permission to perform this action.', 8 | }); 9 | } 10 | 11 | return handler(req, res); 12 | }; 13 | }; 14 | 15 | export default withRoles; 16 | -------------------------------------------------------------------------------- /models/productModel.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const productSchema = new mongoose.Schema( 4 | { 5 | title: { 6 | type: String, 7 | required: [true, 'Title is required'], 8 | }, 9 | amount: { 10 | type: Number, 11 | required: [true, 'Amount is required'], 12 | }, 13 | stripeId: { 14 | type: String, 15 | required: [true, 'Stripe ID is required'], 16 | }, 17 | }, 18 | { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } } 19 | ); 20 | 21 | module.exports = 22 | mongoose.models.Product || mongoose.model('Product', productSchema); 23 | -------------------------------------------------------------------------------- /models/purchaseModel.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const purchaseSchema = new mongoose.Schema( 4 | { 5 | product: { 6 | type: mongoose.Schema.Types.ObjectId, 7 | ref: 'Product', 8 | required: [true, 'Product is required'], 9 | }, 10 | amount: { 11 | type: Number, 12 | required: [true, 'Amount is required'], 13 | }, 14 | user: { 15 | type: mongoose.Schema.Types.ObjectId, 16 | ref: 'User', 17 | }, 18 | }, 19 | { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } } 20 | ); 21 | 22 | // Populate relational fields 23 | purchaseSchema.pre(/^find/, function (next) { 24 | this.populate({ 25 | path: 'user', 26 | select: 'id email', 27 | }); 28 | next(); 29 | }); 30 | 31 | purchaseSchema.pre(/^find/, function (next) { 32 | this.populate({ 33 | path: 'product', 34 | select: 'title stripeId', 35 | }); 36 | next(); 37 | }); 38 | 39 | module.exports = 40 | mongoose.models.Purchase || mongoose.model('Purchase', purchaseSchema); 41 | -------------------------------------------------------------------------------- /models/userModel.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto'); 2 | const mongoose = require('mongoose'); 3 | const validator = require('validator'); 4 | 5 | const refreshToken = new mongoose.Schema({ 6 | token: { 7 | type: String, 8 | trim: true, 9 | }, 10 | expiration: { 11 | type: Date, 12 | }, 13 | issued: { 14 | type: Date, 15 | default: Date.now(), 16 | }, 17 | select: false, 18 | }); 19 | 20 | const userSchema = new mongoose.Schema( 21 | { 22 | name: { 23 | type: String, 24 | trim: true, 25 | }, 26 | email: { 27 | type: String, 28 | unique: true, 29 | required: [true, 'Email cannot be empty'], 30 | trim: true, 31 | lowercase: true, 32 | validate: [validator.isEmail], 33 | }, 34 | photo: { 35 | type: String, 36 | default: 'default-user.jpg', 37 | }, 38 | role: { 39 | type: String, 40 | enum: ['user', 'editor', 'admin', 'pro'], 41 | default: 'user', 42 | }, 43 | customerId: { 44 | type: String, 45 | }, 46 | authLoginToken: { 47 | type: String, 48 | select: false, 49 | }, 50 | authLoginExpires: { 51 | type: Date, 52 | select: false, 53 | }, 54 | active: { 55 | type: Boolean, 56 | default: true, 57 | select: false, 58 | }, 59 | refreshTokens: [refreshToken], 60 | }, 61 | { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } } 62 | ); 63 | 64 | // Virtual populate 65 | userSchema.virtual('purchases', { 66 | ref: 'Purchase', 67 | foreignField: 'user', 68 | localField: '_id', 69 | }); 70 | 71 | userSchema.pre(/^find/, function (next) { 72 | // This points to the current query 73 | this.find({ active: { $ne: false } }); 74 | next(); 75 | }); 76 | 77 | userSchema.methods.createAuthToken = function () { 78 | const authToken = crypto.randomBytes(3).toString('hex'); 79 | 80 | this.authLoginToken = crypto 81 | .createHash('sha256') 82 | .update(authToken) 83 | .digest('hex'); 84 | 85 | this.authLoginExpires = Date.now() + 10 * 60 * 1000; 86 | 87 | return authToken; 88 | }; 89 | 90 | module.exports = mongoose.models.User || mongoose.model('User', userSchema); 91 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "middleware-example", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@ampproject/toolbox-core": { 8 | "version": "2.7.4", 9 | "resolved": "https://registry.npmjs.org/@ampproject/toolbox-core/-/toolbox-core-2.7.4.tgz", 10 | "integrity": "sha512-qpBhcS4urB7IKc+jx2kksN7BuvvwCo7Y3IstapWo+EW+COY5EYAUwb2pil37v3TsaqHKgX//NloFP1SKzGZAnw==", 11 | "requires": { 12 | "cross-fetch": "3.0.6", 13 | "lru-cache": "6.0.0" 14 | } 15 | }, 16 | "@ampproject/toolbox-optimizer": { 17 | "version": "2.7.1-alpha.0", 18 | "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.7.1-alpha.0.tgz", 19 | "integrity": "sha512-WGPZKVQvHgNYJk1XVJCCmY+NVGTGJtvn0OALDyiegN4FJWOcilQUhCIcjMkZN59u1flz/u+sEKccM5qsROqVyg==", 20 | "requires": { 21 | "@ampproject/toolbox-core": "^2.7.1-alpha.0", 22 | "@ampproject/toolbox-runtime-version": "^2.7.1-alpha.0", 23 | "@ampproject/toolbox-script-csp": "^2.5.4", 24 | "@ampproject/toolbox-validator-rules": "^2.7.1-alpha.0", 25 | "abort-controller": "3.0.0", 26 | "cross-fetch": "3.0.6", 27 | "cssnano-simple": "1.2.1", 28 | "dom-serializer": "1.1.0", 29 | "domhandler": "3.3.0", 30 | "domutils": "2.4.2", 31 | "htmlparser2": "5.0.1", 32 | "https-proxy-agent": "5.0.0", 33 | "lru-cache": "6.0.0", 34 | "node-fetch": "2.6.1", 35 | "normalize-html-whitespace": "1.0.0", 36 | "postcss": "7.0.32", 37 | "postcss-safe-parser": "4.0.2", 38 | "terser": "5.5.1" 39 | }, 40 | "dependencies": { 41 | "cssnano-simple": { 42 | "version": "1.2.1", 43 | "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.2.1.tgz", 44 | "integrity": "sha512-9vOyjw8Dj/T12kIOnXPZ5VnEIo6F3YMaIn0wqJXmn277R58cWpI3AvtdlCBtohX7VAUNYcyk2d0dKcXXkb5I6Q==", 45 | "requires": { 46 | "cssnano-preset-simple": "1.2.1", 47 | "postcss": "^7.0.32" 48 | } 49 | }, 50 | "postcss": { 51 | "version": "7.0.32", 52 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", 53 | "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", 54 | "requires": { 55 | "chalk": "^2.4.2", 56 | "source-map": "^0.6.1", 57 | "supports-color": "^6.1.0" 58 | } 59 | } 60 | } 61 | }, 62 | "@ampproject/toolbox-runtime-version": { 63 | "version": "2.7.4", 64 | "resolved": "https://registry.npmjs.org/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.7.4.tgz", 65 | "integrity": "sha512-SAdOUOERp42thVNWaBJlnFvFVvnacMVnz5z9LyUZHSnoL1EqrAW5Sz5jv+Ly+gkA8NYsEaUxAdSCBAzE9Uzb4Q==", 66 | "requires": { 67 | "@ampproject/toolbox-core": "2.7.4" 68 | } 69 | }, 70 | "@ampproject/toolbox-script-csp": { 71 | "version": "2.5.4", 72 | "resolved": "https://registry.npmjs.org/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz", 73 | "integrity": "sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ==" 74 | }, 75 | "@ampproject/toolbox-validator-rules": { 76 | "version": "2.7.4", 77 | "resolved": "https://registry.npmjs.org/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.7.4.tgz", 78 | "integrity": "sha512-z3JRcpIZLLdVC9XVe7YTZuB3a/eR9s2SjElYB9AWRdyJyL5Jt7+pGNv4Uwh1uHVoBXsWEVQzNOWSNtrO3mSwZA==", 79 | "requires": { 80 | "cross-fetch": "3.0.6" 81 | } 82 | }, 83 | "@babel/code-frame": { 84 | "version": "7.12.11", 85 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 86 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 87 | "requires": { 88 | "@babel/highlight": "^7.10.4" 89 | } 90 | }, 91 | "@babel/helper-validator-identifier": { 92 | "version": "7.12.11", 93 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 94 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" 95 | }, 96 | "@babel/highlight": { 97 | "version": "7.12.13", 98 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", 99 | "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", 100 | "requires": { 101 | "@babel/helper-validator-identifier": "^7.12.11", 102 | "chalk": "^2.0.0", 103 | "js-tokens": "^4.0.0" 104 | } 105 | }, 106 | "@babel/runtime": { 107 | "version": "7.12.5", 108 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", 109 | "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", 110 | "requires": { 111 | "regenerator-runtime": "^0.13.4" 112 | } 113 | }, 114 | "@babel/types": { 115 | "version": "7.8.3", 116 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", 117 | "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", 118 | "requires": { 119 | "esutils": "^2.0.2", 120 | "lodash": "^4.17.13", 121 | "to-fast-properties": "^2.0.0" 122 | } 123 | }, 124 | "@hapi/accept": { 125 | "version": "5.0.1", 126 | "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz", 127 | "integrity": "sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==", 128 | "requires": { 129 | "@hapi/boom": "9.x.x", 130 | "@hapi/hoek": "9.x.x" 131 | } 132 | }, 133 | "@hapi/boom": { 134 | "version": "9.1.1", 135 | "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.1.tgz", 136 | "integrity": "sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA==", 137 | "requires": { 138 | "@hapi/hoek": "9.x.x" 139 | } 140 | }, 141 | "@hapi/hoek": { 142 | "version": "9.1.1", 143 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", 144 | "integrity": "sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==" 145 | }, 146 | "@next/env": { 147 | "version": "10.0.6", 148 | "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.6.tgz", 149 | "integrity": "sha512-++zgrcSL9SprjWKBbO3YuVj/8CTmxJl+zLErW/Kbr2VCT0u12SrBcMKvD236lEGs5/qUgeBfU3Dvmr6MASWrtA==" 150 | }, 151 | "@next/polyfill-module": { 152 | "version": "10.0.6", 153 | "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.0.6.tgz", 154 | "integrity": "sha512-Sk3HYFxiI3AyIhw7Nnc5un//duCthAP2XtPb4N1SamymOU2QSb8I1zkcsxVIlZRvftdXikQQgra6Ck2zfJRxpA==" 155 | }, 156 | "@next/react-dev-overlay": { 157 | "version": "10.0.6", 158 | "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.0.6.tgz", 159 | "integrity": "sha512-KbxpyVT6gr1KZ7JoFDKGNM0hK7CxPkIC14j/gYgR6qSOhxGs3GEIBScJRXfKD7LNPMgVgQtaJlBYlEJ7aQu1xg==", 160 | "requires": { 161 | "@babel/code-frame": "7.12.11", 162 | "anser": "1.4.9", 163 | "chalk": "4.0.0", 164 | "classnames": "2.2.6", 165 | "css.escape": "1.5.1", 166 | "data-uri-to-buffer": "3.0.1", 167 | "platform": "1.3.6", 168 | "shell-quote": "1.7.2", 169 | "source-map": "0.8.0-beta.0", 170 | "stacktrace-parser": "0.1.10", 171 | "strip-ansi": "6.0.0" 172 | }, 173 | "dependencies": { 174 | "ansi-styles": { 175 | "version": "4.3.0", 176 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 177 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 178 | "requires": { 179 | "color-convert": "^2.0.1" 180 | } 181 | }, 182 | "chalk": { 183 | "version": "4.0.0", 184 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", 185 | "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", 186 | "requires": { 187 | "ansi-styles": "^4.1.0", 188 | "supports-color": "^7.1.0" 189 | } 190 | }, 191 | "color-convert": { 192 | "version": "2.0.1", 193 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 194 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 195 | "requires": { 196 | "color-name": "~1.1.4" 197 | } 198 | }, 199 | "color-name": { 200 | "version": "1.1.4", 201 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 202 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 203 | }, 204 | "has-flag": { 205 | "version": "4.0.0", 206 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 207 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 208 | }, 209 | "source-map": { 210 | "version": "0.8.0-beta.0", 211 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", 212 | "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", 213 | "requires": { 214 | "whatwg-url": "^7.0.0" 215 | } 216 | }, 217 | "supports-color": { 218 | "version": "7.2.0", 219 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 220 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 221 | "requires": { 222 | "has-flag": "^4.0.0" 223 | } 224 | } 225 | } 226 | }, 227 | "@next/react-refresh-utils": { 228 | "version": "10.0.6", 229 | "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.0.6.tgz", 230 | "integrity": "sha512-4BF+8PyzDcYpumQJ22yBUjVP/CL2KLPM+3K3ZQb61HvmIptB/t+jFnH2ew8S7ORQNu/caVQC6wP5wAfOtpJNsg==" 231 | }, 232 | "@opentelemetry/api": { 233 | "version": "0.14.0", 234 | "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz", 235 | "integrity": "sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==", 236 | "requires": { 237 | "@opentelemetry/context-base": "^0.14.0" 238 | } 239 | }, 240 | "@opentelemetry/context-base": { 241 | "version": "0.14.0", 242 | "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz", 243 | "integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==" 244 | }, 245 | "@types/bson": { 246 | "version": "4.0.3", 247 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", 248 | "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", 249 | "requires": { 250 | "@types/node": "*" 251 | } 252 | }, 253 | "@types/mongodb": { 254 | "version": "3.6.7", 255 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.7.tgz", 256 | "integrity": "sha512-47P64kbkXarlleSMzSrRG04uzY+Dr3xAilOiqRIsqj/sZrmq6cUMx8njydY/iWMqi8IdE9ojFQl/X3ou9EsAlQ==", 257 | "requires": { 258 | "@types/bson": "*", 259 | "@types/node": "*" 260 | } 261 | }, 262 | "@types/node": { 263 | "version": "14.14.28", 264 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.28.tgz", 265 | "integrity": "sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g==" 266 | }, 267 | "abort-controller": { 268 | "version": "3.0.0", 269 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 270 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 271 | "requires": { 272 | "event-target-shim": "^5.0.0" 273 | } 274 | }, 275 | "agent-base": { 276 | "version": "6.0.2", 277 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 278 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 279 | "requires": { 280 | "debug": "4" 281 | } 282 | }, 283 | "anser": { 284 | "version": "1.4.9", 285 | "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", 286 | "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" 287 | }, 288 | "ansi-regex": { 289 | "version": "5.0.0", 290 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 291 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 292 | }, 293 | "ansi-styles": { 294 | "version": "3.2.1", 295 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 296 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 297 | "requires": { 298 | "color-convert": "^1.9.0" 299 | } 300 | }, 301 | "anymatch": { 302 | "version": "3.1.1", 303 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 304 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 305 | "requires": { 306 | "normalize-path": "^3.0.0", 307 | "picomatch": "^2.0.4" 308 | } 309 | }, 310 | "aproba": { 311 | "version": "1.2.0", 312 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 313 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", 314 | "optional": true 315 | }, 316 | "are-we-there-yet": { 317 | "version": "1.1.5", 318 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 319 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 320 | "optional": true, 321 | "requires": { 322 | "delegates": "^1.0.0", 323 | "readable-stream": "^2.0.6" 324 | }, 325 | "dependencies": { 326 | "readable-stream": { 327 | "version": "2.3.7", 328 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 329 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 330 | "optional": true, 331 | "requires": { 332 | "core-util-is": "~1.0.0", 333 | "inherits": "~2.0.3", 334 | "isarray": "~1.0.0", 335 | "process-nextick-args": "~2.0.0", 336 | "safe-buffer": "~5.1.1", 337 | "string_decoder": "~1.1.1", 338 | "util-deprecate": "~1.0.1" 339 | } 340 | }, 341 | "safe-buffer": { 342 | "version": "5.1.2", 343 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 344 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 345 | "optional": true 346 | }, 347 | "string_decoder": { 348 | "version": "1.1.1", 349 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 350 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 351 | "optional": true, 352 | "requires": { 353 | "safe-buffer": "~5.1.0" 354 | } 355 | } 356 | } 357 | }, 358 | "array-filter": { 359 | "version": "1.0.0", 360 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", 361 | "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" 362 | }, 363 | "array-flatten": { 364 | "version": "3.0.0", 365 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", 366 | "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", 367 | "optional": true 368 | }, 369 | "asn1.js": { 370 | "version": "5.4.1", 371 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 372 | "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", 373 | "requires": { 374 | "bn.js": "^4.0.0", 375 | "inherits": "^2.0.1", 376 | "minimalistic-assert": "^1.0.0", 377 | "safer-buffer": "^2.1.0" 378 | }, 379 | "dependencies": { 380 | "bn.js": { 381 | "version": "4.11.9", 382 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", 383 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" 384 | } 385 | } 386 | }, 387 | "assert": { 388 | "version": "1.5.0", 389 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 390 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 391 | "requires": { 392 | "object-assign": "^4.1.1", 393 | "util": "0.10.3" 394 | }, 395 | "dependencies": { 396 | "inherits": { 397 | "version": "2.0.1", 398 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 399 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" 400 | }, 401 | "util": { 402 | "version": "0.10.3", 403 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 404 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 405 | "requires": { 406 | "inherits": "2.0.1" 407 | } 408 | } 409 | } 410 | }, 411 | "ast-types": { 412 | "version": "0.13.2", 413 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", 414 | "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" 415 | }, 416 | "available-typed-arrays": { 417 | "version": "1.0.2", 418 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", 419 | "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", 420 | "requires": { 421 | "array-filter": "^1.0.0" 422 | } 423 | }, 424 | "babel-plugin-syntax-jsx": { 425 | "version": "6.18.0", 426 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", 427 | "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" 428 | }, 429 | "base64-js": { 430 | "version": "1.5.1", 431 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 432 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 433 | }, 434 | "big.js": { 435 | "version": "5.2.2", 436 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 437 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" 438 | }, 439 | "binary-extensions": { 440 | "version": "2.2.0", 441 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 442 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 443 | }, 444 | "bl": { 445 | "version": "4.1.0", 446 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 447 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 448 | "optional": true, 449 | "requires": { 450 | "buffer": "^5.5.0", 451 | "inherits": "^2.0.4", 452 | "readable-stream": "^3.4.0" 453 | } 454 | }, 455 | "bluebird": { 456 | "version": "3.5.1", 457 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 458 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 459 | }, 460 | "bn.js": { 461 | "version": "5.1.3", 462 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", 463 | "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" 464 | }, 465 | "braces": { 466 | "version": "3.0.2", 467 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 468 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 469 | "requires": { 470 | "fill-range": "^7.0.1" 471 | } 472 | }, 473 | "brorand": { 474 | "version": "1.1.0", 475 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 476 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 477 | }, 478 | "browserify-aes": { 479 | "version": "1.2.0", 480 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 481 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 482 | "requires": { 483 | "buffer-xor": "^1.0.3", 484 | "cipher-base": "^1.0.0", 485 | "create-hash": "^1.1.0", 486 | "evp_bytestokey": "^1.0.3", 487 | "inherits": "^2.0.1", 488 | "safe-buffer": "^5.0.1" 489 | } 490 | }, 491 | "browserify-cipher": { 492 | "version": "1.0.1", 493 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 494 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 495 | "requires": { 496 | "browserify-aes": "^1.0.4", 497 | "browserify-des": "^1.0.0", 498 | "evp_bytestokey": "^1.0.0" 499 | } 500 | }, 501 | "browserify-des": { 502 | "version": "1.0.2", 503 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 504 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 505 | "requires": { 506 | "cipher-base": "^1.0.1", 507 | "des.js": "^1.0.0", 508 | "inherits": "^2.0.1", 509 | "safe-buffer": "^5.1.2" 510 | } 511 | }, 512 | "browserify-rsa": { 513 | "version": "4.1.0", 514 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", 515 | "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", 516 | "requires": { 517 | "bn.js": "^5.0.0", 518 | "randombytes": "^2.0.1" 519 | } 520 | }, 521 | "browserify-sign": { 522 | "version": "4.2.1", 523 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", 524 | "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", 525 | "requires": { 526 | "bn.js": "^5.1.1", 527 | "browserify-rsa": "^4.0.1", 528 | "create-hash": "^1.2.0", 529 | "create-hmac": "^1.1.7", 530 | "elliptic": "^6.5.3", 531 | "inherits": "^2.0.4", 532 | "parse-asn1": "^5.1.5", 533 | "readable-stream": "^3.6.0", 534 | "safe-buffer": "^5.2.0" 535 | } 536 | }, 537 | "browserify-zlib": { 538 | "version": "0.2.0", 539 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 540 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 541 | "requires": { 542 | "pako": "~1.0.5" 543 | } 544 | }, 545 | "browserslist": { 546 | "version": "4.16.1", 547 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", 548 | "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", 549 | "requires": { 550 | "caniuse-lite": "^1.0.30001173", 551 | "colorette": "^1.2.1", 552 | "electron-to-chromium": "^1.3.634", 553 | "escalade": "^3.1.1", 554 | "node-releases": "^1.1.69" 555 | } 556 | }, 557 | "bson": { 558 | "version": "1.1.5", 559 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", 560 | "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" 561 | }, 562 | "buffer": { 563 | "version": "5.6.0", 564 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 565 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 566 | "requires": { 567 | "base64-js": "^1.0.2", 568 | "ieee754": "^1.1.4" 569 | } 570 | }, 571 | "buffer-equal-constant-time": { 572 | "version": "1.0.1", 573 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 574 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 575 | }, 576 | "buffer-from": { 577 | "version": "1.1.1", 578 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 579 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 580 | }, 581 | "buffer-xor": { 582 | "version": "1.0.3", 583 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 584 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" 585 | }, 586 | "builtin-status-codes": { 587 | "version": "3.0.0", 588 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 589 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" 590 | }, 591 | "bytes": { 592 | "version": "3.1.0", 593 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 594 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 595 | }, 596 | "call-bind": { 597 | "version": "1.0.2", 598 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 599 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 600 | "requires": { 601 | "function-bind": "^1.1.1", 602 | "get-intrinsic": "^1.0.2" 603 | } 604 | }, 605 | "caniuse-lite": { 606 | "version": "1.0.30001187", 607 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001187.tgz", 608 | "integrity": "sha512-w7/EP1JRZ9552CyrThUnay2RkZ1DXxKe/Q2swTC4+LElLh9RRYrL1Z+27LlakB8kzY0fSmHw9mc7XYDUKAKWMA==" 609 | }, 610 | "chalk": { 611 | "version": "2.4.2", 612 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 613 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 614 | "requires": { 615 | "ansi-styles": "^3.2.1", 616 | "escape-string-regexp": "^1.0.5", 617 | "supports-color": "^5.3.0" 618 | }, 619 | "dependencies": { 620 | "supports-color": { 621 | "version": "5.5.0", 622 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 623 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 624 | "requires": { 625 | "has-flag": "^3.0.0" 626 | } 627 | } 628 | } 629 | }, 630 | "chokidar": { 631 | "version": "3.5.1", 632 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 633 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 634 | "requires": { 635 | "anymatch": "~3.1.1", 636 | "braces": "~3.0.2", 637 | "fsevents": "~2.3.1", 638 | "glob-parent": "~5.1.0", 639 | "is-binary-path": "~2.1.0", 640 | "is-glob": "~4.0.1", 641 | "normalize-path": "~3.0.0", 642 | "readdirp": "~3.5.0" 643 | } 644 | }, 645 | "chownr": { 646 | "version": "1.1.4", 647 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 648 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 649 | "optional": true 650 | }, 651 | "cipher-base": { 652 | "version": "1.0.4", 653 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 654 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 655 | "requires": { 656 | "inherits": "^2.0.1", 657 | "safe-buffer": "^5.0.1" 658 | } 659 | }, 660 | "classnames": { 661 | "version": "2.2.6", 662 | "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", 663 | "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" 664 | }, 665 | "code-point-at": { 666 | "version": "1.1.0", 667 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 668 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 669 | "optional": true 670 | }, 671 | "color": { 672 | "version": "3.1.3", 673 | "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", 674 | "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", 675 | "optional": true, 676 | "requires": { 677 | "color-convert": "^1.9.1", 678 | "color-string": "^1.5.4" 679 | } 680 | }, 681 | "color-convert": { 682 | "version": "1.9.3", 683 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 684 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 685 | "requires": { 686 | "color-name": "1.1.3" 687 | } 688 | }, 689 | "color-name": { 690 | "version": "1.1.3", 691 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 692 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 693 | }, 694 | "color-string": { 695 | "version": "1.5.4", 696 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", 697 | "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", 698 | "optional": true, 699 | "requires": { 700 | "color-name": "^1.0.0", 701 | "simple-swizzle": "^0.2.2" 702 | } 703 | }, 704 | "colorette": { 705 | "version": "1.2.1", 706 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", 707 | "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" 708 | }, 709 | "commander": { 710 | "version": "2.20.3", 711 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 712 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 713 | }, 714 | "commondir": { 715 | "version": "1.0.1", 716 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 717 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" 718 | }, 719 | "console-browserify": { 720 | "version": "1.2.0", 721 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 722 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" 723 | }, 724 | "console-control-strings": { 725 | "version": "1.1.0", 726 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 727 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", 728 | "optional": true 729 | }, 730 | "constants-browserify": { 731 | "version": "1.0.0", 732 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 733 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" 734 | }, 735 | "convert-source-map": { 736 | "version": "1.7.0", 737 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 738 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 739 | "requires": { 740 | "safe-buffer": "~5.1.1" 741 | }, 742 | "dependencies": { 743 | "safe-buffer": { 744 | "version": "5.1.2", 745 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 746 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 747 | } 748 | } 749 | }, 750 | "cookies": { 751 | "version": "0.8.0", 752 | "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", 753 | "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", 754 | "requires": { 755 | "depd": "~2.0.0", 756 | "keygrip": "~1.1.0" 757 | }, 758 | "dependencies": { 759 | "depd": { 760 | "version": "2.0.0", 761 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 762 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 763 | } 764 | } 765 | }, 766 | "core-util-is": { 767 | "version": "1.0.2", 768 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 769 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 770 | }, 771 | "create-ecdh": { 772 | "version": "4.0.4", 773 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", 774 | "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", 775 | "requires": { 776 | "bn.js": "^4.1.0", 777 | "elliptic": "^6.5.3" 778 | }, 779 | "dependencies": { 780 | "bn.js": { 781 | "version": "4.11.9", 782 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", 783 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" 784 | } 785 | } 786 | }, 787 | "create-hash": { 788 | "version": "1.2.0", 789 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 790 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 791 | "requires": { 792 | "cipher-base": "^1.0.1", 793 | "inherits": "^2.0.1", 794 | "md5.js": "^1.3.4", 795 | "ripemd160": "^2.0.1", 796 | "sha.js": "^2.4.0" 797 | } 798 | }, 799 | "create-hmac": { 800 | "version": "1.1.7", 801 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 802 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 803 | "requires": { 804 | "cipher-base": "^1.0.3", 805 | "create-hash": "^1.1.0", 806 | "inherits": "^2.0.1", 807 | "ripemd160": "^2.0.0", 808 | "safe-buffer": "^5.0.1", 809 | "sha.js": "^2.4.8" 810 | } 811 | }, 812 | "cross-fetch": { 813 | "version": "3.0.6", 814 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", 815 | "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", 816 | "requires": { 817 | "node-fetch": "2.6.1" 818 | } 819 | }, 820 | "crypto": { 821 | "version": "1.0.1", 822 | "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", 823 | "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" 824 | }, 825 | "crypto-browserify": { 826 | "version": "3.12.0", 827 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 828 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 829 | "requires": { 830 | "browserify-cipher": "^1.0.0", 831 | "browserify-sign": "^4.0.0", 832 | "create-ecdh": "^4.0.0", 833 | "create-hash": "^1.1.0", 834 | "create-hmac": "^1.1.0", 835 | "diffie-hellman": "^5.0.0", 836 | "inherits": "^2.0.1", 837 | "pbkdf2": "^3.0.3", 838 | "public-encrypt": "^4.0.0", 839 | "randombytes": "^2.0.0", 840 | "randomfill": "^1.0.3" 841 | } 842 | }, 843 | "css.escape": { 844 | "version": "1.5.1", 845 | "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", 846 | "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" 847 | }, 848 | "cssnano-preset-simple": { 849 | "version": "1.2.1", 850 | "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.2.1.tgz", 851 | "integrity": "sha512-B2KahOIFTV6dw5Ioy9jHshTh/vAYNnUB2enyWRgnAEg3oJBjI/035ExpePaMqS2SwpbH7gCgvQqwpMBH6hTJSw==", 852 | "requires": { 853 | "caniuse-lite": "^1.0.30001093", 854 | "postcss": "^7.0.32" 855 | }, 856 | "dependencies": { 857 | "postcss": { 858 | "version": "7.0.35", 859 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", 860 | "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", 861 | "requires": { 862 | "chalk": "^2.4.2", 863 | "source-map": "^0.6.1", 864 | "supports-color": "^6.1.0" 865 | } 866 | } 867 | } 868 | }, 869 | "cssnano-simple": { 870 | "version": "1.2.2", 871 | "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-1.2.2.tgz", 872 | "integrity": "sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g==", 873 | "requires": { 874 | "cssnano-preset-simple": "1.2.2", 875 | "postcss": "^7.0.32" 876 | }, 877 | "dependencies": { 878 | "cssnano-preset-simple": { 879 | "version": "1.2.2", 880 | "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz", 881 | "integrity": "sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ==", 882 | "requires": { 883 | "caniuse-lite": "^1.0.30001179", 884 | "postcss": "^7.0.32" 885 | } 886 | }, 887 | "postcss": { 888 | "version": "7.0.35", 889 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", 890 | "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", 891 | "requires": { 892 | "chalk": "^2.4.2", 893 | "source-map": "^0.6.1", 894 | "supports-color": "^6.1.0" 895 | } 896 | } 897 | } 898 | }, 899 | "data-uri-to-buffer": { 900 | "version": "3.0.1", 901 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", 902 | "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" 903 | }, 904 | "debug": { 905 | "version": "4.3.1", 906 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 907 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 908 | "requires": { 909 | "ms": "2.1.2" 910 | } 911 | }, 912 | "decompress-response": { 913 | "version": "4.2.1", 914 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 915 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 916 | "optional": true, 917 | "requires": { 918 | "mimic-response": "^2.0.0" 919 | } 920 | }, 921 | "deep-extend": { 922 | "version": "0.6.0", 923 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 924 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 925 | "optional": true 926 | }, 927 | "define-properties": { 928 | "version": "1.1.3", 929 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 930 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 931 | "requires": { 932 | "object-keys": "^1.0.12" 933 | } 934 | }, 935 | "delegates": { 936 | "version": "1.0.0", 937 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 938 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", 939 | "optional": true 940 | }, 941 | "denque": { 942 | "version": "1.5.0", 943 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", 944 | "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" 945 | }, 946 | "depd": { 947 | "version": "1.1.2", 948 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 949 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 950 | }, 951 | "des.js": { 952 | "version": "1.0.1", 953 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 954 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 955 | "requires": { 956 | "inherits": "^2.0.1", 957 | "minimalistic-assert": "^1.0.0" 958 | } 959 | }, 960 | "detect-libc": { 961 | "version": "1.0.3", 962 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 963 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", 964 | "optional": true 965 | }, 966 | "diffie-hellman": { 967 | "version": "5.0.3", 968 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 969 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 970 | "requires": { 971 | "bn.js": "^4.1.0", 972 | "miller-rabin": "^4.0.0", 973 | "randombytes": "^2.0.0" 974 | }, 975 | "dependencies": { 976 | "bn.js": { 977 | "version": "4.11.9", 978 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", 979 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" 980 | } 981 | } 982 | }, 983 | "dom-serializer": { 984 | "version": "1.1.0", 985 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz", 986 | "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==", 987 | "requires": { 988 | "domelementtype": "^2.0.1", 989 | "domhandler": "^3.0.0", 990 | "entities": "^2.0.0" 991 | } 992 | }, 993 | "domain-browser": { 994 | "version": "1.2.0", 995 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 996 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" 997 | }, 998 | "domelementtype": { 999 | "version": "2.1.0", 1000 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", 1001 | "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" 1002 | }, 1003 | "domhandler": { 1004 | "version": "3.3.0", 1005 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 1006 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 1007 | "requires": { 1008 | "domelementtype": "^2.0.1" 1009 | } 1010 | }, 1011 | "domutils": { 1012 | "version": "2.4.2", 1013 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz", 1014 | "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==", 1015 | "requires": { 1016 | "dom-serializer": "^1.0.1", 1017 | "domelementtype": "^2.0.1", 1018 | "domhandler": "^3.3.0" 1019 | } 1020 | }, 1021 | "ecdsa-sig-formatter": { 1022 | "version": "1.0.11", 1023 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 1024 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 1025 | "requires": { 1026 | "safe-buffer": "^5.0.1" 1027 | } 1028 | }, 1029 | "electron-to-chromium": { 1030 | "version": "1.3.664", 1031 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.664.tgz", 1032 | "integrity": "sha512-yb8LrTQXQnh9yhnaIHLk6CYugF/An50T20+X0h++hjjhVfgSp1DGoMSYycF8/aD5eiqS4QwaNhiduFvK8rifRg==" 1033 | }, 1034 | "elliptic": { 1035 | "version": "6.5.4", 1036 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 1037 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 1038 | "requires": { 1039 | "bn.js": "^4.11.9", 1040 | "brorand": "^1.1.0", 1041 | "hash.js": "^1.0.0", 1042 | "hmac-drbg": "^1.0.1", 1043 | "inherits": "^2.0.4", 1044 | "minimalistic-assert": "^1.0.1", 1045 | "minimalistic-crypto-utils": "^1.0.1" 1046 | }, 1047 | "dependencies": { 1048 | "bn.js": { 1049 | "version": "4.11.9", 1050 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", 1051 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" 1052 | } 1053 | } 1054 | }, 1055 | "emojis-list": { 1056 | "version": "2.1.0", 1057 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 1058 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" 1059 | }, 1060 | "end-of-stream": { 1061 | "version": "1.4.4", 1062 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1063 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1064 | "optional": true, 1065 | "requires": { 1066 | "once": "^1.4.0" 1067 | } 1068 | }, 1069 | "entities": { 1070 | "version": "2.2.0", 1071 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1072 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" 1073 | }, 1074 | "es-abstract": { 1075 | "version": "1.18.0-next.2", 1076 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", 1077 | "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", 1078 | "requires": { 1079 | "call-bind": "^1.0.2", 1080 | "es-to-primitive": "^1.2.1", 1081 | "function-bind": "^1.1.1", 1082 | "get-intrinsic": "^1.0.2", 1083 | "has": "^1.0.3", 1084 | "has-symbols": "^1.0.1", 1085 | "is-callable": "^1.2.2", 1086 | "is-negative-zero": "^2.0.1", 1087 | "is-regex": "^1.1.1", 1088 | "object-inspect": "^1.9.0", 1089 | "object-keys": "^1.1.1", 1090 | "object.assign": "^4.1.2", 1091 | "string.prototype.trimend": "^1.0.3", 1092 | "string.prototype.trimstart": "^1.0.3" 1093 | } 1094 | }, 1095 | "es-to-primitive": { 1096 | "version": "1.2.1", 1097 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1098 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1099 | "requires": { 1100 | "is-callable": "^1.1.4", 1101 | "is-date-object": "^1.0.1", 1102 | "is-symbol": "^1.0.2" 1103 | } 1104 | }, 1105 | "escalade": { 1106 | "version": "3.1.1", 1107 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1108 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1109 | }, 1110 | "escape-string-regexp": { 1111 | "version": "1.0.5", 1112 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1113 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1114 | }, 1115 | "esutils": { 1116 | "version": "2.0.3", 1117 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1118 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 1119 | }, 1120 | "etag": { 1121 | "version": "1.8.1", 1122 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1123 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 1124 | }, 1125 | "event-target-shim": { 1126 | "version": "5.0.1", 1127 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1128 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 1129 | }, 1130 | "events": { 1131 | "version": "3.2.0", 1132 | "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", 1133 | "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" 1134 | }, 1135 | "evp_bytestokey": { 1136 | "version": "1.0.3", 1137 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1138 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1139 | "requires": { 1140 | "md5.js": "^1.3.4", 1141 | "safe-buffer": "^5.1.1" 1142 | } 1143 | }, 1144 | "expand-template": { 1145 | "version": "2.0.3", 1146 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 1147 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 1148 | "optional": true 1149 | }, 1150 | "fill-range": { 1151 | "version": "7.0.1", 1152 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1153 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1154 | "requires": { 1155 | "to-regex-range": "^5.0.1" 1156 | } 1157 | }, 1158 | "find-cache-dir": { 1159 | "version": "3.3.1", 1160 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", 1161 | "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", 1162 | "requires": { 1163 | "commondir": "^1.0.1", 1164 | "make-dir": "^3.0.2", 1165 | "pkg-dir": "^4.1.0" 1166 | } 1167 | }, 1168 | "find-up": { 1169 | "version": "4.1.0", 1170 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1171 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1172 | "requires": { 1173 | "locate-path": "^5.0.0", 1174 | "path-exists": "^4.0.0" 1175 | } 1176 | }, 1177 | "foreach": { 1178 | "version": "2.0.5", 1179 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 1180 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" 1181 | }, 1182 | "fs-constants": { 1183 | "version": "1.0.0", 1184 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 1185 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 1186 | "optional": true 1187 | }, 1188 | "fsevents": { 1189 | "version": "2.3.2", 1190 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1191 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1192 | "optional": true 1193 | }, 1194 | "function-bind": { 1195 | "version": "1.1.1", 1196 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1197 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1198 | }, 1199 | "gauge": { 1200 | "version": "2.7.4", 1201 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 1202 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 1203 | "optional": true, 1204 | "requires": { 1205 | "aproba": "^1.0.3", 1206 | "console-control-strings": "^1.0.0", 1207 | "has-unicode": "^2.0.0", 1208 | "object-assign": "^4.1.0", 1209 | "signal-exit": "^3.0.0", 1210 | "string-width": "^1.0.1", 1211 | "strip-ansi": "^3.0.1", 1212 | "wide-align": "^1.1.0" 1213 | }, 1214 | "dependencies": { 1215 | "ansi-regex": { 1216 | "version": "2.1.1", 1217 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1218 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 1219 | "optional": true 1220 | }, 1221 | "strip-ansi": { 1222 | "version": "3.0.1", 1223 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1224 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1225 | "optional": true, 1226 | "requires": { 1227 | "ansi-regex": "^2.0.0" 1228 | } 1229 | } 1230 | } 1231 | }, 1232 | "get-intrinsic": { 1233 | "version": "1.1.1", 1234 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1235 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1236 | "requires": { 1237 | "function-bind": "^1.1.1", 1238 | "has": "^1.0.3", 1239 | "has-symbols": "^1.0.1" 1240 | } 1241 | }, 1242 | "github-from-package": { 1243 | "version": "0.0.0", 1244 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 1245 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", 1246 | "optional": true 1247 | }, 1248 | "glob-parent": { 1249 | "version": "5.1.1", 1250 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 1251 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 1252 | "requires": { 1253 | "is-glob": "^4.0.1" 1254 | } 1255 | }, 1256 | "glob-to-regexp": { 1257 | "version": "0.4.1", 1258 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1259 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" 1260 | }, 1261 | "graceful-fs": { 1262 | "version": "4.2.6", 1263 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 1264 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" 1265 | }, 1266 | "has": { 1267 | "version": "1.0.3", 1268 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1269 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1270 | "requires": { 1271 | "function-bind": "^1.1.1" 1272 | } 1273 | }, 1274 | "has-flag": { 1275 | "version": "3.0.0", 1276 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1277 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1278 | }, 1279 | "has-symbols": { 1280 | "version": "1.0.1", 1281 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1282 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 1283 | }, 1284 | "has-unicode": { 1285 | "version": "2.0.1", 1286 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1287 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", 1288 | "optional": true 1289 | }, 1290 | "hash-base": { 1291 | "version": "3.1.0", 1292 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", 1293 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", 1294 | "requires": { 1295 | "inherits": "^2.0.4", 1296 | "readable-stream": "^3.6.0", 1297 | "safe-buffer": "^5.2.0" 1298 | } 1299 | }, 1300 | "hash.js": { 1301 | "version": "1.1.7", 1302 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1303 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1304 | "requires": { 1305 | "inherits": "^2.0.3", 1306 | "minimalistic-assert": "^1.0.1" 1307 | } 1308 | }, 1309 | "he": { 1310 | "version": "1.2.0", 1311 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1312 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 1313 | }, 1314 | "hmac-drbg": { 1315 | "version": "1.0.1", 1316 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1317 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1318 | "requires": { 1319 | "hash.js": "^1.0.3", 1320 | "minimalistic-assert": "^1.0.0", 1321 | "minimalistic-crypto-utils": "^1.0.1" 1322 | } 1323 | }, 1324 | "htmlparser2": { 1325 | "version": "5.0.1", 1326 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", 1327 | "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", 1328 | "requires": { 1329 | "domelementtype": "^2.0.1", 1330 | "domhandler": "^3.3.0", 1331 | "domutils": "^2.4.2", 1332 | "entities": "^2.0.0" 1333 | } 1334 | }, 1335 | "http-errors": { 1336 | "version": "1.7.3", 1337 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 1338 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 1339 | "requires": { 1340 | "depd": "~1.1.2", 1341 | "inherits": "2.0.4", 1342 | "setprototypeof": "1.1.1", 1343 | "statuses": ">= 1.5.0 < 2", 1344 | "toidentifier": "1.0.0" 1345 | } 1346 | }, 1347 | "https-browserify": { 1348 | "version": "1.0.0", 1349 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 1350 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" 1351 | }, 1352 | "https-proxy-agent": { 1353 | "version": "5.0.0", 1354 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1355 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1356 | "requires": { 1357 | "agent-base": "6", 1358 | "debug": "4" 1359 | } 1360 | }, 1361 | "iconv-lite": { 1362 | "version": "0.4.24", 1363 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1364 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1365 | "requires": { 1366 | "safer-buffer": ">= 2.1.2 < 3" 1367 | } 1368 | }, 1369 | "ieee754": { 1370 | "version": "1.2.1", 1371 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1372 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1373 | }, 1374 | "inherits": { 1375 | "version": "2.0.4", 1376 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1377 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1378 | }, 1379 | "ini": { 1380 | "version": "1.3.8", 1381 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1382 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1383 | "optional": true 1384 | }, 1385 | "is-arguments": { 1386 | "version": "1.1.0", 1387 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", 1388 | "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", 1389 | "requires": { 1390 | "call-bind": "^1.0.0" 1391 | } 1392 | }, 1393 | "is-arrayish": { 1394 | "version": "0.3.2", 1395 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1396 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", 1397 | "optional": true 1398 | }, 1399 | "is-binary-path": { 1400 | "version": "2.1.0", 1401 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1402 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1403 | "requires": { 1404 | "binary-extensions": "^2.0.0" 1405 | } 1406 | }, 1407 | "is-callable": { 1408 | "version": "1.2.3", 1409 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 1410 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" 1411 | }, 1412 | "is-date-object": { 1413 | "version": "1.0.2", 1414 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1415 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" 1416 | }, 1417 | "is-extglob": { 1418 | "version": "2.1.1", 1419 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1420 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 1421 | }, 1422 | "is-fullwidth-code-point": { 1423 | "version": "1.0.0", 1424 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1425 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1426 | "optional": true, 1427 | "requires": { 1428 | "number-is-nan": "^1.0.0" 1429 | } 1430 | }, 1431 | "is-generator-function": { 1432 | "version": "1.0.8", 1433 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", 1434 | "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==" 1435 | }, 1436 | "is-glob": { 1437 | "version": "4.0.1", 1438 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1439 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1440 | "requires": { 1441 | "is-extglob": "^2.1.1" 1442 | } 1443 | }, 1444 | "is-negative-zero": { 1445 | "version": "2.0.1", 1446 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 1447 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" 1448 | }, 1449 | "is-number": { 1450 | "version": "7.0.0", 1451 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1452 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1453 | }, 1454 | "is-regex": { 1455 | "version": "1.1.2", 1456 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", 1457 | "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", 1458 | "requires": { 1459 | "call-bind": "^1.0.2", 1460 | "has-symbols": "^1.0.1" 1461 | } 1462 | }, 1463 | "is-symbol": { 1464 | "version": "1.0.3", 1465 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1466 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1467 | "requires": { 1468 | "has-symbols": "^1.0.1" 1469 | } 1470 | }, 1471 | "is-typed-array": { 1472 | "version": "1.1.5", 1473 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", 1474 | "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", 1475 | "requires": { 1476 | "available-typed-arrays": "^1.0.2", 1477 | "call-bind": "^1.0.2", 1478 | "es-abstract": "^1.18.0-next.2", 1479 | "foreach": "^2.0.5", 1480 | "has-symbols": "^1.0.1" 1481 | } 1482 | }, 1483 | "isarray": { 1484 | "version": "1.0.0", 1485 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1486 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1487 | }, 1488 | "isobject": { 1489 | "version": "2.1.0", 1490 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1491 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1492 | "requires": { 1493 | "isarray": "1.0.0" 1494 | } 1495 | }, 1496 | "jest-worker": { 1497 | "version": "24.9.0", 1498 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", 1499 | "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", 1500 | "requires": { 1501 | "merge-stream": "^2.0.0", 1502 | "supports-color": "^6.1.0" 1503 | } 1504 | }, 1505 | "js-tokens": { 1506 | "version": "4.0.0", 1507 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1508 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1509 | }, 1510 | "json5": { 1511 | "version": "1.0.1", 1512 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 1513 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 1514 | "requires": { 1515 | "minimist": "^1.2.0" 1516 | } 1517 | }, 1518 | "jsonwebtoken": { 1519 | "version": "8.5.1", 1520 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 1521 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 1522 | "requires": { 1523 | "jws": "^3.2.2", 1524 | "lodash.includes": "^4.3.0", 1525 | "lodash.isboolean": "^3.0.3", 1526 | "lodash.isinteger": "^4.0.4", 1527 | "lodash.isnumber": "^3.0.3", 1528 | "lodash.isplainobject": "^4.0.6", 1529 | "lodash.isstring": "^4.0.1", 1530 | "lodash.once": "^4.0.0", 1531 | "ms": "^2.1.1", 1532 | "semver": "^5.6.0" 1533 | }, 1534 | "dependencies": { 1535 | "semver": { 1536 | "version": "5.7.1", 1537 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1538 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1539 | } 1540 | } 1541 | }, 1542 | "jwa": { 1543 | "version": "1.4.1", 1544 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 1545 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 1546 | "requires": { 1547 | "buffer-equal-constant-time": "1.0.1", 1548 | "ecdsa-sig-formatter": "1.0.11", 1549 | "safe-buffer": "^5.0.1" 1550 | } 1551 | }, 1552 | "jws": { 1553 | "version": "3.2.2", 1554 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 1555 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 1556 | "requires": { 1557 | "jwa": "^1.4.1", 1558 | "safe-buffer": "^5.0.1" 1559 | } 1560 | }, 1561 | "kareem": { 1562 | "version": "2.3.2", 1563 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", 1564 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" 1565 | }, 1566 | "keygrip": { 1567 | "version": "1.1.0", 1568 | "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", 1569 | "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", 1570 | "requires": { 1571 | "tsscmp": "1.0.6" 1572 | } 1573 | }, 1574 | "line-column": { 1575 | "version": "1.0.2", 1576 | "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", 1577 | "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", 1578 | "requires": { 1579 | "isarray": "^1.0.0", 1580 | "isobject": "^2.0.0" 1581 | } 1582 | }, 1583 | "loader-utils": { 1584 | "version": "1.2.3", 1585 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", 1586 | "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", 1587 | "requires": { 1588 | "big.js": "^5.2.2", 1589 | "emojis-list": "^2.0.0", 1590 | "json5": "^1.0.1" 1591 | } 1592 | }, 1593 | "locate-path": { 1594 | "version": "5.0.0", 1595 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1596 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1597 | "requires": { 1598 | "p-locate": "^4.1.0" 1599 | } 1600 | }, 1601 | "lodash": { 1602 | "version": "4.17.20", 1603 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 1604 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 1605 | }, 1606 | "lodash.includes": { 1607 | "version": "4.3.0", 1608 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 1609 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 1610 | }, 1611 | "lodash.isboolean": { 1612 | "version": "3.0.3", 1613 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 1614 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 1615 | }, 1616 | "lodash.isinteger": { 1617 | "version": "4.0.4", 1618 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 1619 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 1620 | }, 1621 | "lodash.isnumber": { 1622 | "version": "3.0.3", 1623 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 1624 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 1625 | }, 1626 | "lodash.isplainobject": { 1627 | "version": "4.0.6", 1628 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1629 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 1630 | }, 1631 | "lodash.isstring": { 1632 | "version": "4.0.1", 1633 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1634 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 1635 | }, 1636 | "lodash.once": { 1637 | "version": "4.1.1", 1638 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 1639 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 1640 | }, 1641 | "lodash.sortby": { 1642 | "version": "4.7.0", 1643 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1644 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 1645 | }, 1646 | "loose-envify": { 1647 | "version": "1.4.0", 1648 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1649 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1650 | "requires": { 1651 | "js-tokens": "^3.0.0 || ^4.0.0" 1652 | } 1653 | }, 1654 | "lru-cache": { 1655 | "version": "6.0.0", 1656 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1657 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1658 | "requires": { 1659 | "yallist": "^4.0.0" 1660 | } 1661 | }, 1662 | "make-dir": { 1663 | "version": "3.1.0", 1664 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1665 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1666 | "requires": { 1667 | "semver": "^6.0.0" 1668 | } 1669 | }, 1670 | "md5.js": { 1671 | "version": "1.3.5", 1672 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1673 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1674 | "requires": { 1675 | "hash-base": "^3.0.0", 1676 | "inherits": "^2.0.1", 1677 | "safe-buffer": "^5.1.2" 1678 | } 1679 | }, 1680 | "memory-pager": { 1681 | "version": "1.5.0", 1682 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1683 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1684 | "optional": true 1685 | }, 1686 | "merge-stream": { 1687 | "version": "2.0.0", 1688 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1689 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 1690 | }, 1691 | "miller-rabin": { 1692 | "version": "4.0.1", 1693 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 1694 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 1695 | "requires": { 1696 | "bn.js": "^4.0.0", 1697 | "brorand": "^1.0.1" 1698 | }, 1699 | "dependencies": { 1700 | "bn.js": { 1701 | "version": "4.11.9", 1702 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", 1703 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" 1704 | } 1705 | } 1706 | }, 1707 | "mimic-response": { 1708 | "version": "2.1.0", 1709 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 1710 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", 1711 | "optional": true 1712 | }, 1713 | "minimalistic-assert": { 1714 | "version": "1.0.1", 1715 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1716 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1717 | }, 1718 | "minimalistic-crypto-utils": { 1719 | "version": "1.0.1", 1720 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1721 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 1722 | }, 1723 | "minimist": { 1724 | "version": "1.2.5", 1725 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1726 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1727 | }, 1728 | "mkdirp-classic": { 1729 | "version": "0.5.3", 1730 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 1731 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", 1732 | "optional": true 1733 | }, 1734 | "mongodb": { 1735 | "version": "3.6.4", 1736 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.4.tgz", 1737 | "integrity": "sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw==", 1738 | "requires": { 1739 | "bl": "^2.2.1", 1740 | "bson": "^1.1.4", 1741 | "denque": "^1.4.1", 1742 | "require_optional": "^1.0.1", 1743 | "safe-buffer": "^5.1.2", 1744 | "saslprep": "^1.0.0" 1745 | }, 1746 | "dependencies": { 1747 | "bl": { 1748 | "version": "2.2.1", 1749 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 1750 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 1751 | "requires": { 1752 | "readable-stream": "^2.3.5", 1753 | "safe-buffer": "^5.1.1" 1754 | } 1755 | }, 1756 | "readable-stream": { 1757 | "version": "2.3.7", 1758 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1759 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1760 | "requires": { 1761 | "core-util-is": "~1.0.0", 1762 | "inherits": "~2.0.3", 1763 | "isarray": "~1.0.0", 1764 | "process-nextick-args": "~2.0.0", 1765 | "safe-buffer": "~5.1.1", 1766 | "string_decoder": "~1.1.1", 1767 | "util-deprecate": "~1.0.1" 1768 | }, 1769 | "dependencies": { 1770 | "safe-buffer": { 1771 | "version": "5.1.2", 1772 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1773 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1774 | } 1775 | } 1776 | }, 1777 | "string_decoder": { 1778 | "version": "1.1.1", 1779 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1780 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1781 | "requires": { 1782 | "safe-buffer": "~5.1.0" 1783 | }, 1784 | "dependencies": { 1785 | "safe-buffer": { 1786 | "version": "5.1.2", 1787 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1788 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1789 | } 1790 | } 1791 | } 1792 | } 1793 | }, 1794 | "mongoose": { 1795 | "version": "5.11.16", 1796 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.16.tgz", 1797 | "integrity": "sha512-qmolyGAskPuq0Xr3j2Tjm9jwRccGGnLRWtTuyRvYBZoyItajwIoQdetJH8oVzs3N7aZK/GKZ82xV/t97suF8Pg==", 1798 | "requires": { 1799 | "@types/mongodb": "^3.5.27", 1800 | "bson": "^1.1.4", 1801 | "kareem": "2.3.2", 1802 | "mongodb": "3.6.4", 1803 | "mongoose-legacy-pluralize": "1.0.2", 1804 | "mpath": "0.8.3", 1805 | "mquery": "3.2.4", 1806 | "ms": "2.1.2", 1807 | "regexp-clone": "1.0.0", 1808 | "safe-buffer": "5.2.1", 1809 | "sift": "7.0.1", 1810 | "sliced": "1.0.1" 1811 | } 1812 | }, 1813 | "mongoose-legacy-pluralize": { 1814 | "version": "1.0.2", 1815 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 1816 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 1817 | }, 1818 | "mpath": { 1819 | "version": "0.8.3", 1820 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", 1821 | "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" 1822 | }, 1823 | "mquery": { 1824 | "version": "3.2.4", 1825 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.4.tgz", 1826 | "integrity": "sha512-uOLpp7iRX0BV1Uu6YpsqJ5b42LwYnmu0WeF/f8qgD/On3g0XDaQM6pfn0m6UxO6SM8DioZ9Bk6xxbWIGHm2zHg==", 1827 | "requires": { 1828 | "bluebird": "3.5.1", 1829 | "debug": "3.1.0", 1830 | "regexp-clone": "^1.0.0", 1831 | "safe-buffer": "5.1.2", 1832 | "sliced": "1.0.1" 1833 | }, 1834 | "dependencies": { 1835 | "debug": { 1836 | "version": "3.1.0", 1837 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1838 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1839 | "requires": { 1840 | "ms": "2.0.0" 1841 | } 1842 | }, 1843 | "ms": { 1844 | "version": "2.0.0", 1845 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1846 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1847 | }, 1848 | "safe-buffer": { 1849 | "version": "5.1.2", 1850 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1851 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1852 | } 1853 | } 1854 | }, 1855 | "ms": { 1856 | "version": "2.1.2", 1857 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1858 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1859 | }, 1860 | "nanoid": { 1861 | "version": "3.1.20", 1862 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", 1863 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" 1864 | }, 1865 | "napi-build-utils": { 1866 | "version": "1.0.2", 1867 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 1868 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", 1869 | "optional": true 1870 | }, 1871 | "native-url": { 1872 | "version": "0.3.4", 1873 | "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", 1874 | "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==", 1875 | "requires": { 1876 | "querystring": "^0.2.0" 1877 | } 1878 | }, 1879 | "next": { 1880 | "version": "10.0.6", 1881 | "resolved": "https://registry.npmjs.org/next/-/next-10.0.6.tgz", 1882 | "integrity": "sha512-uM5Yv4Ha9iL6Lbg7Ez36GyJ0YTdRLzXLA9b1REH3rX2Wytw0Ls5qPuFGk4BHSQpQhYx6Z61iA2qPkGl33W4iBg==", 1883 | "requires": { 1884 | "@ampproject/toolbox-optimizer": "2.7.1-alpha.0", 1885 | "@babel/runtime": "7.12.5", 1886 | "@hapi/accept": "5.0.1", 1887 | "@next/env": "10.0.6", 1888 | "@next/polyfill-module": "10.0.6", 1889 | "@next/react-dev-overlay": "10.0.6", 1890 | "@next/react-refresh-utils": "10.0.6", 1891 | "@opentelemetry/api": "0.14.0", 1892 | "ast-types": "0.13.2", 1893 | "browserslist": "4.16.1", 1894 | "buffer": "5.6.0", 1895 | "caniuse-lite": "^1.0.30001179", 1896 | "chalk": "2.4.2", 1897 | "chokidar": "3.5.1", 1898 | "crypto-browserify": "3.12.0", 1899 | "cssnano-simple": "1.2.2", 1900 | "etag": "1.8.1", 1901 | "find-cache-dir": "3.3.1", 1902 | "jest-worker": "24.9.0", 1903 | "native-url": "0.3.4", 1904 | "node-fetch": "2.6.1", 1905 | "node-html-parser": "1.4.9", 1906 | "node-libs-browser": "^2.2.1", 1907 | "p-limit": "3.1.0", 1908 | "path-browserify": "1.0.1", 1909 | "pnp-webpack-plugin": "1.6.4", 1910 | "postcss": "8.1.7", 1911 | "process": "0.11.10", 1912 | "prop-types": "15.7.2", 1913 | "raw-body": "2.4.1", 1914 | "react-is": "16.13.1", 1915 | "react-refresh": "0.8.3", 1916 | "sharp": "0.26.3", 1917 | "stream-browserify": "3.0.0", 1918 | "styled-jsx": "3.3.2", 1919 | "use-subscription": "1.5.1", 1920 | "vm-browserify": "1.1.2", 1921 | "watchpack": "2.0.0-beta.13" 1922 | } 1923 | }, 1924 | "node-abi": { 1925 | "version": "2.19.3", 1926 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", 1927 | "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", 1928 | "optional": true, 1929 | "requires": { 1930 | "semver": "^5.4.1" 1931 | }, 1932 | "dependencies": { 1933 | "semver": { 1934 | "version": "5.7.1", 1935 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1936 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1937 | "optional": true 1938 | } 1939 | } 1940 | }, 1941 | "node-addon-api": { 1942 | "version": "3.1.0", 1943 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", 1944 | "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==", 1945 | "optional": true 1946 | }, 1947 | "node-fetch": { 1948 | "version": "2.6.1", 1949 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1950 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1951 | }, 1952 | "node-html-parser": { 1953 | "version": "1.4.9", 1954 | "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", 1955 | "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==", 1956 | "requires": { 1957 | "he": "1.2.0" 1958 | } 1959 | }, 1960 | "node-libs-browser": { 1961 | "version": "2.2.1", 1962 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", 1963 | "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", 1964 | "requires": { 1965 | "assert": "^1.1.1", 1966 | "browserify-zlib": "^0.2.0", 1967 | "buffer": "^4.3.0", 1968 | "console-browserify": "^1.1.0", 1969 | "constants-browserify": "^1.0.0", 1970 | "crypto-browserify": "^3.11.0", 1971 | "domain-browser": "^1.1.1", 1972 | "events": "^3.0.0", 1973 | "https-browserify": "^1.0.0", 1974 | "os-browserify": "^0.3.0", 1975 | "path-browserify": "0.0.1", 1976 | "process": "^0.11.10", 1977 | "punycode": "^1.2.4", 1978 | "querystring-es3": "^0.2.0", 1979 | "readable-stream": "^2.3.3", 1980 | "stream-browserify": "^2.0.1", 1981 | "stream-http": "^2.7.2", 1982 | "string_decoder": "^1.0.0", 1983 | "timers-browserify": "^2.0.4", 1984 | "tty-browserify": "0.0.0", 1985 | "url": "^0.11.0", 1986 | "util": "^0.11.0", 1987 | "vm-browserify": "^1.0.1" 1988 | }, 1989 | "dependencies": { 1990 | "buffer": { 1991 | "version": "4.9.2", 1992 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 1993 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 1994 | "requires": { 1995 | "base64-js": "^1.0.2", 1996 | "ieee754": "^1.1.4", 1997 | "isarray": "^1.0.0" 1998 | } 1999 | }, 2000 | "path-browserify": { 2001 | "version": "0.0.1", 2002 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 2003 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" 2004 | }, 2005 | "punycode": { 2006 | "version": "1.4.1", 2007 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2008 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2009 | }, 2010 | "readable-stream": { 2011 | "version": "2.3.7", 2012 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 2013 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 2014 | "requires": { 2015 | "core-util-is": "~1.0.0", 2016 | "inherits": "~2.0.3", 2017 | "isarray": "~1.0.0", 2018 | "process-nextick-args": "~2.0.0", 2019 | "safe-buffer": "~5.1.1", 2020 | "string_decoder": "~1.1.1", 2021 | "util-deprecate": "~1.0.1" 2022 | }, 2023 | "dependencies": { 2024 | "string_decoder": { 2025 | "version": "1.1.1", 2026 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2027 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2028 | "requires": { 2029 | "safe-buffer": "~5.1.0" 2030 | } 2031 | } 2032 | } 2033 | }, 2034 | "safe-buffer": { 2035 | "version": "5.1.2", 2036 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2037 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2038 | }, 2039 | "stream-browserify": { 2040 | "version": "2.0.2", 2041 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 2042 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 2043 | "requires": { 2044 | "inherits": "~2.0.1", 2045 | "readable-stream": "^2.0.2" 2046 | } 2047 | }, 2048 | "util": { 2049 | "version": "0.11.1", 2050 | "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", 2051 | "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", 2052 | "requires": { 2053 | "inherits": "2.0.3" 2054 | }, 2055 | "dependencies": { 2056 | "inherits": { 2057 | "version": "2.0.3", 2058 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2059 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 2060 | } 2061 | } 2062 | } 2063 | } 2064 | }, 2065 | "node-releases": { 2066 | "version": "1.1.70", 2067 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", 2068 | "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==" 2069 | }, 2070 | "noop-logger": { 2071 | "version": "0.1.1", 2072 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 2073 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", 2074 | "optional": true 2075 | }, 2076 | "normalize-html-whitespace": { 2077 | "version": "1.0.0", 2078 | "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", 2079 | "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" 2080 | }, 2081 | "normalize-path": { 2082 | "version": "3.0.0", 2083 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2084 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 2085 | }, 2086 | "npmlog": { 2087 | "version": "4.1.2", 2088 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 2089 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 2090 | "optional": true, 2091 | "requires": { 2092 | "are-we-there-yet": "~1.1.2", 2093 | "console-control-strings": "~1.1.0", 2094 | "gauge": "~2.7.3", 2095 | "set-blocking": "~2.0.0" 2096 | } 2097 | }, 2098 | "number-is-nan": { 2099 | "version": "1.0.1", 2100 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2101 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2102 | "optional": true 2103 | }, 2104 | "object-assign": { 2105 | "version": "4.1.1", 2106 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2107 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2108 | }, 2109 | "object-inspect": { 2110 | "version": "1.9.0", 2111 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", 2112 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" 2113 | }, 2114 | "object-keys": { 2115 | "version": "1.1.1", 2116 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2117 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 2118 | }, 2119 | "object.assign": { 2120 | "version": "4.1.2", 2121 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2122 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2123 | "requires": { 2124 | "call-bind": "^1.0.0", 2125 | "define-properties": "^1.1.3", 2126 | "has-symbols": "^1.0.1", 2127 | "object-keys": "^1.1.1" 2128 | } 2129 | }, 2130 | "once": { 2131 | "version": "1.4.0", 2132 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2133 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2134 | "optional": true, 2135 | "requires": { 2136 | "wrappy": "1" 2137 | } 2138 | }, 2139 | "os-browserify": { 2140 | "version": "0.3.0", 2141 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 2142 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" 2143 | }, 2144 | "p-limit": { 2145 | "version": "3.1.0", 2146 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2147 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2148 | "requires": { 2149 | "yocto-queue": "^0.1.0" 2150 | } 2151 | }, 2152 | "p-locate": { 2153 | "version": "4.1.0", 2154 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2155 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2156 | "requires": { 2157 | "p-limit": "^2.2.0" 2158 | }, 2159 | "dependencies": { 2160 | "p-limit": { 2161 | "version": "2.3.0", 2162 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2163 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2164 | "requires": { 2165 | "p-try": "^2.0.0" 2166 | } 2167 | } 2168 | } 2169 | }, 2170 | "p-try": { 2171 | "version": "2.2.0", 2172 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2173 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 2174 | }, 2175 | "pako": { 2176 | "version": "1.0.11", 2177 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 2178 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 2179 | }, 2180 | "parse-asn1": { 2181 | "version": "5.1.6", 2182 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", 2183 | "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", 2184 | "requires": { 2185 | "asn1.js": "^5.2.0", 2186 | "browserify-aes": "^1.0.0", 2187 | "evp_bytestokey": "^1.0.0", 2188 | "pbkdf2": "^3.0.3", 2189 | "safe-buffer": "^5.1.1" 2190 | } 2191 | }, 2192 | "path-browserify": { 2193 | "version": "1.0.1", 2194 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 2195 | "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" 2196 | }, 2197 | "path-exists": { 2198 | "version": "4.0.0", 2199 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2200 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 2201 | }, 2202 | "pbkdf2": { 2203 | "version": "3.1.1", 2204 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", 2205 | "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", 2206 | "requires": { 2207 | "create-hash": "^1.1.2", 2208 | "create-hmac": "^1.1.4", 2209 | "ripemd160": "^2.0.1", 2210 | "safe-buffer": "^5.0.1", 2211 | "sha.js": "^2.4.8" 2212 | } 2213 | }, 2214 | "picomatch": { 2215 | "version": "2.2.2", 2216 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 2217 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" 2218 | }, 2219 | "pkg-dir": { 2220 | "version": "4.2.0", 2221 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2222 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2223 | "requires": { 2224 | "find-up": "^4.0.0" 2225 | } 2226 | }, 2227 | "platform": { 2228 | "version": "1.3.6", 2229 | "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", 2230 | "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" 2231 | }, 2232 | "pnp-webpack-plugin": { 2233 | "version": "1.6.4", 2234 | "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", 2235 | "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", 2236 | "requires": { 2237 | "ts-pnp": "^1.1.6" 2238 | } 2239 | }, 2240 | "postcss": { 2241 | "version": "8.1.7", 2242 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", 2243 | "integrity": "sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==", 2244 | "requires": { 2245 | "colorette": "^1.2.1", 2246 | "line-column": "^1.0.2", 2247 | "nanoid": "^3.1.16", 2248 | "source-map": "^0.6.1" 2249 | } 2250 | }, 2251 | "postcss-safe-parser": { 2252 | "version": "4.0.2", 2253 | "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", 2254 | "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", 2255 | "requires": { 2256 | "postcss": "^7.0.26" 2257 | }, 2258 | "dependencies": { 2259 | "postcss": { 2260 | "version": "7.0.35", 2261 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", 2262 | "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", 2263 | "requires": { 2264 | "chalk": "^2.4.2", 2265 | "source-map": "^0.6.1", 2266 | "supports-color": "^6.1.0" 2267 | } 2268 | } 2269 | } 2270 | }, 2271 | "prebuild-install": { 2272 | "version": "6.0.1", 2273 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", 2274 | "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", 2275 | "optional": true, 2276 | "requires": { 2277 | "detect-libc": "^1.0.3", 2278 | "expand-template": "^2.0.3", 2279 | "github-from-package": "0.0.0", 2280 | "minimist": "^1.2.3", 2281 | "mkdirp-classic": "^0.5.3", 2282 | "napi-build-utils": "^1.0.1", 2283 | "node-abi": "^2.7.0", 2284 | "noop-logger": "^0.1.1", 2285 | "npmlog": "^4.0.1", 2286 | "pump": "^3.0.0", 2287 | "rc": "^1.2.7", 2288 | "simple-get": "^3.0.3", 2289 | "tar-fs": "^2.0.0", 2290 | "tunnel-agent": "^0.6.0", 2291 | "which-pm-runs": "^1.0.0" 2292 | }, 2293 | "dependencies": { 2294 | "simple-get": { 2295 | "version": "3.1.0", 2296 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 2297 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 2298 | "optional": true, 2299 | "requires": { 2300 | "decompress-response": "^4.2.0", 2301 | "once": "^1.3.1", 2302 | "simple-concat": "^1.0.0" 2303 | } 2304 | } 2305 | } 2306 | }, 2307 | "process": { 2308 | "version": "0.11.10", 2309 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2310 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" 2311 | }, 2312 | "process-nextick-args": { 2313 | "version": "2.0.1", 2314 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2315 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 2316 | }, 2317 | "prop-types": { 2318 | "version": "15.7.2", 2319 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", 2320 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", 2321 | "requires": { 2322 | "loose-envify": "^1.4.0", 2323 | "object-assign": "^4.1.1", 2324 | "react-is": "^16.8.1" 2325 | } 2326 | }, 2327 | "public-encrypt": { 2328 | "version": "4.0.3", 2329 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 2330 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 2331 | "requires": { 2332 | "bn.js": "^4.1.0", 2333 | "browserify-rsa": "^4.0.0", 2334 | "create-hash": "^1.1.0", 2335 | "parse-asn1": "^5.0.0", 2336 | "randombytes": "^2.0.1", 2337 | "safe-buffer": "^5.1.2" 2338 | }, 2339 | "dependencies": { 2340 | "bn.js": { 2341 | "version": "4.11.9", 2342 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", 2343 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" 2344 | } 2345 | } 2346 | }, 2347 | "pump": { 2348 | "version": "3.0.0", 2349 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2350 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2351 | "optional": true, 2352 | "requires": { 2353 | "end-of-stream": "^1.1.0", 2354 | "once": "^1.3.1" 2355 | } 2356 | }, 2357 | "punycode": { 2358 | "version": "2.1.1", 2359 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2360 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 2361 | }, 2362 | "querystring": { 2363 | "version": "0.2.0", 2364 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2365 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 2366 | }, 2367 | "querystring-es3": { 2368 | "version": "0.2.1", 2369 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2370 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" 2371 | }, 2372 | "randombytes": { 2373 | "version": "2.1.0", 2374 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2375 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2376 | "requires": { 2377 | "safe-buffer": "^5.1.0" 2378 | } 2379 | }, 2380 | "randomfill": { 2381 | "version": "1.0.4", 2382 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2383 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2384 | "requires": { 2385 | "randombytes": "^2.0.5", 2386 | "safe-buffer": "^5.1.0" 2387 | } 2388 | }, 2389 | "raw-body": { 2390 | "version": "2.4.1", 2391 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", 2392 | "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", 2393 | "requires": { 2394 | "bytes": "3.1.0", 2395 | "http-errors": "1.7.3", 2396 | "iconv-lite": "0.4.24", 2397 | "unpipe": "1.0.0" 2398 | } 2399 | }, 2400 | "rc": { 2401 | "version": "1.2.8", 2402 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2403 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2404 | "optional": true, 2405 | "requires": { 2406 | "deep-extend": "^0.6.0", 2407 | "ini": "~1.3.0", 2408 | "minimist": "^1.2.0", 2409 | "strip-json-comments": "~2.0.1" 2410 | } 2411 | }, 2412 | "react": { 2413 | "version": "17.0.1", 2414 | "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", 2415 | "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", 2416 | "requires": { 2417 | "loose-envify": "^1.1.0", 2418 | "object-assign": "^4.1.1" 2419 | } 2420 | }, 2421 | "react-dom": { 2422 | "version": "17.0.1", 2423 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", 2424 | "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", 2425 | "requires": { 2426 | "loose-envify": "^1.1.0", 2427 | "object-assign": "^4.1.1", 2428 | "scheduler": "^0.20.1" 2429 | } 2430 | }, 2431 | "react-is": { 2432 | "version": "16.13.1", 2433 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 2434 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 2435 | }, 2436 | "react-refresh": { 2437 | "version": "0.8.3", 2438 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", 2439 | "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" 2440 | }, 2441 | "readable-stream": { 2442 | "version": "3.6.0", 2443 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2444 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2445 | "requires": { 2446 | "inherits": "^2.0.3", 2447 | "string_decoder": "^1.1.1", 2448 | "util-deprecate": "^1.0.1" 2449 | } 2450 | }, 2451 | "readdirp": { 2452 | "version": "3.5.0", 2453 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 2454 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 2455 | "requires": { 2456 | "picomatch": "^2.2.1" 2457 | } 2458 | }, 2459 | "regenerator-runtime": { 2460 | "version": "0.13.7", 2461 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", 2462 | "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" 2463 | }, 2464 | "regexp-clone": { 2465 | "version": "1.0.0", 2466 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 2467 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 2468 | }, 2469 | "require_optional": { 2470 | "version": "1.0.1", 2471 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 2472 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 2473 | "requires": { 2474 | "resolve-from": "^2.0.0", 2475 | "semver": "^5.1.0" 2476 | }, 2477 | "dependencies": { 2478 | "semver": { 2479 | "version": "5.7.1", 2480 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2481 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 2482 | } 2483 | } 2484 | }, 2485 | "resolve-from": { 2486 | "version": "2.0.0", 2487 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 2488 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 2489 | }, 2490 | "ripemd160": { 2491 | "version": "2.0.2", 2492 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 2493 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 2494 | "requires": { 2495 | "hash-base": "^3.0.0", 2496 | "inherits": "^2.0.1" 2497 | } 2498 | }, 2499 | "safe-buffer": { 2500 | "version": "5.2.1", 2501 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2502 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 2503 | }, 2504 | "safer-buffer": { 2505 | "version": "2.1.2", 2506 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2507 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2508 | }, 2509 | "saslprep": { 2510 | "version": "1.0.3", 2511 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 2512 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 2513 | "optional": true, 2514 | "requires": { 2515 | "sparse-bitfield": "^3.0.3" 2516 | } 2517 | }, 2518 | "scheduler": { 2519 | "version": "0.20.1", 2520 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz", 2521 | "integrity": "sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==", 2522 | "requires": { 2523 | "loose-envify": "^1.1.0", 2524 | "object-assign": "^4.1.1" 2525 | } 2526 | }, 2527 | "semver": { 2528 | "version": "6.3.0", 2529 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2530 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 2531 | }, 2532 | "set-blocking": { 2533 | "version": "2.0.0", 2534 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2535 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2536 | "optional": true 2537 | }, 2538 | "setimmediate": { 2539 | "version": "1.0.5", 2540 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 2541 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 2542 | }, 2543 | "setprototypeof": { 2544 | "version": "1.1.1", 2545 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 2546 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 2547 | }, 2548 | "sha.js": { 2549 | "version": "2.4.11", 2550 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2551 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2552 | "requires": { 2553 | "inherits": "^2.0.1", 2554 | "safe-buffer": "^5.0.1" 2555 | } 2556 | }, 2557 | "sharp": { 2558 | "version": "0.26.3", 2559 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", 2560 | "integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==", 2561 | "optional": true, 2562 | "requires": { 2563 | "array-flatten": "^3.0.0", 2564 | "color": "^3.1.3", 2565 | "detect-libc": "^1.0.3", 2566 | "node-addon-api": "^3.0.2", 2567 | "npmlog": "^4.1.2", 2568 | "prebuild-install": "^6.0.0", 2569 | "semver": "^7.3.2", 2570 | "simple-get": "^4.0.0", 2571 | "tar-fs": "^2.1.1", 2572 | "tunnel-agent": "^0.6.0" 2573 | }, 2574 | "dependencies": { 2575 | "semver": { 2576 | "version": "7.3.4", 2577 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 2578 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 2579 | "optional": true, 2580 | "requires": { 2581 | "lru-cache": "^6.0.0" 2582 | } 2583 | } 2584 | } 2585 | }, 2586 | "shell-quote": { 2587 | "version": "1.7.2", 2588 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 2589 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" 2590 | }, 2591 | "sift": { 2592 | "version": "7.0.1", 2593 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", 2594 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" 2595 | }, 2596 | "signal-exit": { 2597 | "version": "3.0.3", 2598 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2599 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2600 | "optional": true 2601 | }, 2602 | "simple-concat": { 2603 | "version": "1.0.1", 2604 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 2605 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 2606 | "optional": true 2607 | }, 2608 | "simple-get": { 2609 | "version": "4.0.0", 2610 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", 2611 | "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", 2612 | "optional": true, 2613 | "requires": { 2614 | "decompress-response": "^6.0.0", 2615 | "once": "^1.3.1", 2616 | "simple-concat": "^1.0.0" 2617 | }, 2618 | "dependencies": { 2619 | "decompress-response": { 2620 | "version": "6.0.0", 2621 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 2622 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 2623 | "optional": true, 2624 | "requires": { 2625 | "mimic-response": "^3.1.0" 2626 | } 2627 | }, 2628 | "mimic-response": { 2629 | "version": "3.1.0", 2630 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 2631 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 2632 | "optional": true 2633 | } 2634 | } 2635 | }, 2636 | "simple-swizzle": { 2637 | "version": "0.2.2", 2638 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 2639 | "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", 2640 | "optional": true, 2641 | "requires": { 2642 | "is-arrayish": "^0.3.1" 2643 | } 2644 | }, 2645 | "sliced": { 2646 | "version": "1.0.1", 2647 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 2648 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 2649 | }, 2650 | "source-map": { 2651 | "version": "0.6.1", 2652 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2653 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 2654 | }, 2655 | "source-map-support": { 2656 | "version": "0.5.19", 2657 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 2658 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 2659 | "requires": { 2660 | "buffer-from": "^1.0.0", 2661 | "source-map": "^0.6.0" 2662 | } 2663 | }, 2664 | "sparse-bitfield": { 2665 | "version": "3.0.3", 2666 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 2667 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 2668 | "optional": true, 2669 | "requires": { 2670 | "memory-pager": "^1.0.2" 2671 | } 2672 | }, 2673 | "stacktrace-parser": { 2674 | "version": "0.1.10", 2675 | "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", 2676 | "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", 2677 | "requires": { 2678 | "type-fest": "^0.7.1" 2679 | } 2680 | }, 2681 | "statuses": { 2682 | "version": "1.5.0", 2683 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 2684 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 2685 | }, 2686 | "stream-browserify": { 2687 | "version": "3.0.0", 2688 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", 2689 | "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", 2690 | "requires": { 2691 | "inherits": "~2.0.4", 2692 | "readable-stream": "^3.5.0" 2693 | } 2694 | }, 2695 | "stream-http": { 2696 | "version": "2.8.3", 2697 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", 2698 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", 2699 | "requires": { 2700 | "builtin-status-codes": "^3.0.0", 2701 | "inherits": "^2.0.1", 2702 | "readable-stream": "^2.3.6", 2703 | "to-arraybuffer": "^1.0.0", 2704 | "xtend": "^4.0.0" 2705 | }, 2706 | "dependencies": { 2707 | "readable-stream": { 2708 | "version": "2.3.7", 2709 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 2710 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 2711 | "requires": { 2712 | "core-util-is": "~1.0.0", 2713 | "inherits": "~2.0.3", 2714 | "isarray": "~1.0.0", 2715 | "process-nextick-args": "~2.0.0", 2716 | "safe-buffer": "~5.1.1", 2717 | "string_decoder": "~1.1.1", 2718 | "util-deprecate": "~1.0.1" 2719 | } 2720 | }, 2721 | "safe-buffer": { 2722 | "version": "5.1.2", 2723 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2724 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2725 | }, 2726 | "string_decoder": { 2727 | "version": "1.1.1", 2728 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2729 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2730 | "requires": { 2731 | "safe-buffer": "~5.1.0" 2732 | } 2733 | } 2734 | } 2735 | }, 2736 | "string-hash": { 2737 | "version": "1.1.3", 2738 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", 2739 | "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" 2740 | }, 2741 | "string-width": { 2742 | "version": "1.0.2", 2743 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2744 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2745 | "optional": true, 2746 | "requires": { 2747 | "code-point-at": "^1.0.0", 2748 | "is-fullwidth-code-point": "^1.0.0", 2749 | "strip-ansi": "^3.0.0" 2750 | }, 2751 | "dependencies": { 2752 | "ansi-regex": { 2753 | "version": "2.1.1", 2754 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 2755 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 2756 | "optional": true 2757 | }, 2758 | "strip-ansi": { 2759 | "version": "3.0.1", 2760 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2761 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2762 | "optional": true, 2763 | "requires": { 2764 | "ansi-regex": "^2.0.0" 2765 | } 2766 | } 2767 | } 2768 | }, 2769 | "string.prototype.trimend": { 2770 | "version": "1.0.3", 2771 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", 2772 | "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", 2773 | "requires": { 2774 | "call-bind": "^1.0.0", 2775 | "define-properties": "^1.1.3" 2776 | } 2777 | }, 2778 | "string.prototype.trimstart": { 2779 | "version": "1.0.3", 2780 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", 2781 | "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", 2782 | "requires": { 2783 | "call-bind": "^1.0.0", 2784 | "define-properties": "^1.1.3" 2785 | } 2786 | }, 2787 | "string_decoder": { 2788 | "version": "1.3.0", 2789 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2790 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2791 | "requires": { 2792 | "safe-buffer": "~5.2.0" 2793 | } 2794 | }, 2795 | "strip-ansi": { 2796 | "version": "6.0.0", 2797 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2798 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2799 | "requires": { 2800 | "ansi-regex": "^5.0.0" 2801 | } 2802 | }, 2803 | "strip-json-comments": { 2804 | "version": "2.0.1", 2805 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2806 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2807 | "optional": true 2808 | }, 2809 | "styled-jsx": { 2810 | "version": "3.3.2", 2811 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.2.tgz", 2812 | "integrity": "sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==", 2813 | "requires": { 2814 | "@babel/types": "7.8.3", 2815 | "babel-plugin-syntax-jsx": "6.18.0", 2816 | "convert-source-map": "1.7.0", 2817 | "loader-utils": "1.2.3", 2818 | "source-map": "0.7.3", 2819 | "string-hash": "1.1.3", 2820 | "stylis": "3.5.4", 2821 | "stylis-rule-sheet": "0.0.10" 2822 | }, 2823 | "dependencies": { 2824 | "source-map": { 2825 | "version": "0.7.3", 2826 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 2827 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" 2828 | } 2829 | } 2830 | }, 2831 | "stylis": { 2832 | "version": "3.5.4", 2833 | "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", 2834 | "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" 2835 | }, 2836 | "stylis-rule-sheet": { 2837 | "version": "0.0.10", 2838 | "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", 2839 | "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" 2840 | }, 2841 | "supports-color": { 2842 | "version": "6.1.0", 2843 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 2844 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 2845 | "requires": { 2846 | "has-flag": "^3.0.0" 2847 | } 2848 | }, 2849 | "tar-fs": { 2850 | "version": "2.1.1", 2851 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 2852 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 2853 | "optional": true, 2854 | "requires": { 2855 | "chownr": "^1.1.1", 2856 | "mkdirp-classic": "^0.5.2", 2857 | "pump": "^3.0.0", 2858 | "tar-stream": "^2.1.4" 2859 | } 2860 | }, 2861 | "tar-stream": { 2862 | "version": "2.2.0", 2863 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 2864 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 2865 | "optional": true, 2866 | "requires": { 2867 | "bl": "^4.0.3", 2868 | "end-of-stream": "^1.4.1", 2869 | "fs-constants": "^1.0.0", 2870 | "inherits": "^2.0.3", 2871 | "readable-stream": "^3.1.1" 2872 | } 2873 | }, 2874 | "terser": { 2875 | "version": "5.5.1", 2876 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", 2877 | "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", 2878 | "requires": { 2879 | "commander": "^2.20.0", 2880 | "source-map": "~0.7.2", 2881 | "source-map-support": "~0.5.19" 2882 | }, 2883 | "dependencies": { 2884 | "source-map": { 2885 | "version": "0.7.3", 2886 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 2887 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" 2888 | } 2889 | } 2890 | }, 2891 | "timers-browserify": { 2892 | "version": "2.0.12", 2893 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", 2894 | "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", 2895 | "requires": { 2896 | "setimmediate": "^1.0.4" 2897 | } 2898 | }, 2899 | "to-arraybuffer": { 2900 | "version": "1.0.1", 2901 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 2902 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" 2903 | }, 2904 | "to-fast-properties": { 2905 | "version": "2.0.0", 2906 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2907 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 2908 | }, 2909 | "to-regex-range": { 2910 | "version": "5.0.1", 2911 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2912 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2913 | "requires": { 2914 | "is-number": "^7.0.0" 2915 | } 2916 | }, 2917 | "toidentifier": { 2918 | "version": "1.0.0", 2919 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 2920 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 2921 | }, 2922 | "tr46": { 2923 | "version": "1.0.1", 2924 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", 2925 | "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", 2926 | "requires": { 2927 | "punycode": "^2.1.0" 2928 | } 2929 | }, 2930 | "ts-pnp": { 2931 | "version": "1.2.0", 2932 | "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", 2933 | "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" 2934 | }, 2935 | "tsscmp": { 2936 | "version": "1.0.6", 2937 | "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", 2938 | "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" 2939 | }, 2940 | "tty-browserify": { 2941 | "version": "0.0.0", 2942 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 2943 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" 2944 | }, 2945 | "tunnel-agent": { 2946 | "version": "0.6.0", 2947 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2948 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2949 | "optional": true, 2950 | "requires": { 2951 | "safe-buffer": "^5.0.1" 2952 | } 2953 | }, 2954 | "type-fest": { 2955 | "version": "0.7.1", 2956 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", 2957 | "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" 2958 | }, 2959 | "unpipe": { 2960 | "version": "1.0.0", 2961 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2962 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2963 | }, 2964 | "url": { 2965 | "version": "0.11.0", 2966 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 2967 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 2968 | "requires": { 2969 | "punycode": "1.3.2", 2970 | "querystring": "0.2.0" 2971 | }, 2972 | "dependencies": { 2973 | "punycode": { 2974 | "version": "1.3.2", 2975 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 2976 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 2977 | } 2978 | } 2979 | }, 2980 | "use-subscription": { 2981 | "version": "1.5.1", 2982 | "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", 2983 | "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", 2984 | "requires": { 2985 | "object-assign": "^4.1.1" 2986 | } 2987 | }, 2988 | "util": { 2989 | "version": "0.12.3", 2990 | "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", 2991 | "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", 2992 | "requires": { 2993 | "inherits": "^2.0.3", 2994 | "is-arguments": "^1.0.4", 2995 | "is-generator-function": "^1.0.7", 2996 | "is-typed-array": "^1.1.3", 2997 | "safe-buffer": "^5.1.2", 2998 | "which-typed-array": "^1.1.2" 2999 | } 3000 | }, 3001 | "util-deprecate": { 3002 | "version": "1.0.2", 3003 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3004 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 3005 | }, 3006 | "validator": { 3007 | "version": "13.5.2", 3008 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz", 3009 | "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ==" 3010 | }, 3011 | "vm-browserify": { 3012 | "version": "1.1.2", 3013 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 3014 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" 3015 | }, 3016 | "watchpack": { 3017 | "version": "2.0.0-beta.13", 3018 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", 3019 | "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", 3020 | "requires": { 3021 | "glob-to-regexp": "^0.4.1", 3022 | "graceful-fs": "^4.1.2" 3023 | } 3024 | }, 3025 | "webidl-conversions": { 3026 | "version": "4.0.2", 3027 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 3028 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" 3029 | }, 3030 | "whatwg-url": { 3031 | "version": "7.1.0", 3032 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", 3033 | "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", 3034 | "requires": { 3035 | "lodash.sortby": "^4.7.0", 3036 | "tr46": "^1.0.1", 3037 | "webidl-conversions": "^4.0.2" 3038 | } 3039 | }, 3040 | "which-pm-runs": { 3041 | "version": "1.0.0", 3042 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 3043 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", 3044 | "optional": true 3045 | }, 3046 | "which-typed-array": { 3047 | "version": "1.1.4", 3048 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", 3049 | "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", 3050 | "requires": { 3051 | "available-typed-arrays": "^1.0.2", 3052 | "call-bind": "^1.0.0", 3053 | "es-abstract": "^1.18.0-next.1", 3054 | "foreach": "^2.0.5", 3055 | "function-bind": "^1.1.1", 3056 | "has-symbols": "^1.0.1", 3057 | "is-typed-array": "^1.1.3" 3058 | } 3059 | }, 3060 | "wide-align": { 3061 | "version": "1.1.3", 3062 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 3063 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 3064 | "optional": true, 3065 | "requires": { 3066 | "string-width": "^1.0.2 || 2" 3067 | } 3068 | }, 3069 | "wrappy": { 3070 | "version": "1.0.2", 3071 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3072 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3073 | "optional": true 3074 | }, 3075 | "xtend": { 3076 | "version": "4.0.2", 3077 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 3078 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 3079 | }, 3080 | "yallist": { 3081 | "version": "4.0.0", 3082 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3083 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 3084 | }, 3085 | "yocto-queue": { 3086 | "version": "0.1.0", 3087 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3088 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" 3089 | } 3090 | } 3091 | } 3092 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "middleware-example", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start" 9 | }, 10 | "dependencies": { 11 | "cookies": "^0.8.0", 12 | "crypto": "^1.0.1", 13 | "jsonwebtoken": "^8.5.1", 14 | "mongoose": "^5.11.16", 15 | "next": "10.0.6", 16 | "react": "17.0.1", 17 | "react-dom": "17.0.1", 18 | "util": "^0.12.3", 19 | "validator": "^13.5.2" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pages/_app.js: -------------------------------------------------------------------------------- 1 | import '../styles/globals.css' 2 | 3 | function MyApp({ Component, pageProps }) { 4 | return 5 | } 6 | 7 | export default MyApp 8 | -------------------------------------------------------------------------------- /pages/api/users/authLogin.js: -------------------------------------------------------------------------------- 1 | import dbConnect from '../../../utils/dbConnect'; 2 | import User from '../../../models/userModel'; 3 | import Email from '../../../utils/email'; 4 | 5 | dbConnect(); 6 | 7 | const handler = async (req, res) => { 8 | const { method } = req; 9 | 10 | if (method !== 'POST') { 11 | return res 12 | .status(400) 13 | .json({ success: false, message: 'Only POST requests are allowed.' }); 14 | } 15 | 16 | // Get user based on POSTed email 17 | let user = await User.findOne({ email: req.body.email }); 18 | 19 | if (!user) { 20 | user = await User.create({ 21 | email: req.body.email, 22 | }); 23 | } 24 | 25 | // Generate the random auth token 26 | const authToken = user.createAuthToken(); 27 | 28 | await user.save({ validateBeforeSave: false }); 29 | 30 | try { 31 | await new Email(user, authToken).sendMagicLink(); 32 | 33 | return res.status(200).json({ 34 | success: true, 35 | message: 'Check your email to complete login.', 36 | }); 37 | } catch (error) { 38 | // Remove any tokens on the user in the database... 39 | // ...and save it in MongoDB 40 | user.authLoginToken = undefined; 41 | user.authLoginExpires = undefined; 42 | 43 | await user.save({ validateBeforeSave: false }); 44 | 45 | return res.status(500).json({ 46 | success: false, 47 | message: 'Error sending email. Please try again.', 48 | }); 49 | } 50 | }; 51 | 52 | export default handler; 53 | -------------------------------------------------------------------------------- /pages/api/users/authVerify/[token].js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | import jwt from 'jsonwebtoken'; 3 | import Cookies from 'cookies'; 4 | 5 | import dbConnect from '../../../../utils/dbConnect'; 6 | import User from '../../../../models/userModel'; 7 | 8 | dbConnect(); 9 | 10 | const signToken = (id) => { 11 | return jwt.sign({ id }, process.env.JWT_SECRET, { 12 | expiresIn: process.env.JWT_EXPIRES_IN, 13 | }); 14 | }; 15 | 16 | const handler = async (req, res) => { 17 | const { method } = req; 18 | 19 | if (method !== 'POST') { 20 | return res 21 | .status(400) 22 | .json({ success: false, message: 'Only POST requests are allowed.' }); 23 | } 24 | 25 | const { 26 | query: { token }, 27 | } = req; 28 | 29 | // Get user based on token 30 | const hashedToken = crypto.createHash('sha256').update(token).digest('hex'); 31 | 32 | const user = await User.findOne({ 33 | authLoginToken: hashedToken, 34 | authLoginExpires: { $gt: Date.now() }, 35 | }); 36 | 37 | if (!user) { 38 | return res.status(500).json({ 39 | success: false, 40 | message: 'Token is invalid or expired.', 41 | }); 42 | } 43 | 44 | // If the user exists and token isn't expired, remove token and send JWT token 45 | user.authLoginToken = undefined; 46 | user.authLoginExpires = undefined; 47 | 48 | await user.save(); 49 | 50 | // Log the user in and send JWT 51 | const cookies = new Cookies(req, res); 52 | 53 | const signedToken = signToken(user._id); 54 | 55 | // Generate the random refresh token 56 | const refreshToken = crypto.randomBytes(32).toString('hex'); 57 | 58 | const hashedRefreshToken = crypto 59 | .createHash('sha256') 60 | .update(refreshToken) 61 | .digest('hex'); 62 | 63 | const refreshExpiration = new Date().setDate(new Date().getDate() + 7); // 7 days 64 | 65 | // Set refresh token cookie 66 | cookies.set('app_refreshToken', refreshToken, { 67 | httpOnly: true, 68 | sameSite: process.env.NODE_ENV == 'production' ? 'none' : 'Lax', 69 | secure: process.env.NODE_ENV === 'production' ? true : false, 70 | maxAge: 604800000, // 7 days 71 | }); 72 | 73 | // Set access token cookie 74 | cookies.set('app_accessToken', signedToken, { 75 | httpOnly: true, 76 | sameSite: process.env.NODE_ENV == 'production' ? 'none' : 'Lax', 77 | secure: process.env.NODE_ENV === 'production' ? true : false, 78 | maxAge: 1800000, // 30 minutes 79 | }); 80 | 81 | await User.findByIdAndUpdate(user._id, { 82 | $push: { 83 | refreshTokens: { 84 | token: hashedRefreshToken, 85 | expiration: refreshExpiration, 86 | }, 87 | }, 88 | }); 89 | 90 | return res.status(200).json({ 91 | success: true, 92 | signedToken, 93 | data: { 94 | user, 95 | }, 96 | }); 97 | }; 98 | 99 | export default handler; 100 | -------------------------------------------------------------------------------- /pages/api/users/isLoggedIn.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | import jwt from 'jsonwebtoken'; 3 | import Cookies from 'cookies'; 4 | import { promisify } from 'util'; 5 | 6 | import dbConnect from '../../../utils/dbConnect'; 7 | import User from '../../../models/userModel'; 8 | import Purchase from '../../../models/purchaseModel'; 9 | 10 | dbConnect(); 11 | 12 | const signToken = (id) => { 13 | return jwt.sign({ id }, process.env.JWT_SECRET, { 14 | expiresIn: process.env.JWT_EXPIRES_IN, 15 | }); 16 | }; 17 | 18 | const handler = async (req, res) => { 19 | const { method } = req; 20 | 21 | if (method !== 'GET') { 22 | return res 23 | .status(400) 24 | .json({ status: 'fail', message: 'Only GET requests are allowed.' }); 25 | } 26 | 27 | let token; 28 | let refresh; 29 | 30 | if (req.cookies && req.cookies.app_accessToken) { 31 | token = req.cookies.app_accessToken; 32 | } 33 | 34 | if (req.cookies && req.cookies.app_refreshToken) { 35 | refresh = req.cookies.app_refreshToken; 36 | } 37 | 38 | if (!token && !refresh) { 39 | return res.status(401).json({ 40 | success: false, 41 | message: 'Please log in to get access.', 42 | }); 43 | } 44 | 45 | // Attempt to get new auth token with refresh 46 | if (!token && refresh) { 47 | try { 48 | // Get user based on hashed refresh token 49 | const hashedRefreshToken = crypto 50 | .createHash('sha256') 51 | .update(refresh) 52 | .digest('hex'); 53 | 54 | // Check if user exists with refresh token 55 | const refreshUser = await User.findOne({ 56 | 'refreshTokens.expiration': { $gt: Date.now() }, 57 | 'refreshTokens.token': hashedRefreshToken, 58 | }).populate('purchases'); 59 | 60 | if (!refreshUser) { 61 | return res.status(401).json({ 62 | success: false, 63 | message: 'Please log in to get access.', 64 | }); 65 | } 66 | 67 | // Create new token 68 | const refreshAuthToken = signToken(refreshUser._id); 69 | 70 | const cookies = new Cookies(req, res); 71 | 72 | // Set access token cookie 73 | cookies.set('app_accessToken', refreshAuthToken, { 74 | httpOnly: true, 75 | sameSite: process.env.NODE_ENV == 'production' ? 'none' : 'Lax', 76 | secure: process.env.NODE_ENV === 'production' ? true : false, 77 | maxAge: 1800000, // 30 minutes 78 | }); 79 | 80 | // There is a logged in user 81 | return res 82 | .status(200) 83 | .json({ success: true, data: { user: refreshUser } }); 84 | } catch (error) { 85 | return res.status(401).json({ success: false, data: null }); 86 | } 87 | } 88 | 89 | if (token) { 90 | try { 91 | // Verify token 92 | const decoded = await promisify(jwt.verify)( 93 | req.cookies.app_accessToken, 94 | process.env.JWT_SECRET 95 | ); 96 | 97 | // Check if user still exists 98 | const currentUser = await User.findById(decoded.id).populate('purchases'); 99 | 100 | if (!currentUser) { 101 | return res.status(401).json({ success: false, data: null }); 102 | } 103 | 104 | // There is a logged in user 105 | return res 106 | .status(200) 107 | .json({ success: true, data: { user: currentUser } }); 108 | } catch (error) { 109 | return res.status(401).json({ success: false, data: null }); 110 | } 111 | } 112 | }; 113 | 114 | export default handler; 115 | -------------------------------------------------------------------------------- /pages/api/users/logout.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'cookies'; 2 | 3 | import dbConnect from '../../../utils/dbConnect'; 4 | import withProtect from '../../../middleware/withProtect'; 5 | import withRoles from '../../../middleware/withRoles'; 6 | 7 | dbConnect(); 8 | 9 | const handler = async (req, res) => { 10 | const { method } = req; 11 | 12 | if (method !== 'POST') { 13 | return res 14 | .status(400) 15 | .json({ success: false, message: 'Only POST requests are allowed.' }); 16 | } 17 | 18 | // Removed refreshTokens from database 19 | req.user.refreshTokens = []; 20 | 21 | const cookies = new Cookies(req, res); 22 | 23 | // Set cookies to expired 24 | cookies.set('app_accessToken', '', { 25 | httpOnly: true, 26 | sameSite: process.env.NODE_ENV == 'production' ? 'none' : 'Lax', 27 | secure: process.env.NODE_ENV === 'production' ? true : false, 28 | }); 29 | 30 | cookies.set('app_refreshToken', '', { 31 | httpOnly: true, 32 | sameSite: process.env.NODE_ENV == 'production' ? 'none' : 'Lax', 33 | secure: process.env.NODE_ENV === 'production' ? true : false, 34 | }); 35 | 36 | await req.user.save(); 37 | 38 | return res.status(200).json({ 39 | success: true, 40 | data: {}, 41 | }); 42 | }; 43 | 44 | export default withProtect(handler); 45 | // export default withProtect(withRoles(handler, 'admin')); 46 | -------------------------------------------------------------------------------- /pages/index.js: -------------------------------------------------------------------------------- 1 | import Head from 'next/head'; 2 | import styles from '../styles/Home.module.css'; 3 | 4 | export default function Home() { 5 | return ( 6 |
7 | 8 | Next.js Middleware Example 9 | 10 | 11 |

12 | Checkout the code in the middleware folder and api folder 13 | to explore how to create middleware in Next.js. 14 |

15 |
16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hunterbecton/next-js-middleware/2ffc3ee4768f7604c26b958a8ed135ad81ab497e/public/favicon.ico -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | min-height: 100vh; 3 | padding: 0 0.5rem; 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: center; 7 | align-items: center; 8 | } 9 | 10 | .main { 11 | padding: 5rem 0; 12 | flex: 1; 13 | display: flex; 14 | flex-direction: column; 15 | justify-content: center; 16 | align-items: center; 17 | } 18 | 19 | .footer { 20 | width: 100%; 21 | height: 100px; 22 | border-top: 1px solid #eaeaea; 23 | display: flex; 24 | justify-content: center; 25 | align-items: center; 26 | } 27 | 28 | .footer img { 29 | margin-left: 0.5rem; 30 | } 31 | 32 | .footer a { 33 | display: flex; 34 | justify-content: center; 35 | align-items: center; 36 | } 37 | 38 | .title a { 39 | color: #0070f3; 40 | text-decoration: none; 41 | } 42 | 43 | .title a:hover, 44 | .title a:focus, 45 | .title a:active { 46 | text-decoration: underline; 47 | } 48 | 49 | .title { 50 | margin: 0; 51 | line-height: 1.15; 52 | font-size: 4rem; 53 | } 54 | 55 | .title, 56 | .description { 57 | text-align: center; 58 | } 59 | 60 | .description { 61 | line-height: 1.5; 62 | font-size: 1.5rem; 63 | } 64 | 65 | .code { 66 | background: #fafafa; 67 | border-radius: 5px; 68 | padding: 0.75rem; 69 | font-size: 1.1rem; 70 | font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, 71 | Bitstream Vera Sans Mono, Courier New, monospace; 72 | } 73 | 74 | .grid { 75 | display: flex; 76 | align-items: center; 77 | justify-content: center; 78 | flex-wrap: wrap; 79 | max-width: 800px; 80 | margin-top: 3rem; 81 | } 82 | 83 | .card { 84 | margin: 1rem; 85 | flex-basis: 45%; 86 | padding: 1.5rem; 87 | text-align: left; 88 | color: inherit; 89 | text-decoration: none; 90 | border: 1px solid #eaeaea; 91 | border-radius: 10px; 92 | transition: color 0.15s ease, border-color 0.15s ease; 93 | } 94 | 95 | .card:hover, 96 | .card:focus, 97 | .card:active { 98 | color: #0070f3; 99 | border-color: #0070f3; 100 | } 101 | 102 | .card h3 { 103 | margin: 0 0 1rem 0; 104 | font-size: 1.5rem; 105 | } 106 | 107 | .card p { 108 | margin: 0; 109 | font-size: 1.25rem; 110 | line-height: 1.5; 111 | } 112 | 113 | .logo { 114 | height: 1em; 115 | } 116 | 117 | @media (max-width: 600px) { 118 | .grid { 119 | width: 100%; 120 | flex-direction: column; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | -------------------------------------------------------------------------------- /utils/dbConnect.js: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose'; 2 | 3 | async function dbConnect() { 4 | // check if we have a connection to the database or if it's currently 5 | // connecting or disconnecting (readyState 1, 2 and 3) 6 | if (mongoose.connection.readyState >= 1) { 7 | return; 8 | } 9 | 10 | return mongoose 11 | .connect(process.env.DATABASE, { 12 | useNewUrlParser: true, 13 | useUnifiedTopology: true, 14 | useFindAndModify: false, 15 | useCreateIndex: true, 16 | }) 17 | .then(() => { 18 | console.log('DB Connection Successful'); 19 | }); 20 | } 21 | 22 | export default dbConnect; 23 | -------------------------------------------------------------------------------- /utils/email.js: -------------------------------------------------------------------------------- 1 | const sgMail = require('@sendgrid/mail'); 2 | 3 | sgMail.setApiKey(process.env.SENDGRID_API_KEY); 4 | 5 | module.exports = class Email { 6 | constructor(user, url) { 7 | this.to = user.email; 8 | this.url = url; 9 | this.fromEmail = 'hello@skillthrive'; 10 | this.fromName = 'Skillthrive'; 11 | } 12 | 13 | async sendMagicLink() { 14 | const mailOptions = { 15 | to: this.to, 16 | from: { 17 | email: this.fromEmail, 18 | name: this.fromName, 19 | }, 20 | templateId: 'd-677437ff4a564f16843acc9e722c0f34', 21 | dynamic_template_data: { 22 | url: this.url, 23 | }, 24 | }; 25 | 26 | await sgMail.send(mailOptions).then(() => {}, console.error); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /utils/filterObj.js: -------------------------------------------------------------------------------- 1 | const filterObj = (obj, ...allowedFields) => { 2 | const newObj = {}; 3 | Object.keys(obj).forEach((el) => { 4 | if (allowedFields.includes(el)) newObj[el] = obj[el]; 5 | }); 6 | return newObj; 7 | }; 8 | 9 | module.exports = filterObj; 10 | --------------------------------------------------------------------------------