diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..9c1131e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +# Elastic Beanstalk Configuration files +.elasticbeanstalk/ \ No newline at end of file diff --git a/docs/beanstalk/01_Getting_Started/README.md b/docs/beanstalk/01_Getting_Started/README.md new file mode 100644 index 0000000..87c2caa --- /dev/null +++ b/docs/beanstalk/01_Getting_Started/README.md @@ -0,0 +1,43 @@ +# Getting Started + +Before you can create resources in AWS you will first need to configure your local environment. + +Note that the EB CLI requires Python to be installed on your system. + +### AWS Authentication Keys + +1) Login into your AWS Educate account and select "AWS Account" on the top right + + +2) Select "AWS Educate Starter Account" which should open a new tab + +![AWS Educate account details selection](./images/1_Account_Details.png) + + +3) Select the "Account Details" button and you will be presented with + +![AWS Educate account details window](./images/2_AWS_API_Creds.png) + + +4) Using your favorite editor copy the entire contents of the "AWS CLI" section to the `~/.aws/credentials` file on Mac/Linux and `%UserProfile%\.aws\credentials` on Windows. +More information can be found in the [CLI Configuration Docs](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) + +
+
+Now that your API credentials are saved, you will be able to authenticate against your AWS account using CLI tools as well as programs that use the AWS SDK. Note that AWS Educate tokens expire after 3 hours, so please repeat these steps if you receive an expired session error. +
+
+ +### Install and Configure the EB CLI +EB ClI - See installation [instructions](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html) for your OS + +Once installed check that the CLI is installed by running: + +``` +eb --version +EB CLI 3.19.3 (Python 3.8.5) +``` + +--- + +Next: [Creating EB Environment](../02_Creating_EB_Environment/README.md) diff --git a/docs/beanstalk/01_Getting_Started/images/1_Account_Details.png b/docs/beanstalk/01_Getting_Started/images/1_Account_Details.png new file mode 100644 index 0000000..6d0af22 Binary files /dev/null and b/docs/beanstalk/01_Getting_Started/images/1_Account_Details.png differ diff --git a/docs/beanstalk/01_Getting_Started/images/2_AWS_API_Creds.png b/docs/beanstalk/01_Getting_Started/images/2_AWS_API_Creds.png new file mode 100644 index 0000000..b13fc93 Binary files /dev/null and b/docs/beanstalk/01_Getting_Started/images/2_AWS_API_Creds.png differ diff --git a/docs/beanstalk/01_Getting_Started/images/3_AWS_Credentials_Edit.png b/docs/beanstalk/01_Getting_Started/images/3_AWS_Credentials_Edit.png new file mode 100644 index 0000000..1f00d1e Binary files /dev/null and b/docs/beanstalk/01_Getting_Started/images/3_AWS_Credentials_Edit.png differ diff --git a/docs/beanstalk/01_Getting_Started/images/4_Editing_AWS_Credentials_File.png b/docs/beanstalk/01_Getting_Started/images/4_Editing_AWS_Credentials_File.png new file mode 100644 index 0000000..ff8eda5 Binary files /dev/null and b/docs/beanstalk/01_Getting_Started/images/4_Editing_AWS_Credentials_File.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/README.md b/docs/beanstalk/02_Creating_EB_Environment/README.md new file mode 100644 index 0000000..7ce2726 --- /dev/null +++ b/docs/beanstalk/02_Creating_EB_Environment/README.md @@ -0,0 +1,87 @@ +# Creating Your Elastic Beanstalk Environment + +Now that you have the EB CLI installed, you will be able to push your Backend (Server) code to Elastic Beanstalk in your AWS account. + +Note that all of the following will take place withing the `server` directory. + +## Initializing Your Elastic Beanstalk Project + +Initializing your Elastic Beanstalk project will create a `.elasticbeanstalk` folder which will contain a configuration file with information about your EB deployment. + + +
+1) Run the `eb init` command which will prompt you for a few questions. You make your selection by typing the matching number or character and pressing "Enter". + Make sure to select the "US East (N. Virginia)" option which should be #1. + +![Running "eb init" command and selecting Option 1 )](./images/EB_CLI_INIT_1_Select_Region.png) + + +
+2) You will now be prompted to either create an application or select an existing on. Enter the number for "Create a new Application" + +![Selecting "Create a new Application" option](./images/EB_CLI_INIT_2_Create_New_App.png) + + +
+3) Next you will be prompted to enter the name of your project. In this example "CSCL" was used. Feel free to use a different name. + +![Entering the name for our EB application](./images/EB_CLI_INIT_3_Set_Name.png) + + +
+4) Now you will be asked if you are "using Node.js", enter `y` or "yes". Next, choose the "Node.js 12" option which should be #1. + +![Enter "y" to confirm that you are using "Node.js" and select "Node.js 12"](./images/EB_CLI_INIT_4_Configure_Platform.png) + + +
+5) You will be prompted to create an "SSH key pair". Enter `y`to accept. When prompted for a name, you must enter the same name that was referenced earlier in the deployment. Since we used "CSCL" earlier, it should be "cscl". + +![Enter 'y' to create an SSH key pair and enter the name "cscl"](./images/EB_CLI_INIT_5_SSH_Key_Setup.png) + + +
+6) You will be prompted to enter a passphrase. Press "Enter" two times to enter a blank passphrase if you don't wish to use one. Setting a passphrase will require you to enter it whenever you attempt to connect to your server using SSH. + + +![Entering SSH passphrase. Setting it to by pressing Enter twice.](./images/EB_CLI_INIT_6_SSH_Key_Passphrase.png) + + +
+7) Congrats! Your EB environment has been initialized locally. You will notice a new folder called `elasticbeanstalk` which will contain your configuration file. + +![SSH key generated output showing that the initialization is complete](./images/EB_CLI_INIT_7_Finish.png) + + +## Creating your EB environment in AWS + +Now that your configuration has been initialized. The EB CLI will use your config in `.elasticbeanstalk` and the deployment configs in `.ebextensions` to create your environment. + +
+Making sure that you are still in the `server` directory. Run the `eb crreate` command followed by the name of the environment you are creating. You will be able to create multiple environments and also delete it later. So don't worry if you need to change the name. + +![Running the "eb create production" command to create our EB environment](./images/EB_CLI_Create_1_CSCL.png) + +Once you kick off the deployment, EB CLI will display the log events on your console. This can take a few minutes, so feel free to check back later. + +Once finished you will be presented with the output. + +![Output of entire EB deployment and successful message](./images/EB_CLI_Create_2_CSCL_Finished.png) +
+
+This deployment create the following resources: + +- API Gateway: Used to proxy (pass along) your HTTP requests to your Beanstalk server. This allows you to connect using HTTPS which will allow your Frontend to call your Backend server without generating any security errors. + +- EC2 Instance running MongoDB: This server is using a Bitnami Image containing MongoDB. This is where your database will live. + +- Elastic Beanstalk deployment: This represents a number of resources which include an EC2 instance where your code will be running. + + +## Updating the Code + +Whenever you are ready to update your code on AWS. Run the `eb deploy` command. You can provide an environment name if you have more than one using `eb deploy `. + +--- + +Next: [Setting Up Mongo](../03_Setting_Up_Mongo/README.md) diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_Create_1_CSCL.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_Create_1_CSCL.png new file mode 100644 index 0000000..f22a8ed Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_Create_1_CSCL.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_Create_2_CSCL_Finished.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_Create_2_CSCL_Finished.png new file mode 100644 index 0000000..bea7bdc Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_Create_2_CSCL_Finished.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_1_Select_Region.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_1_Select_Region.png new file mode 100644 index 0000000..95cb489 Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_1_Select_Region.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_2_Create_New_App.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_2_Create_New_App.png new file mode 100644 index 0000000..d687038 Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_2_Create_New_App.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_3_Set_Name.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_3_Set_Name.png new file mode 100644 index 0000000..b3a339f Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_3_Set_Name.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_4_Configure_Platform.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_4_Configure_Platform.png new file mode 100644 index 0000000..a794f3b Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_4_Configure_Platform.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_5_SSH_Key_Setup.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_5_SSH_Key_Setup.png new file mode 100644 index 0000000..4a40441 Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_5_SSH_Key_Setup.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_6_SSH_Key_Passphrase.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_6_SSH_Key_Passphrase.png new file mode 100644 index 0000000..512b763 Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_6_SSH_Key_Passphrase.png differ diff --git a/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_7_Finish.png b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_7_Finish.png new file mode 100644 index 0000000..bffc15a Binary files /dev/null and b/docs/beanstalk/02_Creating_EB_Environment/images/EB_CLI_INIT_7_Finish.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/README.md b/docs/beanstalk/03_Setting_Up_Mongo/README.md new file mode 100644 index 0000000..4696467 --- /dev/null +++ b/docs/beanstalk/03_Setting_Up_Mongo/README.md @@ -0,0 +1,157 @@ +# Configuring MongoDB + +After deploying your application to AWS you will need to access your MongoDB server so that you can import your database data. First you will need to add an entry in the Security Group which can be thought as a Firewall rule and then retrieving the MongoDB credentials from the logs. + +One of the easiest ways to access and manage a Mongo database is to use [MongoDB Compass](https://www.mongodb.com/try/download/compass). Download and install it and follow the instructions down below. + +## Getting MongoDB Credentials + +First, you will be getting your MongoDB username and password. The server imaged used to create this database server . + +Follow the [instrcutions](https://docs.bitnami.com/aws/faq/get-started/find-credentials/#option-1-find-password-by-checking-the-system-log-on-the-aws-cloud-console-ec2) to learn how you can retrieve those credentials. Make sure to save that information for now. It will be necessary for later steps. + +## Getting MongoDB IPs +Your MongoDB server will have two IPs. A Private one used to access it within your Virtual Private Cloud (VPC) network. The other is a Public one used to access it over the internet. + +
+1) Make you r way to the EC2 dashboard by typing "EC2" in the search bar and selecting "EC2". You will be presented with the EC2 dashboard. + +![Screenshot of EC2 dashboard](./images/Connecting_To_Mongo/MongoServer_1_EC2_Dashboard_Screen.png) + + +
+2) Click on the "Instances" link to view all of your current EC2 instances. + +![Instances overview screen](./images/Connecting_To_Mongo/MongoServer_2_EC2_Dashboard_Select_Instances.png) + + +
+3) On this screen you will see all of your instances. There should only be two at the moment. One for MongoDB and one for Elastic Beanstalk. + +![Instances overview screen](./images/Connecting_To_Mongo/MongoServer_3_EC2_Instances.png) + + +
+4) To the right you should see the Public IP address for your MongoDB instance. Look at the instance named "CSCL_DB". Do note this Public IP address. + +![Instances overview screen with highlited public IP address](./images/Connecting_To_Mongo/MongoServer_4_EC2_Get_Public_IP.png) + + +
+5) Click on the "Instance ID" of the "CSCL_DB" instance to go to the Instance Profile screen. Here you will see lots of information about your instance, including monitoring metrics. Do note the Private IP address. + +![CSCL_DB instance profile screen. Highlighted private IP address](./images/Connecting_To_Mongo/MongoServer_5_EC2_Get_Private_IP.png) + +## Granting Access to MongoDB Server From Current IP +Now that you have the IP addresses of your MongoDB server. You will need to open up a port so that you can access it from your local machine. + +
+1) First you will need to click the "Security Group" link in the left-side menu. + +![EC2 Dashboard highlighting "Security Groups" in left side menu](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_1_select_sg.png) + + + +
+2) On this screen you will see all of your current Security Groups. Locate the one with a description of "Lock MongoDB down to webserver access" and click the "Security Group ID" link. + +![Security Groups dashboard highlighting "Lock MongoDB down to webserver access" description of MongoDB SG](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_2_locate_mongo_sg.png) + + +
+3) On this screen you will see information about the Security Group associated with the MongoDB server. You should only see a single Inbound rule and an unrestricted Outbound rule. Click the "Edit Inbound Rule" button. + +![Highlighted the "Edit Inbound Rule" button on the Security Group overview screen](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_3_sg_profile_screen.png) + + + +
+4) On this screen you will be able to add and remove rules. You will only need to add a single rule to grant yourself access to the Mongo Server. + +![Highlighting "Add rule" button on Security Groups Inbound Rules screen](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_4_add_new_rule.png) + + +
+5) For the Type select "Custom TCP". For the "Port Range" enter "27017". For the source, select "My IP" which should populate the next field with your current IP address. Feel free to add a description if you wish. + +![EC2 Dashboard highlighting "Security Groups" in left side menu](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_5_select_myip.png) + + +
+6) Once your new rule has been added, click "Save Rules" + +![EC2 Dashboard highlighting "Security Groups" in left side menu](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_6_IP_added.png) + + +
+7) You will be taken to the Secrurity Group page where you can review all the Inbound rules again. + +![EC2 Dashboard highlighting "Security Groups" in left side menu](./images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_7_summary.png) + + +
+At this point, your MongoDB server will be accessible from your current IP address and the Elastic Beanstalk server. If you are using a VPN or public IP, remember to remove access as soon as you are done. + +## Constructing the MongoDB Connection String + +Now that we have the database credentials, the private and public ip address of your MongoDB server, you can create the connection strings. Use the following template to construct your connection strings, one will be used to access the database from your local machine and the other from the EB server. + +Public Connection String: +``` +mongodb://:@/admin +``` + +Private Connection String (used by your backend server): +``` +mongodb://:@/cscl?authSource=admin +``` +*Note that "cscl" in the Private connection string is the name of your database. Update the connection string accordingly if you are using a different database.* + +## Connecting to MongoDB Using MongoDB Compass and Importing Your Data +Now that you have network access to the database, you can use MongoDB Compass to connect to it and import your data. + +
+1) In MongoDB Compass click "New Connection" and enter the "Public Connection String" you created earlier in the text field then click "CONNECT". + +![MongoDB Compass connection creation screen with Public Connection String](./images/Mongo_Compass/1_Mongo_Compass_connect_to_server.png) + + +
+2) Once logged in you will be presented with the current databases on your MongoDB server. Click the "CREATE DATABASE" button at the top to create a new database. + +![MongoDB Compass Databases screen listing all current databases](./images/Mongo_Compass/2_Mongo_Compass_create_db_screen.png) + + +
+3) On this form, enter the desired database name. For these instructions "cscl" will be used for the database. "items" will be used for the collection name. Click "Create Database" once done. + +![MongoDB Compass create database form with "csc" database and "items" collection](./images/Mongo_Compass/3_Mongo_Compass_creating_database_and_collection.png) + + +
+4) Once your database is created you will be presented with the list of all databases. Select the database you created, i.e. "cscl". + +![MongoDB Compass databases list with "cscl" highligthed](./images/Mongo_Compass/4_Mongo_Compass_select_database.png) + + +
+5) Select the collection that you created under your database, i.e. "items" + +![MongoDB Compass collections list for "cscl" database with "items" highlighted](./images/Mongo_Compass/5_Mongo_Compass_select_collection.png) + + +
+6) Click the "ADD DATA" button in the upper-left, and select "Import File". + +![MongoDB](./images/Mongo_Compass/6_Mongo_Compass_import_file_button.png) + + +
+7) Select the JSON file provided to you in the ![template repository](https://github.com/Hack-Diversity/template-mini-project-db) or your own MongoDB backup. Enable the Options that you would like, and click "IMPORT". + +![MongoDB](./images/Mongo_Compass/7_Mongo_Compass_import_file_submit.png) + +--- +Congrats! You now have loaded data into your Mongo database in the cloud. Feel free to remove your IP address entry from the Security Group to remove access to your Database server. + +Next: [Connecting the Backend to MongoDB](../04_Connecting_Backend_to_Mongo) diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_1_EC2_Dashboard_Screen.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_1_EC2_Dashboard_Screen.png new file mode 100644 index 0000000..6696bb1 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_1_EC2_Dashboard_Screen.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_2_EC2_Dashboard_Select_Instances.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_2_EC2_Dashboard_Select_Instances.png new file mode 100644 index 0000000..9f29e4b Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_2_EC2_Dashboard_Select_Instances.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_3_EC2_Instances.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_3_EC2_Instances.png new file mode 100644 index 0000000..8d62353 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_3_EC2_Instances.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_4_EC2_Get_Public_IP.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_4_EC2_Get_Public_IP.png new file mode 100644 index 0000000..ff758fe Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_4_EC2_Get_Public_IP.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_5_EC2_Get_Private_IP.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_5_EC2_Get_Private_IP.png new file mode 100644 index 0000000..4d5788a Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/MongoServer_5_EC2_Get_Private_IP.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_1_select_sg.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_1_select_sg.png new file mode 100644 index 0000000..4a9cc52 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_1_select_sg.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_2_locate_mongo_sg.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_2_locate_mongo_sg.png new file mode 100644 index 0000000..1037bc4 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_2_locate_mongo_sg.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_3_sg_profile_screen.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_3_sg_profile_screen.png new file mode 100644 index 0000000..4949839 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_3_sg_profile_screen.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_4_add_new_rule.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_4_add_new_rule.png new file mode 100644 index 0000000..0b8823b Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_4_add_new_rule.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_5_select_myip.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_5_select_myip.png new file mode 100644 index 0000000..ce65b85 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_5_select_myip.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_6_IP_added.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_6_IP_added.png new file mode 100644 index 0000000..0d8ead4 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_6_IP_added.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_7_summary.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_7_summary.png new file mode 100644 index 0000000..06fc9a6 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Connecting_To_Mongo/sg_add_current_ip_for_Mongo_7_summary.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/1_Mongo_Compass_connect_to_server.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/1_Mongo_Compass_connect_to_server.png new file mode 100644 index 0000000..7028860 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/1_Mongo_Compass_connect_to_server.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/2_Mongo_Compass_create_db_screen.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/2_Mongo_Compass_create_db_screen.png new file mode 100644 index 0000000..14c7517 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/2_Mongo_Compass_create_db_screen.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/3_Mongo_Compass_creating_database_and_collection.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/3_Mongo_Compass_creating_database_and_collection.png new file mode 100644 index 0000000..f328173 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/3_Mongo_Compass_creating_database_and_collection.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/4_Mongo_Compass_select_database.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/4_Mongo_Compass_select_database.png new file mode 100644 index 0000000..cc2d8c9 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/4_Mongo_Compass_select_database.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/5_Mongo_Compass_select_collection.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/5_Mongo_Compass_select_collection.png new file mode 100644 index 0000000..0c092fd Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/5_Mongo_Compass_select_collection.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/6_Mongo_Compass_import_file_button.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/6_Mongo_Compass_import_file_button.png new file mode 100644 index 0000000..848a7cc Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/6_Mongo_Compass_import_file_button.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/7_Mongo_Compass_import_file_submit.png b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/7_Mongo_Compass_import_file_submit.png new file mode 100644 index 0000000..5a19a86 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/Mongo_Compass/7_Mongo_Compass_import_file_submit.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/ec2_instance_dashboard.png b/docs/beanstalk/03_Setting_Up_Mongo/images/ec2_instance_dashboard.png new file mode 100644 index 0000000..76e461d Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/ec2_instance_dashboard.png differ diff --git a/docs/beanstalk/03_Setting_Up_Mongo/images/ec2_main_screen.png b/docs/beanstalk/03_Setting_Up_Mongo/images/ec2_main_screen.png new file mode 100644 index 0000000..82d7257 Binary files /dev/null and b/docs/beanstalk/03_Setting_Up_Mongo/images/ec2_main_screen.png differ diff --git a/docs/beanstalk/04_Connecting_Backend_to_Mongo/README.md b/docs/beanstalk/04_Connecting_Backend_to_Mongo/README.md new file mode 100644 index 0000000..b7b3268 --- /dev/null +++ b/docs/beanstalk/04_Connecting_Backend_to_Mongo/README.md @@ -0,0 +1,20 @@ +# Connecting The Backend to MongoDB +You will now update your backend server so it will be able to connect to the MongoDB server. This will be achieved by providing a connection string using an Environment Variable. +Here is an helpful [video](https://www.youtube.com/watch?v=ADh_OFBfdEE) explaining what Environment Variables are. + +## Updating Your Backend Environment + +Retrieve the Private IP connection string you created in the previous sections. Make sure that you are in the `server` directory and use the `eb setenv` command to update your backend server's environment variables. Note that you can use `eb list` to view the available environments. + +The format is: +```shell +MONGO_CONNECTION_STRING= -e +``` + +![eb list and eb setenv commands on the terminal](./images/ebcli_setting_mongo_conn_string.png) + +--- + +Once deployed, your backend server will be able to connect to your MongoDB Database. + +Next: [Wrapping Up](../05_Wrapping_Up/README.md) diff --git a/docs/beanstalk/04_Connecting_Backend_to_Mongo/images/ebcli_setting_mongo_conn_string.png b/docs/beanstalk/04_Connecting_Backend_to_Mongo/images/ebcli_setting_mongo_conn_string.png new file mode 100644 index 0000000..8872a3c Binary files /dev/null and b/docs/beanstalk/04_Connecting_Backend_to_Mongo/images/ebcli_setting_mongo_conn_string.png differ diff --git a/docs/beanstalk/05_Wrapping_Up/README.md b/docs/beanstalk/05_Wrapping_Up/README.md new file mode 100644 index 0000000..ced2a98 --- /dev/null +++ b/docs/beanstalk/05_Wrapping_Up/README.md @@ -0,0 +1,47 @@ +# Wrapping UP +Congrats for making it this far, you're almost all set up and ready to fully deploy your app. You will now be retrieving your backend's Gateway URL which will be used in your Frontend environment to fetch, create and update data using your API. + +## Getting Your API URL +
+1) In the AWS console, search for "API Gateway" and click "API Gateway". + +![AWS console search for "API Gateway"](./images/1_API_Gateway_Menu_Selection.png) + + +
+2) You should only see a single API called "CSCL-HTTPS-Proxy". Click the link to view the configuration. + +![API Gateway dashboard listing current APIs](./images/2_Select_CSCL_HTTPS_Proxy.png) + + +
+3) On this screen, you will see your API Gateway's URL. This is the URL that will be used to access your API in Elastic Beanstalk. + +![CSCL-HTTPS-Proxy API Gateway details page listing the URL](./images/3_Get_API_Gateway_URL.png) + +## Testing +Now that you have the URL you can test it by copying it to your browser and pressing enter. You should see the response from the root (`/`) route of your API. +Also, you can test using Curl or Postman + + +Curl) + +![Terminal with curl command to API Gateway. Printing "Hello World!"](./images/Testing_1_Curl.png) + + +Postman) +![Postman window showing successful call to API Gateway. Pringin "Hello World!"](./images/Testing_2_Postman.png) + + +## What's Next + +To delete all resources created by your deployment, run the `eb terminate ` command. + +![eb terminate command on terminal](./images/eb_terminate_output.png) + +--- + +Next up is to create your frontend using AWS Amplify. Make sure to note the API Gateway URL because it will be used in the Frontend deployment. + +[Amplify Deployment Documentation](../../amplify/README.md) + diff --git a/docs/beanstalk/05_Wrapping_Up/images/1_API_Gateway_Menu_Selection.png b/docs/beanstalk/05_Wrapping_Up/images/1_API_Gateway_Menu_Selection.png new file mode 100644 index 0000000..8652589 Binary files /dev/null and b/docs/beanstalk/05_Wrapping_Up/images/1_API_Gateway_Menu_Selection.png differ diff --git a/docs/beanstalk/05_Wrapping_Up/images/2_Select_CSCL_HTTPS_Proxy.png b/docs/beanstalk/05_Wrapping_Up/images/2_Select_CSCL_HTTPS_Proxy.png new file mode 100644 index 0000000..4421492 Binary files /dev/null and b/docs/beanstalk/05_Wrapping_Up/images/2_Select_CSCL_HTTPS_Proxy.png differ diff --git a/docs/beanstalk/05_Wrapping_Up/images/3_Get_API_Gateway_URL.png b/docs/beanstalk/05_Wrapping_Up/images/3_Get_API_Gateway_URL.png new file mode 100644 index 0000000..d7e019d Binary files /dev/null and b/docs/beanstalk/05_Wrapping_Up/images/3_Get_API_Gateway_URL.png differ diff --git a/docs/beanstalk/05_Wrapping_Up/images/Testing_1_Curl.png b/docs/beanstalk/05_Wrapping_Up/images/Testing_1_Curl.png new file mode 100644 index 0000000..174f9cd Binary files /dev/null and b/docs/beanstalk/05_Wrapping_Up/images/Testing_1_Curl.png differ diff --git a/docs/beanstalk/05_Wrapping_Up/images/Testing_2_Postman.png b/docs/beanstalk/05_Wrapping_Up/images/Testing_2_Postman.png new file mode 100644 index 0000000..74cb200 Binary files /dev/null and b/docs/beanstalk/05_Wrapping_Up/images/Testing_2_Postman.png differ diff --git a/docs/beanstalk/05_Wrapping_Up/images/eb_terminate_output.png b/docs/beanstalk/05_Wrapping_Up/images/eb_terminate_output.png new file mode 100644 index 0000000..3d87fb1 Binary files /dev/null and b/docs/beanstalk/05_Wrapping_Up/images/eb_terminate_output.png differ diff --git a/docs/beanstalk/README.md b/docs/beanstalk/README.md index e69de29..9355129 100644 --- a/docs/beanstalk/README.md +++ b/docs/beanstalk/README.md @@ -0,0 +1,30 @@ +# Deploying The Client Using AWS Elastic Beanstalk +Elastic Beanstalk is an Amazon service which gives Developers the ability to quickly deploy an application to the cloud without having worry about complex configuration and the management of cloud resources. For the API Server (Backend) and database, this will involve using the EB CLI tool to trigger an automated deployment to create a single API server, and a Mongo database server, along with the necessary resources to get your environment up and running. + +You can find more information at the [Elastic Beanstalk Product Page](https://aws.amazon.com/elasticbeanstalk/). + +## Getting Started +1) Set up your AWS account. You should have received that information from a member of the Hack team. + +2) Set up your GitHub account. If you're reading this, there is a good chance that you have already done that. + +3) Fork this repository under your team or personal account. + +## Preparing For the Deployment +A deployment is pushing a version of your code to an environment (developmernt, production, etc...). This version of your application is usually available to your end users, in this case it will be publicly available on the internet. By following the steps below, your code will be packaged and automatically deployed to AWS Elastic Beanstalk. There will be some manual steps for the initial deployment, but all subsequent deployments will only update your code.. + +Please follow the instructions in the linked sections below to deploy your API to AWS: + +1) [Setup](./01_Getting_Started/README.md) + +2) [Creating Your Elastic Beanstalk Environment](./02_Creating_EB_Environment/README.md) + +3) [Setting Up Mongo](./03_Setting_Up_Mongo/README.md) + +4) [Connecting Backend to Mongo](./04_Connecting_Backend_To_Mongo/README.md) + +5) [Wrapping Up](./05_Wrapping_Up/README.md) + + +### Conclusion +Now that your app has been deployed to AWS Elastic Beanstalk, you will be able to retrieve, edit, and create data through your API over the internet. Please explore the Elastic Beanstalk dashboard for other neat features. Also, do remember to open an issue on this repository if you find any mistakes with these instructions. diff --git a/server/.ebextensions/00_options.config b/server/.ebextensions/00_options.config new file mode 100644 index 0000000..f227d0a --- /dev/null +++ b/server/.ebextensions/00_options.config @@ -0,0 +1,6 @@ +option_settings: + "aws:elasticbeanstalk:customoption": + MongoAmi: ami-0c91ccf332e243a4d + MongoServerType: t2.micro + SshKeyName: cscl + \ No newline at end of file diff --git a/server/.ebextensions/01_mongodb_ec2.config b/server/.ebextensions/01_mongodb_ec2.config new file mode 100644 index 0000000..9047003 --- /dev/null +++ b/server/.ebextensions/01_mongodb_ec2.config @@ -0,0 +1,48 @@ +Resources: + MongoSecurityGroup: + Type: "AWS::EC2::SecurityGroup" + Properties: + GroupName: "CSCL-sg" + GroupDescription: "Lock MongoDB down to webserver access only" + SecurityGroupIngress : + - IpProtocol : "tcp" + FromPort : + Fn::GetOptionSetting: + OptionName : "MongoPort" + DefaultValue: "27017" + ToPort : + Fn::GetOptionSetting: + OptionName : "MongoPort" + DefaultValue: "27017" + SourceSecurityGroupName: + Ref: "AWSEBSecurityGroup" + + MongoServer: + Type: AWS::EC2::Instance + Properties: + ImageId: + Fn::GetOptionSetting: + OptionName: "MongoAmi" + InstanceType: + Fn::GetOptionSetting: + OptionName: "MongoServerType" + DefaultValue: "t3.micro" + KeyName: + Fn::GetOptionSetting: + OptionName: "SshKeyName" + Monitoring: true + SecurityGroupIds: + - Ref: "MongoSecurityGroup" + Tags: + - "Key" : "Name" + "Value" : "CSCL_DB" + +Outputs: + MongoDBServer: + Description : "ID of EC2 Instance Running MongoDB" + Value : + Ref : "MongoServer" + MongoDBServerIP: + Description: "IP Address of EC2 Instance Running MongoDB" + Value: + Fn::GetAtt: ["MongoServer", "PrivateIp"] \ No newline at end of file diff --git a/server/.ebextensions/02_ec2_configuration.config b/server/.ebextensions/02_ec2_configuration.config new file mode 100644 index 0000000..fb5c78d --- /dev/null +++ b/server/.ebextensions/02_ec2_configuration.config @@ -0,0 +1,6 @@ +option_settings: + aws:autoscaling:launchconfiguration: + EC2KeyName: + Fn::GetOptionSetting: + OptionName: SshKeyName + DefaultValue: cscl \ No newline at end of file diff --git a/server/.ebextensions/02_environment_variables.config b/server/.ebextensions/02_environment_variables.config new file mode 100644 index 0000000..7f730dd --- /dev/null +++ b/server/.ebextensions/02_environment_variables.config @@ -0,0 +1,5 @@ +option_settings: + aws:elasticbeanstalk:application:environment: + API_PORT: 8080 + MONGO_CONNECTION_STRING: "mongodb://:@:27017/cscl?authSource=admin" + NODE_ENV: production diff --git a/server/.ebextensions/03_api_gateway_proxy.config b/server/.ebextensions/03_api_gateway_proxy.config new file mode 100644 index 0000000..4883cf1 --- /dev/null +++ b/server/.ebextensions/03_api_gateway_proxy.config @@ -0,0 +1,13 @@ +Resources: + HTTPSProxy: + Type: AWS::ApiGatewayV2::Api + Properties: + Name: CSCL-HTTPS-Proxy + Description: Proxies HTTPS requests to CSCL API which only supports HTTP + ProtocolType: HTTP + RouteKey: "ANY /{proxy+}" + Target: + Fn::Sub: + - http://${lbDomain}/{proxy} + - lbDomain: + Fn::GetAtt: ["AWSEBLoadBalancer", "DNSName"] diff --git a/server/.gitignore b/server/.gitignore index 30bc162..79c4736 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -1 +1,5 @@ -/node_modules \ No newline at end of file +/node_modules +# Elastic Beanstalk Files +.elasticbeanstalk/* +!.elasticbeanstalk/*.cfg.yml +!.elasticbeanstalk/*.global.yml diff --git a/server/db/index.js b/server/db/index.js index 0f2f284..4e057bf 100644 --- a/server/db/index.js +++ b/server/db/index.js @@ -1,7 +1,9 @@ const mongoose = require('mongoose'); +const connection_string = process.env.MONGO_CONNECTION_STRING || 'mongodb://127.0.0.1:27017/items' + mongoose - .connect('mongodb://127.0.0.1:27017/items', { useNewUrlParser: true }) + .connect(connection_string, { useNewUrlParser: true }) .catch(e => { console.error('Connection error', e.message); }); diff --git a/server/index.js b/server/index.js index f4873fd..35d1be1 100644 --- a/server/index.js +++ b/server/index.js @@ -7,7 +7,7 @@ const db = require('./db'); const itemRouter = require('./routes/item-router'); const app = express(); -const apiPort = 3000; +const apiPort = process.env.API_PORT || 3000; app.use(bodyParser.urlencoded({ extended: true })); app.use(cors()); diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000..b67fb2e --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,1465 @@ +{ + "name": "server", + "version": "12.20.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "requires": { + "@types/node": "*" + } + }, + "@types/mongodb": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz", + "integrity": "sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.14.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", + "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bson": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "denque": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fsevents": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "requires": { + "ini": "1.3.7" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "requires": { + "mime-db": "1.45.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mongodb": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz", + "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==", + "requires": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.11.14", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.14.tgz", + "integrity": "sha512-sDI5/i1C9JD3ysDbVGqQG4N6vMC3ZOY7sH/bT63/+3vJub2Nys//JegL4y4iS7v8Vgvje3sNA3ladMSsVnv6TQ==", + "requires": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.3", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.3", + "mquery": "3.2.3", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "7.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + }, + "mquery": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.3.tgz", + "integrity": "sha512-cIfbP4TyMYX+SkaQ2MntD+F2XbqaBHUYWk3j+kqdDztPWok3tgyssOZxMHMtzbV1w9DaSlvEea0Iocuro41A4g==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "requires": { + "debug": "^2.2.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + } + } +} diff --git a/server/package.json b/server/package.json index daf9e7d..84eb2ea 100644 --- a/server/package.json +++ b/server/package.json @@ -1,16 +1,17 @@ { "name": "server", - "version": "1.0.0", + "version": "12.20.1", "description": "", "main": "index.js", "engines": { - "node": ">=10.14.2", - "npm": ">=6.4.1", - "yarn": ">=1.22.5" + "node": "12.20.1", + "npm": "6.14.1", + "yarn": "1.22.10" }, "scripts": { "debugServer": "npx nodemon inspect index.js", "server": "npx nodemon index.js", + "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [],