├── .github └── workflows │ └── codesee-arch-diagram.yml ├── .gitignore ├── LICENSE ├── MeowForm Badge Final.svg ├── README.md ├── backend ├── Modles │ ├── forms.js │ └── user.js ├── connectDb.js ├── index.js ├── package-lock.json ├── package.json ├── router │ ├── Respond.js │ ├── Response.js │ ├── addForm.js │ ├── addUrl.js │ ├── index.html │ ├── user.js │ └── views │ │ └── submited.html └── utility │ ├── addForm.js │ ├── createUser.js │ ├── searchUser.js │ ├── sendMail.js │ ├── updateUrl.js │ └── updateUser.js ├── package-lock.json ├── package.json ├── public ├── MeowForm Icon.svg ├── favicon.png ├── index.html ├── manifest.json ├── review_avtar.jpeg └── robots.txt ├── src ├── App.css ├── App.js ├── App.test.js ├── Util │ └── AuthWithHistory.js ├── comp │ ├── Comp │ │ ├── Faq.js │ │ ├── Footer.js │ │ ├── FormCard.js │ │ ├── FormData.js │ │ ├── FormHeading.js │ │ ├── MenuButtons.js │ │ ├── MenuItems.js │ │ ├── NavBar.js │ │ └── Review.js │ └── Skeletons │ │ └── FullPage.js ├── data │ └── faq.js ├── index.css ├── index.js ├── logo.svg ├── pages │ ├── Dashboard │ │ └── Dashboard.js │ ├── Home │ │ └── Home.js │ └── Index.js ├── reportWebVitals.js ├── setupTests.js └── styles │ └── faq.css └── yarn.lock /.github/workflows/codesee-arch-diagram.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | pull_request_target: 6 | types: [opened, synchronize, reopened] 7 | 8 | name: CodeSee Map 9 | 10 | jobs: 11 | test_map_action: 12 | runs-on: ubuntu-latest 13 | continue-on-error: true 14 | name: Run CodeSee Map Analysis 15 | steps: 16 | - name: checkout 17 | id: checkout 18 | uses: actions/checkout@v2 19 | with: 20 | repository: ${{ github.event.pull_request.head.repo.full_name }} 21 | ref: ${{ github.event.pull_request.head.ref }} 22 | fetch-depth: 0 23 | 24 | # codesee-detect-languages has an output with id languages. 25 | - name: Detect Languages 26 | id: detect-languages 27 | uses: Codesee-io/codesee-detect-languages-action@latest 28 | 29 | - name: Configure JDK 16 30 | uses: actions/setup-java@v2 31 | if: ${{ fromJSON(steps.detect-languages.outputs.languages).java }} 32 | with: 33 | java-version: '16' 34 | distribution: 'zulu' 35 | 36 | # CodeSee Maps Go support uses a static binary so there's no setup step required. 37 | 38 | - name: Configure Node.js 14 39 | uses: actions/setup-node@v2 40 | if: ${{ fromJSON(steps.detect-languages.outputs.languages).javascript }} 41 | with: 42 | node-version: '14' 43 | 44 | - name: Configure Python 3.x 45 | uses: actions/setup-python@v2 46 | if: ${{ fromJSON(steps.detect-languages.outputs.languages).python }} 47 | with: 48 | python-version: '3.x' 49 | architecture: 'x64' 50 | 51 | - name: Configure Ruby '3.x' 52 | uses: ruby/setup-ruby@v1 53 | if: ${{ fromJSON(steps.detect-languages.outputs.languages).ruby }} 54 | with: 55 | ruby-version: '3.0' 56 | 57 | # CodeSee Maps Rust support uses a static binary so there's no setup step required. 58 | 59 | - name: Generate Map 60 | id: generate-map 61 | uses: Codesee-io/codesee-map-action@latest 62 | with: 63 | step: map 64 | github_ref: ${{ github.ref }} 65 | languages: ${{ steps.detect-languages.outputs.languages }} 66 | 67 | - name: Upload Map 68 | id: upload-map 69 | uses: Codesee-io/codesee-map-action@latest 70 | with: 71 | step: mapUpload 72 | api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} 73 | github_ref: ${{ github.ref }} 74 | 75 | - name: Insights 76 | id: insights 77 | uses: Codesee-io/codesee-map-action@latest 78 | with: 79 | step: insights 80 | api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} 81 | github_ref: ${{ github.ref }} 82 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # drepndencies 3 | 4 | /backend/node_modules 5 | /backend/node_modules/ 6 | /.pnp 7 | .pnp.js 8 | 9 | /node_modules 10 | # testing 11 | /coverage 12 | 13 | # production 14 | /build 15 | 16 | # misc 17 | .DS_Store 18 | .env.local 19 | .env.development.local 20 | .env.test.local 21 | .env.production.local 22 | .env 23 | .ejnfdjknv 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Gaurav Tewari 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MeowForm Badge Final.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

Meowform

4 | 5 |

6 | 7 |

Build functional forms without writing any backend

8 | 9 |

10 | 11 | MeowForm 12 | 13 | 14 | MeowForm forks 15 | 16 | 17 |  stars 18 | 19 | 20 | issues 21 | 22 | 23 |  pull-requests 24 | 25 | 26 | 27 |

28 | 29 | 30 | 31 |

32 | View Demo 33 | · 34 | Report Bug 35 | · 36 | Request Feature 37 |

38 | 39 | ### Introducing MeowForm 🐱 40 | 41 | 42 | Build custom forms with no backend code 43 | 44 | 45 | ## 🚀 Demo 46 | 47 | 48 | 49 | 50 | 51 | Try the App: [MeowForm](https://www.meowform.xyz/) 52 | 53 | 54 | 55 | 56 | 57 | ## 🛠️ Installation Steps 58 | 59 | 1. Clone the repository 60 | 61 | ```bash 62 | git clone https://github.com/tewarig/MeowForm.git 63 | ``` 64 | 65 | 2. Change the working directory 66 | 67 | ```bash 68 | cd MeowForm 69 | ``` 70 | 71 | 3. Install dependencies 72 | 73 | ```bash 74 | npm install 75 | ``` 76 | 77 | 4. Create `.env` file in root and add your variables 78 | 79 | ```bash 80 | REACT_APP_AUTH_DOMAIN="Auth0 app domain " 81 | REACT_APP_CLIENTID=" Auth 0 Client id" 82 | REACT_APP_HOSTURL=" Server url " 83 | REACT_APP_APIKEY=" Api key" 84 | 85 | ``` 86 | 87 | 5. Run the app 88 | 89 | ```bash 90 | npm run start 91 | ``` 92 | 93 | You are all set! Open [localhost:3000](http://localhost:3000/) to see the app. 94 | 95 | ## 🍰 Contributing 96 | 97 | Pull Requests are always welcome! 98 | If you wish to contribute using Github, you can work on any features or create one on your own. After adding your code, send us a Pull Request. 99 | 100 | 101 | - Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/tewarig/MeowForm/compare). 102 | 103 | 104 | 105 | 106 | 107 | ## 🌈 What's next 108 | 109 | Well I would be mainting MeowFrom on weekends , and I would be adding more features soon. 110 | 111 | Here are some idea that is coming really soon 👀 112 | 113 | - Well having an option to export responses in excel sheet 114 | - Adding examples for more frameworks and projects. 115 | 116 | 117 | 118 | ## 🛡️ License 119 | 120 | This project is licensed under the MIT License - see the [`LICENSE`](LICENSE) file for details. 121 | 122 | ## 🦄 Deploy 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | ### A specail thanks to 139 | 140 | [Icons8](https://icons8.com/illustrations) 141 | 142 | ## 👨‍💻 Author 143 | 144 | ### 👤 Gaurav Tewari 145 | 146 | - Twitter: [@oyeTewari](https://twitter.com/oyeTewari) 147 | - Github: [@tewarig](https://github.com/tewarig) 148 | - Hashnode: [@tewarig](https://hashnode.com/@tewarig) 149 | 150 | ## 💪 Thanks to the all Contributors 151 | 152 | Arigato!! for spending your time and making MeowForm work 153 | 154 | ## 🙏 Support 155 | 156 | This project needs a ⭐️ from you. Don't forget to leave a star ⭐️ 157 | 158 | If you found the app helpful, consider supporting me with a coffee. 159 | 160 | 161 | 162 | --- 163 | 164 |

165 | We need a ⭐️ from you 166 |

167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /backend/Modles/forms.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const formSchema = new mongoose.Schema({ 3 | formName: { 4 | type: String, 5 | required: true, 6 | } , 7 | formData: { 8 | type: String, 9 | required: true, 10 | } , 11 | redirectUrl:{ 12 | type:String 13 | } 14 | 15 | }); 16 | module.exports = mongoose.model("forms",formSchema); -------------------------------------------------------------------------------- /backend/Modles/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const UserSchemea = new mongoose.Schema({ 4 | email:{ 5 | type: String, 6 | required :true, 7 | unique: true, 8 | 9 | }, 10 | responseCount:{ 11 | type: Number 12 | }, 13 | forms:[ { 14 | formName : { 15 | type: String 16 | }, 17 | formData : [ 18 | 19 | ] 20 | , 21 | redirectUrl : { 22 | type : String, 23 | } 24 | } 25 | 26 | ] 27 | }); 28 | 29 | module.exports = mongoose.model('User',UserSchemea); 30 | -------------------------------------------------------------------------------- /backend/connectDb.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | async function connectDb(){ 3 | try{ 4 | await mongoose.connect(process.env.dbUrl,{ 5 | useCreateIndex: true, 6 | useFindAndModify: false, 7 | useNewUrlParser: true, 8 | useUnifiedTopology: true, 9 | }) 10 | console.log('connected to database'); 11 | } 12 | catch(error){ 13 | console.log(error); 14 | } 15 | } 16 | module.exports = connectDb; -------------------------------------------------------------------------------- /backend/index.js: -------------------------------------------------------------------------------- 1 | if (process.env.NODE_ENV !== "production") require("dotenv").config(); 2 | const express = require("express"); 3 | const cros = require("cors"); 4 | const connectDb = require('./connectDb'); 5 | const log = require("./utility/createUser"); 6 | const Search = require("./utility/searchUser"); 7 | 8 | 9 | 10 | const app = express(); 11 | const port = process.env.PORT||4000; 12 | connectDb(); 13 | app.use(express.json()); 14 | app.use(express.urlencoded({ extended: true })); 15 | 16 | 17 | 18 | 19 | const responseRoute = require("./router/Response"); 20 | app.use("/page",cros(),responseRoute); 21 | 22 | 23 | const userRoute = require("./router/user"); 24 | app.use("/user",cros(),userRoute); 25 | 26 | 27 | const urlRoute = require("./router/addUrl"); 28 | app.use("/url",cros(),urlRoute); 29 | 30 | const responsedRoute = require("./router/Respond"); 31 | app.use("/form",cros(),responsedRoute); 32 | 33 | 34 | const addForm = require("./router/addForm"); 35 | app.use("/addForm",cros(),addForm); 36 | app.listen(port,()=>(console.log(`server have started on port ${port}`))) -------------------------------------------------------------------------------- /backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meowform", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@tootallnate/once": { 8 | "version": "1.1.2", 9 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 10 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" 11 | }, 12 | "@types/body-parser": { 13 | "version": "1.19.1", 14 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", 15 | "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", 16 | "requires": { 17 | "@types/connect": "*", 18 | "@types/node": "*" 19 | } 20 | }, 21 | "@types/bson": { 22 | "version": "4.0.5", 23 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", 24 | "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", 25 | "requires": { 26 | "@types/node": "*" 27 | } 28 | }, 29 | "@types/connect": { 30 | "version": "3.4.35", 31 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", 32 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 33 | "requires": { 34 | "@types/node": "*" 35 | } 36 | }, 37 | "@types/express": { 38 | "version": "4.17.13", 39 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", 40 | "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", 41 | "requires": { 42 | "@types/body-parser": "*", 43 | "@types/express-serve-static-core": "^4.17.18", 44 | "@types/qs": "*", 45 | "@types/serve-static": "*" 46 | } 47 | }, 48 | "@types/express-jwt": { 49 | "version": "0.0.42", 50 | "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz", 51 | "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==", 52 | "requires": { 53 | "@types/express": "*", 54 | "@types/express-unless": "*" 55 | } 56 | }, 57 | "@types/express-serve-static-core": { 58 | "version": "4.17.24", 59 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", 60 | "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", 61 | "requires": { 62 | "@types/node": "*", 63 | "@types/qs": "*", 64 | "@types/range-parser": "*" 65 | } 66 | }, 67 | "@types/express-unless": { 68 | "version": "0.5.2", 69 | "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.2.tgz", 70 | "integrity": "sha512-Q74UyYRX/zIgl1HSp9tUX2PlG8glkVm+59r7aK4KGKzC5jqKIOX6rrVLRQrzpZUQ84VukHtRoeAuon2nIssHPQ==", 71 | "requires": { 72 | "@types/express": "*" 73 | } 74 | }, 75 | "@types/mime": { 76 | "version": "1.3.2", 77 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", 78 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" 79 | }, 80 | "@types/mongodb": { 81 | "version": "3.6.20", 82 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", 83 | "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", 84 | "requires": { 85 | "@types/bson": "*", 86 | "@types/node": "*" 87 | } 88 | }, 89 | "@types/node": { 90 | "version": "16.4.11", 91 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.11.tgz", 92 | "integrity": "sha512-nWSFUbuNiPKJEe1IViuodSI+9cM+vpM8SWF/O6dJK7wmGRNq55U7XavJHrlRrPkSMuUZUFzg1xaZ1B+ZZCrRWw==" 93 | }, 94 | "@types/qs": { 95 | "version": "6.9.7", 96 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", 97 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" 98 | }, 99 | "@types/range-parser": { 100 | "version": "1.2.4", 101 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 102 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" 103 | }, 104 | "@types/serve-static": { 105 | "version": "1.13.10", 106 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", 107 | "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", 108 | "requires": { 109 | "@types/mime": "^1", 110 | "@types/node": "*" 111 | } 112 | }, 113 | "accepts": { 114 | "version": "1.3.7", 115 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 116 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 117 | "requires": { 118 | "mime-types": "~2.1.24", 119 | "negotiator": "0.6.2" 120 | } 121 | }, 122 | "agent-base": { 123 | "version": "6.0.2", 124 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 125 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 126 | "requires": { 127 | "debug": "4" 128 | }, 129 | "dependencies": { 130 | "debug": { 131 | "version": "4.3.2", 132 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 133 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 134 | "requires": { 135 | "ms": "2.1.2" 136 | } 137 | }, 138 | "ms": { 139 | "version": "2.1.2", 140 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 141 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 142 | } 143 | } 144 | }, 145 | "ansi-styles": { 146 | "version": "3.2.1", 147 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 148 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 149 | "requires": { 150 | "color-convert": "^1.9.0" 151 | } 152 | }, 153 | "array-flatten": { 154 | "version": "1.1.1", 155 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 156 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 157 | }, 158 | "ast-types": { 159 | "version": "0.13.4", 160 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 161 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 162 | "requires": { 163 | "tslib": "^2.0.1" 164 | } 165 | }, 166 | "async": { 167 | "version": "2.6.3", 168 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", 169 | "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", 170 | "requires": { 171 | "lodash": "^4.17.14" 172 | } 173 | }, 174 | "asynckit": { 175 | "version": "0.4.0", 176 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 177 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 178 | }, 179 | "auth0": { 180 | "version": "2.36.1", 181 | "resolved": "https://registry.npmjs.org/auth0/-/auth0-2.36.1.tgz", 182 | "integrity": "sha512-R7/UYd9epGgcbm5ntv72rWRvGw2tCwkpPgqR+IppJ3V4UUYj+MhaPm3iwzARFiPxk5/7RLTW3M5w7xt682FxoA==", 183 | "requires": { 184 | "axios": "^0.21.1", 185 | "es6-promisify": "^6.1.1", 186 | "form-data": "^3.0.1", 187 | "jsonwebtoken": "^8.5.1", 188 | "jwks-rsa": "^1.12.1", 189 | "lru-memoizer": "^2.1.4", 190 | "rest-facade": "^1.13.0", 191 | "retry": "^0.13.1" 192 | } 193 | }, 194 | "axios": { 195 | "version": "0.21.1", 196 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 197 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 198 | "requires": { 199 | "follow-redirects": "^1.10.0" 200 | } 201 | }, 202 | "balanced-match": { 203 | "version": "1.0.2", 204 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 205 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 206 | }, 207 | "bl": { 208 | "version": "2.2.1", 209 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 210 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 211 | "requires": { 212 | "readable-stream": "^2.3.5", 213 | "safe-buffer": "^5.1.1" 214 | } 215 | }, 216 | "bluebird": { 217 | "version": "3.5.1", 218 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 219 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 220 | }, 221 | "body-parser": { 222 | "version": "1.19.0", 223 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 224 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 225 | "requires": { 226 | "bytes": "3.1.0", 227 | "content-type": "~1.0.4", 228 | "debug": "2.6.9", 229 | "depd": "~1.1.2", 230 | "http-errors": "1.7.2", 231 | "iconv-lite": "0.4.24", 232 | "on-finished": "~2.3.0", 233 | "qs": "6.7.0", 234 | "raw-body": "2.4.0", 235 | "type-is": "~1.6.17" 236 | } 237 | }, 238 | "brace-expansion": { 239 | "version": "1.1.11", 240 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 241 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 242 | "requires": { 243 | "balanced-match": "^1.0.0", 244 | "concat-map": "0.0.1" 245 | } 246 | }, 247 | "bson": { 248 | "version": "1.1.6", 249 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", 250 | "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" 251 | }, 252 | "buffer-equal-constant-time": { 253 | "version": "1.0.1", 254 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 255 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 256 | }, 257 | "bytes": { 258 | "version": "3.1.0", 259 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 260 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 261 | }, 262 | "call-bind": { 263 | "version": "1.0.2", 264 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 265 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 266 | "requires": { 267 | "function-bind": "^1.1.1", 268 | "get-intrinsic": "^1.0.2" 269 | } 270 | }, 271 | "camel-case": { 272 | "version": "1.2.2", 273 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", 274 | "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=", 275 | "requires": { 276 | "sentence-case": "^1.1.1", 277 | "upper-case": "^1.1.1" 278 | } 279 | }, 280 | "chalk": { 281 | "version": "2.4.2", 282 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 283 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 284 | "requires": { 285 | "ansi-styles": "^3.2.1", 286 | "escape-string-regexp": "^1.0.5", 287 | "supports-color": "^5.3.0" 288 | } 289 | }, 290 | "change-case": { 291 | "version": "2.3.1", 292 | "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz", 293 | "integrity": "sha1-LE/ePwY7tB0AzWjg1aCdthy+iU8=", 294 | "requires": { 295 | "camel-case": "^1.1.1", 296 | "constant-case": "^1.1.0", 297 | "dot-case": "^1.1.0", 298 | "is-lower-case": "^1.1.0", 299 | "is-upper-case": "^1.1.0", 300 | "lower-case": "^1.1.1", 301 | "lower-case-first": "^1.0.0", 302 | "param-case": "^1.1.0", 303 | "pascal-case": "^1.1.0", 304 | "path-case": "^1.1.0", 305 | "sentence-case": "^1.1.1", 306 | "snake-case": "^1.1.0", 307 | "swap-case": "^1.1.0", 308 | "title-case": "^1.1.0", 309 | "upper-case": "^1.1.1", 310 | "upper-case-first": "^1.1.0" 311 | } 312 | }, 313 | "co": { 314 | "version": "4.6.0", 315 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 316 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 317 | }, 318 | "color-convert": { 319 | "version": "1.9.3", 320 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 321 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 322 | "requires": { 323 | "color-name": "1.1.3" 324 | } 325 | }, 326 | "color-name": { 327 | "version": "1.1.3", 328 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 329 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 330 | }, 331 | "combined-stream": { 332 | "version": "1.0.8", 333 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 334 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 335 | "requires": { 336 | "delayed-stream": "~1.0.0" 337 | } 338 | }, 339 | "component-emitter": { 340 | "version": "1.3.0", 341 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 342 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 343 | }, 344 | "concat-map": { 345 | "version": "0.0.1", 346 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 347 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 348 | }, 349 | "constant-case": { 350 | "version": "1.1.2", 351 | "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", 352 | "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=", 353 | "requires": { 354 | "snake-case": "^1.1.0", 355 | "upper-case": "^1.1.1" 356 | } 357 | }, 358 | "content-disposition": { 359 | "version": "0.5.3", 360 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 361 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 362 | "requires": { 363 | "safe-buffer": "5.1.2" 364 | } 365 | }, 366 | "content-type": { 367 | "version": "1.0.4", 368 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 369 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 370 | }, 371 | "cookie": { 372 | "version": "0.4.0", 373 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 374 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 375 | }, 376 | "cookie-signature": { 377 | "version": "1.0.6", 378 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 379 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 380 | }, 381 | "cookiejar": { 382 | "version": "2.1.2", 383 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", 384 | "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" 385 | }, 386 | "core-util-is": { 387 | "version": "1.0.2", 388 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 389 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 390 | }, 391 | "cors": { 392 | "version": "2.8.5", 393 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 394 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 395 | "requires": { 396 | "object-assign": "^4", 397 | "vary": "^1" 398 | } 399 | }, 400 | "data-uri-to-buffer": { 401 | "version": "3.0.1", 402 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", 403 | "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" 404 | }, 405 | "debug": { 406 | "version": "2.6.9", 407 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 408 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 409 | "requires": { 410 | "ms": "2.0.0" 411 | } 412 | }, 413 | "deep-is": { 414 | "version": "0.1.3", 415 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 416 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 417 | }, 418 | "deepmerge": { 419 | "version": "3.3.0", 420 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", 421 | "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" 422 | }, 423 | "degenerator": { 424 | "version": "2.2.0", 425 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", 426 | "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", 427 | "requires": { 428 | "ast-types": "^0.13.2", 429 | "escodegen": "^1.8.1", 430 | "esprima": "^4.0.0" 431 | } 432 | }, 433 | "delayed-stream": { 434 | "version": "1.0.0", 435 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 436 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 437 | }, 438 | "denque": { 439 | "version": "1.5.0", 440 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", 441 | "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" 442 | }, 443 | "depd": { 444 | "version": "1.1.2", 445 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 446 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 447 | }, 448 | "destroy": { 449 | "version": "1.0.4", 450 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 451 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 452 | }, 453 | "dot-case": { 454 | "version": "1.1.2", 455 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", 456 | "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=", 457 | "requires": { 458 | "sentence-case": "^1.1.2" 459 | } 460 | }, 461 | "dotenv": { 462 | "version": "10.0.0", 463 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", 464 | "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" 465 | }, 466 | "ecdsa-sig-formatter": { 467 | "version": "1.0.11", 468 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 469 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 470 | "requires": { 471 | "safe-buffer": "^5.0.1" 472 | } 473 | }, 474 | "ee-first": { 475 | "version": "1.1.1", 476 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 477 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 478 | }, 479 | "ejs": { 480 | "version": "3.1.6", 481 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", 482 | "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", 483 | "requires": { 484 | "jake": "^10.6.1" 485 | } 486 | }, 487 | "encodeurl": { 488 | "version": "1.0.2", 489 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 490 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 491 | }, 492 | "es6-promise": { 493 | "version": "4.2.8", 494 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 495 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" 496 | }, 497 | "es6-promisify": { 498 | "version": "6.1.1", 499 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", 500 | "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" 501 | }, 502 | "escape-html": { 503 | "version": "1.0.3", 504 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 505 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 506 | }, 507 | "escape-string-regexp": { 508 | "version": "1.0.5", 509 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 510 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 511 | }, 512 | "escodegen": { 513 | "version": "1.14.3", 514 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", 515 | "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", 516 | "requires": { 517 | "esprima": "^4.0.1", 518 | "estraverse": "^4.2.0", 519 | "esutils": "^2.0.2", 520 | "optionator": "^0.8.1", 521 | "source-map": "~0.6.1" 522 | } 523 | }, 524 | "esprima": { 525 | "version": "4.0.1", 526 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 527 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 528 | }, 529 | "estraverse": { 530 | "version": "4.3.0", 531 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 532 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" 533 | }, 534 | "esutils": { 535 | "version": "2.0.3", 536 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 537 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 538 | }, 539 | "etag": { 540 | "version": "1.8.1", 541 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 542 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 543 | }, 544 | "express": { 545 | "version": "4.17.1", 546 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 547 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 548 | "requires": { 549 | "accepts": "~1.3.7", 550 | "array-flatten": "1.1.1", 551 | "body-parser": "1.19.0", 552 | "content-disposition": "0.5.3", 553 | "content-type": "~1.0.4", 554 | "cookie": "0.4.0", 555 | "cookie-signature": "1.0.6", 556 | "debug": "2.6.9", 557 | "depd": "~1.1.2", 558 | "encodeurl": "~1.0.2", 559 | "escape-html": "~1.0.3", 560 | "etag": "~1.8.1", 561 | "finalhandler": "~1.1.2", 562 | "fresh": "0.5.2", 563 | "merge-descriptors": "1.0.1", 564 | "methods": "~1.1.2", 565 | "on-finished": "~2.3.0", 566 | "parseurl": "~1.3.3", 567 | "path-to-regexp": "0.1.7", 568 | "proxy-addr": "~2.0.5", 569 | "qs": "6.7.0", 570 | "range-parser": "~1.2.1", 571 | "safe-buffer": "5.1.2", 572 | "send": "0.17.1", 573 | "serve-static": "1.14.1", 574 | "setprototypeof": "1.1.1", 575 | "statuses": "~1.5.0", 576 | "type-is": "~1.6.18", 577 | "utils-merge": "1.0.1", 578 | "vary": "~1.1.2" 579 | } 580 | }, 581 | "extend": { 582 | "version": "3.0.2", 583 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 584 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 585 | }, 586 | "fast-levenshtein": { 587 | "version": "2.0.6", 588 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 589 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 590 | }, 591 | "fast-safe-stringify": { 592 | "version": "2.0.8", 593 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", 594 | "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" 595 | }, 596 | "file-uri-to-path": { 597 | "version": "2.0.0", 598 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", 599 | "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" 600 | }, 601 | "filelist": { 602 | "version": "1.0.2", 603 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", 604 | "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", 605 | "requires": { 606 | "minimatch": "^3.0.4" 607 | } 608 | }, 609 | "finalhandler": { 610 | "version": "1.1.2", 611 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 612 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 613 | "requires": { 614 | "debug": "2.6.9", 615 | "encodeurl": "~1.0.2", 616 | "escape-html": "~1.0.3", 617 | "on-finished": "~2.3.0", 618 | "parseurl": "~1.3.3", 619 | "statuses": "~1.5.0", 620 | "unpipe": "~1.0.0" 621 | } 622 | }, 623 | "follow-redirects": { 624 | "version": "1.14.2", 625 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", 626 | "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==" 627 | }, 628 | "form-data": { 629 | "version": "3.0.1", 630 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 631 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 632 | "requires": { 633 | "asynckit": "^0.4.0", 634 | "combined-stream": "^1.0.8", 635 | "mime-types": "^2.1.12" 636 | } 637 | }, 638 | "formidable": { 639 | "version": "1.2.2", 640 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", 641 | "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" 642 | }, 643 | "forwarded": { 644 | "version": "0.2.0", 645 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 646 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 647 | }, 648 | "fresh": { 649 | "version": "0.5.2", 650 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 651 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 652 | }, 653 | "fs-extra": { 654 | "version": "8.1.0", 655 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 656 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 657 | "requires": { 658 | "graceful-fs": "^4.2.0", 659 | "jsonfile": "^4.0.0", 660 | "universalify": "^0.1.0" 661 | } 662 | }, 663 | "ftp": { 664 | "version": "0.3.10", 665 | "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", 666 | "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", 667 | "requires": { 668 | "readable-stream": "1.1.x", 669 | "xregexp": "2.0.0" 670 | }, 671 | "dependencies": { 672 | "isarray": { 673 | "version": "0.0.1", 674 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 675 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 676 | }, 677 | "readable-stream": { 678 | "version": "1.1.14", 679 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 680 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 681 | "requires": { 682 | "core-util-is": "~1.0.0", 683 | "inherits": "~2.0.1", 684 | "isarray": "0.0.1", 685 | "string_decoder": "~0.10.x" 686 | } 687 | }, 688 | "string_decoder": { 689 | "version": "0.10.31", 690 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 691 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 692 | } 693 | } 694 | }, 695 | "function-bind": { 696 | "version": "1.1.1", 697 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 698 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 699 | }, 700 | "get-intrinsic": { 701 | "version": "1.1.1", 702 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 703 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 704 | "requires": { 705 | "function-bind": "^1.1.1", 706 | "has": "^1.0.3", 707 | "has-symbols": "^1.0.1" 708 | } 709 | }, 710 | "get-uri": { 711 | "version": "3.0.2", 712 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", 713 | "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", 714 | "requires": { 715 | "@tootallnate/once": "1", 716 | "data-uri-to-buffer": "3", 717 | "debug": "4", 718 | "file-uri-to-path": "2", 719 | "fs-extra": "^8.1.0", 720 | "ftp": "^0.3.10" 721 | }, 722 | "dependencies": { 723 | "debug": { 724 | "version": "4.3.2", 725 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 726 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 727 | "requires": { 728 | "ms": "2.1.2" 729 | } 730 | }, 731 | "ms": { 732 | "version": "2.1.2", 733 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 734 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 735 | } 736 | } 737 | }, 738 | "graceful-fs": { 739 | "version": "4.2.8", 740 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 741 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 742 | }, 743 | "has": { 744 | "version": "1.0.3", 745 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 746 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 747 | "requires": { 748 | "function-bind": "^1.1.1" 749 | } 750 | }, 751 | "has-flag": { 752 | "version": "3.0.0", 753 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 754 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 755 | }, 756 | "has-symbols": { 757 | "version": "1.0.2", 758 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 759 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 760 | }, 761 | "http-errors": { 762 | "version": "1.7.2", 763 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 764 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 765 | "requires": { 766 | "depd": "~1.1.2", 767 | "inherits": "2.0.3", 768 | "setprototypeof": "1.1.1", 769 | "statuses": ">= 1.5.0 < 2", 770 | "toidentifier": "1.0.0" 771 | } 772 | }, 773 | "http-proxy-agent": { 774 | "version": "4.0.1", 775 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 776 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 777 | "requires": { 778 | "@tootallnate/once": "1", 779 | "agent-base": "6", 780 | "debug": "4" 781 | }, 782 | "dependencies": { 783 | "debug": { 784 | "version": "4.3.2", 785 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 786 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 787 | "requires": { 788 | "ms": "2.1.2" 789 | } 790 | }, 791 | "ms": { 792 | "version": "2.1.2", 793 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 794 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 795 | } 796 | } 797 | }, 798 | "https-proxy-agent": { 799 | "version": "5.0.0", 800 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 801 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 802 | "requires": { 803 | "agent-base": "6", 804 | "debug": "4" 805 | }, 806 | "dependencies": { 807 | "debug": { 808 | "version": "4.3.2", 809 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 810 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 811 | "requires": { 812 | "ms": "2.1.2" 813 | } 814 | }, 815 | "ms": { 816 | "version": "2.1.2", 817 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 818 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 819 | } 820 | } 821 | }, 822 | "iconv-lite": { 823 | "version": "0.4.24", 824 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 825 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 826 | "requires": { 827 | "safer-buffer": ">= 2.1.2 < 3" 828 | } 829 | }, 830 | "inflection": { 831 | "version": "1.12.0", 832 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", 833 | "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" 834 | }, 835 | "inherits": { 836 | "version": "2.0.3", 837 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 838 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 839 | }, 840 | "ip": { 841 | "version": "1.1.5", 842 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 843 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" 844 | }, 845 | "ipaddr.js": { 846 | "version": "1.9.1", 847 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 848 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 849 | }, 850 | "is-lower-case": { 851 | "version": "1.1.3", 852 | "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", 853 | "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", 854 | "requires": { 855 | "lower-case": "^1.1.0" 856 | } 857 | }, 858 | "is-stream": { 859 | "version": "1.1.0", 860 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 861 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 862 | }, 863 | "is-upper-case": { 864 | "version": "1.1.2", 865 | "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", 866 | "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", 867 | "requires": { 868 | "upper-case": "^1.1.0" 869 | } 870 | }, 871 | "isarray": { 872 | "version": "1.0.0", 873 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 874 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 875 | }, 876 | "jake": { 877 | "version": "10.8.2", 878 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", 879 | "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", 880 | "requires": { 881 | "async": "0.9.x", 882 | "chalk": "^2.4.2", 883 | "filelist": "^1.0.1", 884 | "minimatch": "^3.0.4" 885 | }, 886 | "dependencies": { 887 | "async": { 888 | "version": "0.9.2", 889 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 890 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" 891 | } 892 | } 893 | }, 894 | "jsonfile": { 895 | "version": "4.0.0", 896 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 897 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 898 | "requires": { 899 | "graceful-fs": "^4.1.6" 900 | } 901 | }, 902 | "jsonwebtoken": { 903 | "version": "8.5.1", 904 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 905 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 906 | "requires": { 907 | "jws": "^3.2.2", 908 | "lodash.includes": "^4.3.0", 909 | "lodash.isboolean": "^3.0.3", 910 | "lodash.isinteger": "^4.0.4", 911 | "lodash.isnumber": "^3.0.3", 912 | "lodash.isplainobject": "^4.0.6", 913 | "lodash.isstring": "^4.0.1", 914 | "lodash.once": "^4.0.0", 915 | "ms": "^2.1.1", 916 | "semver": "^5.6.0" 917 | }, 918 | "dependencies": { 919 | "ms": { 920 | "version": "2.1.3", 921 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 922 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 923 | } 924 | } 925 | }, 926 | "jwa": { 927 | "version": "1.4.1", 928 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 929 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 930 | "requires": { 931 | "buffer-equal-constant-time": "1.0.1", 932 | "ecdsa-sig-formatter": "1.0.11", 933 | "safe-buffer": "^5.0.1" 934 | } 935 | }, 936 | "jwks-rsa": { 937 | "version": "1.12.3", 938 | "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.12.3.tgz", 939 | "integrity": "sha512-cFipFDeYYaO9FhhYJcZWX/IyZgc0+g316rcHnDpT2dNRNIE/lMOmWKKqp09TkJoYlNFzrEVODsR4GgXJMgWhnA==", 940 | "requires": { 941 | "@types/express-jwt": "0.0.42", 942 | "axios": "^0.21.1", 943 | "debug": "^4.1.0", 944 | "http-proxy-agent": "^4.0.1", 945 | "https-proxy-agent": "^5.0.0", 946 | "jsonwebtoken": "^8.5.1", 947 | "limiter": "^1.1.5", 948 | "lru-memoizer": "^2.1.2", 949 | "ms": "^2.1.2", 950 | "proxy-from-env": "^1.1.0" 951 | }, 952 | "dependencies": { 953 | "debug": { 954 | "version": "4.3.2", 955 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 956 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 957 | "requires": { 958 | "ms": "2.1.2" 959 | }, 960 | "dependencies": { 961 | "ms": { 962 | "version": "2.1.2", 963 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 964 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 965 | } 966 | } 967 | }, 968 | "ms": { 969 | "version": "2.1.3", 970 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 971 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 972 | } 973 | } 974 | }, 975 | "jws": { 976 | "version": "3.2.2", 977 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 978 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 979 | "requires": { 980 | "jwa": "^1.4.1", 981 | "safe-buffer": "^5.0.1" 982 | } 983 | }, 984 | "kareem": { 985 | "version": "2.3.2", 986 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", 987 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" 988 | }, 989 | "levn": { 990 | "version": "0.3.0", 991 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 992 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 993 | "requires": { 994 | "prelude-ls": "~1.1.2", 995 | "type-check": "~0.3.2" 996 | } 997 | }, 998 | "limiter": { 999 | "version": "1.1.5", 1000 | "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", 1001 | "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" 1002 | }, 1003 | "lodash": { 1004 | "version": "4.17.21", 1005 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1006 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1007 | }, 1008 | "lodash.clonedeep": { 1009 | "version": "4.5.0", 1010 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 1011 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 1012 | }, 1013 | "lodash.get": { 1014 | "version": "4.4.2", 1015 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 1016 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 1017 | }, 1018 | "lodash.includes": { 1019 | "version": "4.3.0", 1020 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 1021 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 1022 | }, 1023 | "lodash.isboolean": { 1024 | "version": "3.0.3", 1025 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 1026 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 1027 | }, 1028 | "lodash.isinteger": { 1029 | "version": "4.0.4", 1030 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 1031 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 1032 | }, 1033 | "lodash.isnumber": { 1034 | "version": "3.0.3", 1035 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 1036 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 1037 | }, 1038 | "lodash.isplainobject": { 1039 | "version": "4.0.6", 1040 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1041 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 1042 | }, 1043 | "lodash.isstring": { 1044 | "version": "4.0.1", 1045 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1046 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 1047 | }, 1048 | "lodash.once": { 1049 | "version": "4.1.1", 1050 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 1051 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 1052 | }, 1053 | "lower-case": { 1054 | "version": "1.1.4", 1055 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 1056 | "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" 1057 | }, 1058 | "lower-case-first": { 1059 | "version": "1.0.2", 1060 | "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", 1061 | "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", 1062 | "requires": { 1063 | "lower-case": "^1.1.2" 1064 | } 1065 | }, 1066 | "lru-cache": { 1067 | "version": "4.0.2", 1068 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", 1069 | "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", 1070 | "requires": { 1071 | "pseudomap": "^1.0.1", 1072 | "yallist": "^2.0.0" 1073 | } 1074 | }, 1075 | "lru-memoizer": { 1076 | "version": "2.1.4", 1077 | "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", 1078 | "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", 1079 | "requires": { 1080 | "lodash.clonedeep": "^4.5.0", 1081 | "lru-cache": "~4.0.0" 1082 | } 1083 | }, 1084 | "mailgun-js": { 1085 | "version": "0.22.0", 1086 | "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.22.0.tgz", 1087 | "integrity": "sha512-a2alg5nuTZA9Psa1pSEIEsbxr1Zrmqx4VkgGCQ30xVh0kIH7Bu57AYILo+0v8QLSdXtCyLaS+KVmdCrQo0uWFA==", 1088 | "requires": { 1089 | "async": "^2.6.1", 1090 | "debug": "^4.1.0", 1091 | "form-data": "^2.3.3", 1092 | "inflection": "~1.12.0", 1093 | "is-stream": "^1.1.0", 1094 | "path-proxy": "~1.0.0", 1095 | "promisify-call": "^2.0.2", 1096 | "proxy-agent": "^3.0.3", 1097 | "tsscmp": "^1.0.6" 1098 | }, 1099 | "dependencies": { 1100 | "agent-base": { 1101 | "version": "4.3.0", 1102 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 1103 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 1104 | "requires": { 1105 | "es6-promisify": "^5.0.0" 1106 | } 1107 | }, 1108 | "data-uri-to-buffer": { 1109 | "version": "1.2.0", 1110 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", 1111 | "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" 1112 | }, 1113 | "debug": { 1114 | "version": "4.3.2", 1115 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1116 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1117 | "requires": { 1118 | "ms": "2.1.2" 1119 | } 1120 | }, 1121 | "degenerator": { 1122 | "version": "1.0.4", 1123 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", 1124 | "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", 1125 | "requires": { 1126 | "ast-types": "0.x.x", 1127 | "escodegen": "1.x.x", 1128 | "esprima": "3.x.x" 1129 | } 1130 | }, 1131 | "es6-promisify": { 1132 | "version": "5.0.0", 1133 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 1134 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 1135 | "requires": { 1136 | "es6-promise": "^4.0.3" 1137 | } 1138 | }, 1139 | "esprima": { 1140 | "version": "3.1.3", 1141 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", 1142 | "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" 1143 | }, 1144 | "file-uri-to-path": { 1145 | "version": "1.0.0", 1146 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 1147 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 1148 | }, 1149 | "form-data": { 1150 | "version": "2.5.1", 1151 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 1152 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 1153 | "requires": { 1154 | "asynckit": "^0.4.0", 1155 | "combined-stream": "^1.0.6", 1156 | "mime-types": "^2.1.12" 1157 | } 1158 | }, 1159 | "get-uri": { 1160 | "version": "2.0.4", 1161 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", 1162 | "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", 1163 | "requires": { 1164 | "data-uri-to-buffer": "1", 1165 | "debug": "2", 1166 | "extend": "~3.0.2", 1167 | "file-uri-to-path": "1", 1168 | "ftp": "~0.3.10", 1169 | "readable-stream": "2" 1170 | }, 1171 | "dependencies": { 1172 | "debug": { 1173 | "version": "2.6.9", 1174 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1175 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1176 | "requires": { 1177 | "ms": "2.0.0" 1178 | } 1179 | }, 1180 | "ms": { 1181 | "version": "2.0.0", 1182 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1183 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1184 | } 1185 | } 1186 | }, 1187 | "http-proxy-agent": { 1188 | "version": "2.1.0", 1189 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", 1190 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", 1191 | "requires": { 1192 | "agent-base": "4", 1193 | "debug": "3.1.0" 1194 | }, 1195 | "dependencies": { 1196 | "debug": { 1197 | "version": "3.1.0", 1198 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1199 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1200 | "requires": { 1201 | "ms": "2.0.0" 1202 | } 1203 | }, 1204 | "ms": { 1205 | "version": "2.0.0", 1206 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1207 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1208 | } 1209 | } 1210 | }, 1211 | "https-proxy-agent": { 1212 | "version": "3.0.1", 1213 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", 1214 | "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", 1215 | "requires": { 1216 | "agent-base": "^4.3.0", 1217 | "debug": "^3.1.0" 1218 | }, 1219 | "dependencies": { 1220 | "debug": { 1221 | "version": "3.2.7", 1222 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1223 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1224 | "requires": { 1225 | "ms": "^2.1.1" 1226 | } 1227 | } 1228 | } 1229 | }, 1230 | "lru-cache": { 1231 | "version": "5.1.1", 1232 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1233 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1234 | "requires": { 1235 | "yallist": "^3.0.2" 1236 | } 1237 | }, 1238 | "ms": { 1239 | "version": "2.1.2", 1240 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1241 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1242 | }, 1243 | "netmask": { 1244 | "version": "1.0.6", 1245 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", 1246 | "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" 1247 | }, 1248 | "pac-proxy-agent": { 1249 | "version": "3.0.1", 1250 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", 1251 | "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", 1252 | "requires": { 1253 | "agent-base": "^4.2.0", 1254 | "debug": "^4.1.1", 1255 | "get-uri": "^2.0.0", 1256 | "http-proxy-agent": "^2.1.0", 1257 | "https-proxy-agent": "^3.0.0", 1258 | "pac-resolver": "^3.0.0", 1259 | "raw-body": "^2.2.0", 1260 | "socks-proxy-agent": "^4.0.1" 1261 | } 1262 | }, 1263 | "pac-resolver": { 1264 | "version": "3.0.0", 1265 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", 1266 | "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", 1267 | "requires": { 1268 | "co": "^4.6.0", 1269 | "degenerator": "^1.0.4", 1270 | "ip": "^1.1.5", 1271 | "netmask": "^1.0.6", 1272 | "thunkify": "^2.1.2" 1273 | } 1274 | }, 1275 | "proxy-agent": { 1276 | "version": "3.1.1", 1277 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", 1278 | "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", 1279 | "requires": { 1280 | "agent-base": "^4.2.0", 1281 | "debug": "4", 1282 | "http-proxy-agent": "^2.1.0", 1283 | "https-proxy-agent": "^3.0.0", 1284 | "lru-cache": "^5.1.1", 1285 | "pac-proxy-agent": "^3.0.1", 1286 | "proxy-from-env": "^1.0.0", 1287 | "socks-proxy-agent": "^4.0.1" 1288 | } 1289 | }, 1290 | "socks": { 1291 | "version": "2.3.3", 1292 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", 1293 | "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", 1294 | "requires": { 1295 | "ip": "1.1.5", 1296 | "smart-buffer": "^4.1.0" 1297 | } 1298 | }, 1299 | "socks-proxy-agent": { 1300 | "version": "4.0.2", 1301 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", 1302 | "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", 1303 | "requires": { 1304 | "agent-base": "~4.2.1", 1305 | "socks": "~2.3.2" 1306 | }, 1307 | "dependencies": { 1308 | "agent-base": { 1309 | "version": "4.2.1", 1310 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", 1311 | "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", 1312 | "requires": { 1313 | "es6-promisify": "^5.0.0" 1314 | } 1315 | } 1316 | } 1317 | }, 1318 | "yallist": { 1319 | "version": "3.1.1", 1320 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1321 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1322 | } 1323 | } 1324 | }, 1325 | "media-typer": { 1326 | "version": "0.3.0", 1327 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1328 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1329 | }, 1330 | "memory-pager": { 1331 | "version": "1.5.0", 1332 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1333 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1334 | "optional": true 1335 | }, 1336 | "merge-descriptors": { 1337 | "version": "1.0.1", 1338 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1339 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1340 | }, 1341 | "methods": { 1342 | "version": "1.1.2", 1343 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1344 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1345 | }, 1346 | "mime": { 1347 | "version": "1.6.0", 1348 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1349 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1350 | }, 1351 | "mime-db": { 1352 | "version": "1.49.0", 1353 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 1354 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 1355 | }, 1356 | "mime-types": { 1357 | "version": "2.1.32", 1358 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 1359 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 1360 | "requires": { 1361 | "mime-db": "1.49.0" 1362 | } 1363 | }, 1364 | "minimatch": { 1365 | "version": "3.0.4", 1366 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1367 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1368 | "requires": { 1369 | "brace-expansion": "^1.1.7" 1370 | } 1371 | }, 1372 | "mongodb": { 1373 | "version": "3.6.10", 1374 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.10.tgz", 1375 | "integrity": "sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q==", 1376 | "requires": { 1377 | "bl": "^2.2.1", 1378 | "bson": "^1.1.4", 1379 | "denque": "^1.4.1", 1380 | "optional-require": "^1.0.3", 1381 | "safe-buffer": "^5.1.2", 1382 | "saslprep": "^1.0.0" 1383 | } 1384 | }, 1385 | "mongoose": { 1386 | "version": "5.13.5", 1387 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.5.tgz", 1388 | "integrity": "sha512-sSUAk9GWgA8r3w3nVNrNjBaDem86aevwXO8ltDMKzCf+rjnteMMQkXHQdn1ePkt7alROEPZYCAjiRjptWRSPiQ==", 1389 | "requires": { 1390 | "@types/mongodb": "^3.5.27", 1391 | "bson": "^1.1.4", 1392 | "kareem": "2.3.2", 1393 | "mongodb": "3.6.10", 1394 | "mongoose-legacy-pluralize": "1.0.2", 1395 | "mpath": "0.8.3", 1396 | "mquery": "3.2.5", 1397 | "ms": "2.1.2", 1398 | "optional-require": "1.0.x", 1399 | "regexp-clone": "1.0.0", 1400 | "safe-buffer": "5.2.1", 1401 | "sift": "13.5.2", 1402 | "sliced": "1.0.1" 1403 | }, 1404 | "dependencies": { 1405 | "ms": { 1406 | "version": "2.1.2", 1407 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1408 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1409 | }, 1410 | "safe-buffer": { 1411 | "version": "5.2.1", 1412 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1413 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1414 | } 1415 | } 1416 | }, 1417 | "mongoose-legacy-pluralize": { 1418 | "version": "1.0.2", 1419 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 1420 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 1421 | }, 1422 | "mpath": { 1423 | "version": "0.8.3", 1424 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", 1425 | "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" 1426 | }, 1427 | "mquery": { 1428 | "version": "3.2.5", 1429 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", 1430 | "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", 1431 | "requires": { 1432 | "bluebird": "3.5.1", 1433 | "debug": "3.1.0", 1434 | "regexp-clone": "^1.0.0", 1435 | "safe-buffer": "5.1.2", 1436 | "sliced": "1.0.1" 1437 | }, 1438 | "dependencies": { 1439 | "debug": { 1440 | "version": "3.1.0", 1441 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1442 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1443 | "requires": { 1444 | "ms": "2.0.0" 1445 | } 1446 | } 1447 | } 1448 | }, 1449 | "ms": { 1450 | "version": "2.0.0", 1451 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1452 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1453 | }, 1454 | "negotiator": { 1455 | "version": "0.6.2", 1456 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1457 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1458 | }, 1459 | "netmask": { 1460 | "version": "2.0.2", 1461 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 1462 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" 1463 | }, 1464 | "nodemailer": { 1465 | "version": "6.6.3", 1466 | "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.3.tgz", 1467 | "integrity": "sha512-faZFufgTMrphYoDjvyVpbpJcYzwyFnbAMmQtj1lVBYAUSm3SOy2fIdd9+Mr4UxPosBa0JRw9bJoIwQn+nswiew==" 1468 | }, 1469 | "object-assign": { 1470 | "version": "4.1.1", 1471 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1472 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1473 | }, 1474 | "object-inspect": { 1475 | "version": "1.11.0", 1476 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", 1477 | "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" 1478 | }, 1479 | "on-finished": { 1480 | "version": "2.3.0", 1481 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1482 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1483 | "requires": { 1484 | "ee-first": "1.1.1" 1485 | } 1486 | }, 1487 | "optional-require": { 1488 | "version": "1.0.3", 1489 | "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", 1490 | "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" 1491 | }, 1492 | "optionator": { 1493 | "version": "0.8.3", 1494 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1495 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1496 | "requires": { 1497 | "deep-is": "~0.1.3", 1498 | "fast-levenshtein": "~2.0.6", 1499 | "levn": "~0.3.0", 1500 | "prelude-ls": "~1.1.2", 1501 | "type-check": "~0.3.2", 1502 | "word-wrap": "~1.2.3" 1503 | } 1504 | }, 1505 | "pac-proxy-agent": { 1506 | "version": "4.1.0", 1507 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", 1508 | "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", 1509 | "requires": { 1510 | "@tootallnate/once": "1", 1511 | "agent-base": "6", 1512 | "debug": "4", 1513 | "get-uri": "3", 1514 | "http-proxy-agent": "^4.0.1", 1515 | "https-proxy-agent": "5", 1516 | "pac-resolver": "^4.1.0", 1517 | "raw-body": "^2.2.0", 1518 | "socks-proxy-agent": "5" 1519 | }, 1520 | "dependencies": { 1521 | "debug": { 1522 | "version": "4.3.2", 1523 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1524 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1525 | "requires": { 1526 | "ms": "2.1.2" 1527 | } 1528 | }, 1529 | "ms": { 1530 | "version": "2.1.2", 1531 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1532 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1533 | } 1534 | } 1535 | }, 1536 | "pac-resolver": { 1537 | "version": "4.2.0", 1538 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", 1539 | "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", 1540 | "requires": { 1541 | "degenerator": "^2.2.0", 1542 | "ip": "^1.1.5", 1543 | "netmask": "^2.0.1" 1544 | } 1545 | }, 1546 | "param-case": { 1547 | "version": "1.1.2", 1548 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", 1549 | "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=", 1550 | "requires": { 1551 | "sentence-case": "^1.1.2" 1552 | } 1553 | }, 1554 | "parseurl": { 1555 | "version": "1.3.3", 1556 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1557 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1558 | }, 1559 | "pascal-case": { 1560 | "version": "1.1.2", 1561 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", 1562 | "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=", 1563 | "requires": { 1564 | "camel-case": "^1.1.1", 1565 | "upper-case-first": "^1.1.0" 1566 | } 1567 | }, 1568 | "path-case": { 1569 | "version": "1.1.2", 1570 | "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", 1571 | "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=", 1572 | "requires": { 1573 | "sentence-case": "^1.1.2" 1574 | } 1575 | }, 1576 | "path-proxy": { 1577 | "version": "1.0.0", 1578 | "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", 1579 | "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", 1580 | "requires": { 1581 | "inflection": "~1.3.0" 1582 | }, 1583 | "dependencies": { 1584 | "inflection": { 1585 | "version": "1.3.8", 1586 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", 1587 | "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=" 1588 | } 1589 | } 1590 | }, 1591 | "path-to-regexp": { 1592 | "version": "0.1.7", 1593 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1594 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1595 | }, 1596 | "prelude-ls": { 1597 | "version": "1.1.2", 1598 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1599 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" 1600 | }, 1601 | "process-nextick-args": { 1602 | "version": "2.0.1", 1603 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1604 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1605 | }, 1606 | "promisify-call": { 1607 | "version": "2.0.4", 1608 | "resolved": "https://registry.npmjs.org/promisify-call/-/promisify-call-2.0.4.tgz", 1609 | "integrity": "sha1-1IwtRWUszM1SgB3ey9UzptS9X7o=", 1610 | "requires": { 1611 | "with-callback": "^1.0.2" 1612 | } 1613 | }, 1614 | "proxy-addr": { 1615 | "version": "2.0.7", 1616 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1617 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1618 | "requires": { 1619 | "forwarded": "0.2.0", 1620 | "ipaddr.js": "1.9.1" 1621 | } 1622 | }, 1623 | "proxy-agent": { 1624 | "version": "4.0.1", 1625 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", 1626 | "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", 1627 | "requires": { 1628 | "agent-base": "^6.0.0", 1629 | "debug": "4", 1630 | "http-proxy-agent": "^4.0.0", 1631 | "https-proxy-agent": "^5.0.0", 1632 | "lru-cache": "^5.1.1", 1633 | "pac-proxy-agent": "^4.1.0", 1634 | "proxy-from-env": "^1.0.0", 1635 | "socks-proxy-agent": "^5.0.0" 1636 | }, 1637 | "dependencies": { 1638 | "debug": { 1639 | "version": "4.3.2", 1640 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1641 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1642 | "requires": { 1643 | "ms": "2.1.2" 1644 | } 1645 | }, 1646 | "lru-cache": { 1647 | "version": "5.1.1", 1648 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1649 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1650 | "requires": { 1651 | "yallist": "^3.0.2" 1652 | } 1653 | }, 1654 | "ms": { 1655 | "version": "2.1.2", 1656 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1657 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1658 | }, 1659 | "yallist": { 1660 | "version": "3.1.1", 1661 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1662 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1663 | } 1664 | } 1665 | }, 1666 | "proxy-from-env": { 1667 | "version": "1.1.0", 1668 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1669 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1670 | }, 1671 | "pseudomap": { 1672 | "version": "1.0.2", 1673 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1674 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 1675 | }, 1676 | "qs": { 1677 | "version": "6.7.0", 1678 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1679 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 1680 | }, 1681 | "range-parser": { 1682 | "version": "1.2.1", 1683 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1684 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1685 | }, 1686 | "raw-body": { 1687 | "version": "2.4.0", 1688 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1689 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1690 | "requires": { 1691 | "bytes": "3.1.0", 1692 | "http-errors": "1.7.2", 1693 | "iconv-lite": "0.4.24", 1694 | "unpipe": "1.0.0" 1695 | } 1696 | }, 1697 | "readable-stream": { 1698 | "version": "2.3.7", 1699 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1700 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1701 | "requires": { 1702 | "core-util-is": "~1.0.0", 1703 | "inherits": "~2.0.3", 1704 | "isarray": "~1.0.0", 1705 | "process-nextick-args": "~2.0.0", 1706 | "safe-buffer": "~5.1.1", 1707 | "string_decoder": "~1.1.1", 1708 | "util-deprecate": "~1.0.1" 1709 | } 1710 | }, 1711 | "regexp-clone": { 1712 | "version": "1.0.0", 1713 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 1714 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 1715 | }, 1716 | "rest-facade": { 1717 | "version": "1.13.0", 1718 | "resolved": "https://registry.npmjs.org/rest-facade/-/rest-facade-1.13.0.tgz", 1719 | "integrity": "sha512-0tVvvP+xUtl1LxsxuDBioj7hEWBFS/cpdxpxguuVbRj9GaZySx/E1le+awmT1xP3RHdwcaoC8ud3yQ5IqnmM7A==", 1720 | "requires": { 1721 | "change-case": "^2.3.0", 1722 | "deepmerge": "^3.2.0", 1723 | "lodash.get": "^4.4.2", 1724 | "superagent": "^5.1.1", 1725 | "superagent-proxy": "^2.0.0" 1726 | } 1727 | }, 1728 | "retry": { 1729 | "version": "0.13.1", 1730 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", 1731 | "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" 1732 | }, 1733 | "safe-buffer": { 1734 | "version": "5.1.2", 1735 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1736 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1737 | }, 1738 | "safer-buffer": { 1739 | "version": "2.1.2", 1740 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1741 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1742 | }, 1743 | "saslprep": { 1744 | "version": "1.0.3", 1745 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1746 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1747 | "optional": true, 1748 | "requires": { 1749 | "sparse-bitfield": "^3.0.3" 1750 | } 1751 | }, 1752 | "semver": { 1753 | "version": "5.7.1", 1754 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1755 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1756 | }, 1757 | "send": { 1758 | "version": "0.17.1", 1759 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 1760 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 1761 | "requires": { 1762 | "debug": "2.6.9", 1763 | "depd": "~1.1.2", 1764 | "destroy": "~1.0.4", 1765 | "encodeurl": "~1.0.2", 1766 | "escape-html": "~1.0.3", 1767 | "etag": "~1.8.1", 1768 | "fresh": "0.5.2", 1769 | "http-errors": "~1.7.2", 1770 | "mime": "1.6.0", 1771 | "ms": "2.1.1", 1772 | "on-finished": "~2.3.0", 1773 | "range-parser": "~1.2.1", 1774 | "statuses": "~1.5.0" 1775 | }, 1776 | "dependencies": { 1777 | "ms": { 1778 | "version": "2.1.1", 1779 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1780 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 1781 | } 1782 | } 1783 | }, 1784 | "sentence-case": { 1785 | "version": "1.1.3", 1786 | "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", 1787 | "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=", 1788 | "requires": { 1789 | "lower-case": "^1.1.1" 1790 | } 1791 | }, 1792 | "serve-static": { 1793 | "version": "1.14.1", 1794 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 1795 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 1796 | "requires": { 1797 | "encodeurl": "~1.0.2", 1798 | "escape-html": "~1.0.3", 1799 | "parseurl": "~1.3.3", 1800 | "send": "0.17.1" 1801 | } 1802 | }, 1803 | "setprototypeof": { 1804 | "version": "1.1.1", 1805 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1806 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1807 | }, 1808 | "side-channel": { 1809 | "version": "1.0.4", 1810 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1811 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1812 | "requires": { 1813 | "call-bind": "^1.0.0", 1814 | "get-intrinsic": "^1.0.2", 1815 | "object-inspect": "^1.9.0" 1816 | } 1817 | }, 1818 | "sift": { 1819 | "version": "13.5.2", 1820 | "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", 1821 | "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" 1822 | }, 1823 | "sliced": { 1824 | "version": "1.0.1", 1825 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 1826 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 1827 | }, 1828 | "smart-buffer": { 1829 | "version": "4.2.0", 1830 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1831 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 1832 | }, 1833 | "snake-case": { 1834 | "version": "1.1.2", 1835 | "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", 1836 | "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=", 1837 | "requires": { 1838 | "sentence-case": "^1.1.2" 1839 | } 1840 | }, 1841 | "socks": { 1842 | "version": "2.6.1", 1843 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", 1844 | "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", 1845 | "requires": { 1846 | "ip": "^1.1.5", 1847 | "smart-buffer": "^4.1.0" 1848 | } 1849 | }, 1850 | "socks-proxy-agent": { 1851 | "version": "5.0.1", 1852 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", 1853 | "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", 1854 | "requires": { 1855 | "agent-base": "^6.0.2", 1856 | "debug": "4", 1857 | "socks": "^2.3.3" 1858 | }, 1859 | "dependencies": { 1860 | "debug": { 1861 | "version": "4.3.2", 1862 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1863 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1864 | "requires": { 1865 | "ms": "2.1.2" 1866 | } 1867 | }, 1868 | "ms": { 1869 | "version": "2.1.2", 1870 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1871 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1872 | } 1873 | } 1874 | }, 1875 | "source-map": { 1876 | "version": "0.6.1", 1877 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1878 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1879 | "optional": true 1880 | }, 1881 | "sparse-bitfield": { 1882 | "version": "3.0.3", 1883 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1884 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 1885 | "optional": true, 1886 | "requires": { 1887 | "memory-pager": "^1.0.2" 1888 | } 1889 | }, 1890 | "statuses": { 1891 | "version": "1.5.0", 1892 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1893 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1894 | }, 1895 | "string_decoder": { 1896 | "version": "1.1.1", 1897 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1898 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1899 | "requires": { 1900 | "safe-buffer": "~5.1.0" 1901 | } 1902 | }, 1903 | "superagent": { 1904 | "version": "5.3.1", 1905 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", 1906 | "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", 1907 | "requires": { 1908 | "component-emitter": "^1.3.0", 1909 | "cookiejar": "^2.1.2", 1910 | "debug": "^4.1.1", 1911 | "fast-safe-stringify": "^2.0.7", 1912 | "form-data": "^3.0.0", 1913 | "formidable": "^1.2.2", 1914 | "methods": "^1.1.2", 1915 | "mime": "^2.4.6", 1916 | "qs": "^6.9.4", 1917 | "readable-stream": "^3.6.0", 1918 | "semver": "^7.3.2" 1919 | }, 1920 | "dependencies": { 1921 | "debug": { 1922 | "version": "4.3.2", 1923 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1924 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1925 | "requires": { 1926 | "ms": "2.1.2" 1927 | } 1928 | }, 1929 | "lru-cache": { 1930 | "version": "6.0.0", 1931 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1932 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1933 | "requires": { 1934 | "yallist": "^4.0.0" 1935 | } 1936 | }, 1937 | "mime": { 1938 | "version": "2.5.2", 1939 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", 1940 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" 1941 | }, 1942 | "ms": { 1943 | "version": "2.1.2", 1944 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1945 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1946 | }, 1947 | "qs": { 1948 | "version": "6.10.1", 1949 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", 1950 | "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", 1951 | "requires": { 1952 | "side-channel": "^1.0.4" 1953 | } 1954 | }, 1955 | "readable-stream": { 1956 | "version": "3.6.0", 1957 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1958 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1959 | "requires": { 1960 | "inherits": "^2.0.3", 1961 | "string_decoder": "^1.1.1", 1962 | "util-deprecate": "^1.0.1" 1963 | } 1964 | }, 1965 | "semver": { 1966 | "version": "7.3.5", 1967 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1968 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1969 | "requires": { 1970 | "lru-cache": "^6.0.0" 1971 | } 1972 | }, 1973 | "yallist": { 1974 | "version": "4.0.0", 1975 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1976 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1977 | } 1978 | } 1979 | }, 1980 | "superagent-proxy": { 1981 | "version": "2.1.0", 1982 | "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-2.1.0.tgz", 1983 | "integrity": "sha512-DnarpKN6Xn8e3pYlFV4Yvsj9yxLY4q5FIsUe5JvN7vjzP+YCfzXv03dTkZSD2yzrSadsNYHf0IgOUJwKjX457A==", 1984 | "requires": { 1985 | "debug": "^3.1.0", 1986 | "proxy-agent": "^4.0.0" 1987 | }, 1988 | "dependencies": { 1989 | "debug": { 1990 | "version": "3.2.7", 1991 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1992 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1993 | "requires": { 1994 | "ms": "^2.1.1" 1995 | } 1996 | }, 1997 | "ms": { 1998 | "version": "2.1.3", 1999 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2000 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2001 | } 2002 | } 2003 | }, 2004 | "supports-color": { 2005 | "version": "5.5.0", 2006 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2007 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2008 | "requires": { 2009 | "has-flag": "^3.0.0" 2010 | } 2011 | }, 2012 | "swap-case": { 2013 | "version": "1.1.2", 2014 | "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", 2015 | "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", 2016 | "requires": { 2017 | "lower-case": "^1.1.1", 2018 | "upper-case": "^1.1.1" 2019 | } 2020 | }, 2021 | "thunkify": { 2022 | "version": "2.1.2", 2023 | "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", 2024 | "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" 2025 | }, 2026 | "title-case": { 2027 | "version": "1.1.2", 2028 | "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", 2029 | "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=", 2030 | "requires": { 2031 | "sentence-case": "^1.1.1", 2032 | "upper-case": "^1.0.3" 2033 | } 2034 | }, 2035 | "toidentifier": { 2036 | "version": "1.0.0", 2037 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 2038 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 2039 | }, 2040 | "tslib": { 2041 | "version": "2.3.1", 2042 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 2043 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" 2044 | }, 2045 | "tsscmp": { 2046 | "version": "1.0.6", 2047 | "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", 2048 | "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" 2049 | }, 2050 | "type-check": { 2051 | "version": "0.3.2", 2052 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2053 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2054 | "requires": { 2055 | "prelude-ls": "~1.1.2" 2056 | } 2057 | }, 2058 | "type-is": { 2059 | "version": "1.6.18", 2060 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2061 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2062 | "requires": { 2063 | "media-typer": "0.3.0", 2064 | "mime-types": "~2.1.24" 2065 | } 2066 | }, 2067 | "universalify": { 2068 | "version": "0.1.2", 2069 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2070 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 2071 | }, 2072 | "unpipe": { 2073 | "version": "1.0.0", 2074 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2075 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2076 | }, 2077 | "upper-case": { 2078 | "version": "1.1.3", 2079 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 2080 | "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" 2081 | }, 2082 | "upper-case-first": { 2083 | "version": "1.1.2", 2084 | "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", 2085 | "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", 2086 | "requires": { 2087 | "upper-case": "^1.1.1" 2088 | } 2089 | }, 2090 | "util-deprecate": { 2091 | "version": "1.0.2", 2092 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2093 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2094 | }, 2095 | "utils-merge": { 2096 | "version": "1.0.1", 2097 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2098 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2099 | }, 2100 | "vary": { 2101 | "version": "1.1.2", 2102 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2103 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2104 | }, 2105 | "with-callback": { 2106 | "version": "1.0.2", 2107 | "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", 2108 | "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE=" 2109 | }, 2110 | "word-wrap": { 2111 | "version": "1.2.3", 2112 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2113 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" 2114 | }, 2115 | "xregexp": { 2116 | "version": "2.0.0", 2117 | "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", 2118 | "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" 2119 | }, 2120 | "yallist": { 2121 | "version": "2.1.2", 2122 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2123 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 2124 | } 2125 | } 2126 | } 2127 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meowform", 3 | "version": "1.0.0", 4 | "description": "serverless forms", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "tewarig", 10 | "license": "ISC", 11 | "dependencies": { 12 | "auth0": "^2.36.1", 13 | "axios": "^0.21.1", 14 | "cors": "^2.8.5", 15 | "dotenv": "^10.0.0", 16 | "ejs": "^3.1.6", 17 | "express": "^4.17.1", 18 | "mailgun-js": "^0.22.0", 19 | "mongoose": "^5.13.5", 20 | "nodemailer": "^6.6.3" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /backend/router/Respond.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | var axios = require("axios").default; 4 | const searchUser = require("../utility/searchUser"); 5 | const updateUser = require("../utility/updateUser"); 6 | const mailgun = require("mailgun-js"); 7 | const DOMAIN = process.env.Domain ; 8 | const api_key = process.env.API_MONEY; 9 | const mg = mailgun({apiKey: api_key, domain: DOMAIN}); 10 | 11 | const app = express(); 12 | 13 | app.set('view engine','ejs'); 14 | app.set('views', './views'); 15 | 16 | 17 | router.post("/:email&:formName",async(req,res)=>{ 18 | 19 | 20 | 21 | 22 | let email = req.params.email ; 23 | let userData = await searchUser(email) ; 24 | if(userData == ""){ 25 | res.send("You must signUp with that email to use MeowFroms"); 26 | return; 27 | } 28 | 29 | // console.log(userData[0].forms.length); 30 | let formName = req.params.formName; 31 | let temp = req.body; 32 | 33 | let formData = JSON.stringify(temp); 34 | temp = JSON.stringify(temp); 35 | temp = temp.replace(/{/g," "); 36 | temp = temp.replace(/}/g," "); 37 | temp = temp.split(","); 38 | let title = []; 39 | let entry = []; 40 | for(let i=0;i${title[i]} :

${entry[i]}


` 51 | } 52 | // console.log(mailBody); 53 | let data = JSON.stringify(req.body); 54 | 55 | 56 | let meow = await updateUser(userData[0]._id,formName, title,entry,formData); 57 | res.status(200).json({msg : 'Response Saved'}); 58 | 59 | mg.messages().send( { 60 | from: 'Cheese 🐱', 61 | to: email, 62 | subject: `You have got a new Response in ${formName} Meow! UvU `, 63 | html: `${mailBody}
buy Cheese some cat food 🐟 ` 64 | } , function (error, body) { 65 | 66 | if(error){ 67 | console.log(error); 68 | }else{ 69 | console.log(body); 70 | } 71 | }); 72 | 73 | 74 | 75 | 76 | }); 77 | module.exports = router; -------------------------------------------------------------------------------- /backend/router/Response.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | var axios = require("axios").default; 4 | const searchUser = require("../utility/searchUser"); 5 | const updateUser = require("../utility/updateUser"); 6 | const mailgun = require("mailgun-js"); 7 | const DOMAIN = process.env.Domain ; 8 | const api_key = process.env.API_MONEY; 9 | const mg = mailgun({apiKey: api_key, domain: DOMAIN}); 10 | 11 | const app = express(); 12 | 13 | app.set('view engine','ejs'); 14 | app.set('views', './views'); 15 | 16 | 17 | router.post("/:email&:formName",async(req,res)=>{ 18 | 19 | 20 | 21 | 22 | let email = req.params.email ; 23 | let userData = await searchUser(email) ; 24 | if(userData == ""){ 25 | res.send("You must signUp with that email to use MeowFroms"); 26 | return; 27 | } 28 | 29 | // console.log(userData[0].forms.length); 30 | let formName = req.params.formName; 31 | let temp = req.body; 32 | 33 | let formData = JSON.stringify(temp); 34 | temp = JSON.stringify(temp); 35 | temp = temp.replace(/{/g," "); 36 | temp = temp.replace(/}/g," "); 37 | temp = temp.split(","); 38 | let title = []; 39 | let entry = []; 40 | for(let i=0;i${title[i]} :

${entry[i]}


` 51 | } 52 | // console.log(mailBody); 53 | let data = JSON.stringify(req.body); 54 | 55 | 56 | let meow = await updateUser(userData[0]._id,formName, title,entry,formData); 57 | res.sendFile("./views/submited.html" ,{root :__dirname }); 58 | 59 | mg.messages().send( { 60 | from: 'Cheese 🐱', 61 | to: email, 62 | subject: `You have got a new Response in ${formName} Meow! UvU `, 63 | html: `${mailBody}
buy Cheese some cat food 🐟 ` 64 | } , function (error, body) { 65 | 66 | if(error){ 67 | console.log(error); 68 | }else{ 69 | console.log(body); 70 | } 71 | }); 72 | 73 | 74 | 75 | 76 | }); 77 | module.exports = router; -------------------------------------------------------------------------------- /backend/router/addForm.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const addFrom = require("../utility/addForm"); 4 | 5 | 6 | router.post("/:authKey",async(req,res)=>{ 7 | let authKey = req.params.authKey; 8 | if(authKey === process.env.authKey){ 9 | let email = req.body.email; 10 | let formName = req.body.formName; 11 | let url = req.body.url || ""; 12 | addFrom(email,formName ,url); 13 | }else{ 14 | res.send("AuthKey does not match"); 15 | } 16 | 17 | }); 18 | 19 | module.exports = router; -------------------------------------------------------------------------------- /backend/router/addUrl.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const User = require("../Modles/user"); 4 | const updateUrl = require("../utility/updateUrl"); 5 | 6 | 7 | 8 | router.post("/:mail&:authKey",async(req,res)=>{ 9 | 10 | let authKey = req.params.authKey; 11 | if(authKey === process.env.authKey){ 12 | 13 | 14 | let url = req.body.url; 15 | let formName = req.body.formName; 16 | 17 | 18 | let email = req.params.mail; 19 | updateUrl(email,url, formName); 20 | 21 | res.send("yo"); 22 | 23 | 24 | }else{ 25 | res.status(401).send("Auth Key does not match"); 26 | } 27 | 28 | 29 | 30 | }); 31 | 32 | module.exports = router; -------------------------------------------------------------------------------- /backend/router/index.html: -------------------------------------------------------------------------------- 1 | ! 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 |

20 |
21 |
22 | 23 | 24 |
25 | 28 |
29 |
30 | 31 |
32 |
33 | 34 |
35 |
36 | 37 |
38 |
39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /backend/router/user.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const Search = require("../utility/searchUser"); 4 | const createUser = require("../utility/createUser"); 5 | 6 | router.get("/:mail&:authKey",async(req,res)=>{ 7 | let authKey = req.params.authKey; 8 | if(authKey === process.env.authKey){ 9 | let email = req.params.mail; 10 | 11 | let result ; 12 | result = await Search(email); 13 | 14 | if(typeof result !== 'undefined' && result.length === 0){ 15 | let user = await createUser(email); 16 | res.json(user); 17 | 18 | }else{ 19 | 20 | res.json(result); 21 | } 22 | }else{ 23 | res.status(401).send("Auth Key does not match"); 24 | } 25 | 26 | 27 | 28 | }); 29 | 30 | module.exports = router; -------------------------------------------------------------------------------- /backend/router/views/submited.html: -------------------------------------------------------------------------------- 1 | . 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | MeowFroms 11 | 12 | 13 | 14 | 15 | 52 | 53 |
54 | 55 |
56 |

Meow!

57 |
58 |
59 |
60 | Your Form has been submited 61 |
62 |
63 | 64 |
65 |
66 | 67 | 68 | 73 | 74 | -------------------------------------------------------------------------------- /backend/utility/addForm.js: -------------------------------------------------------------------------------- 1 | const User = require("../Modles/user"); 2 | 3 | 4 | 5 | 6 | let addForm = async(email,formName,url) => { 7 | 8 | let index = 0; 9 | let result = await User.find({email}); 10 | let temp = result[0]._id; 11 | result = await User.findById(temp); 12 | let newForm = {}; 13 | newForm["formData"] = []; 14 | console.log(url); 15 | newForm["redirectUrl"] = url; 16 | newForm["formName"] = formName; 17 | result.forms.push(newForm); 18 | let finalForm = result.save(); 19 | console.log(result); 20 | } 21 | 22 | 23 | 24 | module.exports = addForm; -------------------------------------------------------------------------------- /backend/utility/createUser.js: -------------------------------------------------------------------------------- 1 | const User = require("../Modles/user"); 2 | 3 | const log = async(email) => { 4 | 5 | const newUser = new User({ 6 | email, 7 | }) 8 | try{ 9 | const a1 = await newUser.save(); 10 | return a1; 11 | }catch(error){ 12 | console.log(error); 13 | } 14 | } 15 | module.exports = log; -------------------------------------------------------------------------------- /backend/utility/searchUser.js: -------------------------------------------------------------------------------- 1 | const User = require("../Modles/user"); 2 | 3 | let result ; 4 | const search = async(email) => { 5 | 6 | let temp = await User.find({email}); 7 | return temp; 8 | 9 | } 10 | module.exports = search; -------------------------------------------------------------------------------- /backend/utility/sendMail.js: -------------------------------------------------------------------------------- 1 | const nodemailer = require("nodemailer"); 2 | 3 | async function main() { 4 | // Generate test SMTP service account from ethereal.email 5 | // Only needed if you don't have a real mail account for testing 6 | 7 | 8 | let testAccount = await nodemailer.createTestAccount(); 9 | 10 | // create reusable transporter object using the default SMTP transport 11 | let transporter = nodemailer.createTransport({ 12 | host: "smtp.ethereal.email", 13 | port: 587, 14 | secure: false, // true for 465, false for other ports 15 | auth: { 16 | user: testAccount.user, // generated ethereal user 17 | pass: testAccount.pass, // generated ethereal password 18 | }, 19 | }); 20 | 21 | // send mail with defined transport object 22 | let info = await transporter.sendMail({ 23 | from: '"Fred Foo 👻" ', // sender address 24 | to: "bar@example.com, baz@example.com", // list of receivers 25 | subject: "Hello ✔", // Subject line 26 | text: "Hello world?", // plain text body 27 | html: "Hello world?", // html body 28 | }); 29 | 30 | console.log("Message sent: %s", info.messageId); 31 | // Message sent: 32 | 33 | // Preview only available when sending through an Ethereal account 34 | console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info)); 35 | // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou... 36 | } 37 | 38 | main().catch(console.error); 39 | 40 | 41 | module.exports = main; -------------------------------------------------------------------------------- /backend/utility/updateUrl.js: -------------------------------------------------------------------------------- 1 | const User = require("../Modles/user"); 2 | 3 | 4 | const updateUrl = async(email,url,formName) => { 5 | let index = 0; 6 | let result = await User.find({email}); 7 | let temp = result[0]._id; 8 | result = await User.findById(temp); 9 | 10 | 11 | for(let i=0;i{ 4 | formData = JSON.parse(formData); 5 | let date = new Date(); 6 | formData["_date"] = date; 7 | 8 | let newUserData = await User.findById(id); 9 | if(newUserData["forms"].length === 0){ 10 | const newForm = {}; 11 | newForm["formName"] = formName ; 12 | newForm["formData"] = []; 13 | newForm["formData"].push(formData); 14 | newForm["redirectUrl"] = ""; 15 | newUserData["forms"].push(newForm); 16 | let final = await newUserData.save(); 17 | 18 | }else{ 19 | let index = -1; 20 | for(let i=0;i0.2%", 44 | "not dead", 45 | "not op_mini all" 46 | ], 47 | "development": [ 48 | "last 1 chrome version", 49 | "last 1 firefox version", 50 | "last 1 safari version" 51 | ] 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /public/MeowForm Icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tewarig/MeowForm/a2064567b486219ef85141be752d786173ad83ac/public/favicon.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | 28 | MeowForms 29 | 30 | 31 | 32 |
33 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Meow Form", 3 | "name": "Meow Form", 4 | "icons": [ 5 | { 6 | "src": "favicon.png", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/review_avtar.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tewarig/MeowForm/a2064567b486219ef85141be752d786173ad83ac/public/review_avtar.jpeg -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | /* .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | height: 40vmin; 7 | pointer-events: none; 8 | } 9 | 10 | @media (prefers-reduced-motion: no-preference) { 11 | .App-logo { 12 | animation: App-logo-spin infinite 20s linear; 13 | } 14 | } 15 | 16 | .App-header { 17 | background-color: #282c34; 18 | min-height: 100vh; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | justify-content: center; 23 | font-size: calc(10px + 2vmin); 24 | color: white; 25 | } 26 | 27 | .App-link { 28 | color: #61dafb; 29 | } */ 30 | 31 | .react-reveal { 32 | animation-fill-mode: backwards !important; 33 | } 34 | 35 | /* @keyframes App-logo-spin { 36 | from { 37 | transform: rotate(0deg); 38 | } 39 | to { 40 | transform: rotate(360deg); 41 | } 42 | } */ 43 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { ChakraProvider } from "@chakra-ui/react"; 3 | import Index from "./pages/Index"; 4 | import "./App.css"; 5 | 6 | function App() { 7 | return ( 8 | 9 | 10 | 11 | ); 12 | } 13 | 14 | export default App; 15 | -------------------------------------------------------------------------------- /src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /src/Util/AuthWithHistory.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useHistory } from "react-router-dom"; 3 | import { Auth0Provider } from "@auth0/auth0-react"; 4 | 5 | const Auth0ProviderWithHistory = ({ children }) => { 6 | 7 | const history = useHistory(); 8 | 9 | const onRedirectCallback = (appState) => { 10 | history.push(appState?.returnTo || window.location.pathname); 11 | }; 12 | 13 | return ( 14 | 23 | {children} 24 | 25 | ); 26 | }; 27 | 28 | export default Auth0ProviderWithHistory; -------------------------------------------------------------------------------- /src/comp/Comp/Faq.js: -------------------------------------------------------------------------------- 1 | import React,{useState} from 'react' 2 | import { FAQ_Data } from '../../data/faq' 3 | import '../../styles/faq.css' 4 | 5 | import { 6 | Text, 7 | Box, 8 | useColorModeValue, 9 | useMediaQuery, 10 | Image, 11 | Flex, 12 | Button, 13 | } from "@chakra-ui/react"; 14 | 15 | function Faq() { 16 | 17 | const textColor = useColorModeValue("gray.700", "gray.100"); 18 | const [check] = useMediaQuery("(min-width: 1025px)"); 19 | 20 | return ( 21 |
22 |
23 |
24 | 30 | Frequently Asked Questions (FAQ) 31 | 32 |
33 |
34 | { 35 | FAQ_Data.map((data) => ( 36 |
37 |
38 |

Q . {data.question}

39 |
40 |
41 |

A . {data.answer}

42 |
43 |
44 | )) 45 | } 46 |
47 |
48 |
49 | ); 50 | } 51 | 52 | export default Faq 53 | -------------------------------------------------------------------------------- /src/comp/Comp/Footer.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Box, Text, Flex, useMediaQuery } from "@chakra-ui/react"; 3 | 4 | function Footer(props) { 5 | const [check] = useMediaQuery("(min-width: 1025px)"); 6 | return ( 7 | 8 | 9 | 10 | 16 | Meow Forms 🐱 17 | 18 | 23 | 24 | 28 | Help me keep Meow Form Free ☕ 29 | 30 | 31 | 32 | 37 | 41 | Icons by Icons8 42 | 43 | 44 | 48 | 🐦 @oyeTewari 49 | 50 | 51 | 52 | All mails are delivered by 🧀 the 🐈 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | ); 64 | } 65 | 66 | export default Footer; 67 | -------------------------------------------------------------------------------- /src/comp/Comp/FormCard.js: -------------------------------------------------------------------------------- 1 | import { Box , Text } from '@chakra-ui/layout'; 2 | import { Image , Button ,useColorModeValue ,Badge ,useMediaQuery ,Flex ,Input} from "@chakra-ui/react"; 3 | import FormData from './FormData'; 4 | import FormHeading from './FormHeading'; 5 | import { AspectRatio } from "@chakra-ui/react" 6 | 7 | import { 8 | Drawer, 9 | DrawerBody, 10 | DrawerFooter, 11 | DrawerHeader, 12 | DrawerOverlay, 13 | DrawerContent, 14 | DrawerCloseButton, 15 | useDisclosure 16 | } from "@chakra-ui/react"; 17 | import {Link} from "react-router-dom"; 18 | import React from 'react'; 19 | import axios from 'axios'; 20 | import toast ,{Toaster} from "react-hot-toast"; 21 | 22 | 23 | function FormCard({formName , responses ,formData ,redirectUrl ,email }) { 24 | const formBackground = useColorModeValue("gray.100","gray.700"); 25 | const [check] = useMediaQuery("(min-width: 1025px)") 26 | const { isOpen, onOpen, onClose } = useDisclosure() 27 | const [size, setSize] = React.useState("md") 28 | const [url, setUrl] = React.useState(); 29 | const [edit , setEdit] = React.useState(false); 30 | let apiKey = process.env.REACT_APP_APIKEY ; 31 | let apiUrl = process.env.REACT_APP_HOSTURL ; 32 | 33 | function isValidURL(string) { 34 | var res = string.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g); 35 | return (res !== null) 36 | }; 37 | const sendResponse = async(serverUrl)=> { 38 | let meow = await axios({ 39 | method: 'post', 40 | url: serverUrl, 41 | data: { 42 | url: url, 43 | formName: formName 44 | } 45 | }); 46 | 47 | } 48 | const checkUrl = () => { 49 | if(url === "" || url === undefined){ 50 | toast.error(' Url not saved'); 51 | setEdit(!edit) 52 | 53 | 54 | }else if(isValidURL(url)){ 55 | let serverUrl = apiUrl + 'url/' + email + '&' + apiKey; 56 | sendResponse(serverUrl); 57 | 58 | toast.success('Url is saved, it will some time to reflect'); 59 | 60 | setEdit(!edit) 61 | }else{ 62 | toast.error('The url is not valid :( '); 63 | 64 | 65 | } 66 | 67 | } 68 | 69 | 70 | return ( 71 | 72 | 73 | 74 | 75 | {formName} 76 | {responses} Responses 77 | 78 | 79 | 80 | {/* {console.log(formData)} */} 81 | 82 | 83 | 84 | 85 | 86 | 87 | 94 | 95 | {formName} 96 | 97 | 100 | {responses} Responses 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | {formData.length > 0 && 110 | <> 111 | 112 | 113 | { 114 | formData.map(x=> 115 | 116 | ) 117 | } 118 | 119 | 120 | } 121 | {/* 122 | Redirect Url 123 | { redirectUrl } 124 | */} 125 | {/* { edit && */} 126 | {/* 127 | (setUrl(e.target.value))} 128 | /> 129 | {edit === false ? 130 | 133 | : 134 | 135 | } 136 | */} 137 | {/* } */} 138 | {/* * you one need Redirect url if you are just using html css , check docs here */} 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | ); 152 | } 153 | 154 | export default FormCard; -------------------------------------------------------------------------------- /src/comp/Comp/FormData.js: -------------------------------------------------------------------------------- 1 | import { Spacer, Text } from '@chakra-ui/layout'; 2 | import {Flex , Divider} from '@chakra-ui/react'; 3 | import React from 'react'; 4 | 5 | function FormData({obj}) { 6 | let arr = []; 7 | 8 | Object.values(obj).forEach(values => ( 9 | arr.push(values) 10 | ) 11 | ) 12 | 13 | 14 | return ( 15 |
16 | 17 | 18 | { 19 | arr.map(x=> 20 | <> 21 | 22 | {x} 23 | 24 | 25 | ) 26 | } 27 | 28 | 29 |
30 | ); 31 | } 32 | 33 | export default FormData; -------------------------------------------------------------------------------- /src/comp/Comp/FormHeading.js: -------------------------------------------------------------------------------- 1 | import { Spacer, Text } from '@chakra-ui/layout'; 2 | import {Flex , Divider} from '@chakra-ui/react'; 3 | import React from 'react'; 4 | 5 | function FormHeading({obj}) { 6 | let arr = []; 7 | let temp = obj; 8 | const objectArray = Object.entries(temp); 9 | objectArray.forEach(([key, value]) => arr.push(key)); 10 | 11 | 12 | 13 | 14 | 15 | return ( 16 |
17 | 18 | { 19 | arr.map(key => 20 | <> 21 | 25 | {key} 26 | 27 | 28 | 29 | ) 30 | } 31 | 32 | {/* { 33 | objectArray.map(x=> 34 | <> 35 | 36 | {x} 37 | 38 | 39 | ) 40 | } */} 41 | 42 | 43 |
44 | ); 45 | } 46 | 47 | export default FormHeading; -------------------------------------------------------------------------------- /src/comp/Comp/MenuButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {Link} from 'react-router-dom'; 3 | import {Button ,Text} from '@chakra-ui/react'; 4 | 5 | function MenuButtons({link,icon,Tittle,click ,nextPage}) { 6 | return ( 7 | 22 | ); 23 | } 24 | 25 | export default MenuButtons; -------------------------------------------------------------------------------- /src/comp/Comp/MenuItems.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import MenuButtons from './MenuButtons'; 3 | import {Button, IconButton} from "@chakra-ui/button"; 4 | import { VStack,Flex ,Heading, Spacer , Box , Text , Divider} from "@chakra-ui/layout"; 5 | import {useMediaQuery} from "@chakra-ui/react"; 6 | import {Tooltip } from "@chakra-ui/react"; 7 | import { FaSun , FaMoon, FaGithub, FaUser} from "react-icons/fa"; 8 | import { FcList, FcSearch } from "react-icons/fc"; 9 | import {BsSearch ,BsCalendarFill, BsPeopleFill, BsPerson, BsFillExclamationCircleFill, BsStar ,BsMenu} from "react-icons/bs"; 10 | import { useColorMode ,useColorModeValue } from '@chakra-ui/color-mode'; 11 | import {Link} from "react-router-dom"; 12 | import {MdRemoveFromQueue , MdFindInPage , MdStar, MdPeople} from "react-icons/md"; 13 | 14 | import { 15 | Drawer, 16 | DrawerBody, 17 | DrawerFooter, 18 | DrawerHeader, 19 | DrawerOverlay, 20 | DrawerContent, 21 | DrawerCloseButton, 22 | useDisclosure 23 | } from "@chakra-ui/react"; 24 | 25 | function MenuItems({onClose}) { 26 | return ( 27 | 60 | ); 61 | } 62 | 63 | export default MenuItems; -------------------------------------------------------------------------------- /src/comp/Comp/NavBar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {Button, IconButton} from "@chakra-ui/button"; 3 | import {Avatar }from '@chakra-ui/react'; 4 | import { VStack,Flex, Spacer , Box , Text , Divider} from "@chakra-ui/layout"; 5 | import {useMediaQuery} from "@chakra-ui/react"; 6 | import {Tooltip } from "@chakra-ui/react"; 7 | import { FaSun , FaMoon, FaGithub, FaList} from "react-icons/fa"; 8 | import { useColorMode ,useColorModeValue } from '@chakra-ui/color-mode'; 9 | import {Link} from "react-router-dom"; 10 | import { useAuth0 } from "@auth0/auth0-react"; 11 | 12 | 13 | import { 14 | Drawer, 15 | DrawerBody, 16 | DrawerHeader, 17 | DrawerOverlay, 18 | DrawerContent, 19 | useDisclosure, 20 | Menu, 21 | MenuButton, 22 | MenuList, 23 | MenuItem 24 | 25 | } from "@chakra-ui/react"; 26 | import MenuItems from './MenuItems'; 27 | 28 | 29 | function Navbar(props) { 30 | const {colorMode , toggleColorMode }= useColorMode(); 31 | const isDark = colorMode === 'dark'; 32 | const { isOpen, onOpen, onClose } = useDisclosure() 33 | const [size, setSize] = React.useState("md") 34 | const [check] = useMediaQuery("(min-width: 1025px)") 35 | const [meow ,setMeow] = React.useState(false); 36 | const [signIn,setSignIn] = React.useState(false); 37 | const formBackground = useColorModeValue("white.100","gray.900"); 38 | const { loginWithRedirect , logout , isAuthenticated , user} = useAuth0(); 39 | 40 | 41 | let flag = false; 42 | var setFlag = () =>{ 43 | setMeow(!meow); 44 | onClose(); 45 | } 46 | 47 | return ( 48 | <> 49 | 50 | 51 | 52 | 53 | 54 | 55 | 60 | MeowForm 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | } isRound="true"> 70 | 71 | {check && 72 | 73 | } isRound="true"> 74 | 75 | } 76 | { check && 77 | 78 | : } isRound="true" onClick={toggleColorMode}> 79 | 80 | 81 | } 82 | 83 | 84 | 85 | 86 | 87 | { user && 88 | 89 | {({ isOpen }) => ( 90 | <> 91 | 92 | 93 | 94 | 95 | Hi , {user.name} 96 | 97 | Dashboard 98 | 99 | 100 | logout()}>Logout 101 | 102 | 103 | )} 104 | 105 | } 106 | { !isAuthenticated && 107 | 108 | 109 | {({ isOpen }) => ( 110 | <> 111 | 112 | 113 | 114 | 115 | 116 | (loginWithRedirect()) }>Sign In/Sign Up 117 | 118 | 119 | )} 120 | 121 | {/* } isRound="true" onClick={()=>(loginWithRedirect())}> 122 | */} 123 | 124 | } 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 140 | MeowForm 141 | 142 | 143 | 144 | 145 | 146 | {!check && 147 | 154 | } 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | ); 181 | } 182 | 183 | export default Navbar; 184 | -------------------------------------------------------------------------------- /src/comp/Comp/Review.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "react-responsive-carousel/lib/styles/carousel.min.css"; 3 | import { Carousel } from "react-responsive-carousel"; 4 | 5 | export default class Reviews extends Component { 6 | render() { 7 | return ( 8 | 16 |
17 | review1 21 |
22 |

Anmol Malik

23 |

24 | Amazing Project Gaurav Tewari, I had used this in my portfolio, 25 | its very easy to use, literally I don't have to write any 26 | back-end. And specially that mail feature, I really liked it. Keep 27 | it up Bro 🙌🏻 28 |

29 |
30 |
31 |
32 | review2 36 |
37 |

Savio Martin

38 |

39 | Great App Gaurav Tewari, Very helpful. This will help me a lot 40 | when form submitting. Kudos 👏 I really like the idea and the 41 | implementation is also so good. Keep up the good work bro! 🚀 42 |

43 |
44 |
45 |
46 | review3 50 |
51 |

Devansh Dubey

52 |

53 | Amazing idea bro, this will help a ton of developers in their projects. Kudos, great work 🔥 54 |

55 |
56 |
57 |
58 | ); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/comp/Skeletons/FullPage.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { Box ,SkeletonText , SkeletonCircle ,Flex} from "@chakra-ui/react"; 4 | function FullPage(props) { 5 | return ( 6 |
7 | 8 | 9 | 10 | 11 | < Box padding="6" boxShadow="lg" > 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | ); 29 | } 30 | 31 | export default FullPage; -------------------------------------------------------------------------------- /src/data/faq.js: -------------------------------------------------------------------------------- 1 | export const FAQ_Data = [{ 2 | 'id': 1, 3 | 'question': 'How you are able to keep Meow Form Completely free?', 4 | 'answer': `Currently MeowForm's is costing me around $5 a month I am able to cover this cost.` 5 | }, 6 | { 7 | 'id': 2, 8 | 'question': 'What if i do if a not receive email responses ?', 9 | 'answer': ' Currenlty due to bugeting Meowform has a cap of 30,000 emails a month . so if this limit is cross you would not receive any of the email. but still you can check you dashboard for new responses' 10 | }, 11 | { 12 | 'id': 3, 13 | 'question': 'How can i support Meowforms ? ', 14 | 'answer': 'You can support it by contributing to meowform in github or by telling the whole world about Meowforms or by buying me a coffe or Ice Tea' 15 | }, 16 | { 17 | 'id': 4, 18 | 'question': 'What if you stop Mainting MeowForms or Paying for the Services ', 19 | 'answer': `Surely MeowForms will go offline but the Code is open sourced so you can deploy a the code youself if you are heavly deponded on Meowform` 20 | }, 21 | ] -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | 15 | /* reviews */ 16 | .carousel-root { 17 | width: 64% !important; 18 | margin: auto !important; 19 | margin-top: 3% !important; 20 | } 21 | 22 | .carousel .slide { 23 | background: #fff !important; 24 | color: black; 25 | height: 100%; 26 | } 27 | 28 | .carousel .slide img { 29 | width: 100px !important; 30 | border-radius: 50%; 31 | } 32 | 33 | .myCarousel { 34 | background: #fafafa; 35 | margin-top: -6%; 36 | width: 75%; 37 | margin-left: auto; 38 | margin-right: auto; 39 | padding-top: 6%; 40 | padding-bottom: 20%; 41 | padding-left: 5%; 42 | padding-right: 5%; 43 | border: 1px solid #ddd; 44 | height: 286px; 45 | } 46 | 47 | .carousel .control-dots { 48 | padding-left: 5px !important; 49 | outline: 0; 50 | bottom: 5% !important; 51 | } 52 | 53 | .myCarousel h3 { 54 | color: #222; 55 | font-weight: 100; 56 | letter-spacing: 0.2px; 57 | margin-bottom: 10px; 58 | font-weight: 600; 59 | /* text-transform: uppercase; */ 60 | font-size: 22px; 61 | } 62 | 63 | .myCarousel p { 64 | font-weight: 140 !important; 65 | line-height: 29px !important; 66 | color: #222; 67 | font-size: 17px; 68 | font-family: sans-serif; 69 | max-height: 67px; 70 | } 71 | 72 | .myCarousel p:before { 73 | content: "“"; 74 | color: rgb(192, 129, 46);; 75 | font-size: 26px; 76 | font-family: monospace; 77 | font-weight: 100; 78 | } 79 | 80 | .myCarousel p:after { 81 | content: "”"; 82 | color: rgb(192, 129, 46); 83 | font-size: 26px; 84 | font-family: monospace; 85 | font-weight: 100; 86 | line-height: 0; 87 | } 88 | 89 | .carousel .control-dots .dot { 90 | box-shadow: none !important; 91 | background: orange !important; 92 | outline: 0; 93 | } 94 | 95 | .carousel.carousel-slider .control-arrow { 96 | background:orangered !important; 97 | height: 50px !important; 98 | position: absolute; 99 | top: 35% !important; 100 | } 101 | 102 | @media only screen and (max-width: 934px) { 103 | .carousel-root { 104 | outline: 0; 105 | width: 93% !important; 106 | margin: auto !important; 107 | } 108 | 109 | .carousel.carousel-slider .control-arrow { 110 | display: none !important; 111 | } 112 | .myCarousel { 113 | background: #fafafa; 114 | margin-top: -9%; 115 | width: 88%; 116 | margin-left: auto; 117 | margin-right: auto; 118 | padding-top: 8%; 119 | padding-bottom: 12.5%; 120 | padding-left: 5%; 121 | padding-right: 5%; 122 | border: 1px solid #ddd; 123 | height: 269px; 124 | } 125 | 126 | .carousel .slide img { 127 | width: 24% !important; 128 | border-radius: 50%; 129 | } 130 | } 131 | 132 | .Reviews{ 133 | padding: 30px 10px 170px 10px ; 134 | } -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/pages/Dashboard/Dashboard.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import { 3 | Box, 4 | Text, 5 | Flex, 6 | Image, 7 | useMediaQuery, 8 | Divider, 9 | SkeletonText, 10 | Button, 11 | Input, 12 | } from "@chakra-ui/react"; 13 | import { useAuth0, withAuthenticationRequired } from "@auth0/auth0-react"; 14 | import FullPage from "../../comp/Skeletons/FullPage"; 15 | import axios from "axios"; 16 | import FormCard from "../../comp/Comp/FormCard"; 17 | import { 18 | Drawer, 19 | DrawerBody, 20 | DrawerHeader, 21 | DrawerOverlay, 22 | DrawerContent, 23 | useDisclosure, 24 | } from "@chakra-ui/react"; 25 | import toast, { Toaster } from "react-hot-toast"; 26 | 27 | const Dashboard = () => { 28 | const { isLoading, user } = useAuth0(); 29 | const [check] = useMediaQuery("(min-width: 1025px)"); 30 | const { isOpen, onOpen, onClose } = useDisclosure(); 31 | const [formName, setFormName] = React.useState(); 32 | let userEmail = user.email; 33 | let apiKey = process.env.REACT_APP_APIKEY; 34 | let apiUrl = process.env.REACT_APP_HOSTURL; 35 | const [data, setData] = React.useState(); 36 | const getData = async () => { 37 | let temp = await axios.get(apiUrl + "user/" + userEmail + "&" + apiKey); 38 | setData(temp.data[0]); 39 | console.log(data); 40 | }; 41 | useEffect(() => { 42 | getData(); 43 | if (data === undefined) { 44 | setTimeout(() => getData(), 2500); 45 | } 46 | }, []); 47 | let responses = 0; 48 | if (data) { 49 | for (let i = 0; i < data.forms.length; i++) { 50 | responses += data.forms[i].formData.length; 51 | } 52 | } 53 | 54 | const postApiData = async () => { 55 | let temp = await axios.post(apiUrl + "addForm/" + apiKey, { 56 | email: user.email, 57 | formName: formName, 58 | url: "", 59 | }); 60 | getData(); 61 | }; 62 | const addNewForm = () => { 63 | if (formName === "") { 64 | toast.error("Form is empty😉"); 65 | } else { 66 | // console.log(data.forms[0].formName); 67 | let isCopy = false; 68 | for (let i = 0; i < data.forms.length; i++) { 69 | if (data.forms[i].formName === formName) { 70 | isCopy = true; 71 | } 72 | } 73 | if (isCopy) { 74 | toast.error("form with such name already exits "); 75 | } else { 76 | postApiData(); 77 | setTimeout(() => getData(), 2000); 78 | onClose(); 79 | setTimeout( 80 | () => toast.success("Form Have beeen added 😉"), 81 | 2000 82 | ); 83 | } 84 | } 85 | }; 86 | 87 | return ( 88 | 89 | 95 | 96 | 97 | 98 | 104 | {user.name} 105 | 106 | 107 | 108 | 109 | 110 | 114 | {data ? ( 115 | responses 116 | ) : ( 117 | 118 | )} 119 | 120 | Responses 121 | 122 | 123 | 127 | {data ? ( 128 | data.forms.length 129 | ) : ( 130 | 131 | )} 132 | 133 | 134 | Forms 135 | 136 | 137 | 138 | 139 | 140 | 145 | 146 | 151 | Forms 152 | 153 | 156 | 157 | 158 | {data ? ( 159 | data.forms.map((x) => ( 160 | 166 | )) 167 | ) : ( 168 | <> 169 | 170 | 171 | 172 | )} 173 | 174 | {data && data.forms.length === 0 ? ( 175 | <> 176 | 182 | 183 | You haven't created a form Yet{" "} 184 | 185 | 186 | ) : ( 187 | <> 188 | )} 189 | 190 | 194 | 195 | 196 | 197 | 203 | Add Form 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 213 | setFormName(e.target.value) 214 | } 215 | placeholder='Form Name' 216 | /> 217 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | ); 234 | }; 235 | export default withAuthenticationRequired(Dashboard, { 236 | onRedirecting: () => , 237 | }); 238 | -------------------------------------------------------------------------------- /src/pages/Home/Home.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Link } from "react-router-dom"; 3 | import Bounce from "react-reveal/Bounce"; 4 | import Flip from "react-reveal/Flip"; 5 | import Fade from "react-reveal/Fade"; 6 | import Reviews from "../../comp/Comp/Review"; 7 | import Faq from "../../comp/Comp/Faq"; 8 | 9 | import { 10 | Text, 11 | Box, 12 | useColorModeValue, 13 | useMediaQuery, 14 | Image, 15 | Flex, 16 | Button, 17 | } from "@chakra-ui/react"; 18 | import Typewriter from "typewriter-effect"; 19 | 20 | function Home(props) { 21 | const textColor = useColorModeValue("gray.700", "gray.100"); 22 | const [check] = useMediaQuery("(min-width: 1025px)"); 23 | 24 | return ( 25 | <> 26 |
27 | 28 | 29 | 35 | Functional Forms Solution for 36 | 37 | 44 | 58 | 59 | 60 | 61 | 67 | 68 | 77 | 78 | 79 | 80 | 81 | 85 | 86 | 87 | 88 | 89 | 90 | 94 | 95 | 96 | 97 | 98 | 108 | 109 | 110 | 111 | . 112 |
113 | 114 |
115 | . 116 |
117 | 118 | 119 | 120 | 126 | 127 | 134 | Make backend-less forms with MeowForm and get 135 | 138 | Unlimited Responses{" "} 139 | {" "} 140 | in your inbox . 141 | 142 | 143 | 144 | 145 | 146 | 153 | Choose your fontend , Use our API to handle things 154 | for 155 | 158 | {" "} 159 | Free{" "} 160 | 161 | 162 | 163 | 169 | 170 | 171 | 172 | 179 | Missed a response ? don't worry view all responses 180 | in out dashboard 181 | 184 | {" "} 185 | 186 | 187 | 188 | 194 | 195 | 196 | 197 | 202 | 203 | 213 | 214 |

Meow Form in action

215 |
216 |
217 | {/* */} 218 |
219 |
220 | 221 |
222 | 223 | ); 224 | } 225 | 226 | export default Home; 227 | -------------------------------------------------------------------------------- /src/pages/Index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Fade from "react-reveal/Fade"; 3 | import { BrowserRouter as Router, Route } from "react-router-dom"; 4 | 5 | import Navbar from "../comp/Comp/NavBar"; 6 | import Home from "./Home/Home"; 7 | import Dashboard from "./Dashboard/Dashboard"; 8 | import Auth0ProviderWithHistory from "../Util/AuthWithHistory"; 9 | import Footer from "../comp/Comp/Footer"; 10 | 11 | function Index(props) { 12 | return ( 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |