diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4edaf9b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,342 @@
+# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,python
+# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,python
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### macOS Patch ###
+# iCloud generated files
+*.icloud
+
+### Python ###
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
+### Python Patch ###
+# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
+poetry.toml
+
+# ruff
+.ruff_cache/
+
+# LSP config files
+pyrightconfig.json
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,python
+
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/tmp
+/out-tsc
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# IDEs and editors
+.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+.sass-cache
+connect.lock
+typings
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# next.js build output
+.next
+
+# Lerna
+lerna-debug.log
+
+# System Files
+.DS_Store
+Thumbs.db
\ No newline at end of file
diff --git a/README.md b/README.md
index a62857e..4b864f8 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,77 @@
-# Checkout payment processing with Checkout Pro
+# e-Commerce Hola Mundo Animal 🐶
-### This is a simple example of how you can accept payments by integrating our [Checkout PRO](https://www.mercadopago.com/developers/en/guides/online-payments/checkout-pro/introduction)
+## Descripción
-### In this repository you will find two main folders:
+Una tienda de productos de calidad para tus mascotas!
-- `client`:
- Basic implementation of a checkout, complying with the necessary security requirements to collect sensitive user information.
+## Caracteristicas
- For html/js project: http://localhost:8080
+- Sistema de usuarios
+- Carrito de compras
+- Filtrado de productos
- For reactjs project: http://localhost:3000
+## Tecnologías utilizadas
-- `server`:
- Basic server-side implementation, which provides static client-side resources and allows the collected information to be published directly to our API to create preference and process payment request using our payment button. Hosted on http://localhost:8080.
+- Frontend: **HTML, CSS y Javascript.**
+- Backend: **Node.js, Express y MySql.**
+- Otras herramientas: **Git, Github y drawSQL.**
-
+## Instalación
-## How to run it
+Para instalar el repositorio es necesario hacerlo desde git con alguno de los siguientes comandos
-Clone or [download](https://github.com/mercadopago/checkout-payment-sample/archive/master.zip) this project, **move to the server implementation** of your choice and **follow its README** instructions.
+```bash
+# Sí cuentas con gh
+gh repo clone CodeStrong2023/EcommerceHolaMundoAnimal
+# Si solo cuentas con git
+git clone https://github.com/CodeStrong2023/EcommerceHolaMundoAnimal.git
+```
-If you are programming in a different language, we offer a client-side sample which will allow you to write your own server-side implementation using our [API Reference](https://www.mercadopago.com/developers/en/reference/preferences/_checkout_preferences/post/) as a guideline.
+### Requsitos previos
-## How it looks
+Para poder ejecutar el proyecto con normalidad es necesario tener instalada una versión Node.js igual o superior a la versión 18, además deberá contar con el motor de base de datos MySql.
-https://user-images.githubusercontent.com/30550706/195608149-bc37cd39-4afa-4c75-a3d5-3fd5f5a59bd7.mp4
+Por ultimo, se deberá contar con las siguientes tablas dentro de la base de datos:
+
+![Base de datos](/db_diagram.png)
+
+(Los comandos para generar las tablas se encuentran en el archivo `/db_tables.sql`)
+
+### Instalación de dependecias
+
+Para instalar las dependencias del proyecto se debe ejecutar el siguiente comando
+
+```bash
+npm install
+```
+
+### Variables de entorno
+
+Para que el eccomerce pueda funcionar normalmente se deberán establecer algunas variables de entorno mediante un archivo llamdado `.env`. La plantilla del archivo es la siguiente:
+
+```plaintext
+DB_USER=
+DB_PASSWORD=
+DB_NAME=holamundoanimal
+DB_HOST=
+DB_PORT=3306
+
+JWT_SECRET="clave secreta 🤫"
+```
+### Estructura del proyecto
+
+```java
+├── src
+│ ├── routes
+│ ├── public
+│ ├── pages
+│ ├── models
+│ ├── server.js
+│ ├── main.js
+│ └── db.js
+├── db_tables.sql
+├── modelo.png
+├── .env
+├── package.json
+└── README.md
+```
diff --git a/client/html-js/README.md b/client/html-js/README.md
deleted file mode 100644
index 35cc8db..0000000
--- a/client/html-js/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Checkout Pro with HTML/JS example
-
-Open http://localhost:8080 to view it in the browser.
diff --git a/client/html-js/css/index.css b/client/html-js/css/index.css
deleted file mode 100644
index 02819e7..0000000
--- a/client/html-js/css/index.css
+++ /dev/null
@@ -1,391 +0,0 @@
-body {
- background-color: #fff;
- size: 100%;
- width: auto;
- height: auto;
- font-family: "Helvetica Neue",Helvetica,sans-serif;
- color: RGBA(0,0,0,0.8);
-}
-
-main {
- margin: 4px 0 0px 0;
- background-color: #f6f6f6;
- min-height: 90%;
- padding-bottom: 100px;
-}
-
-.hidden {
- display: none
-}
-
-/* Shopping Cart Section - Start */
-.shopping-cart {
- padding-bottom: 10px;
- overflow:hidden;
- transition: max-height 5s ease-in-out;
-}
-
-.shopping-cart.hide {
- max-height: 0;
- pointer-events: none;
-}
-
-.shopping-cart .content {
- box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.075);
- background-color: white;
-}
-
-.shopping-cart .block-heading {
- padding-top: 40px;
- margin-bottom: 30px;
- text-align: center;
-}
-
-.shopping-cart .block-heading p {
- text-align: center;
- max-width: 600px;
- margin: auto;
- color: RGBA(0,0,0,0.45);
-}
-
-.shopping-cart .block-heading h1,
-.shopping-cart .block-heading h2,
-.shopping-cart .block-heading h3 {
- margin-bottom: 1.2rem;
- color: #009EE3;
-}
-
-.shopping-cart .items {
- margin: auto;
-}
-
-.shopping-cart .items .product {
- margin-bottom: 0px;
- padding-top: 20px;
- padding-bottom: 20px;
-}
-
-.shopping-cart .items .product .info {
- padding-top: 0px;
- text-align: left;
-}
-
-.shopping-cart .items .product .info .product-details .product-detail {
- padding-top: 40px;
- padding-left: 40px;
-}
-
-.shopping-cart .items .product .info .product-details h5 {
- color: #009EE3;
- font-size: 19px;
-}
-
-.shopping-cart .items .product .info .product-details .product-info {
- font-size: 15px;
- margin-top: 15px;
-}
-
-.shopping-cart .items .product .info .product-details label {
- width: 50px;
- color: #009EE3;
- font-size: 19px;
-}
-
-.shopping-cart .items .product .info .product-details input {
- width: 80px;
-}
-
-.shopping-cart .items .product .info .price {
- margin-top: 15px;
- font-weight: bold;
- font-size: 22px;
-}
-
-.shopping-cart .summary {
- border-top: 2px solid #C6E9FA;
- background-color: #f7fbff;
- height: 100%;
- padding: 30px;
-}
-
-.shopping-cart .summary h3 {
- text-align: center;
- font-size: 1.3em;
- font-weight: 400;
- padding-top: 20px;
- padding-bottom: 20px;
-}
-
-.shopping-cart .summary .summary-item:not(:last-of-type) {
- padding-bottom: 10px;
- padding-top: 10px;
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-}
-
-.shopping-cart .summary .text {
- font-size: 1em;
- font-weight: 400;
-}
-
-.shopping-cart .summary .price {
- font-size: 1em;
- float: right;
-}
-
-.shopping-cart .summary button {
- margin-top: 20px;
- background-color: #009EE3;
-}
-
-@media (min-width: 768px) {
-
- .shopping-cart .items .product .info .product-details .product-detail {
- padding-top: 40px;
- padding-left: 40px;
- }
-
- .shopping-cart .items .product .info .price {
- font-weight: 500;
- font-size: 22px;
- top: 17px;
- }
-
- .shopping-cart .items .product .info .quantity {
- text-align: center;
- }
-
- .shopping-cart .items .product .info .quantity .quantity-input {
- padding: 4px 10px;
- text-align: center;
- }
-}
-
-/* Checkout Payment Section - Start */
-.container_payment {
- display: none;
-}
-
-.payment-form {
- padding-bottom: 10px;
- margin-right: 15px;
- margin-left: 15px;
- font-family: "Helvetica Neue",Helvetica,sans-serif;
-}
-
-.payment-form.dark {
- background-color: #f6f6f6;
-}
-
-.payment-form .content {
- box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.075);
- background-color: white;
-}
-
-.payment-form .block-heading {
- padding-top: 40px;
- margin-bottom: 30px;
- text-align: center;
-}
-
-.payment-form .block-heading p {
- text-align: center;
- max-width: 420px;
- margin: auto;
- color: RGBA(0,0,0,0.45);
-}
-
-.payment-form .block-heading h1,
-.payment-form .block-heading h2,
-.payment-form .block-heading h3 {
- margin-bottom: 1.2rem;
- color: #009EE3;
-}
-
-.payment-form .form-payment {
- border-top: 2px solid #C6E9FA;
- box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.075);
- background-color: #ffffff;
- padding: 0;
- max-width: 600px;
- margin: auto;
-}
-
-.payment-form .title {
- font-size: 1em;
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
- margin-bottom: 0.8em;
- font-weight: 400;
- padding-bottom: 8px;
-}
-
-.payment-form .products {
- background-color: #f7fbff;
- padding: 25px;
-}
-
-.payment-form .products .item {
- margin-bottom: 1em;
-}
-
-.payment-form .products .item-name {
- font-weight: 500;
- font-size: 0.9em;
-}
-
-.payment-form .products .item p {
- margin-bottom: 0.2em;
-}
-
-.payment-form .products .price {
- float: right;
- font-weight: 500;
- font-size: 0.9em;
-}
-
-.payment-form .products .total {
- border-top: 1px solid rgba(0, 0, 0, 0.1);
- margin-top: 10px;
- padding-top: 19px;
- font-weight: 500;
- line-height: 1;
-}
-
-.payment-form .payment-details {
- padding: 25px 25px 15px;
- height: 100%;
-}
-
-.payment-form .payment-details label {
- font-size: 12px;
- font-weight: 600;
- margin-bottom: 15px;
- color: #8C8C8C;
- text-transform: uppercase;
-}
-
-.payment-form button {
- margin-top: 0.6em;
- padding: 12px 0;
- font-weight: 500;
- background-color: #009EE3;
- margin-bottom: 10px;
-}
-
-.payment-form .mercadopago-button {
- width: 100%;
- padding: 8px 0;
-}
-
-.payment-form a, .payment-form a:not([href]) {
- margin: 0;
- padding: 0;
- font-size: 13px;
- color: #009ee3;
- cursor:pointer;
-}
-
-.payment-form a:not([href]):hover{
- color: #3483FA;
- cursor:pointer;
-}
-
-.input-background {
- background-position: 98% 50%;
- background-repeat: no-repeat;
- background-color: #fff;
-}
-
-
-footer {
- padding: 2% 10% 6% 10%;
- margin: 0 auto;
- position: relative;
-}
-
-#horizontal_logo {
- width: 150px;
- margin: 0;
-}
-
-footer p a {
- color: #009ee3;
- text-decoration: none;
-}
-
-footer p a:hover {
- color: #3483FA;
- text-decoration: none;
-}
-
-@media (min-width: 576px) {
- .payment-form .title {
- font-size: 1.2em;
- }
-
- .payment-form .products {
- padding: 40px;
- }
-
- .payment-form .products .item-name {
- font-size: 1em;
- }
-
- .payment-form .products .price {
- font-size: 1em;
- }
-
- .payment-form .payment-details {
- padding: 20px 40px;
- }
-
- .payment-form .payment-details button {
- margin-top: 1em;
- margin-bottom: 15px;
- }
-
- .footer_logo {
- margin: 0 0 0 0;
- width: 20%;
- text-align: left;
- position: absolute;
- }
-
- .footer_text {
- margin: 0 0 0 65%;
- width: 200px;
- text-align: left;
- position: absolute
- }
-
- footer p {
- padding: 1px;
- font-size: 13px;
- color: RGBA(0,0,0,0.45);
- margin-bottom: 0;
- }
-}
-
-@media (max-width: 576px) {
- footer {
- padding: 5% 1% 15% 1%;
- height: 55px;
- }
-
- footer p {
- padding: 1px;
- font-size: 11px;
- margin-bottom: 0;
- }
- .footer_text {
- margin: 0 0 0 45%;
- width: 180px;
- position: absolute
- }
-
- .footer_logo {
- margin: 0 0 0 0;
- position: absolute;
- }
-}
-
-
diff --git a/client/html-js/img/product.png b/client/html-js/img/product.png
deleted file mode 100644
index 9e8bd4a..0000000
Binary files a/client/html-js/img/product.png and /dev/null differ
diff --git a/client/html-js/index.html b/client/html-js/index.html
deleted file mode 100644
index beb9537..0000000
--- a/client/html-js/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
- Template Code - Checkout Pro
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/client/reactjs/.gitignore b/client/reactjs/.gitignore
deleted file mode 100644
index 0784e61..0000000
--- a/client/reactjs/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-node_modules
-dist
-.cache
diff --git a/client/reactjs/README.md b/client/reactjs/README.md
deleted file mode 100644
index d225ae6..0000000
--- a/client/reactjs/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Checkout Pro with ReactJS example
-
-## Development
-
-Install dependencies and start a local web server by running:
-
-```
-npm install
-npm run start
-```
-
-Open http://localhost:3000 to view it in the browser
diff --git a/client/reactjs/img/horizontal_logo.png b/client/reactjs/img/horizontal_logo.png
deleted file mode 100644
index d7c380c..0000000
Binary files a/client/reactjs/img/horizontal_logo.png and /dev/null differ
diff --git a/client/reactjs/img/product.png b/client/reactjs/img/product.png
deleted file mode 100644
index 9e8bd4a..0000000
Binary files a/client/reactjs/img/product.png and /dev/null differ
diff --git a/client/reactjs/index.html b/client/reactjs/index.html
deleted file mode 100644
index 915d971..0000000
--- a/client/reactjs/index.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
- [React] Checkout Pro
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/client/reactjs/package-lock.json b/client/reactjs/package-lock.json
deleted file mode 100644
index dbd2618..0000000
--- a/client/reactjs/package-lock.json
+++ /dev/null
@@ -1,863 +0,0 @@
-{
- "name": "checkout-pro-react-example",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.18.6"
- }
- },
- "@babel/compat-data": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
- "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
- "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.3",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.3",
- "@babel/types": "^7.21.3",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
- }
- },
- "@babel/generator": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz",
- "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.21.3",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
- "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.0"
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
- "dev": true
- },
- "@babel/helper-function-name": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
- "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.20.7",
- "@babel/types": "^7.21.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.21.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
- "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.2",
- "@babel/types": "^7.21.2"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
- "dev": true
- },
- "@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.20.2"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
- "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
- }
- },
- "@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz",
- "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
- "dev": true
- },
- "@babel/plugin-transform-react-jsx-self": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz",
- "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/plugin-transform-react-jsx-source": {
- "version": "7.19.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz",
- "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
- }
- },
- "@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
- }
- },
- "@babel/traverse": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz",
- "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.3",
- "@babel/types": "^7.21.3",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz",
- "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@esbuild/android-arm": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz",
- "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz",
- "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz",
- "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-arm64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz",
- "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz",
- "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-arm64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz",
- "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz",
- "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz",
- "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz",
- "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ia32": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz",
- "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-loong64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz",
- "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-mips64el": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz",
- "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ppc64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz",
- "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-riscv64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz",
- "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-s390x": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz",
- "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz",
- "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/netbsd-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz",
- "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/openbsd-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz",
- "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/sunos-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz",
- "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-arm64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz",
- "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-ia32": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz",
- "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-x64": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz",
- "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==",
- "dev": true,
- "optional": true
- },
- "@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true
- },
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "@mercadopago/sdk-js": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/@mercadopago/sdk-js/-/sdk-js-0.0.2.tgz",
- "integrity": "sha512-d29DyM00f250lbXCtUm5f4UHM4ro6/0Sm3nuIJK7cFckX8orZfs2oXIBW4GwSHRSiVjPBdge6qj2yhsCCyySgw=="
- },
- "@mercadopago/sdk-react": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@mercadopago/sdk-react/-/sdk-react-0.0.3.tgz",
- "integrity": "sha512-LszT9296g8q2OnRiefNuArfApQ6e4L5NanmcgvHq7ob4cdM9orG6s3YLzkg9jNA9VXmLMHCleF3rA22lofa4bw==",
- "requires": {
- "@mercadopago/sdk-js": "^0.0.2"
- }
- },
- "@vitejs/plugin-react": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz",
- "integrity": "sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.20.7",
- "@babel/plugin-transform-react-jsx-self": "^7.18.6",
- "@babel/plugin-transform-react-jsx-source": "^7.19.6",
- "magic-string": "^0.27.0",
- "react-refresh": "^0.14.0"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
- }
- },
- "caniuse-lite": {
- "version": "1.0.30001469",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz",
- "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "classnames": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
- "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==",
- "dev": true
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "electron-to-chromium": {
- "version": "1.4.337",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz",
- "integrity": "sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw==",
- "dev": true
- },
- "esbuild": {
- "version": "0.16.17",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz",
- "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
- "dev": true,
- "requires": {
- "@esbuild/android-arm": "0.16.17",
- "@esbuild/android-arm64": "0.16.17",
- "@esbuild/android-x64": "0.16.17",
- "@esbuild/darwin-arm64": "0.16.17",
- "@esbuild/darwin-x64": "0.16.17",
- "@esbuild/freebsd-arm64": "0.16.17",
- "@esbuild/freebsd-x64": "0.16.17",
- "@esbuild/linux-arm": "0.16.17",
- "@esbuild/linux-arm64": "0.16.17",
- "@esbuild/linux-ia32": "0.16.17",
- "@esbuild/linux-loong64": "0.16.17",
- "@esbuild/linux-mips64el": "0.16.17",
- "@esbuild/linux-ppc64": "0.16.17",
- "@esbuild/linux-riscv64": "0.16.17",
- "@esbuild/linux-s390x": "0.16.17",
- "@esbuild/linux-x64": "0.16.17",
- "@esbuild/netbsd-x64": "0.16.17",
- "@esbuild/openbsd-x64": "0.16.17",
- "@esbuild/sunos-x64": "0.16.17",
- "@esbuild/win32-arm64": "0.16.17",
- "@esbuild/win32-ia32": "0.16.17",
- "@esbuild/win32-x64": "0.16.17"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "is-core-module": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "magic-string": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
- "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
- "dev": true,
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.4.13"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
- "dev": true
- },
- "node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "postcss": {
- "version": "8.4.21",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
- "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
- "dev": true,
- "requires": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
- "requires": {
- "loose-envify": "^1.1.0"
- }
- },
- "react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
- "requires": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
- }
- },
- "react-refresh": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
- "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
- "dev": true
- },
- "resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "rollup": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.1.tgz",
- "integrity": "sha512-sz2w8cBJlWQ2E17RcpvHuf4sk2BQx4tfKDnjNPikEpLEevrbIAR7CH3PGa2hpPwWbNgPaA9yh9Jzljds5bc9zg==",
- "dev": true,
- "requires": {
- "fsevents": "~2.3.2"
- }
- },
- "scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
- "requires": {
- "loose-envify": "^1.1.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true
- },
- "spinners-react": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/spinners-react/-/spinners-react-1.0.7.tgz",
- "integrity": "sha512-Xcgpc7Ybm6HOrpCVJjbH1G/NV852HaV4Zc9T1sJ2+S2hn05lGiBZS1dBOKGLc1kp8wv2sd3wtt94I/NNqDjs3Q=="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
- },
- "update-browserslist-db": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
- "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
- "dev": true,
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
- "vite": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz",
- "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==",
- "dev": true,
- "requires": {
- "esbuild": "^0.16.3",
- "fsevents": "~2.3.2",
- "postcss": "^8.4.20",
- "resolve": "^1.22.1",
- "rollup": "^3.7.0"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
-}
diff --git a/client/reactjs/package.json b/client/reactjs/package.json
deleted file mode 100644
index e01a8fe..0000000
--- a/client/reactjs/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "checkout-pro-react-example",
- "version": "1.0.0",
- "scripts": {
- "start": "vite",
- "dev": "vite",
- "build": "vite build",
- "serve": "vite preview"
- },
- "dependencies": {
- "@mercadopago/sdk-react": "0.0.3",
- "react": "18.2.0",
- "react-dom": "18.2.0",
- "spinners-react": "^1.0.7"
- },
- "devDependencies": {
- "@vitejs/plugin-react": "3.0.1",
- "classnames": "2.3.2",
- "vite": "4.0.4"
- }
-}
diff --git a/client/reactjs/src/App.jsx b/client/reactjs/src/App.jsx
deleted file mode 100644
index 21684f5..0000000
--- a/client/reactjs/src/App.jsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import React, { useState} from "react";
-import { initMercadoPago } from "@mercadopago/sdk-react";
-import Payment from "./components/Payment";
-import Checkout from "./components/Checkout";
-import Footer from "./components/Footer";
-import InternalProvider from "./components/ContextProvider";
-import { SpinnerCircular } from 'spinners-react';
-
-// REPLACE WITH YOUR PUBLIC KEY AVAILABLE IN: https://developers.mercadopago.com/panel
-initMercadoPago("");
-
-const App = () => {
- const [preferenceId, setPreferenceId] = useState(null);
- const [isLoading, setIsLoading] = useState(false);
- const [orderData, setOrderData] = useState({ quantity: "1", price: "10", amount: 10, description: "Some book" });
-
- const handleClick = () => {
- setIsLoading(true);
- fetch("http://localhost:8080/create_preference", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(orderData),
- })
- .then((response) => {
- return response.json();
- })
- .then((preference) => {
- setPreferenceId(preference.id);
- })
- .catch((error) => {
- console.error(error);
- }).finally(() => {
- setIsLoading(false);
- })
- };
-
- const renderSpinner = () => {
- if (isLoading) {
- return (
-
-
-
- )
- }
- }
-
- return (
-
-
- {renderSpinner()}
-
-
-
-
-
- );
-};
-
-export default App;
diff --git a/client/reactjs/src/components/Checkout.jsx b/client/reactjs/src/components/Checkout.jsx
deleted file mode 100644
index 44e849e..0000000
--- a/client/reactjs/src/components/Checkout.jsx
+++ /dev/null
@@ -1,102 +0,0 @@
-import React, { useEffect } from "react";
-import classnames from 'classnames'
-import { Context } from "./ContextProvider";
-
-const Checkout = ({ onClick }) => {
- const [isVisible, setIsVisible] = React.useState(true);
- const { preferenceId, isLoading: disabled, orderData, setOrderData } = React.useContext(Context);
- const shoppingCartClass = classnames('shopping-cart dark', {
- 'shopping-cart--hidden': !isVisible,
- })
-
- useEffect(() => {
- if (preferenceId) setIsVisible(false);
- }, [preferenceId])
-
-
- const updatePrice = (event) => {
- const quantity = event.target.value;
- const amount = parseInt(orderData.price) * parseInt(quantity);
- setOrderData({ ...orderData, quantity, amount });
- }
-
- return (
-
-
-
-
Shopping Cart
-
This is an example of Checkout Pro integration of Mercado Pago
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Product
-
- Description:
- Some book
-
- Author: Dale Carnegie
-
- Number of pages: 336
-
- Price: $ 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Cart
-
- Subtotal
- ${orderData.amount}
-
-
-
-
-
-
-
-
- );
-};
-
-export default Checkout;
diff --git a/client/reactjs/src/components/ContextProvider.jsx b/client/reactjs/src/components/ContextProvider.jsx
deleted file mode 100644
index c89a44a..0000000
--- a/client/reactjs/src/components/ContextProvider.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import React, { createContext } from 'react';
-
-const Context = createContext({});
-const InternalProvider = ({ children, context }) => {
- return {children};
-};
-
-export default InternalProvider;
-export { Context };
\ No newline at end of file
diff --git a/client/reactjs/src/components/Footer.jsx b/client/reactjs/src/components/Footer.jsx
deleted file mode 100644
index 077e938..0000000
--- a/client/reactjs/src/components/Footer.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-const Footer = () => {
- return (
-
- );
- };
-
-
-export default Footer;
\ No newline at end of file
diff --git a/client/reactjs/src/components/Payment.jsx b/client/reactjs/src/components/Payment.jsx
deleted file mode 100644
index de96c4a..0000000
--- a/client/reactjs/src/components/Payment.jsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import React from "react";
-import classnames from 'classnames'
-import { Wallet } from "@mercadopago/sdk-react";
-import { Context } from "./ContextProvider";
-
-const Payment = () => {
- const { preferenceId, orderData } = React.useContext(Context);
- const [isReady, setIsReady] = React.useState(false);
- const paymentClass = classnames('payment-form dark', {
- 'payment-form--hidden': !isReady,
- });
-
- const handleOnReady = () => {
- setIsReady(true);
- }
-
- const renderCheckoutButton = (preferenceId) => {
- if (!preferenceId) return null;
-
- return (
-
- )
- }
-
- return (
-
-
-
-
Checkout Payment
-
This is an example of a Mercado Pago integration
-
-
-
-
Summary
-
-
${orderData.price}
-
- Book X {orderData.quantity}
-
-
-
- Total
- ${orderData.amount}
-
-
-
-
- {renderCheckoutButton(preferenceId)}
-
-
-
-
-
- );
-};
-
-export default Payment;
diff --git a/client/reactjs/src/index.css b/client/reactjs/src/index.css
deleted file mode 100644
index a5df4e5..0000000
--- a/client/reactjs/src/index.css
+++ /dev/null
@@ -1,403 +0,0 @@
-body {
- background-color: #fff;
- width: 100%;
- height: 100%;
- font-family: "Helvetica Neue",Helvetica,sans-serif;
- color: RGBA(0,0,0,0.8);
- position: relative;
-}
-
-main {
- margin: 4px 0 0px 0;
- background-color: #f6f6f6;
- min-height: 80vh;
-}
-
-.hidden {
- display: none
-}
-
-.spinner-wrapper {
- position: absolute;
- background-color: #cacacac4;
- width: 100%;
- height: 100%;
- display: flex;
- justify-content: center;
- z-index: 5;
-}
-
-/* Shopping Cart Section - Start */
-.shopping-cart {
- padding-bottom: 10px;
- overflow:hidden;
- transition: max-height 5s ease-in-out;
-}
-
-.shopping-cart--hidden {
- display: none;
-}
-
-.shopping-cart .content {
- box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.075);
- background-color: white;
-}
-
-.shopping-cart .block-heading {
- padding-top: 40px;
- margin-bottom: 30px;
- text-align: center;
-}
-
-.shopping-cart .block-heading p {
- text-align: center;
- max-width: 600px;
- margin: auto;
- color: RGBA(0,0,0,0.45);
-}
-
-.shopping-cart .block-heading h1,
-.shopping-cart .block-heading h2,
-.shopping-cart .block-heading h3 {
- margin-bottom: 1.2rem;
- color: #009EE3;
-}
-
-.shopping-cart .items {
- margin: auto;
-}
-
-.shopping-cart .items .product {
- margin-bottom: 0px;
- padding-top: 20px;
- padding-bottom: 20px;
-}
-
-.shopping-cart .items .product .info {
- padding-top: 0px;
- text-align: left;
-}
-
-.shopping-cart .items .product .info .product-details .product-detail {
- padding-top: 40px;
- padding-left: 40px;
-}
-
-.shopping-cart .items .product .info .product-details h5 {
- color: #009EE3;
- font-size: 19px;
-}
-
-.shopping-cart .items .product .info .product-details .product-info {
- font-size: 15px;
- margin-top: 15px;
-}
-
-.shopping-cart .items .product .info .product-details label {
- width: 50px;
- color: #009EE3;
- font-size: 19px;
-}
-
-.shopping-cart .items .product .info .product-details input {
- width: 80px;
-}
-
-.shopping-cart .items .product .info .price {
- margin-top: 15px;
- font-weight: bold;
- font-size: 22px;
-}
-
-.shopping-cart .summary {
- border-top: 2px solid #C6E9FA;
- background-color: #f7fbff;
- height: 100%;
- padding: 30px;
-}
-
-.shopping-cart .summary h3 {
- text-align: center;
- font-size: 1.3em;
- font-weight: 400;
- padding-top: 20px;
- padding-bottom: 20px;
-}
-
-.shopping-cart .summary .summary-item:not(:last-of-type) {
- padding-bottom: 10px;
- padding-top: 10px;
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-}
-
-.shopping-cart .summary .text {
- font-size: 1em;
- font-weight: 400;
-}
-
-.shopping-cart .summary .price {
- font-size: 1em;
- float: right;
-}
-
-.shopping-cart .summary button {
- margin-top: 20px;
- background-color: #009EE3;
-}
-
-@media (min-width: 768px) {
-
- .shopping-cart .items .product .info .product-details .product-detail {
- padding-top: 40px;
- padding-left: 40px;
- }
-
- .shopping-cart .items .product .info .price {
- font-weight: 500;
- font-size: 22px;
- top: 17px;
- }
-
- .shopping-cart .items .product .info .quantity {
- text-align: center;
- }
-
- .shopping-cart .items .product .info .quantity .quantity-input {
- padding: 4px 10px;
- text-align: center;
- }
-}
-
-.payment-form {
- padding-bottom: 10px;
- margin-right: 15px;
- margin-left: 15px;
- font-family: "Helvetica Neue",Helvetica,sans-serif;
-}
-
-.payment-form--hidden {
- display: none;
-}
-
-
-.payment-form.dark {
- background-color: #f6f6f6;
-}
-
-.payment-form .content {
- box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.075);
- background-color: white;
-}
-
-.payment-form .block-heading {
- padding-top: 40px;
- margin-bottom: 30px;
- text-align: center;
-}
-
-.payment-form .block-heading p {
- text-align: center;
- max-width: 420px;
- margin: auto;
- color: RGBA(0,0,0,0.45);
-}
-
-.payment-form .block-heading h1,
-.payment-form .block-heading h2,
-.payment-form .block-heading h3 {
- margin-bottom: 1.2rem;
- color: #009EE3;
-}
-
-.payment-form .form-payment {
- border-top: 2px solid #C6E9FA;
- box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.075);
- background-color: #ffffff;
- padding: 0;
- max-width: 600px;
- margin: auto;
-}
-
-.payment-form .title {
- font-size: 1em;
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
- margin-bottom: 0.8em;
- font-weight: 400;
- padding-bottom: 8px;
-}
-
-.payment-form .products {
- background-color: #f7fbff;
- padding: 25px;
-}
-
-.payment-form .products .item {
- margin-bottom: 1em;
-}
-
-.payment-form .products .item-name {
- font-weight: 500;
- font-size: 0.9em;
-}
-
-.payment-form .products .item p {
- margin-bottom: 0.2em;
-}
-
-.payment-form .products .price {
- float: right;
- font-weight: 500;
- font-size: 0.9em;
-}
-
-.payment-form .products .total {
- border-top: 1px solid rgba(0, 0, 0, 0.1);
- margin-top: 10px;
- padding-top: 19px;
- font-weight: 500;
- line-height: 1;
-}
-
-.payment-form .payment-details {
- padding: 25px 25px 15px;
- height: 100%;
-}
-
-.payment-form .payment-details label {
- font-size: 12px;
- font-weight: 600;
- margin-bottom: 15px;
- color: #8C8C8C;
- text-transform: uppercase;
-}
-
-.payment-form button {
- margin-top: 0.6em;
- padding: 12px 0;
- font-weight: 500;
- background-color: #009EE3;
- margin-bottom: 10px;
-}
-
-.payment-form .mercadopago-button {
- width: 100%;
- padding: 8px 0;
-}
-
-.payment-form a, .payment-form a:not([href]) {
- margin: 0;
- padding: 0;
- font-size: 13px;
- color: #009ee3;
- cursor:pointer;
-}
-
-.payment-form a:not([href]):hover{
- color: #3483FA;
- cursor:pointer;
-}
-
-.input-background {
- background-position: 98% 50%;
- background-repeat: no-repeat;
- background-color: #fff;
-}
-
-
-footer {
- padding: 2% 10% 6% 10%;
- margin: 0 auto;
- background-color: white;
- position: fixed;
- left: 0;
- bottom: 0;
- width: 100%;
-}
-
-#horizontal_logo {
- width: 150px;
- margin: 0;
-}
-
-footer p a {
- color: #009ee3;
- text-decoration: none;
-}
-
-footer p a:hover {
- color: #3483FA;
- text-decoration: none;
-}
-
-@media (min-width: 576px) {
- .payment-form .title {
- font-size: 1.2em;
- }
-
- .payment-form .products {
- padding: 40px;
- }
-
- .payment-form .products .item-name {
- font-size: 1em;
- }
-
- .payment-form .products .price {
- font-size: 1em;
- }
-
- .payment-form .payment-details {
- padding: 20px 40px;
- }
-
- .payment-form .payment-details button {
- margin-top: 1em;
- margin-bottom: 15px;
- }
-
- .footer_logo {
- margin: 0 0 0 0;
- width: 20%;
- text-align: left;
- position: absolute;
- }
-
- .footer_text {
- margin: 0 0 0 65%;
- width: 200px;
- text-align: left;
- position: absolute
- }
-
- footer p {
- padding: 1px;
- font-size: 13px;
- color: RGBA(0,0,0,0.45);
- margin-bottom: 0;
- }
-}
-
-@media (max-width: 576px) {
- footer {
- padding: 5% 1% 15% 1%;
- height: 55px;
- }
-
- footer p {
- padding: 1px;
- font-size: 11px;
- margin-bottom: 0;
- }
- .footer_text {
- margin: 0 0 0 45%;
- width: 180px;
- position: absolute
- }
-
- .footer_logo {
- margin: 0 0 0 0;
- position: absolute;
- }
-}
-
-
diff --git a/client/reactjs/src/index.jsx b/client/reactjs/src/index.jsx
deleted file mode 100644
index 793e2b8..0000000
--- a/client/reactjs/src/index.jsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import './index.css';
-import App from './App';
-
-const root = ReactDOM.createRoot(document.getElementById('root'));
-root.render();
diff --git a/client/reactjs/vite.config.js b/client/reactjs/vite.config.js
deleted file mode 100644
index f675a8e..0000000
--- a/client/reactjs/vite.config.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react';
-
-export default defineConfig({
- plugins: [react()],
- server: {
- port: 3000
- }
-});
diff --git a/db_diagram.png b/db_diagram.png
new file mode 100644
index 0000000..ed88358
Binary files /dev/null and b/db_diagram.png differ
diff --git a/db_tables.sql b/db_tables.sql
new file mode 100644
index 0000000..b579354
--- /dev/null
+++ b/db_tables.sql
@@ -0,0 +1,816 @@
+CREATE TABLE `products`(
+ `id` CHAR(36) NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `price` DECIMAL(8, 2) NOT NULL,
+ `tags` VARCHAR(255) NOT NULL,
+ `image` VARCHAR(255) NOT NULL,
+ PRIMARY KEY(`id`)
+);
+CREATE TABLE `users`(
+ `id` CHAR(36) NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `email` VARCHAR(255) NOT NULL,
+ `password` VARCHAR(255) NOT NULL,
+ `phone` VARCHAR(255) NOT NULL,
+ `address` VARCHAR(255) NOT NULL,
+ PRIMARY KEY(`id`)
+);
+CREATE TABLE `codigos_postales` (
+ `CP` INTEGER PRIMARY KEY,
+ `price` INTEGER NOT NULL,
+ `Provincia` VARCHAR(255) NOT NULL,
+ `Localidad` VARCHAR(255) NOT NULL
+);
+CREATE TABLE mensajes_contacto (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ nombre VARCHAR(255) NOT NULL,
+ email VARCHAR(255) NOT NULL,
+ mensaje TEXT NOT NULL,
+ fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+
+-- Insertar los datos proporcionados en la tabla products
+INSERT INTO `products` (`id`, `name`, `price`, `image`, `tags`) VALUES
+(UUID(), 'Old Prince Premium (Perro cachorro)', 6400, '/img/productos/1.webp', '["perro", "cachorro"]'),
+(UUID(), 'Purina Excelent (Gato cachorro)', 5500, '/img/productos/2.webp', '["gato", "cachorro"]'),
+(UUID(), 'Purina Pro Plan (Perro adulto)', 3450, '/img/productos/3.webp', '["perro", "adulto"]'),
+(UUID(), 'Purina Excelent (Perro cachorro)', 6900, '/img/productos/4.webp', '["perro", "cachorro"]'),
+(UUID(), 'Old Prince (Gato adulto)', 2440, '/img/productos/5.webp', '["gato", "adulto"]'),
+(UUID(), 'Wishkas (Gato adulto)', 9000, '/img/productos/6.webp', '["gato", "adulto"]'),
+(UUID(), 'Agility (Perro adulto)', 9000, '/img/productos/7.webp', '["perro", "adulto"]'),
+(UUID(), 'Pro Plan (Perro adulto)', 9000, '/img/productos/8.webp', '["perro", "adulto"]'),
+(UUID(), 'Therapy (Perro adulto)', 9000, '/img/productos/9.webp', '["perro", "adulto"]');
+
+-- Insertra codigos postales
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5435, 'Mendoza', 'Campo De Batalla', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5500, 'Mendoza', 'C D Ls Potrerillos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5500, 'Mendoza', 'Cerro Aconcagua', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5500, 'Mendoza', 'Mendoza', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5500, 'Mendoza', 'P De Las Vacas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5500, 'Mendoza', 'Plaza De Mulas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5501, 'Mendoza', 'Godoy Cruz', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5502, 'Mendoza', '9 De Julio', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5502, 'Mendoza', 'Mendoza', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5503, 'Mendoza', 'San Francisco Del Monte', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5504, 'Mendoza', 'Godoy Cruz', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5504, 'Mendoza', 'Mendoza', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5505, 'Mendoza', 'Carrodilla', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5505, 'Mendoza', 'Carrodilla La Puntilla', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5505, 'Mendoza', 'Chacras De Coria', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5505, 'Mendoza', 'La Puntilla', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5507, 'Mendoza', 'Lujan De Cuyo', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5509, 'Mendoza', 'Agrelo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5509, 'Mendoza', 'Anchoris', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5509, 'Mendoza', 'El Carrizal De Abajo', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5509, 'Mendoza', 'Perdriel', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5509, 'Mendoza', 'Ugarteche', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5509, 'Mendoza', 'Vistalba', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5510, 'Mendoza', 'Pareditas', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5511, 'Mendoza', 'General Gutierrez', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5512, 'Mendoza', 'San Carlos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5513, 'Mendoza', 'Barrio Jardin Luzuriaga', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5513, 'Mendoza', 'Coquimbito', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5513, 'Mendoza', 'Luzuriaga', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5513, 'Mendoza', 'Sarmiento', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5514, 'Mendoza', 'Tres Esquinas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5515, 'Mendoza', 'Maipu', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5516, 'Mendoza', 'Luzuriaga', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5517, 'Mendoza', 'Barrancas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5517, 'Mendoza', 'Russell', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5518, 'Mendoza', 'Leandro N Alem', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5519, 'Mendoza', 'Dorrego', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5519, 'Mendoza', 'San Jose', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5519, 'Mendoza', 'San Jose De Guaymallen', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5520, 'Mendoza', 'Barrio Quimicos M.D.C.1', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5521, 'Mendoza', 'Guaymallen', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5521, 'Mendoza', 'Villa Nueva', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5521, 'Mendoza', 'Villa Nueva De Guaymallen', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5522, 'Mendoza', 'Coquimbito', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5523, 'Mendoza', 'Buena Nueva', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5523, 'Mendoza', 'Capilla Del Rosario', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5524, 'Mendoza', 'C.Los Andes', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5524, 'Mendoza', 'Colonia Cano', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5525, 'Mendoza', 'Colonia Segovia', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5525, 'Mendoza', 'Rodeo De La Cruz', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5526, 'Mendoza', 'Dorrego', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5526, 'Mendoza', 'Los Campamentos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5527, 'Mendoza', 'La Primavera', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5527, 'Mendoza', 'Los Corralitos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5528, 'Mendoza', 'Chacras De Coria', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5529, 'Mendoza', 'Colonia Bombal', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5529, 'Mendoza', 'Rodeo Del Medio', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5530, 'Mendoza', 'San Jose', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5531, 'Mendoza', 'El Paraiso', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5531, 'Mendoza', 'Fray Luis Beltran', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5532, 'Mendoza', 'Minelli', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'Algarrobo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'Bermejo', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'Colonia Italiana', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'El Chilcal', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'El Sauce', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'Jocoli Viejo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'La Pega', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'Lavalle', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5533, 'Mendoza', 'Tulumaya', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5534, 'Mendoza', 'Mayor Drummond', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5535, 'Mendoza', 'Costa De Araujo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5535, 'Mendoza', 'San Jose', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5536, 'Mendoza', 'Mundo Nuevo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5537, 'Mendoza', 'Arroyito', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5537, 'Mendoza', 'El Retamo', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5537, 'Mendoza', 'San Miguel', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5538, 'Mendoza', 'Philipps', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5538, 'Mendoza', 'Phillips', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Arenales', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'B De La Pampa Seca', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'B Pajaro Muerto', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Buitrera', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C De Los Burros', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C Del Rincon Bayo', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C Los Dientitos', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C Pan De Azucar', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C Punta De Agua', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C Puntilla Negra', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'C Riquitipanche', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Ca Del Diablo', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Casilla', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerrillos Negros', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Agua Salada', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Aguadita', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Alojamiento', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Angostura', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Aspero', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Barauca', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Bay', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Blanco', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Bravo', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Catedral', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Chiquero', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Cielo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Cienaga', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Clementino', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Color', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Cortaderas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Cuerno', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Cupula', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro De Las Leqas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro De Los Dedos', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Del Medio', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Durazno', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro El Guanaco', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Fundicion', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Grande', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Horqueta', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Invernada', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Juan Pobre', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro L Corrales', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro La Mano', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Lagaqoso', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Manantial', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Masillas', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Melocoton', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Mexico', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Montura', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Pampa Seca', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Panta', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Ponderado', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Pozo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Puntudo', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Puquios', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro San Lorenzo', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Santa Maria', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Sapo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Tigre', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Tolosa', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Tunduquera', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerro Yareta', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cerros Colorados', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Cto Del Tigre', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'E Casa De Piedra', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'E Cueva Del Toro', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'E El Carrizal', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'E San Martin', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'El Challao', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'El Infierno', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'El Puestito', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'El Zapallar', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Empalme Resguardo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Espejo', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Espejo Resguardado', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Estacion Uspallata', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Estancia Jocoli', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Estancia Uspallata', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Estancia Vvicencio', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Estancia Yalguaraz', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Garganta Del Leon', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'La Angostura', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'La Boveda', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'La Casa Del Tigre', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'La Fundicion', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'La Horqueta', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'La Jaula', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Las Canteras', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Las Heras', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Loma Colorada', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Loma De Los Burros', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Loma Sola', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Lomas Bayas', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Los Chacayes', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Los Tamarindos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Monte Bayo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Monumento Al Ejer', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P Agua De Zanjon', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P D Contrabandista', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P D L Coloradas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P D L Lagrima Viva', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P De Las Vacas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P Las Higueras', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P Los Alojamientos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P Los Pajaritos', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P Riquitipanche', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P S C De Arriba', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'P San Ignacio', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Pampa Yalguaraz', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Panqueua', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Po De La Cumbre', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Po De La Q Honda', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Po Del Rubio', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Po Valle Hermoso', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Portillo D Quemado', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Portillo De Indio', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Portillo Del Medio', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Portillo Del Norte', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Portillo Del Tigre', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Portillo La Pampa', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto Carrizalito', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto Chambon', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto El Peral', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto El Totoral', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto Escondido', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto Guamparito', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto La Gruta', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Puesto La Mojada', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Rodeo Grande', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'San Ignacio', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Santa Elena', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Schez D Bustamante', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Sierra Ansilta', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Sierra Del Tontal', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Tropero Sosa', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Tte B Matienzo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'V D Los C De Araya', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Vega De Los Burros', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Villavicencio', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5539, 'Mendoza', 'Vra De Las Vacas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5540, 'Mendoza', 'Las Heras', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5541, 'Mendoza', 'Algarrobal Abajo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5541, 'Mendoza', 'Algarrobal Arriba', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5541, 'Mendoza', 'E Plumerillo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5541, 'Mendoza', 'Paso Hondo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5541, 'Mendoza', 'S J Bautista Usno', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5542, 'Mendoza', 'El Plumerillo', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', '3 De Mayo', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Alto Grande', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Capdeville', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Colonia 3 De Mayo', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Colonia Alemana', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'El Caqito', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'El Resguardo', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Hornito Del Gringo', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Hornos De Moyano', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Jocoli', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Mathieu Norte', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5543, 'Mendoza', 'Moyano', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5544, 'Mendoza', 'Benegas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5544, 'Mendoza', 'Gobernador Benegas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5544, 'Mendoza', 'Perdriel', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Cerro Bonete', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Colon Sandalho', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'La Cortadera', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Las Cortaderas', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Minas Salagasta', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'P Agua De Toro', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'S De Las Higueras', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'San Alberto', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Termas Vvicencio', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Uspallata', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5545, 'Mendoza', 'Valle De Uspallata', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5546, 'Mendoza', 'Ugarteche', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5547, 'Mendoza', 'V Hipodromo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5547, 'Mendoza', 'Villa Hipodromo', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5548, 'Mendoza', '3 De Mayo', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5549, 'Mendoza', 'Alvarez Condarco', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5549, 'Mendoza', 'Blanco Encalada', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5549, 'Mendoza', 'Cacheuta', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5549, 'Mendoza', 'Cerro Pelado', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5549, 'Mendoza', 'El Salto', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5549, 'Mendoza', 'Guido', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5550, 'Mendoza', 'Compuertas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5551, 'Mendoza', 'Polvareda', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5552, 'Mendoza', 'Potrerillos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5553, 'Mendoza', 'La Pirata', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5553, 'Mendoza', 'Punta De Vacas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5553, 'Mendoza', 'Rio Blanco', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5554, 'Mendoza', 'Barrio Rivadavia', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5555, 'Mendoza', 'Puente Del Inca', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5556, 'Mendoza', 'Carrizal De Abajo', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5557, 'Mendoza', 'Caracoles', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5557, 'Mendoza', 'Cristo Redentor', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5557, 'Mendoza', 'La Cueva', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5557, 'Mendoza', 'Las Cuevas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5558, 'Mendoza', 'La Libertad', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5559, 'Mendoza', 'Los Arboles', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5560, 'Mendoza', 'Tunuyan', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5560, 'Mendoza', 'Zapata', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5561, 'Mendoza', 'Cordon Del Plata', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5561, 'Mendoza', 'El Peral', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5561, 'Mendoza', 'El Zampal', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5561, 'Mendoza', 'Tupungato', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5561, 'Mendoza', 'Villa San Jose', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5562, 'Mendoza', 'Villa Bastias', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5563, 'Mendoza', 'Los Arboles De Villegas', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5563, 'Mendoza', 'Villa Seca', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5564, 'Mendoza', 'Barrio Lencina', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5565, 'Mendoza', 'Campo De Los Andes', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5565, 'Mendoza', 'Colonia Las Rosas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5565, 'Mendoza', 'Vista Flores', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5566, 'Mendoza', 'La Colonia', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5567, 'Mendoza', 'La Consulta', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5568, 'Mendoza', 'El Mirador', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5569, 'Mendoza', 'Eugenio Bustos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5569, 'Mendoza', 'San Carlos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5569, 'Mendoza', 'Paso De Las Carretas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5570, 'Mendoza', 'Alto Del Salvador', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5570, 'Mendoza', 'Liber Gral S M', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5570, 'Mendoza', 'Libertador Gral San Martin', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5570, 'Mendoza', 'San Martin', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5571, 'Mendoza', 'Los Olmos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5571, 'Mendoza', 'Monte Caseros', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5572, 'Mendoza', 'La Colonia', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5572, 'Mendoza', 'Charras', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5573, 'Mendoza', 'Ciudad De Junin', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5573, 'Mendoza', 'Junin', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5574, 'Mendoza', 'La Central Rivadavia', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5575, 'Mendoza', 'Andrade', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5575, 'Mendoza', 'Los Arboles', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5576, 'Mendoza', 'Santa Maria De Oro', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5577, 'Mendoza', 'El Alto', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5577, 'Mendoza', 'La Ventana', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5577, 'Mendoza', 'Rivadavia', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5577, 'Mendoza', 'Vizcacheras', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5578, 'Mendoza', 'Barrio San Eduardo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5579, 'Mendoza', 'Campamentos', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5579, 'Mendoza', 'La Central', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5579, 'Mendoza', 'Mundo Nuevo', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5579, 'Mendoza', 'Phillips', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5580, 'Mendoza', 'El Central', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5581, 'Mendoza', 'Russell', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5582, 'Mendoza', 'Ingeniero Giagnoni', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5582, 'Mendoza', 'Ricardo Lavalle', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5583, 'Mendoza', 'El Divisadero', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5584, 'Mendoza', 'Palmira', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5585, 'Mendoza', 'Barriales', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5585, 'Mendoza', 'Medrano', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5586, 'Mendoza', 'Cruz De Piedra', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5587, 'Mendoza', 'Barcala', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5587, 'Mendoza', 'Isla Chica', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5587, 'Mendoza', 'Isla Grande', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5587, 'Mendoza', 'San Roque', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5587, 'Mendoza', 'Valle Hermoso', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5588, 'Mendoza', 'Villa Seca', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5589, 'Mendoza', 'Chapanay', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5589, 'Mendoza', 'Espinillo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'A Viuda De Perez', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Adrian Maturano', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Alejandro Perez', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Alfredo Lucero', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Alto De Los Perros', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Alto De Los Sapos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Alvarez', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ana De Donaire', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Andres Perez', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Antonio Sosa', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'B Elena', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Bajada Del Perro', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Becerra', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Blas Panelo', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Boyeros', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'C Gonzales Videla', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Cadetes De Chile', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Campo El Toro', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Chacras De Lima', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Chamuscao', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Chaqaral Redondo', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Cirilo Mahona', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Clarentino Roldan', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Colonia El Regadio', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Corral De Cuero', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Corral Del Molle', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Cruz Del Yugo', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Cruz Ledesma', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Dalmiro Zapata', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Daniel Lucero', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Daniel Morgan', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Delgadillo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Dionisio Ordoqez', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Dionisio Ortubia', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Domingo Gimenez', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Domingo Lara', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Domingo Oga', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Domingo Real', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Donato Ojeda', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Doroteo Ordoqez', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Dulce', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'E La Salcedina', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'E La Vizcachera', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'E Las Vizcacheras', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'E Rosales', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'E Viuda De Gomez', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Caranchito', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Cavado Chico', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Cercado', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Chalet', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Consuelo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Gonzano', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Guerrino', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Jilguero', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Lechucito', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Perino', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Regadio', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Vaquero', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Zampal', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'El Zapatino', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Eloy Funes', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Emilio Nieta', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Epifanio Fernandez', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ernesto Alcaraz', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Estanislao Ordoqez', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Evaristo Acevedo', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Evaristo Salas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Fabriciano Rojas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Felipe Garro', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Fermin Perez', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Florencio Garro', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Florencio Molina', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Florencio Ordoqez', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Francisco Molina', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Francisco Rojas', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Fructuoso Diaz', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'German Maturano', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Gertrudis De Ojeda', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Gilberto Perez', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Gregorio Zapata', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Guillermo Donaire', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'H De Los Tordillos', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'H Garzala', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Hermenegildo Diaz', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Honorio Zapata', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Huaicos De Rufino', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ignacio Villegas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Irineo Zapata', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Isla Retamito', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'J Ortubia', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Jose Diaz', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Jose Fernandez', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Jose Lucero', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Jose R Molina', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Jose Suarez', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Juan B Dufau', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Juan H Ortiz', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Juan Millan', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Juan Zapata', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Julio Comeglio', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Junta De Los Rios', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Km 935 Dvio Fcgsm', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Caqada', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Cautiva', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Chapina', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Cola', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Cortadera', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Esquina', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Estancia', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Fortuna', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Isla', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Leona', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'La Paz', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ladislao', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ladislao Campos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Las Cruces', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Las Rosas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Las Viscacheras', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Las Vistas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Las Vizcachas', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Lino Perez', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Lisandro Escudero', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Algarrobos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Altamiques', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Colorados', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Horconcitos', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Ramblones', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Roseti', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Tamarindos', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Verdes', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Los Villegas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Lucas Donaire', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Luis Marquez', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'M Escudero', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'M Quiroga', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'M Viuda De Donaire', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Maquinista Levet', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Maravilla', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Maria Garcia', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Mario Olguin', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Matias Garro', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Mauricio Calderon', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Medardo Miranda', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Mosmota', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Natalia Donaire', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Necto Sosa', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Nestor Aguilera', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Nicolas Ordoqez', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Onotre Puebla', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'P De Las Carretas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'P De Las Tropas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'P Del Chaqacal', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Pascual Sosa', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Paso De Las Canoas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Paulino Matura', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Pedro Castelu', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Pedro Pablo Perez', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Pquita Emb Cgsm', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puente Viejo', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puerta De La Isla', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto De Garro', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto De Olguin', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto De Orozco', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto De Petra', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto De Sosa', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto El Retamito', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto Nueras', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puesto Zampal', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Puntos De Agua', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'R Bebedera', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'R De La Pampa', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ramblon Grande', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ramon Donaire', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Ramon Gimenez', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Regino Ojeda', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Retamo', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Retamo Partido', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Rosario Gatica', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Rufino Gomez', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'S Cortis', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'San Antonio', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'San Pedro', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Santiago Romero', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Saturnino Romero', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Serviliano Ojeda', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Sixto Ledesma', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Teodoro Garro', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Teodoro Villaruel', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Teofila Acevedo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Teofilo Ruben', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Teofilo Zapata', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Tila', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Tilio Alcaraz', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Tomas Mercado', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Travesia', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Trino Rosaleso', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Vicente Muqoz', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Vicente Peletay', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Villa Antigua', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Villa La Paz', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Villa Vieja', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Viuda De Orozco', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5590, 'Mendoza', 'Zanon Canal', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'Alpatacal', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'Circunvalacion', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'El Gigantillo', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'La Favorita', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'La Jacintita', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'La Porteqa', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'La Primavera', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'Las Totoritas', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5591, 'Mendoza', 'Sopanta', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5592, 'Mendoza', 'La Dormida', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5593, 'Mendoza', 'Lunlunta', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5594, 'Mendoza', 'Gobernador Civit', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5594, 'Mendoza', 'Las Catitas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5594, 'Mendoza', 'Comandante Salas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5595, 'Mendoza', 'El Colorado', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5595, 'Mendoza', 'Ñacuñan', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5596, 'Mendoza', 'La Costa', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5596, 'Mendoza', 'Santa Rosa', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5597, 'Mendoza', '12 De Octubre', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5598, 'Mendoza', 'Baqado Verde', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5598, 'Mendoza', 'Bañado Verde', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5598, 'Mendoza', 'Desaguadero', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5598, 'Mendoza', 'P Emb Fcgsm', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5598, 'Mendoza', 'Pampita Embarcadero Fcgsm', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5598, 'Mendoza', 'Tapon', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5600, 'Mendoza', 'San Rafael', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5601, 'Mendoza', 'Capitan Montoya', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5601, 'Mendoza', 'El Toledano', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5601, 'Mendoza', 'Resolana', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5602, 'Mendoza', 'San Rafael', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Cañada Seca', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Colonia Elena', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Colonia Rusa', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Ingeniero Ballofet', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'La Llave', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Pedro Vargas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Rincon Del Atuel', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5603, 'Mendoza', 'Salto De Las Rosas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5605, 'Mendoza', 'Nihuil', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5605, 'Mendoza', 'Santa Teresa', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5606, 'Mendoza', 'General Ortega', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5607, 'Mendoza', 'El Algarrobal', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5607, 'Mendoza', 'Colonia Española', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5607, 'Mendoza', 'Cuadro Nacional', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5608, 'Mendoza', 'Llave Nueva', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5608, 'Mendoza', 'Llave Vieja', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5609, 'Mendoza', 'Aristides Villanueva', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5609, 'Mendoza', 'Gaspar Campos', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5609, 'Mendoza', 'Goico', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5609, 'Mendoza', 'Guadales', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5609, 'Mendoza', 'Monte Coman', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5610, 'Mendoza', 'Cerro Nevado', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'Bardas Blancas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'Coihueco', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'El Alambrado', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'El Manzano', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'El Sosneado', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'Ex Fortin Malargue', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'La Valenciana', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'Los Molles', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5611, 'Mendoza', 'Ranquil Norte', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5612, 'Mendoza', 'Las Flores', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5612, 'Mendoza', 'Valle De Las Leñas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Agua Botada', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Buta Billon', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'El Chacay', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'El Vatro', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'El Zampal', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'La Junta', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Las Vegas', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Lonco Vacas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Las Loicas', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Malargue', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5613, 'Mendoza', 'Mechanquil', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5614, 'Mendoza', 'Los Cavaos', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5615, 'Mendoza', '25 De Mayo', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5617, 'Mendoza', 'Pedro Vargas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5618, 'Mendoza', 'Pueblo Echevarrieta', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5619, 'Mendoza', 'Rama Caida', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'Los Tamarindos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'El Juncalito', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'El Nevado', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'General Alvear', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'Kilometro 56', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'Kilometro 882', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'La Pomona', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5620, 'Mendoza', 'Villa Comparto', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Agua De Torre', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Agua Escondida', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Caqadon De Bonilla', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Cerro Del Chacay', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Cerro Nevado', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Cerro Yalguaras', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Cochico', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'El Desvio', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'El Ventarron', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Estancia Chacaico', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'La California', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Los Tordillos', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'P La Caldenada', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Posta De Hierro', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Puesto Lunina', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'San Pedro De Atuel', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5621, 'Mendoza', 'Tambito', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5622, 'Mendoza', 'Villa Atuel', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5623, 'Mendoza', 'Jaime Prats', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5623, 'Mendoza', 'Soitue', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5624, 'Mendoza', 'Real Del Padre', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5625, 'Mendoza', 'Villa Veinticinco De Mayo', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5626, 'Mendoza', 'Coronel Dorrego', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5627, 'Mendoza', 'Punta Del Agua', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5628, 'Mendoza', 'Rodolfo Iselin', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5629, 'Mendoza', 'El Tropezon', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5630, 'Mendoza', 'Ingeniero Balloffet', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5631, 'Mendoza', 'Goudge', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'C Alvear Oeste', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'Colonia Alvear', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'Colonia Alvear Oeste', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'Colonia Bouquet', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'Compuertas Negras', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'El Retiro', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5632, 'Mendoza', 'Las Compuertas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5633, 'Mendoza', 'Medrano', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5633, 'Mendoza', 'Ochenta Y Cuatro', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Bowen', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'El Banderon', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'El Buen Pastor', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Estancia La Varita', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Kilometro 884', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'La Montilla', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Los Angeles', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Los Huarpes', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Poste De Fierro', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5634, 'Mendoza', 'Vuelta Del Zanjon', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5635, 'Mendoza', 'Las Malvinas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Canalejas', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'El Aguila', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'El Arbolito', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Favelli', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'La Mora', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Medanos Colorado', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Mojon Ocho', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Nueva Constitucion', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'P De La Corona', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'P De Los Gauchos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'P Del Buen Pastor', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'P Vuelta Dl Zanjon', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Pto Los Amarillos', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Puesto La Seqa', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5636, 'Mendoza', 'Toscal', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Costa Del Diamante', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'El Plumerito', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'La Caqada', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'La Lechuga', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Plumerito', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Treinta De Octubre', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Tres Porteñas', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Usiyal', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Corral De Lorca', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5637, 'Mendoza', 'Ovejeria', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5638, 'Mendoza', 'Jesus Nazareno', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5640, 'Mendoza', 'Santa Teresa', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5641, 'Mendoza', 'Primavera', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5642, 'Mendoza', 'Malena', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5643, 'Mendoza', 'M De Los Gauchos', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5644, 'Mendoza', 'El Ceibo', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5645, 'Mendoza', 'Reduccion', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5646, 'Mendoza', 'Colonia Segovia', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5647, 'Mendoza', 'La Escandinava', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5648, 'Mendoza', 'Los Compartos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5649, 'Mendoza', 'Colonia Santa Teresa', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5650, 'Mendoza', 'San Roque', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5651, 'Mendoza', 'Pedregal', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5652, 'Mendoza', 'Chilecito', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5653, 'Mendoza', 'Colonia Lambare', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5654, 'Mendoza', 'El Alto Salvador', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5655, 'Mendoza', 'Santa Blanca', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5656, 'Mendoza', 'Los Alamos', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5657, 'Mendoza', 'Espino', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5658, 'Mendoza', 'Cartellone', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5659, 'Mendoza', 'Las Colonias', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5661, 'Mendoza', 'Cordon De Plata', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5662, 'Mendoza', 'Colonia Las Rosas', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5663, 'Mendoza', 'Los Sauces', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5664, 'Mendoza', 'Lavalle V Tulumaya', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5664, 'Mendoza', 'Lavalle Villa Tulumaya', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5665, 'Mendoza', 'Vista Flores', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5666, 'Mendoza', 'El Borbollon', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5667, 'Mendoza', 'San Jose De Tupungato', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5668, 'Mendoza', 'Los Barriales', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5669, 'Mendoza', 'Rodriguez Peña', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5670, 'Mendoza', 'Buen Orden', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5671, 'Mendoza', 'Monte Caseros', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5672, 'Mendoza', 'Isla Grande', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5673, 'Mendoza', 'Villa Santa Isabel', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5674, 'Mendoza', 'Quinto Cuartel', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5675, 'Mendoza', 'El Medanito', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5676, 'Mendoza', 'Medano De Oro', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5677, 'Mendoza', 'Paraje Bebida', 2000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5678, 'Mendoza', 'Colonia Richet', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5679, 'Mendoza', 'La Legua', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5680, 'Mendoza', 'Las Lagunas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5681, 'Mendoza', 'Astica', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5682, 'Mendoza', 'San Juan Bautista Usno', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5683, 'Mendoza', 'Ingeniero Gustavo Andre', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5684, 'Mendoza', 'Iglesia', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5685, 'Mendoza', 'La Isla', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5686, 'Mendoza', 'Tudcum', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5700, 'Mendoza', 'Alto Blanco', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5700, 'Mendoza', 'Pozo Escondido', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5700, 'Mendoza', 'Santa Teresa', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5700, 'Mendoza', 'Santo Domingo', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5742, 'Mendoza', 'El Borbollon', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5772, 'Mendoza', 'Potrerillos', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5836, 'Mendoza', 'Los Sauces', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5852, 'Mendoza', 'Colonia Las Rosas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5860, 'Mendoza', 'Pareditas', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5863, 'Mendoza', 'San Carlos', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5866, 'Mendoza', 'Tres Esquinas', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5876, 'Mendoza', 'Chilecito', 2500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5906, 'Mendoza', 'Buen Orden', 5000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5914, 'Mendoza', 'La Colonia', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5922, 'Mendoza', 'Los Arboles', 1000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5928, 'Mendoza', 'Los Campamentos', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5932, 'Mendoza', 'Philipps', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5939, 'Mendoza', 'La Libertad', 4000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5948, 'Mendoza', 'Mundo Nuevo', 3000);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5983, 'Mendoza', 'Rodriguez Peña', 1500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5993, 'Mendoza', 'Los Barriales', 3500);
+INSERT INTO `codigos_postales` (`CP`, `Provincia`, `Localidad`, `price`) VALUES (5995, 'Mendoza', 'San Roque', 3000);
\ No newline at end of file
diff --git a/modelo.png b/modelo.png
new file mode 100644
index 0000000..e767e3d
Binary files /dev/null and b/modelo.png differ
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..737a5dc
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2052 @@
+{
+ "name": "hola-mundo-animal",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "hola-mundo-animal",
+ "version": "1.0.0",
+ "dependencies": {
+ "bcrypt": "^5.1.1",
+ "cors": "^2.8.5",
+ "dotenv": "^16.4.5",
+ "express": "^4.20.0",
+ "express-validator": "^7.2.0",
+ "jsonwebtoken": "^9.0.2",
+ "mercadopago": "^2.0.15",
+ "mysql2": "3.11.3",
+ "uuid": "^10.0.0"
+ },
+ "devDependencies": {
+ "@types/bcrypt": "^5.0.2",
+ "@types/express": "^5.0.0",
+ "@types/jsonwebtoken": "^9.0.7",
+ "@types/uuid": "^10.0.0",
+ "nodemon": "^3.1.4"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/@types/bcrypt": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz",
+ "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/body-parser": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+ "dev": true,
+ "dependencies": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/express": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz",
+ "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^5.0.0",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "node_modules/@types/express-serve-static-core": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+ "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@types/http-errors": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+ "dev": true
+ },
+ "node_modules/@types/jsonwebtoken": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz",
+ "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "22.7.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz",
+ "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~6.19.2"
+ }
+ },
+ "node_modules/@types/qs": {
+ "version": "6.9.16",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz",
+ "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==",
+ "dev": true
+ },
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+ "dev": true
+ },
+ "node_modules/@types/send": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+ "dev": true,
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/serve-static": {
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+ "dev": true,
+ "dependencies": {
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@types/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
+ "dev": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agent-base/node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agent-base/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "deprecated": "This package is no longer supported.",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/aws-ssl-profiles": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
+ "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==",
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/bcrypt": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz",
+ "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.11",
+ "node-addon-api": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+ },
+ "node_modules/denque": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/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=="
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz",
+ "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.6.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.10",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express-validator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-7.2.0.tgz",
+ "integrity": "sha512-I2ByKD8panjtr8Y05l21Wph9xk7kk64UMyvJCl/fFM/3CTJq8isXYPLeKW/aZBCdb/LYNv63PwhY8khw8VWocA==",
+ "dependencies": {
+ "lodash": "^4.17.21",
+ "validator": "~13.12.0"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "deprecated": "This package is no longer supported.",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "dependencies": {
+ "is-property": "^1.0.2"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/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==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/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==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
+ "node_modules/long": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ },
+ "node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/lru.min": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz",
+ "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==",
+ "engines": {
+ "bun": ">=1.0.0",
+ "deno": ">=1.30.0",
+ "node": ">=8.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wellwelwel"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mercadopago": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/mercadopago/-/mercadopago-2.0.15.tgz",
+ "integrity": "sha512-sIV/Kow8i2raNrWT0CDjOLiEg92FiqgX55psWj4hEXcqmG3R9n5ST/yALN6awdgG0OzA/fq16YH0qYG/8y++Zg==",
+ "dependencies": {
+ "node-fetch": "^2.6.12",
+ "uuid": "^9.0.0"
+ }
+ },
+ "node_modules/mercadopago/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/mysql2": {
+ "version": "3.11.3",
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.3.tgz",
+ "integrity": "sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==",
+ "dependencies": {
+ "aws-ssl-profiles": "^1.1.1",
+ "denque": "^2.1.0",
+ "generate-function": "^2.3.1",
+ "iconv-lite": "^0.6.3",
+ "long": "^5.2.1",
+ "lru.min": "^1.0.0",
+ "named-placeholders": "^1.1.3",
+ "seq-queue": "^0.0.5",
+ "sqlstring": "^2.3.2"
+ },
+ "engines": {
+ "node": ">= 8.0"
+ }
+ },
+ "node_modules/mysql2/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/named-placeholders": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
+ "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
+ "dependencies": {
+ "lru-cache": "^7.14.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
+ "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz",
+ "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^4",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^7.5.3",
+ "simple-update-notifier": "^2.0.0",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "deprecated": "This package is no longer supported.",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/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==",
+ "dev": true
+ },
+ "node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/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==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/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==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/seq-queue": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz",
+ "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-static/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/serve-static/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/serve-static/node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/simple-update-notifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/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==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/touch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
+ "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
+ "dev": true,
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/validator": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
+ "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..9d86518
--- /dev/null
+++ b/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "hola-mundo-animal",
+ "version": "1.0.0",
+ "description": "Un ecommerce sencillo",
+ "main": "main.js",
+ "type": "module",
+ "scripts": {
+ "dev": "nodemon ./src/main.js",
+ "start": "node ./src/main.js"
+ },
+ "dependencies": {
+ "bcrypt": "^5.1.1",
+ "cors": "^2.8.5",
+ "dotenv": "^16.4.5",
+ "express": "^4.20.0",
+ "express-validator": "^7.2.0",
+ "jsonwebtoken": "^9.0.2",
+ "mercadopago": "^2.0.15",
+ "mysql2": "3.11.3",
+ "uuid": "^10.0.0"
+ },
+ "devDependencies": {
+ "@types/bcrypt": "^5.0.2",
+ "@types/express": "^5.0.0",
+ "@types/jsonwebtoken": "^9.0.7",
+ "@types/uuid": "^10.0.0",
+ "nodemon": "^3.1.4"
+ }
+}
diff --git a/server/node/.gitignore b/server/node/.gitignore
deleted file mode 100644
index c2658d7..0000000
--- a/server/node/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules/
diff --git a/server/node/README.md b/server/node/README.md
deleted file mode 100644
index 28c2348..0000000
--- a/server/node/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Checkout payment processing with Checkout Pro
-
-## Using a NodeJS server with Express
-
-### Requirements
-- Node v10 or higher
-- Read our [testing instructions](https://www.mercadopago.com/developers/en/guides/online-payments/checkout-pro/test-integration)
-- Setup your credentials and variables:
- - `PUBLIC_KEY`and `YOUR_LOCALE` on client-side and locale `index.js`
- - Private `ACCESS_TOKEN` on server-side `server.js`
-
-### How to run it
-- npm install
-- npm start
-- Navigate to http://localhost:8080 on your browser
diff --git a/server/node/package-lock.json b/server/node/package-lock.json
deleted file mode 100644
index 829fefb..0000000
--- a/server/node/package-lock.json
+++ /dev/null
@@ -1,1790 +0,0 @@
-{
- "name": "mp-card-payment-nodejs",
- "version": "1.0.0",
- "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==",
- "dev": true
- },
- "@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==",
- "dev": true,
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "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"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "dev": true,
- "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==",
- "dev": true,
- "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==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "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="
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "bluebird": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
- },
- "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": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "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==",
- "dev": true
- }
- }
- },
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "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==",
- "dev": true
- },
- "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==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.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==",
- "dev": true
- },
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "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==",
- "dev": true,
- "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==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dev": true,
- "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==",
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "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=",
- "dev": true,
- "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==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "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==",
- "dev": true,
- "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=",
- "dev": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "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==",
- "dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true
- },
- "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"
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "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==",
- "dev": true,
- "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"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "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.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
- "dev": true,
- "requires": {
- "ini": "2.0.0"
- }
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dev": true,
- "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.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "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"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.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=",
- "dev": true
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
- "dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "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=",
- "dev": true
- },
- "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=",
- "dev": true
- },
- "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==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "dev": true,
- "requires": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- }
- },
- "is-npm": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
- "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "package-json": "^6.3.0"
- }
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true
- }
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "mercadopago": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/mercadopago/-/mercadopago-1.5.8.tgz",
- "integrity": "sha512-N3mEL4CvTae4dJ23vDRzfvPQR0tkGdR3TMa8jqqTbNhdo33NGs3LCCw1O4z6flsI6yzE4UEHy+JtEjJp9qAZyg==",
- "requires": {
- "ajv": "^6.12.3",
- "bluebird": "3.4.7",
- "moment": "^2.24.0",
- "request": "^2.88.0",
- "request-etag": "2.0.3",
- "uuid": "3.0.1"
- }
- },
- "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.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
- },
- "mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
- "requires": {
- "mime-db": "1.44.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==",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "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==",
- "dev": true
- },
- "moment": {
- "version": "2.29.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
- "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
- },
- "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.13",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.13.tgz",
- "integrity": "sha512-UMXMpsZsv1UXUttCn6gv8eQPhn6DR4BW+txnL3IN5IHqrCwcrT/yWHfL35UsClGXknTH79r5xbu+6J1zNHuSyA==",
- "dev": true,
- "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": "^5.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "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==",
- "dev": true
- }
- }
- },
- "nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dev": true,
- "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==",
- "dev": true
- },
- "normalize-url": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "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=",
- "dev": true,
- "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==",
- "dev": true
- },
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dev": true,
- "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==",
- "dev": true
- }
- }
- },
- "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="
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true
- },
- "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"
- }
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
- },
- "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==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- }
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- }
- }
- },
- "request-etag": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/request-etag/-/request-etag-2.0.3.tgz",
- "integrity": "sha1-E8kjdhfWxYnrcYX29FC4MTBovBc=",
- "requires": {
- "lodash.assign": "^4.0.0",
- "lodash.clonedeep": "^4.0.1",
- "lru-cache": "^4.0.0",
- "request": "^2.67.0"
- }
- },
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dev": true,
- "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=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true
- }
- }
- },
- "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=="
- },
- "signal-exit": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
- "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "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=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "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==",
- "dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "nopt": "~1.0.10"
- }
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "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": "5.1.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
- "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
- "dev": true,
- "requires": {
- "boxen": "^5.0.0",
- "chalk": "^4.1.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.4.0",
- "is-npm": "^5.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.1.0",
- "pupa": "^2.1.1",
- "semver": "^7.3.4",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.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=",
- "dev": true,
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "uuid": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
- "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "requires": {
- "string-width": "^4.0.0"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- }
- }
-}
diff --git a/server/node/package.json b/server/node/package.json
deleted file mode 100644
index 18c822a..0000000
--- a/server/node/package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "mp-card-payment-nodejs",
- "version": "1.0.0",
- "description": "",
- "main": "server.js",
- "scripts": {
- "start": "nodemon server.js",
- "debug": "nodemon --inspect=5005 server.js"
- },
- "dependencies": {
- "cors": "^2.8.5",
- "express": "4.17.1",
- "mercadopago": "^1.5.8"
- },
- "devDependencies": {
- "nodemon": "^2.0.13"
- }
-}
diff --git a/server/php/.gitignore b/server/php/.gitignore
deleted file mode 100644
index e716dc6..0000000
--- a/server/php/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-composer.phar
-/vendor/
-.vendor/
\ No newline at end of file
diff --git a/server/php/README.md b/server/php/README.md
deleted file mode 100644
index 1d3e38c..0000000
--- a/server/php/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Checkout payment processing with Checkout Pro
-
-## Using a PHP server with simple routing
-
-### Requirements
-- PHP 7.1 or higher
-- [Composer](https://getcomposer.org/download) dependency manager
-- Read our [testing instructions](https://www.mercadopago.com/developers/en/guides/online-payments/checkout-pro/test-integration)
-- Setup your credentials:
- - Private Access Token on server-side [`server.php`](https://github.com/mercadopago/checkout-payment/server/php/server.php#L6)
-
-### How to run it
-- php composer.phar install
-- php -S localhost:8080 server.php
-- Navigate to http://localhost:8080 on your browser
diff --git a/server/php/composer.json b/server/php/composer.json
deleted file mode 100644
index cb10643..0000000
--- a/server/php/composer.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "require": {
- "mercadopago/dx-php": "^2.2.1"
- }
-}
diff --git a/server/php/composer.lock b/server/php/composer.lock
deleted file mode 100644
index b22933a..0000000
--- a/server/php/composer.lock
+++ /dev/null
@@ -1,840 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "91db9266bd3970511ae778b4b147ea4a",
- "packages": [
- {
- "name": "doctrine/annotations",
- "version": "1.10.3",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/annotations.git",
- "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d",
- "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d",
- "shasum": ""
- },
- "require": {
- "doctrine/lexer": "1.*",
- "ext-tokenizer": "*",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/cache": "1.*",
- "phpunit/phpunit": "^7.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.9.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "Docblock Annotations Parser",
- "homepage": "http://www.doctrine-project.org",
- "keywords": [
- "annotations",
- "docblock",
- "parser"
- ],
- "time": "2020-05-25T17:24:27+00:00"
- },
- {
- "name": "doctrine/cache",
- "version": "1.10.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/cache.git",
- "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
- "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
- "shasum": ""
- },
- "require": {
- "php": "~7.1 || ^8.0"
- },
- "conflict": {
- "doctrine/common": ">2.2,<2.4"
- },
- "require-dev": {
- "alcaeus/mongo-php-adapter": "^1.1",
- "doctrine/coding-standard": "^6.0",
- "mongodb/mongodb": "^1.1",
- "phpunit/phpunit": "^7.0",
- "predis/predis": "~1.0"
- },
- "suggest": {
- "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.9.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
- "homepage": "https://www.doctrine-project.org/projects/cache.html",
- "keywords": [
- "abstraction",
- "apcu",
- "cache",
- "caching",
- "couchdb",
- "memcached",
- "php",
- "redis",
- "xcache"
- ],
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
- "type": "tidelift"
- }
- ],
- "time": "2020-05-27T16:24:54+00:00"
- },
- {
- "name": "doctrine/collections",
- "version": "1.6.5",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/collections.git",
- "reference": "fc0206348e17e530d09463fef07ba8968406cd6d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d",
- "reference": "fc0206348e17e530d09463fef07ba8968406cd6d",
- "shasum": ""
- },
- "require": {
- "php": "^7.1.3 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpstan/phpstan-shim": "^0.9.2",
- "phpunit/phpunit": "^7.0",
- "vimeo/psalm": "^3.8.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.",
- "homepage": "https://www.doctrine-project.org/projects/collections.html",
- "keywords": [
- "array",
- "collections",
- "iterators",
- "php"
- ],
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections",
- "type": "tidelift"
- }
- ],
- "time": "2020-05-25T19:24:35+00:00"
- },
- {
- "name": "doctrine/common",
- "version": "2.13.3",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/common.git",
- "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f",
- "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f",
- "shasum": ""
- },
- "require": {
- "doctrine/annotations": "^1.0",
- "doctrine/cache": "^1.0",
- "doctrine/collections": "^1.0",
- "doctrine/event-manager": "^1.0",
- "doctrine/inflector": "^1.0",
- "doctrine/lexer": "^1.0",
- "doctrine/persistence": "^1.3.3",
- "doctrine/reflection": "^1.0",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^1.0",
- "phpstan/phpstan": "^0.11",
- "phpstan/phpstan-phpunit": "^0.11",
- "phpunit/phpunit": "^7.0",
- "squizlabs/php_codesniffer": "^3.0",
- "symfony/phpunit-bridge": "^4.0.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.11.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\": "lib/Doctrine/Common"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- },
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- }
- ],
- "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.",
- "homepage": "https://www.doctrine-project.org/projects/common.html",
- "keywords": [
- "common",
- "doctrine",
- "php"
- ],
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon",
- "type": "tidelift"
- }
- ],
- "time": "2020-06-05T16:46:05+00:00"
- },
- {
- "name": "doctrine/event-manager",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/event-manager.git",
- "reference": "629572819973f13486371cb611386eb17851e85c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c",
- "reference": "629572819973f13486371cb611386eb17851e85c",
- "shasum": ""
- },
- "require": {
- "php": "^7.1"
- },
- "conflict": {
- "doctrine/common": "<2.9@dev"
- },
- "require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpunit/phpunit": "^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\": "lib/Doctrine/Common"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- },
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- }
- ],
- "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
- "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
- "keywords": [
- "event",
- "event dispatcher",
- "event manager",
- "event system",
- "events"
- ],
- "time": "2019-11-10T09:48:07+00:00"
- },
- {
- "name": "doctrine/inflector",
- "version": "1.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/inflector.git",
- "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c",
- "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^7.0",
- "phpstan/phpstan": "^0.11",
- "phpstan/phpstan-phpunit": "^0.11",
- "phpstan/phpstan-strict-rules": "^0.11",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector",
- "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
- "homepage": "https://www.doctrine-project.org/projects/inflector.html",
- "keywords": [
- "inflection",
- "inflector",
- "lowercase",
- "manipulation",
- "php",
- "plural",
- "singular",
- "strings",
- "uppercase",
- "words"
- ],
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
- "type": "tidelift"
- }
- ],
- "time": "2020-05-29T07:19:59+00:00"
- },
- {
- "name": "doctrine/lexer",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpstan/phpstan": "^0.11.8",
- "phpunit/phpunit": "^8.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
- "keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
- ],
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
- "type": "tidelift"
- }
- ],
- "time": "2020-05-25T17:44:05+00:00"
- },
- {
- "name": "doctrine/persistence",
- "version": "1.3.7",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/persistence.git",
- "reference": "0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/persistence/zipball/0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0",
- "reference": "0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0",
- "shasum": ""
- },
- "require": {
- "doctrine/annotations": "^1.0",
- "doctrine/cache": "^1.0",
- "doctrine/collections": "^1.0",
- "doctrine/event-manager": "^1.0",
- "doctrine/reflection": "^1.2",
- "php": "^7.1"
- },
- "conflict": {
- "doctrine/common": "<2.10@dev"
- },
- "require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpstan/phpstan": "^0.11",
- "phpunit/phpunit": "^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\": "lib/Doctrine/Common",
- "Doctrine\\Persistence\\": "lib/Doctrine/Persistence"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- },
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- }
- ],
- "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
- "homepage": "https://doctrine-project.org/projects/persistence.html",
- "keywords": [
- "mapper",
- "object",
- "odm",
- "orm",
- "persistence"
- ],
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence",
- "type": "tidelift"
- }
- ],
- "time": "2020-03-21T15:13:52+00:00"
- },
- {
- "name": "doctrine/reflection",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/reflection.git",
- "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79",
- "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79",
- "shasum": ""
- },
- "require": {
- "doctrine/annotations": "^1.0",
- "ext-tokenizer": "*",
- "php": "^7.1"
- },
- "conflict": {
- "doctrine/common": "<2.9"
- },
- "require-dev": {
- "doctrine/coding-standard": "^5.0",
- "doctrine/common": "^2.10",
- "phpstan/phpstan": "^0.11.0",
- "phpstan/phpstan-phpunit": "^0.11.0",
- "phpunit/phpunit": "^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\": "lib/Doctrine/Common"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- },
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- }
- ],
- "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.",
- "homepage": "https://www.doctrine-project.org/projects/reflection.html",
- "keywords": [
- "reflection",
- "static"
- ],
- "time": "2020-03-27T11:06:43+00:00"
- },
- {
- "name": "mercadopago/dx-php",
- "version": "2.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/mercadopago/dx-php.git",
- "reference": "b17ca2d555512b6489067e3166bb4beaab206cff"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mercadopago/dx-php/zipball/b17ca2d555512b6489067e3166bb4beaab206cff",
- "reference": "b17ca2d555512b6489067e3166bb4beaab206cff",
- "shasum": ""
- },
- "require": {
- "doctrine/annotations": "^1.8",
- "doctrine/common": "^2.6",
- "php": ">=7.1.0"
- },
- "require-dev": {
- "doctrine/orm": "~2.3",
- "phpdocumentor/phpdocumentor": "^2.0",
- "phpmd/phpmd": "@stable",
- "phpunit/phpunit": "^5",
- "sebastian/phpcpd": "*",
- "squizlabs/php_codesniffer": "2.3.*",
- "symfony/yaml": "~2.5",
- "vlucas/phpdotenv": "^2.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "MercadoPago\\": [
- "src/MercadoPago/",
- "tests/",
- "src/MercadoPago/Generic/",
- "src/MercadoPago/Entities/",
- "src/MercadoPago/Entities/Shared/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "imasson",
- "homepage": "https://github.com/imasson",
- "role": "Developer"
- },
- {
- "name": "joelibaceta",
- "homepage": "https://github.com/joelibaceta",
- "role": "Developer"
- }
- ],
- "description": "Mercado Pago PHP SDK",
- "homepage": "https://github.com/mercadopago/dx-php",
- "time": "2020-09-10T20:17:15+00:00"
- }
- ],
- "packages-dev": [],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": [],
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": [],
- "platform-dev": [],
- "plugin-api-version": "1.1.0"
-}
diff --git a/server/php/server.php b/server/php/server.php
deleted file mode 100644
index 38fda19..0000000
--- a/server/php/server.php
+++ /dev/null
@@ -1,62 +0,0 @@
-title = $data->description;
- $item->quantity = $data->quantity;
- $item->unit_price = $data->price;
-
- $preference->items = array($item);
-
- $preference->back_urls = array(
- "success" => "http://localhost:8080/feedback",
- "failure" => "http://localhost:8080/feedback",
- "pending" => "http://localhost:8080/feedback"
- );
- $preference->auto_return = "approved";
-
- $preference->save();
-
- $response = array(
- 'id' => $preference->id,
- );
- echo json_encode($response);
- break;
- case '/feedback':
- $respuesta = array(
- 'Payment' => $_GET['payment_id'],
- 'Status' => $_GET['status'],
- 'MerchantOrder' => $_GET['merchant_order_id']
- );
- echo json_encode($respuesta);
- break;
- //Server static resources
- default:
- $file = __DIR__ . '/../../client' . $path;
- $extension = end(explode('.', $path));
- $content = 'text/html';
- switch($extension){
- case 'js': $content = 'application/javascript'; break;
- case 'css': $content = 'text/css'; break;
- case 'png': $content = 'image/png'; break;
- }
- header('Content-Type: '.$content);
- readfile($file);
-}
diff --git a/src/db.js b/src/db.js
new file mode 100644
index 0000000..18ed55a
--- /dev/null
+++ b/src/db.js
@@ -0,0 +1,20 @@
+import mysql from "mysql2";
+import { config } from "dotenv";
+
+config()
+
+const mysql_config = {
+ host: process.env.DB_HOST,
+ user: process.env.DB_USER,
+ password: process.env.DB_PASSWORD,
+ database: process.env.DB_NAME,
+ port: process.env.DB_PORT
+};
+
+export const pool = mysql.createPool(mysql_config).promise();
+
+process.on("exit", () => {
+ pool.destroy()
+ console.log("Se cerro la conexión a la base de datos :)")
+})
+
diff --git a/src/filtro/.gitignore b/src/filtro/.gitignore
new file mode 100644
index 0000000..4edaf9b
--- /dev/null
+++ b/src/filtro/.gitignore
@@ -0,0 +1,342 @@
+# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,python
+# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,python
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### macOS Patch ###
+# iCloud generated files
+*.icloud
+
+### Python ###
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
+### Python Patch ###
+# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
+poetry.toml
+
+# ruff
+.ruff_cache/
+
+# LSP config files
+pyrightconfig.json
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,python
+
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/tmp
+/out-tsc
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# IDEs and editors
+.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+.sass-cache
+connect.lock
+typings
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# next.js build output
+.next
+
+# Lerna
+lerna-debug.log
+
+# System Files
+.DS_Store
+Thumbs.db
\ No newline at end of file
diff --git a/src/filtro/package-lock.json b/src/filtro/package-lock.json
new file mode 100644
index 0000000..a184095
--- /dev/null
+++ b/src/filtro/package-lock.json
@@ -0,0 +1,1541 @@
+{
+ "name": "server",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "server",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "cors": "^2.8.5",
+ "express": "^4.21.1",
+ "mercadopago": "^1.5.17",
+ "nodemon": "^3.1.7"
+ }
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+ "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.9",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
+ "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+ "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.7.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.3.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.10",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/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==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw=="
+ },
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+ },
+ "node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mercadopago": {
+ "version": "1.5.17",
+ "resolved": "https://registry.npmjs.org/mercadopago/-/mercadopago-1.5.17.tgz",
+ "integrity": "sha512-ghi5JS3MzblhuqgMZC5ge0q/FcjNnJjiZDWe33K29wrVb0E+rNeTU0ta/EODnXbD8zFVu2la0Hr0OMx38/PrWA==",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "bluebird": "3.4.7",
+ "dayjs": "^1.11.7",
+ "request": "^2.88.0",
+ "request-etag": "2.0.3",
+ "uuid": "3.0.1"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz",
+ "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==",
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^4",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^7.5.3",
+ "simple-update-notifier": "^2.0.0",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "node_modules/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=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/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==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/request-etag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/request-etag/-/request-etag-2.0.3.tgz",
+ "integrity": "sha512-JC0yMkWzIKs25JgMcBL8p95RugnIo/fB0t+8XTaKNWDok5rt8/Tm7tbfQF5jCbEgxYdXF8ljK8UcFIfvUS0Q4A==",
+ "dependencies": {
+ "lodash.assign": "^4.0.0",
+ "lodash.clonedeep": "^4.0.1",
+ "lru-cache": "^4.0.0",
+ "request": "^2.67.0"
+ }
+ },
+ "node_modules/request/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/request/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/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==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
+ "dependencies": {
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.19.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/simple-update-notifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+ "dependencies": {
+ "nopt": "~1.0.10"
+ },
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+ "integrity": "sha512-tyhM7iisckwwmyHVFcjTzISz/R1ss/bRudNgHFYsgeu7j4JbhRvjE+Hbcpr9y5xh+b+HxeFjuToDT4i9kQNrtA==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ }
+ }
+}
diff --git a/src/filtro/package.json b/src/filtro/package.json
new file mode 100644
index 0000000..193e64c
--- /dev/null
+++ b/src/filtro/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "server",
+ "version": "1.0.0",
+ "description": "",
+ "main": "server.js",
+ "scripts": {
+ "start": "nodemon src/server.js",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "cors": "^2.8.5",
+ "express": "^4.21.1",
+ "mercadopago": "^1.5.17",
+ "nodemon": "^3.1.7"
+ }
+}
\ No newline at end of file
diff --git a/src/filtro/src/Readme.txt b/src/filtro/src/Readme.txt
new file mode 100644
index 0000000..b6e1c5c
--- /dev/null
+++ b/src/filtro/src/Readme.txt
@@ -0,0 +1,10 @@
+Pasos Ejecución localhost 8080
+
+Comandos Terminal
+
+server.js:
+1-npm i express cors mercadopago
+2-npm i nodemon
+
+package.json:
+1-npm start
\ No newline at end of file
diff --git a/src/filtro/src/pages/index.html b/src/filtro/src/pages/index.html
new file mode 100644
index 0000000..d3a901e
--- /dev/null
+++ b/src/filtro/src/pages/index.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+ Formulario de Contacto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
🛒
+
+
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/filtro/src/public/css/styles.css b/src/filtro/src/public/css/styles.css
new file mode 100644
index 0000000..1f02c5d
--- /dev/null
+++ b/src/filtro/src/public/css/styles.css
@@ -0,0 +1,329 @@
+/*products styles*/
+.card-products-container{
+ display: flexbox;
+ flex-wrap: wrap; /* Permite que los productos se envuelvan en la siguiente fila */
+ justify-content: space-between; /* Espacio entre los elementos */
+ flex: 0 0 23%; /* Ajusta el ancho de cada producto */
+ margin: 1%; /* Espaciado entre productos */
+}
+
+.card-products{
+ text-align: center;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ flex-wrap: wrap;
+
+}
+
+.card-products img {
+ margin-top: 40px;
+ width: 250px;
+ height: 250px;
+
+}
+
+.card-products button{
+ border: none;
+ outline: 0;
+ padding: 10px;
+ color: white;
+ background-color: #7B8C79;
+ text-align: center;
+ cursor: pointer;
+ width:100%;
+ font-size: 15px;
+ border-radius: 4px;
+}
+
+.cart-btn{
+ position: fixed;
+ top:90vh;
+ right:40px;
+ background-color: #F2A35E;
+ padding: 10px;
+ border-radius: 50%;
+ height: 24px;
+ width: 24px;
+ transition: transform 0.2s ease-in-out;
+}
+
+.cart-btn:hover{
+ cursor:pointer;
+ opacity: 0.9;
+}
+
+.cart-counter{
+ /*display:none;*/
+ position:fixed;
+ top:89vh;
+ right:27px;
+ color: #fff;
+ text-align: center;
+ background-color: #333333;
+ padding: 4px;
+ border-radius: 50%;
+ height: 17px;
+ width: 17px;
+ font-size: 15px;
+}
+
+.card-products button:hover{
+ opacity: 0.7;
+}
+
+/*modal*/
+.modal-overlay{
+ display:none;
+ /*background-color: rgb(0,0,0,0.5);*/
+ position:fixed;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ z-index: 1;
+}
+
+.modal-container{
+ display:none;
+ background-color: #ffffff;
+ /*box-shadow: 0px 3px 6px #00000029;*/
+ padding: 40px;
+ position:absolute;
+ top:50%;
+ left:50%;
+ transform: translate(-50%,-50%);
+ max-width:500px;
+ width: 100%;
+ z-index:1;
+ max-height: 88vh;
+ overflow-y: auto;
+}
+
+.modal-container::-webkit-scrollbar{
+ display:none;
+}
+
+.modal-close{
+ float:right;
+ cursor:pointer;
+}
+
+.modal-title{
+ font-size:24px;
+ font-weight: bold;
+ margin-bottom: 20px;
+ text-align: center;
+}
+
+/*modal.body*/
+.modal-body{
+ margin-bottom:20px;
+ text-align:center;
+}
+
+.product{
+ display:flex;
+ align-items:center;
+ justify-content: space-around;
+ margin-bottom:20px;
+}
+
+.product-img{
+ height: 80px;
+ margin-right:20px;
+ width:80px;
+}
+
+.product.info{
+ flex:1;
+ text-align:left;
+}
+.product-info h4{
+ margin-top: 35px;
+}
+
+.quantity{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-top:10px;
+ margin-right: 4em;
+ cursor: pointer;
+}
+
+.quantity-btn-decrese,
+.quantity-btn-increse{
+ color: #333333;
+ cursor: pointer;
+ font-size: 16px;
+ width: 28px;
+ font-weight: bold;
+}
+
+.quantity-input{
+ color: #333333;
+ font-size: 16px;
+ padding: 10 10px;
+ text-align: center;
+ width: 50px;
+ font-weight: bold;
+ cursor: pointer;
+}
+/*diseño responsivo*/
+@media (max-width: 768px) {
+ .card-products {
+ flex-direction: column;
+ align-items: center;
+ }
+}
+
+@media only screen and (max-width: 500px){
+.product-img{
+ display: none;
+}
+.modal-body{
+ margin-left:5px;
+ margin-right:5px;
+}
+}
+
+.price{
+ font-size: 20px;
+ font-weight: bold;
+ margin-top: 20px;
+}
+
+.delete-produc{
+ margin-top:20px;
+ margin-left:2em;
+ cursor:pointer;
+}
+
+.modal-footer{
+ text-align:center;
+}
+
+.total-price{
+ font-size:20px;
+ font-weight:bold;
+ margin-top:20px;
+ margin-bottom:10px;
+}
+
+.btn-primary{
+ background-color: #D9674E;
+ border-color: #D9674E;
+ color: #ffffff;
+ font-size: 14px;
+ font-weight: bold;
+ padding: 10px 16px;
+ text-transform: uppercase;
+ transition: background-color 0.3s ease;
+ cursor:pointer;
+ border-radius: 4px;
+}
+.btn-primary:hover{
+ background-color: #F2A35E;
+ border-color: #F2A35E;
+ border-radius: 4px;
+}
+#button-checkout{
+ z-index:10;
+
+}
+
+/* Añadimos un contenedor para el logotipo y el filtro */
+.logotipo-y-filtro {
+ display: flex;
+ align-items: center;
+ /*justify-content: flex-start;*/
+}
+
+/* Estilo para el logotipo */
+.logotipo {
+ margin-right: 20px;
+ padding-left: 30px;
+ padding-right: 30px;
+}
+
+/* Añadimos un estilo para el texto del filtro */
+
+.search-container {
+ display: flex;
+ align-items: center;
+ border: 2px solid #ffffff;
+ border-radius: 5px;
+ overflow: hidden;
+ width: 450px;
+
+}
+
+#filtro {
+ border: 2px solid #ffffff;
+ padding: 10px;
+ flex: 1;
+ outline: none;
+ font-size: 16px; /* Tamaño del texto ingresado */
+ color: #333; /* Color del texto ingresado */
+}
+
+#button {
+ background-color: #7B8C79; /* Color del botón */
+ border: none;
+ padding: 10px;
+ cursor: pointer;
+ transition: background-color 0.3s;
+}
+
+#button:hover {
+ background-color: #7B8C79; /* Color al pasar el mouse */
+ opacity: 0.7;
+}
+
+#lupa {
+ color: white; /* Color del ícono */
+ margin: 0; /* Eliminar margen */
+}
+/*sección body*/
+body {
+ margin: 0; /* Elimina el margen predeterminado del body */
+ padding: 0;
+}
+
+header {
+ display: flex; /* Utiliza Flexbox para centrar el contenido */
+ flex-direction: column; /* Alinea los elementos en columna */
+ align-items: relative; /* Centra horizontalmente */
+ justify-content: center; /* Centra verticalmente */
+ height: 200px; /* Altura del header */
+ background-color: #F2A35E; /* Color de fondo opcional */
+}
+.header-content {
+ text-align: center; /* Centra el texto dentro del contenedor */
+}
+
+.logo-img {
+ border-radius: 50%;
+}
+
+footer {
+ display: flex; /* Utiliza Flexbox para centrar el contenido */
+ flex-direction: column; /* Alinea los elementos en columna */
+ align-items: center; /* Centra horizontalmente */
+ justify-content: center; /* Centra verticalmente */
+ height: fit-content; /* Altura del footer */
+ background-color: #26061B; /*Color de fondo opcional */
+ position: relative; /* Posiciona el footer */
+ bottom: 0; /* Asegura que el footer esté al final de la página */
+ margin-top: 0px;
+ padding: 0;
+ width: 100%; /* Asegura que el footer ocupe todo el ancho */
+ z-index: -1; /* Asegura que el footer esté detrás de otros elementos */
+}
+.footer-content {
+ text-align: center; /* Centra el texto dentro del contenedor */
+}
+.text-footer {
+ color: #ffffff;
+}
\ No newline at end of file
diff --git a/src/filtro/src/public/img/logo2.png b/src/filtro/src/public/img/logo2.png
new file mode 100644
index 0000000..23f65f7
Binary files /dev/null and b/src/filtro/src/public/img/logo2.png differ
diff --git a/src/filtro/src/public/img/perrito_banner.png b/src/filtro/src/public/img/perrito_banner.png
new file mode 100644
index 0000000..a159446
Binary files /dev/null and b/src/filtro/src/public/img/perrito_banner.png differ
diff --git a/src/filtro/src/public/img/productos/1.webp b/src/filtro/src/public/img/productos/1.webp
new file mode 100644
index 0000000..61af6d8
Binary files /dev/null and b/src/filtro/src/public/img/productos/1.webp differ
diff --git a/src/filtro/src/public/img/productos/2.webp b/src/filtro/src/public/img/productos/2.webp
new file mode 100644
index 0000000..387ecfb
Binary files /dev/null and b/src/filtro/src/public/img/productos/2.webp differ
diff --git a/src/filtro/src/public/img/productos/3.webp b/src/filtro/src/public/img/productos/3.webp
new file mode 100644
index 0000000..1a8e80f
Binary files /dev/null and b/src/filtro/src/public/img/productos/3.webp differ
diff --git a/src/filtro/src/public/img/productos/4.webp b/src/filtro/src/public/img/productos/4.webp
new file mode 100644
index 0000000..5dde405
Binary files /dev/null and b/src/filtro/src/public/img/productos/4.webp differ
diff --git a/src/filtro/src/public/img/productos/5.webp b/src/filtro/src/public/img/productos/5.webp
new file mode 100644
index 0000000..754cae3
Binary files /dev/null and b/src/filtro/src/public/img/productos/5.webp differ
diff --git a/src/filtro/src/public/img/productos/6.webp b/src/filtro/src/public/img/productos/6.webp
new file mode 100644
index 0000000..758c399
Binary files /dev/null and b/src/filtro/src/public/img/productos/6.webp differ
diff --git a/src/filtro/src/public/img/productos/7.webp b/src/filtro/src/public/img/productos/7.webp
new file mode 100644
index 0000000..1ab405b
Binary files /dev/null and b/src/filtro/src/public/img/productos/7.webp differ
diff --git a/src/filtro/src/public/img/productos/8.webp b/src/filtro/src/public/img/productos/8.webp
new file mode 100644
index 0000000..4461d6f
Binary files /dev/null and b/src/filtro/src/public/img/productos/8.webp differ
diff --git a/src/filtro/src/public/img/productos/9.webp b/src/filtro/src/public/img/productos/9.webp
new file mode 100644
index 0000000..ce71ec1
Binary files /dev/null and b/src/filtro/src/public/img/productos/9.webp differ
diff --git a/src/filtro/src/public/js/cart.js b/src/filtro/src/public/js/cart.js
new file mode 100644
index 0000000..60df6f1
--- /dev/null
+++ b/src/filtro/src/public/js/cart.js
@@ -0,0 +1,182 @@
+const modalContainer=document.getElementById("modal-container");
+const modalOverlay= document.getElementById("modal-overlay");
+
+const cartBtn= document.getElementById("cart-btn");
+const cartCounter= document.getElementById("cart-counter");
+
+const displayCart =() =>{
+ modalContainer.innerHTML="";
+ modalContainer.style.display="block";
+ modalOverlay.style.display="block";
+ //modal header
+ const modalHeader=document.createElement("div");
+
+ const modalClose = document.createElement("div");
+
+ modalClose.innerText="❌";
+ modalClose.className= "modal-close";
+ modalHeader.append(modalClose)
+
+ modalClose.addEventListener("click",()=>{
+ modalContainer.style.display="none";
+ modalOverlay.style.display="none";
+ });
+
+ const modalTitle= document.createElement("div");
+ modalTitle.innerText="Cart";
+ modalTitle.className="modal-title";
+ modalHeader.append(modalTitle);
+
+ modalContainer.append(modalHeader);
+
+ // modal body
+ if (cart.length >0){
+ cart.forEach((product) =>{
+ const modalBody= document.createElement("div");
+ modalBody.className="modal-body";
+ modalBody.innerHTML= `
+
+
+
+
${product.productName}
+
+
+ -
+ ${product.quanty}"
+ +
+
+
${product.price * product.quanty}$
+
❌
+
+ `;
+ modalContainer.append(modalBody);
+
+ const decrese = modalBody.querySelector(".quantity-btn-decrese")
+ decrese.addEventListener("click",()=>{
+ if(product.quanty !== 1){
+ product.quanty--;
+ displayCart();
+ }
+ displayCarCounter();
+ });
+ const increse = modalBody.querySelector(".quantity-btn-increse")
+ increse.addEventListener("click",() =>{
+ product.quanty++;
+ displayCart();
+ displayCarCounter();
+ });
+
+ // delete
+ const deleteProduct= modalBody.querySelector(".delete-product");
+
+ deleteProduct.addEventListener("click",()=>{
+ deleteCartProduct(product.id);
+
+ });
+ });
+
+
+
+ // modal fotter
+ const total = cart.reduce((acc,el) => acc + el.price* el.quanty, 0 );
+
+ const modalFooter= document.createElement("div");
+ modalFooter.className="modal-footer"
+ modalFooter.innerHTML=`
+ ${total}:
+
+
+
+
+ `;
+ modalContainer.append(modalFooter);
+
+// mp;
+// Add SDK credentials
+// REPLACE WITH YOUR PUBLIC KEY AVAILABLE IN: https://developers.mercadopago.com/panel
+ const mercadopago = new MercadoPago("APP_USR-c1976322-7e81-4621-a8e2-bf9fdeebb0ba", {
+ locale: 'es-AR' // The most common are: 'pt-BR', 'es-AR' and 'en-US'
+ });
+
+ const checkoutButton=modalFooter.querySelector("#checkout-btn");
+
+ checkoutButton.addEventListener("click",function(){
+ checkoutButton.remove();
+ // orden de compra
+ const orderData = {
+ quantity: 1,
+ description: "compra de ecommerce",
+ price: total,
+ };
+
+ fetch("http://localhost:8080/create_preference", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(orderData),
+ })
+ .then(function (response) {
+ return response.json();
+ })
+ .then(function (preference) {
+ createCheckoutButton(preference.id);
+ })
+ .catch(function () {
+ alert("Unexpected error");
+ });
+
+ });
+
+
+ function createCheckoutButton(preferenceId) {
+ // Initialize the checkout
+ const bricksBuilder = mercadopago.bricks();
+
+ const renderComponent = async (bricksBuilder) => {
+ //ya se reinicio el botón
+
+ await bricksBuilder.create(
+ 'wallet',
+ 'button-checkout', // class/id where the payment button will be displayed
+ {
+ initialization: {
+ preferenceId: preferenceId
+ },
+ callbacks: {
+ onError: (error) => console.error(error),
+ onReady: () => {}
+ },
+ }
+ );
+ };
+ window.checkoutButton = renderComponent(bricksBuilder);
+ }
+
+} else {
+ const modalText=document.createElement("h2");
+ modalText.className="modal-body";
+ modalText.innerText="you cart is empty";
+ modalContainer.append(modalText);
+ }
+
+};
+
+cartBtn.addEventListener("click", displayCart)
+
+const deleteCartProduct =(id)=>{
+ const foundId = cart.findIndex((element)=>element.id===id)
+ cart.splice(foundId,1);
+ displayCart();
+ displayCarCounter();
+};
+
+const displayCarCounter=()=>{
+ const cartLength= cart.reduce((acc,el)=>acc + el.quanty,0);
+ if(cartLength>0){
+ cartCounter.style.display="block"
+ cartCounter.innerText=cartLength;
+ }else{
+ cartCounter.style.display="none";
+ }
+}
\ No newline at end of file
diff --git a/src/filtro/src/public/js/filtro.js b/src/filtro/src/public/js/filtro.js
new file mode 100644
index 0000000..27ff585
--- /dev/null
+++ b/src/filtro/src/public/js/filtro.js
@@ -0,0 +1,23 @@
+// Simulador de filtro
+document.getElementById('button').addEventListener('click', function() {
+ buscarProductos(); // Llama a la función buscarProductos
+});
+document.getElementById('filtro').addEventListener('keypress', function(event) {
+ if (event.key === 'Enter') {
+ buscarProductos();
+ }
+});
+
+function buscarProductos() {
+ const busqueda = document.getElementById('filtro').value.toLowerCase(); // 'busqueda' a 'filtro'
+ const productos = document.querySelectorAll('.producto');
+
+ productos.forEach(producto => {
+ const nombreProducto = producto.querySelector('h3').textContent.toLowerCase();
+ if (nombreProducto.includes(busqueda)) {
+ producto.style.display = 'block'; // Muestra el producto
+ } else {
+ producto.style.display = 'none'; // Oculta el producto
+ }
+ });
+}
\ No newline at end of file
diff --git a/src/filtro/src/public/js/index.js b/src/filtro/src/public/js/index.js
new file mode 100644
index 0000000..2924475
--- /dev/null
+++ b/src/filtro/src/public/js/index.js
@@ -0,0 +1,44 @@
+const shopContent= document.getElementById("shopContent");
+const cart= [];
+
+productos.forEach((product) =>{
+ const content= document.createElement("div");
+ content.classList.add("producto");
+ content.innerHTML = `
+
+ ${product.productName}
+ ${product.price} $
+ `;
+ shopContent.append(content);
+
+ const buyButton = document.createElement("button");
+ buyButton.innerText="comprar";
+
+content.append(buyButton);
+
+buyButton.addEventListener("click",()=>{
+ const repeat = cart.some((repeatProduct)=>repeatProduct.id === product.id);
+
+ if(repeat){
+ cart.map((prod)=>{
+ if(prod.id===product.id){
+ prod.quanty++;
+ displayCarCounter();
+ }
+ });
+
+ }else{
+
+ cart.push({
+ id:product.id,
+ productName: product.productName,
+ price: product.price,
+ quanty:product.quanty,
+ img: product.img,
+
+ });
+ displayCarCounter();
+ }
+
+ });
+});
\ No newline at end of file
diff --git a/src/filtro/src/public/js/products.js b/src/filtro/src/public/js/products.js
new file mode 100644
index 0000000..38fa3b9
--- /dev/null
+++ b/src/filtro/src/public/js/products.js
@@ -0,0 +1,66 @@
+const productos = [
+ {
+ id: 1,
+ productName: "Old Prince Premium (Perro cachorro)",
+ price: 6400,
+ quanty: 1,
+ img: "/src/public/img/productos/1.webp"
+ },
+ {
+ id: 2,
+ productName: "Purina Excelent (Gato cachorro)",
+ price: 5500,
+ quanty: 1,
+ img: "/src/public/img/productos/2.webp"
+ },
+ {
+ id: 3,
+ productName: "Purina Pro Plan (Perro adulto)",
+ price: 3450,
+ quanty: 1,
+ img: "/src/public/img/productos/3.webp"
+ },
+ {
+ id: 4,
+ productName: "Purina Excelent (Perro cachorro)",
+ price: 6900,
+ quanty: 1,
+ img: "/src/public/img/productos/4.webp"
+ },
+ {
+ id: 5,
+ productName: "Old Prince (Gato adulto)",
+ price: 2440,
+ quanty: 1,
+ img: "/src/public/img/productos/5.webp"
+ },
+ {
+ id: 6,
+ productName: "Wishkas (Gato adulto)",
+ price: 9000,
+ quanty: 1,
+ img: "/src/public/img/productos/6.webp"
+ },
+ {
+ id: 7,
+ productName: "Agility (Perro adulto)",
+ price: 9000,
+ quanty: 1,
+ img: "/src/public/img/productos/7.webp"
+ },
+ {
+ id: 8,
+ productName: "Pro Plan (Perro adulto)",
+ price: 9000,
+ quanty: 1,
+ img: "/src/public/img/productos/8.webp"
+ },
+ {
+ id: 9,
+ productName: "Therapy (Perro adulto)",
+ price: 9000,
+ quanty: 1,
+ img: "/src/public/img/productos/9.webp"
+ }
+
+];
\ No newline at end of file
diff --git a/server/node/server.js b/src/filtro/src/server.js
similarity index 67%
rename from server/node/server.js
rename to src/filtro/src/server.js
index 071e3b7..a247b8d 100644
--- a/server/node/server.js
+++ b/src/filtro/src/server.js
@@ -1,20 +1,25 @@
-const express = require("express");
+const express = require("express"); //NodeRequire
const app = express();
const cors = require("cors");
const mercadopago = require("mercadopago");
+const path = require("path");
// REPLACE WITH YOUR ACCESS TOKEN AVAILABLE IN: https://developers.mercadopago.com/panel
mercadopago.configure({
- access_token: "",
+ access_token:"APP_USR-YOUR ACCESS TOKEN",
});
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
-app.use(express.static("../../client/html-js"));
+
+app.use(express.static(path.join(__dirname,"../filtro")))
+
app.use(cors());
-app.get("/", function (req, res) {
- res.status(200).sendFile("index.html");
+
+app.get("/", function () {
+ (path.resolve(__dirname,"..","../filtro","./pages/index.html"));
+
});
app.post("/create_preference", (req, res) => {
@@ -28,19 +33,21 @@ app.post("/create_preference", (req, res) => {
}
],
back_urls: {
- "success": "http://localhost:8080/feedback",
- "failure": "http://localhost:8080/feedback",
- "pending": "http://localhost:8080/feedback"
+ "success": "http://localhost:8080",
+ "failure": "http://localhost:8080",
+ "pending": "",
},
auto_return: "approved",
};
- mercadopago.preferences.create(preference)
+ mercadopago.preferences
+ .create(preference)
.then(function (response) {
res.json({
id: response.body.id
});
- }).catch(function (error) {
+ })
+ .catch(function (error) {
console.log(error);
});
});
@@ -55,4 +62,4 @@ app.get('/feedback', function (req, res) {
app.listen(8080, () => {
console.log("The server is now running on Port 8080");
-});
+});
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..8f62f22
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,41 @@
+import { config as setEnviroment } from "dotenv";
+import app from "./server.js";
+import mp_rutas from "./routes/mp.routes.js";
+import products_rutas from "./routes/products.routes.js";
+import auth_rutas from "./routes/auth.routes.js";
+import cp_routes from "./routes/cp.routes.js";
+import contactRoutes from './routes/contact.routes.js';
+
+setEnviroment();
+
+app.use("/mp", mp_rutas);
+app.use("/products", products_rutas);
+app.use("/auth", auth_rutas);
+app.use("/cp", cp_routes);
+app.use('/', contactRoutes);
+
+app.get("/ok", (_req, res) => {
+ return res.json({
+ message: "El servidor esta andando! :D"
+ });
+});
+
+app.use((req, res) => {
+
+ let page_name = req.url.slice(1);
+
+ if (page_name == "") page_name = "index";
+
+ res.sendFile(req.fromRoot("pages", `${page_name}.html`), (err) => {
+ if (err) res.sendFile(req.fromRoot("pages", "404.html"));
+ });
+
+ return;
+
+});
+
+
+
+app.listen(app.get("port"), () => {
+ console.log("Server https encendido! 😎");
+});
\ No newline at end of file
diff --git a/src/models/CodigoPostal.js b/src/models/CodigoPostal.js
new file mode 100644
index 0000000..b24f615
--- /dev/null
+++ b/src/models/CodigoPostal.js
@@ -0,0 +1,43 @@
+import { pool } from "../db.js";
+
+export default class CodigoPostal {
+
+ static table_name = "codigos_postales";
+
+ // Obtener todos los códigos postales
+ static async getAll() {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name}`);
+ return result;
+ }
+
+ // Obtener un código postal por CP
+ static async getByCP(cp) {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name} WHERE CP = ?`, [cp]);
+ return result.length > 0 ? result[0] : null; // Regresa el primer resultado si existe
+ }
+
+ // Crear un nuevo código postal
+ static async create({ CP, Provincia, Localidad, price }) {
+ const [result] = await pool.query(
+ `INSERT INTO ${this.table_name} (CP, Provincia, Localidad, price) VALUES (?, ?, ?, ?)`,
+ [CP, Provincia, Localidad, price]
+ );
+ if (result) return CP; // Regresa el CP del nuevo código postal
+ return null;
+ }
+
+ // Actualizar un código postal existente
+ static async update(cp, { Provincia, Localidad, price }) {
+ const [result] = await pool.query(
+ `UPDATE ${this.table_name} SET Provincia = ?, Localidad = ?, price = ? WHERE CP = ?`,
+ [Provincia, Localidad, price, cp]
+ );
+ return result.affectedRows; // Regresa el número de filas afectadas
+ }
+
+ // Eliminar un código postal
+ static async delete(cp) {
+ const [result] = await pool.query(`DELETE FROM ${this.table_name} WHERE CP = ?`, [cp]);
+ return result.affectedRows; // Regresa el número de filas afectadas
+ }
+}
diff --git a/src/models/Product.js b/src/models/Product.js
new file mode 100644
index 0000000..953f13f
--- /dev/null
+++ b/src/models/Product.js
@@ -0,0 +1,53 @@
+import { pool } from "../db.js";
+import { v4 as uuidv4 } from "uuid";
+
+export default class Product {
+
+ static table_name = "products";
+
+ // Obtener todos los productos
+ static async getAll() {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name}`);
+ return result.map(product => ({
+ ...product,
+ tags: JSON.parse(product.tags) // Convertir tags de JSON a array
+ }));
+ }
+
+ // Obtener un producto por ID
+ static async getById(id) {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name} WHERE id = ?`, [id]);
+ if (result.length > 0) {
+ return {
+ ...result[0],
+ tags: JSON.parse(result[0].tags) // Convertir tags de JSON a array
+ };
+ }
+ return null; // Si no existe el producto
+ }
+
+ // Crear un nuevo producto
+ static async create({ name, price, tags, image }) {
+ const id = uuidv4()
+ const [result] = await pool.query(
+ `INSERT INTO ${this.table_name} (id, name, price, tags, image) VALUES (?, ?, ?, ?, ?)`,
+ [id, name, price, JSON.stringify(tags), image] // Convertir tags de array a JSON
+ );
+ return result; // Regresa el ID del nuevo producto
+ }
+
+ // Actualizar un producto existente
+ static async update(id, { name, price, tags, image }) {
+ const [result] = await pool.query(
+ `UPDATE ${this.table_name} SET name = ?, price = ?, tags = ?, image = ? WHERE id = ?`,
+ [name, price, JSON.stringify(tags), image, id] // Convertir tags de array a JSON
+ );
+ return result.affectedRows; // Regresa el número de filas afectadas
+ }
+
+ // Eliminar un producto
+ static async delete(id) {
+ const [result] = await pool.query(`DELETE FROM ${this.table_name} WHERE id = ?`, [id]);
+ return result.affectedRows; // Regresa el número de filas afectadas
+ }
+}
diff --git a/src/models/User.js b/src/models/User.js
new file mode 100644
index 0000000..354b6cf
--- /dev/null
+++ b/src/models/User.js
@@ -0,0 +1,51 @@
+import { pool } from "../db.js";
+import { v4 as uuidv4 } from "uuid";
+
+export default class User {
+
+ static table_name = "users";
+
+ // Obtener todos los usuarios
+ static async getAll() {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name}`);
+ return result;
+ }
+
+ static async getByEmail(email) {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name} WHERE email = ?`, [email]);
+ return result.length > 0 ? result[0] : null; // Regresa el primer resultado si existe
+ }
+
+ // Obtener un usuario por ID
+ static async getById(id) {
+ const [result] = await pool.query(`SELECT * FROM ${this.table_name} WHERE id = ?`, [id]);
+ return result[0]; // Regresa el primer resultado si existe
+ }
+
+ // Crear un nuevo usuario
+ static async create({ name, email, password, phone, address }) {
+ const id = uuidv4();
+ console.log({ name, email, password, phone, address, id })
+ const [result] = await pool.query(
+ `INSERT INTO ${this.table_name} (id, name, email, password, phone, address) VALUES (?, ?, ?, ?, ?, ?)`,
+ [id, name, email, password, phone, address]
+ );
+ if (result) return id; // Regresa el ID del nuevo usuario
+ return null;
+ }
+
+ // Actualizar un usuario existente
+ static async update(id, { name, email, password, phone, address }) {
+ const [result] = await pool.query(
+ `UPDATE ${this.table_name} SET name = ?, email = ?, password = ?, phone = ?, address = ? WHERE id = ?`,
+ [name, email, password, phone, address, id]
+ );
+ return result.affectedRows; // Regresa el número de filas afectadas
+ }
+
+ // Eliminar un usuario
+ static async delete(id) {
+ const [result] = await pool.query(`DELETE FROM ${this.table_name} WHERE id = ?`, [id]);
+ return result.affectedRows; // Regresa el número de filas afectadas
+ }
+}
diff --git a/src/pages/404.html b/src/pages/404.html
new file mode 100644
index 0000000..9f82f13
--- /dev/null
+++ b/src/pages/404.html
@@ -0,0 +1 @@
+404 XD
\ No newline at end of file
diff --git a/src/pages/account.html b/src/pages/account.html
new file mode 100644
index 0000000..2edde24
--- /dev/null
+++ b/src/pages/account.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ Perfil de Usuario
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cargando...
+
+
+
+
+
+
+
Cargando...
+
+
+
+
+
Cargando...
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/contacto.html b/src/pages/contacto.html
new file mode 100644
index 0000000..894eb4a
--- /dev/null
+++ b/src/pages/contacto.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+ Contacto - Hola Mundo Animal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/envios.html b/src/pages/envios.html
new file mode 100644
index 0000000..5b17173
--- /dev/null
+++ b/src/pages/envios.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Sistema de envíos
+
+
+
+
+
+
+
+
+
+
+
+
+
Calcula el costo de tu envío en Mendoza
+
+
+
+
+
+
+
+
+
×
+
Información sobre el envío
+
El costo de envío no está incluido en el precio final de la compra y deberá ser pagado directamente al
+ repartidor.
+
Si decides retirar tu pedido en el local, el envío será completamente gratuito.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/index.html b/src/pages/index.html
new file mode 100644
index 0000000..971371a
--- /dev/null
+++ b/src/pages/index.html
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+ Template Code - Checkout Pro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
¡Únete a nuestra comunidad PetShop!
+
Inicia sesión y descubre ofertas exclusivas, beneficios para miembros, y un
+ seguimiento fácil de tus pedidos.
+
Inicia sesión
+
Contactanos
+
+
+
+
+
+
+
+
10 PRODUCTOS
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/login.html b/src/pages/login.html
new file mode 100644
index 0000000..98fcd8f
--- /dev/null
+++ b/src/pages/login.html
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+ Iniciar sesión
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/products/admin.html b/src/pages/products/admin.html
new file mode 100644
index 0000000..e69de29
diff --git a/src/public/assets/gato1.jpg b/src/public/assets/gato1.jpg
new file mode 100644
index 0000000..f856d67
Binary files /dev/null and b/src/public/assets/gato1.jpg differ
diff --git a/src/public/assets/gato1.png b/src/public/assets/gato1.png
new file mode 100644
index 0000000..a854189
Binary files /dev/null and b/src/public/assets/gato1.png differ
diff --git a/src/public/assets/perrito_banner.png b/src/public/assets/perrito_banner.png
new file mode 100644
index 0000000..a159446
Binary files /dev/null and b/src/public/assets/perrito_banner.png differ
diff --git a/src/public/css/banner.css b/src/public/css/banner.css
new file mode 100644
index 0000000..f45886b
--- /dev/null
+++ b/src/public/css/banner.css
@@ -0,0 +1,77 @@
+.banner {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ background-color: #f3f4f6;
+ flex-wrap: wrap;
+ margin: 2vh 0;
+}
+
+.banner div {
+ flex: 1;
+ min-width: 280px;
+ padding: 10px;
+}
+
+.banner h1 {
+ margin: 0;
+ font-size: 32px;
+ color: #ff6f61;
+ font-weight: bold;
+}
+
+.banner p {
+ margin: 10px 0;
+ font-size: 18px;
+ color: #333;
+}
+
+.banner a {
+ background-color: #ff6f61;
+ color: white;
+ padding: 12px 30px;
+ font-size: 16px;
+ text-decoration: none;
+ border-radius: 5px;
+ font-weight: bold;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ transition: background-color 0.3s ease, transform 0.3s ease;
+
+}
+
+
+
+.banner img {
+ max-width: 100%;
+ height: auto;
+ border-radius: 10px;
+}
+
+.banner :first-child * {
+ margin: 30px 0;
+}
+
+@media (max-width: 800px) {
+ .banner {
+ flex-direction: column;
+ text-align: center;
+ }
+
+ .banner div {
+ text-align: center;
+ margin-bottom: 20px;
+ }
+
+ .banner h1 {
+ font-size: 24px;
+ }
+
+ .banner p {
+ font-size: 16px;
+ }
+
+ .banner a {
+ padding: 10px 20px;
+ font-size: 14px;
+ }
+}
\ No newline at end of file
diff --git a/src/public/css/carrito.css b/src/public/css/carrito.css
new file mode 100644
index 0000000..8a0ae9e
--- /dev/null
+++ b/src/public/css/carrito.css
@@ -0,0 +1,129 @@
+#carrito {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ min-width: 100%;
+ border-left: 1px solid #000;
+ transition: all 1s;
+}
+
+#carrito .navbar {
+ background-color: rgb(19, 44, 114);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 3vh 5vw;
+}
+
+#carrito .navbar button {
+ background-color: transparent;
+ padding: 0;
+ border: none 0px;
+ cursor: pointer;
+}
+
+#carrito .navbar button svg {
+ width: 1.5em;
+ height: 1.5em;
+ color: rgb(239, 239, 239);
+}
+
+#carrito .navbar span {
+ font-size: 2rem;
+ font-weight: 400;
+ font-style: normal;
+}
+
+#carrito .container {
+ background-color: aliceblue;
+ display: flex;
+ text-align: center;
+ padding: 5vh 2vw 0 2vw;
+ min-height: 100%;
+ flex-direction: column;
+}
+
+#carrito button#buy {
+ background-color: #007bff;
+ color: white;
+ border: none;
+ border-radius: 5px;
+ padding: 10px 15px;
+ font-size: 1.1rem;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-weight: 600;
+ font-family: Verdana, Geneva, Tahoma, sans-serif;
+}
+
+@media screen and (min-width: 500px) {
+ #carrito {
+ min-width: 500px;
+ }
+}
+
+.product-row {
+ display: flex;
+ justify-content: space-between;
+ padding: 10px 0;
+ border-bottom: 1px solid #eaeaea;
+}
+
+/* Estilos para el título del producto */
+.product-row p {
+ font-size: 16px;
+ margin: 0;
+}
+
+/* Estilos para el precio del producto */
+.product-row span {
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+}
+
+/* Estilos para la fila del total */
+.total-row {
+ display: flex;
+ border-top: 1px solid #000;
+ justify-content: space-between;
+ padding: 20px 0;
+ font-size: 18px;
+ font-weight: bold;
+}
+
+.product-row button {
+ background-color: rgb(203, 32, 39);
+ border-radius: 5px;
+ cursor: pointer;
+ border: none;
+ margin: 0 !important;
+ padding: .3rem .5rem .2rem .5rem;
+}
+
+.product-row button svg {
+ width: 1.5rem;
+ height: 1.5rem;
+ color: rgb(239, 239, 239);
+}
+
+#calcularEnvioBtn {
+ text-decoration: none;
+ background-color: #007bff;
+ color: white;
+ width: 350px;
+ border: none;
+ border-radius: 5px;
+ padding: 10px 15px;
+ font-size: 1.0rem;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-weight: 600;
+ font-family: Verdana, Geneva, Tahoma, sans-serif;
+ position: absolute;
+ bottom: 30px;
+ left: 50%;
+ transform: translateX(-50%);
+ text-align: center;
+}
\ No newline at end of file
diff --git a/src/public/css/contacto.css b/src/public/css/contacto.css
new file mode 100644
index 0000000..de318fe
--- /dev/null
+++ b/src/public/css/contacto.css
@@ -0,0 +1,108 @@
+.banner-contacto {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: #f9f9f9;
+ padding: 20px;
+ border-radius: 10px;
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
+ margin-bottom: 20px;
+ gap: 20px;
+ flex-wrap: wrap;
+}
+
+.formulario-banner {
+ flex: 1;
+ min-width: 280px;
+ padding: 10px;
+ margin: 0;
+}
+
+.imagen-banner-contacto {
+ max-width: 40%;
+ text-align: center;
+ margin-left: 0;
+ align-self: flex-end;
+ margin-bottom: -27px;
+ margin: 0;
+ }
+
+.imagen-gatito-contacto {
+ max-width: 100%;
+ height: auto;
+ border-radius: 10px;
+ justify-content: baseline;
+
+}
+
+.banner-contacto .banner-title {
+ font-size: 32px;
+ color: #ff6f61;
+ font-weight: bold;
+ margin-bottom: 2px;
+}
+
+p {
+ font-size: 18px;
+ line-height: 1.6;
+ color: #000000;
+ margin-bottom: 20px;
+ text-align: justify;
+
+}
+
+.formulario-contacto {
+ max-width: 600px;
+ margin: 0 auto;
+ padding: 20px;
+ background-color: #f9f9f9;
+ border-radius: 10px;
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
+ }
+
+ .form-group {
+ margin-bottom: 15px;
+ }
+
+ .form-group label {
+ display: block;
+ margin-bottom: 5px;
+ font-weight: bold;
+ color: #333;
+ }
+
+ .form-control {
+ width: 100%;
+ padding: 10px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ box-sizing: border-box;
+ font-size: 16px;
+ }
+
+ .form-control:focus {
+ border-color: #ff6f61;
+ outline: none;
+ box-shadow: 0 0 5px rgba(255, 111, 97, 0.5);
+ }
+
+ .btn.banner-button {
+ display: inline-block;
+ background-color: #ff6f61;
+ color: #fff;
+ padding: 12px 30px;
+ font-size: 16px;
+ text-decoration: none;
+ border-radius: 5px;
+ font-weight: bold;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ border: none;
+ cursor: pointer;
+ transition: background-color 0.3s ease;
+ }
+
+ .btn.banner-button:hover {
+ background-color: #e65b50;
+ }
+
+
\ No newline at end of file
diff --git a/src/public/css/filters.css b/src/public/css/filters.css
new file mode 100644
index 0000000..0eb0210
--- /dev/null
+++ b/src/public/css/filters.css
@@ -0,0 +1,64 @@
+.filter-container {
+ background-color: rgba(14, 48, 143, 0.192);
+ padding: 2rem;
+ border-radius: 18px;
+}
+
+.filter-container form {
+ display: flex;
+ justify-content: flex-start;
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: 0rem 6rem;
+
+}
+
+.counter-product {
+ font-size: 1.5rem;
+ margin-bottom: 10px;
+ font-weight: bold;
+ color: #333333ef;
+}
+
+.filter-container form div>div {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+ gap: .5rem;
+ text-align: center;
+ align-items: center;
+ margin: 1vh 0;
+}
+
+form {
+ margin-top: 0;
+}
+
+form p {
+ font-weight: thin;
+}
+
+form div label {
+ margin-right: 0;
+ font-size: 1.1rem;
+ font-weight: bold;
+ color: #333;
+ text-transform: uppercase;
+}
+
+form div {
+ margin-bottom: 0;
+}
+
+input[type="checkbox"] {
+ width: 1rem;
+ height: 1rem;
+}
+
+@media screen and (max-width: 520px) {
+
+ .filter-container form {
+ flex-direction: column;
+ }
+
+}
\ No newline at end of file
diff --git a/src/public/css/index.css b/src/public/css/index.css
new file mode 100644
index 0000000..43b4bd0
--- /dev/null
+++ b/src/public/css/index.css
@@ -0,0 +1,620 @@
+/*
+ Esto se usa para importar archivos css a otro:
+ @import '';
+ @import url('');
+*/
+
+@import url('https://fonts.googleapis.com/css2?family=Nerko+One&display=swap');
+@import 'navbar.css';
+@import 'products.css';
+@import 'carrito.css';
+@import 'filters.css';
+@import 'banner.css';
+
+main {
+ padding: 3rem 3.5rem;
+}
+
+.invisible {
+ right: -505px !important;
+}
+
+/**
+ Todo el siguiente codigo es de https://necolas.github.io/normalize.css
+ Es un pedazo de codigo que resetea los estilos css que traen por defecto los navegadores
+*/
+
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15;
+ /* 1 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+ height: 100%;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box;
+ /* 1 */
+ height: 0;
+ /* 1 */
+ overflow: visible;
+ /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none;
+ /* 1 */
+ text-decoration: underline;
+ /* 2 */
+ text-decoration: underline dotted;
+ /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ /* 1 */
+ font-size: 100%;
+ /* 1 */
+ line-height: 1.15;
+ /* 1 */
+ margin: 0;
+ /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input {
+ /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select {
+ /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box;
+ /* 1 */
+ color: inherit;
+ /* 2 */
+ display: table;
+ /* 1 */
+ max-width: 100%;
+ /* 1 */
+ padding: 0;
+ /* 3 */
+ white-space: normal;
+ /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box;
+ /* 1 */
+ padding: 0;
+ /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ outline-offset: -2px;
+ /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
+
+/* Footer */
+footer {
+ background-color: var(--gris-oscuro);
+ color: var(--blanco);
+ padding: 2rem 3vw;
+ text-align: center;
+ font-size: 0.9rem;
+}
+
+footer .footer-content {
+ max-width: 1000px;
+ margin: auto;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+footer .social-links {
+ display: flex;
+ gap: 1rem;
+ margin-top: 1rem;
+}
+
+footer .social-links a {
+ color: var(--blanco);
+ font-size: 1.2rem;
+ text-decoration: none;
+}
+
+footer .social-links a:hover {
+ color: var(--naranja-brillante);
+}
+
+footer p {
+ margin: 1rem 0 0;
+ color: var(--gris-claro);
+ font-size: 0.8rem;
+}
+
+.social-links i {
+ font-size: 1.5rem;
+ /* Tamaño del icono */
+ margin-right: 8px;
+ /* Espacio entre icono y texto */
+ color: var(--blanco);
+ /* Color del icono */
+}
+/* Fin Footer */
+
+
+/* Contenedor principal */
+.envio-container {
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background-color: #ffffff;
+ /* Fondo blanco puro para el contenedor */
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
+ max-width: 320px;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+/* Contenedor para el contenido principal */
+.main-content {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 5rem 1rem 1rem;
+ /* Espacio superior para evitar superposición con nav */
+}
+
+/* Estilo del boton de envio */
+.envio-container button {
+ width: 100%;
+ background-color: rgb(76, 175, 89);
+ color: white;
+ padding: 0.75rem;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 1.1rem;
+ transition: background-color 0.3s ease;
+ /* Efecto trransicion */
+}
+
+.envio-container button:hover {
+ background-color: rgb(255, 152, 0);
+}
+
+/*Alineacion del contenido */
+.envio-container * {
+ width: 100%;
+ text-align: center;
+ margin: 0.5rem 0;
+ box-sizing: border-box;
+}
+
+/* Estilo del título */
+.envio-container h1 {
+ font-size: 1.5rem;
+ color: #333;
+ margin-bottom: 1rem;
+}
+
+/* Estilos del formulario */
+.envio-form input[type="text"] {
+ width: 100%;
+ padding: 0.5rem;
+ margin-bottom: 0.5rem;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ text-align: center;
+ font-size: 1rem;
+}
+
+/* Mensaje de costo de envío */
+#costoEnvio {
+ margin-top: 1rem;
+ font-size: 1.2rem;
+ color: green;
+}
+
+#errorMensaje {
+ font-size: 1rem;
+}
+
+
+.modal {
+ display: none;
+ position: fixed;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+
+.modal-content {
+ background-color: white;
+ margin: 15% auto;
+ padding: 20px;
+ border: 1px solid #888;
+ width: 80%;
+ max-width: 400px;
+ text-align: center;
+}
+
+
+.close {
+ color: #aaa;
+ font-size: 28px;
+ font-weight: bold;
+ position: absolute;
+ top: 0;
+ right: 10px;
+}
+
+.close:hover,
+.close:focus {
+ color: black;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+#infoEnvioBtn {
+ background-color: #28a745;
+ color: white;
+ padding: 10px 20px;
+ border: none;
+ border-radius: 5px;
+ font-size: 1.1rem;
+ cursor: pointer;
+ margin-top: 10px;
+ display: block;
+ width: 100%;
+ transition: background-color 0.3s ease;
+}
+
+
+#infoEnvioBtn:hover {
+ background-color: rgb(255, 152, 0);
+ color: black;
+}
+
+.btn-contacto {
+ display: inline-block;
+ background-color: #ff6f61; /* Mismo color que otros botones */
+ color: #fff; /* Color del texto en blanco */
+ padding: 8px 20px; /* Tamaño del botón */
+ font-size: 14px; /* Tamaño de fuente */
+ text-decoration: none; /* Sin subrayado */
+ border-radius: 5px; /* Bordes redondeados */
+ font-weight: bold;
+ margin-left: 15px; /* Separación con otros elementos */
+ transition: background-color 0.3s ease, transform 0.3s ease; /* Animación suave */
+ cursor: pointer;
+}
+
+.btn-contacto:hover {
+ background-color: #e65b50; /* Cambiar el color al pasar el mouse */
+ transform: translateY(-2px); /* Elevación al pasar el mouse */
+}
+
+.btn-contacto:active {
+ transform: translateY(0); /* Volver a su posición original al presionar */
+}
\ No newline at end of file
diff --git a/src/public/css/navbar.css b/src/public/css/navbar.css
new file mode 100644
index 0000000..2429b70
--- /dev/null
+++ b/src/public/css/navbar.css
@@ -0,0 +1,40 @@
+nav {
+ background-color: rgb(35, 65, 150);
+ color: rgb(239, 239, 239);
+ display: flex;
+ position: sticky;
+ top: 0;
+ left: 0;
+ right: 0;
+ max-width: 100%;
+ justify-content: space-between;
+ align-items: center;
+ padding: 3vh 5vw;
+}
+
+#open-cart,
+#user-button {
+ background-color: transparent;
+ padding: 0;
+ border-radius: 12px;
+ border: none 0px;
+ cursor: pointer;
+ margin: 0 .5rem;
+}
+
+#open-cart svg,
+#user-button svg {
+ width: 1.8em;
+ height: 1.8em;
+ color: rgb(239, 239, 239);
+}
+
+nav .left a {
+ text-decoration: none;
+ color: rgb(224, 224, 224);
+ font-size: 2rem;
+ font-weight: 400;
+ font-style: normal;
+ font-family: "Nerko One", cursive;
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/src/public/css/products.css b/src/public/css/products.css
new file mode 100644
index 0000000..3fe9946
--- /dev/null
+++ b/src/public/css/products.css
@@ -0,0 +1,74 @@
+#products {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 1.2rem;
+ padding: 5vh 0;
+ justify-items: center;
+}
+
+#products .container {
+ background-color: transparent;
+ background-color: #fff;
+ box-shadow: 0px 0px 10px #333;
+ width: 100%;
+ max-width: 350px;
+ border-radius: 5px;
+ /* Ajustado para igualar el tamaño */
+ display: flex;
+ flex-direction: column;
+ height: 400px;
+ /* Altura fija para los productos */
+}
+
+#products div>div:first-child {
+ height: 200px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+#products img {
+ max-height: 100%;
+ max-width: 100%;
+ object-fit: cover;
+}
+
+#products div>div:last-child {
+ padding: 10px;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ /* Hace que este contenedor ocupe el espacio restante */
+ justify-content: space-between;
+ /* Espacio distribuido entre el contenido */
+}
+
+#products p {
+ font-size: 16px;
+ font-weight: bold;
+ margin: 10px 0 5px 0;
+}
+
+#products span {
+ font-size: 1.2em;
+ color: #333;
+ font-weight: bold;
+}
+
+#products button {
+ background-color: #007bff;
+ color: white;
+ border: none;
+ border-radius: 5px;
+ padding: 10px 15px;
+ font-size: 14px;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-weight: 600;
+ font-family: Verdana, Geneva, Tahoma, sans-serif;
+}
+
+#products button:hover {
+ background-color: #0056b3;
+}
\ No newline at end of file
diff --git a/src/public/css/style_delivery.css b/src/public/css/style_delivery.css
new file mode 100644
index 0000000..d29ce31
--- /dev/null
+++ b/src/public/css/style_delivery.css
@@ -0,0 +1,166 @@
+/* Estilo del fondo general */
+@import 'navbar.css';
+@import url('https://fonts.googleapis.com/css2?family=Nerko+One&display=swap');
+/* Estilos y fuentes del encabezado */
+.left span {
+ font-size: 2rem;
+ font-weight: 400;
+ font-style: normal;
+ font-family: "Nerko One", cursive;
+ cursor: pointer;
+}
+/* Reseteo de márgenes y relleno para eliminar el borde blanco alrededor */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+html, body {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ overflow-x: hidden; /* Evita cualquier desplazamiento horizontal innecesario */
+}
+
+/* Asegúrate de que el nav ocupe toda la anchura */
+nav {
+ width: 100%;
+}
+
+/* Contenedor principal */
+.envio-container {
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background-color: #ffffff; /* Fondo blanco puro para el contenedor */
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
+ max-width: 320px;
+ width: 100%;
+ box-sizing: border-box;
+}
+/* Contenedor para el contenido principal */
+.main-content {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 5rem 1rem 1rem; /* Espacio superior para evitar superposición con nav */
+}
+
+/* Estilo del boton de envio */
+.envio-container button {
+ width: 100%;
+ background-color: rgb(76, 175, 89);
+ color: white;
+ padding: 0.75rem;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 1.1rem;
+ transition: background-color 0.3s ease; /* Efecto trransicion */
+}
+
+.envio-container button:hover {
+ background-color: rgb(255, 152, 0);
+}
+
+/*Alineacion del contenido */
+.envio-container *{
+ width: 100%;
+ text-align: center;
+ margin: 0.5rem 0;
+ box-sizing: border-box;
+}
+
+/* Estilo del título */
+.envio-container h1 {
+ font-size: 1.5rem;
+ color: #333;
+ margin-bottom: 1rem;
+}
+
+/* Estilos del formulario */
+.envio-form input[type="text"] {
+ width: 100%;
+ padding: 0.5rem;
+ margin-bottom: 0.5rem;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ text-align: center;
+ font-size: 1rem;
+}
+
+/* Mensaje de costo de envío */
+#costoEnvio {
+ margin-top: 1rem;
+ font-size: 1.2rem;
+ color: green;
+}
+
+#errorMensaje {
+ font-size: 1rem;
+}
+
+
+.modal {
+ display: none;
+ position: fixed;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+
+.modal-content {
+ background-color: white;
+ margin: 15% auto;
+ padding: 20px;
+ border: 1px solid #888;
+ width: 80%;
+ max-width: 400px;
+ text-align: center;
+}
+
+
+.close {
+ color: #aaa;
+ font-size: 28px;
+ font-weight: bold;
+ position: absolute;
+ top: 0;
+ right: 10px;
+}
+
+.close:hover,
+.close:focus {
+ color: black;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+#infoEnvioBtn {
+ background-color: #28a745;
+ color: white;
+ padding: 10px 20px;
+ border: none;
+ border-radius: 5px;
+ font-size: 1.1rem;
+ cursor: pointer;
+ margin-top: 10px;
+ display: block;
+ width: 100%;
+ transition: background-color 0.3s ease;
+}
+
+
+#infoEnvioBtn:hover {
+ background-color: rgb(255, 152, 0);
+ color: black;
+}
\ No newline at end of file
diff --git a/src/public/css/style_login.css b/src/public/css/style_login.css
new file mode 100644
index 0000000..6bc540d
--- /dev/null
+++ b/src/public/css/style_login.css
@@ -0,0 +1,235 @@
+/* Definición de la paleta de colores */
+:root {
+ /* Colores Primarios */
+ --verde-pasto: rgb(76, 175, 80);
+ --naranja-brillante: rgb(255, 152, 0);
+ --azul-cielo: rgb(33, 150, 243);
+
+ /* Colores Secundarios */
+ --amarillo-suave: rgb(255, 235, 59);
+ --marrón-claro: rgb(121, 85, 72);
+ --gris-claro: rgb(245, 245, 245);
+
+ /* Colores Neutros */
+ --blanco: rgb(255, 255, 255);
+ --gris-oscuro: rgb(51, 51, 51);
+}
+
+/* Estilos generales */
+body {
+ background-color: var(--gris-claro);
+ color: var(--gris-oscuro);
+ font-family: 'Roboto', sans-serif;
+ margin: 0;
+ padding: 0;
+ height: 100%;
+}
+
+/* Encabezados */
+h1,
+h2,
+h3 {
+ color: var(--azul-cielo);
+}
+
+/* Enlaces */
+a {
+ color: var(--naranja-brillante);
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+/* Botones */
+button {
+ background-color: var(--verde-pasto);
+ color: var(--blanco);
+ border: none;
+ padding: 10px 20px;
+ cursor: pointer;
+ font-size: 16px;
+}
+
+button:hover {
+ background-color: var(--naranja-brillante);
+}
+
+/* Otros estilos */
+.login_container {
+ max-width: 450px;
+ width: 70vw;
+ margin: 5vh auto;
+ background-color: transparent;
+}
+
+/* Estilos para el formulario */
+form {
+ background-color: var(--blanco);
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+ text-align: center;
+}
+
+form.invisible {
+ display: none;
+}
+
+form img {
+ margin: auto !important;
+}
+
+form label {
+ display: block;
+ margin-top: 10px;
+}
+
+form input {
+ width: 100%;
+ padding: .5rem;
+ margin-top: 5px;
+ border: 1px solid var(--gris-oscuro);
+ border-radius: 4px;
+ font-size: 1rem;
+}
+
+form button {
+ background-color: var(--verde-pasto);
+ color: var(--blanco);
+ border: none;
+ padding: 10px 20px;
+ margin-top: 20px;
+ cursor: pointer;
+ border-radius: 4px;
+}
+
+form button[type="submit"] {
+ margin-top: 0;
+}
+
+form button:hover {
+ background-color: var(--naranja-brillante);
+}
+
+/* Estilos para la clase group */
+.group {
+ margin-bottom: 15px;
+ text-align: start;
+}
+
+/* Estilo específico para el input checkbox y su etiqueta */
+.group input[type="checkbox"] {
+ width: auto;
+ margin-right: 10px;
+}
+
+.group label.form-check-label {
+ display: inline-block;
+}
+
+.banner {
+ width: 100%;
+ height: 400px;
+ background-image: url("src/client/img/banner.png");
+ background-size: cover;
+ background-position: center;
+ text-align: center;
+ color: white;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+
+nav {
+ background-color: rgb(35, 65, 150);
+ color: rgb(239, 239, 239);
+ display: flex;
+ position: sticky;
+ top: 0;
+ left: 0;
+ right: 0;
+ max-width: 100%;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0vh 3vw;
+}
+
+nav img {
+ max-width: 130px;
+ margin: 0;
+ padding: 0;
+}
+
+#open-cart {
+ background-color: transparent;
+ padding: 0;
+ border-radius: 12px;
+ border: none 0px;
+ cursor: pointer;
+}
+
+#open-cart svg {
+ width: 1.5em;
+ height: 1.5em;
+ color: rgb(239, 239, 239);
+}
+
+nav span {
+ font-size: 2rem;
+ font-weight: 400;
+ font-style: normal;
+ font-family: "Nerko One", cursive;
+}
+
+/* Footer */
+footer {
+ background-color: var(--gris-oscuro);
+ color: var(--blanco);
+ padding: 2rem 3vw;
+ text-align: center;
+ font-size: 0.9rem;
+}
+
+footer .footer-content {
+ max-width: 1000px;
+ margin: auto;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+footer .social-links {
+ display: flex;
+ gap: 1rem;
+ margin-top: 1rem;
+}
+
+footer .social-links a {
+ color: var(--blanco);
+ font-size: 1.2rem;
+ text-decoration: none;
+}
+
+footer .social-links a:hover {
+ color: var(--naranja-brillante);
+}
+
+footer p {
+ margin: 1rem 0 0;
+ color: var(--gris-claro);
+ font-size: 0.8rem;
+}
+
+.social-links i {
+ font-size: 1.5rem;
+ /* Tamaño del icono */
+ margin-right: 8px;
+ /* Espacio entre icono y texto */
+ color: var(--blanco);
+ /* Color del icono */
+}
+
+/* Fin Footer */
\ No newline at end of file
diff --git a/src/public/css/style_profile.css b/src/public/css/style_profile.css
new file mode 100644
index 0000000..d3adfea
--- /dev/null
+++ b/src/public/css/style_profile.css
@@ -0,0 +1,145 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: Arial, sans-serif;
+ background-color: #f0f0f0;
+ height: 100%;
+}
+
+nav {
+ background-color: #333;
+ padding: 1rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+nav .left img {
+ height: 40px;
+}
+
+nav .right button {
+ background-color: #ff6f61;
+ color: white;
+ border: none;
+ padding: 0.5rem 1rem;
+ cursor: pointer;
+}
+
+.profile-container {
+ max-width: 800px;
+ margin: 2rem auto;
+ padding: 1rem;
+ background-color: white;
+ box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+}
+
+.profile-header h1 {
+ text-align: center;
+ color: #333;
+ margin-bottom: 2rem;
+}
+
+.profile-details {
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+}
+
+.profile-group {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.profile-group label {
+ font-weight: bold;
+ color: #555;
+}
+
+.profile-group p {
+ color: #333;
+ padding: 0.5rem;
+ background-color: #f9f9f9;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ width: 60%;
+ text-align: right;
+}
+
+.profile-footer {
+ margin-top: 20px;
+ max-width: 100%;
+}
+
+.profile-footer button {
+ background-color: #ff5252;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 5px;
+ font-size: 16px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ margin: 0 auto;
+ max-width: fit-content;
+}
+
+.profile-footer button:hover {
+ background-color: #ff1744;
+}
+
+/* Footer */
+footer {
+ background-color: var(--gris-oscuro);
+ color: var(--blanco);
+ padding: 2rem 3vw;
+ text-align: center;
+ font-size: 0.9rem;
+}
+
+footer .footer-content {
+ max-width: 1000px;
+ margin: auto;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+footer .social-links {
+ display: flex;
+ gap: 1rem;
+ margin-top: 1rem;
+}
+
+footer .social-links a {
+ color: var(--blanco);
+ font-size: 1.2rem;
+ text-decoration: none;
+}
+
+footer .social-links a:hover {
+ color: var(--naranja-brillante);
+}
+
+footer p {
+ margin: 1rem 0 0;
+ color: var(--gris-claro);
+ font-size: 0.8rem;
+}
+
+.social-links i {
+ font-size: 1.5rem;
+ /* Tamaño del icono */
+ margin-right: 8px;
+ /* Espacio entre icono y texto */
+ color: var(--blanco);
+ /* Color del icono */
+}
+
+/* Fin Footer */
\ No newline at end of file
diff --git a/src/public/img/Hola mundo animal.ico b/src/public/img/Hola mundo animal.ico
new file mode 100644
index 0000000..53d51af
Binary files /dev/null and b/src/public/img/Hola mundo animal.ico differ
diff --git a/src/public/img/Hola mundo animal.png b/src/public/img/Hola mundo animal.png
new file mode 100644
index 0000000..2c6bbf5
Binary files /dev/null and b/src/public/img/Hola mundo animal.png differ
diff --git a/src/public/img/banner (1) (1).png b/src/public/img/banner (1) (1).png
new file mode 100644
index 0000000..c899f4a
Binary files /dev/null and b/src/public/img/banner (1) (1).png differ
diff --git a/src/public/img/cart-logo.svg b/src/public/img/cart-logo.svg
new file mode 100644
index 0000000..eac5b08
--- /dev/null
+++ b/src/public/img/cart-logo.svg
@@ -0,0 +1,3 @@
+
diff --git a/client/html-js/img/horizontal_logo.png b/src/public/img/horizontal_logo.png
similarity index 100%
rename from client/html-js/img/horizontal_logo.png
rename to src/public/img/horizontal_logo.png
diff --git a/src/public/img/logo.png b/src/public/img/logo.png
new file mode 100644
index 0000000..23f65f7
Binary files /dev/null and b/src/public/img/logo.png differ
diff --git a/src/public/img/productos/1.webp b/src/public/img/productos/1.webp
new file mode 100644
index 0000000..61af6d8
Binary files /dev/null and b/src/public/img/productos/1.webp differ
diff --git a/src/public/img/productos/2.webp b/src/public/img/productos/2.webp
new file mode 100644
index 0000000..387ecfb
Binary files /dev/null and b/src/public/img/productos/2.webp differ
diff --git a/src/public/img/productos/3.webp b/src/public/img/productos/3.webp
new file mode 100644
index 0000000..1a8e80f
Binary files /dev/null and b/src/public/img/productos/3.webp differ
diff --git a/src/public/img/productos/4.webp b/src/public/img/productos/4.webp
new file mode 100644
index 0000000..5dde405
Binary files /dev/null and b/src/public/img/productos/4.webp differ
diff --git a/src/public/img/productos/5.webp b/src/public/img/productos/5.webp
new file mode 100644
index 0000000..754cae3
Binary files /dev/null and b/src/public/img/productos/5.webp differ
diff --git a/src/public/img/productos/6.webp b/src/public/img/productos/6.webp
new file mode 100644
index 0000000..758c399
Binary files /dev/null and b/src/public/img/productos/6.webp differ
diff --git a/src/public/img/productos/7.webp b/src/public/img/productos/7.webp
new file mode 100644
index 0000000..1ab405b
Binary files /dev/null and b/src/public/img/productos/7.webp differ
diff --git a/src/public/img/productos/8.webp b/src/public/img/productos/8.webp
new file mode 100644
index 0000000..4461d6f
Binary files /dev/null and b/src/public/img/productos/8.webp differ
diff --git a/src/public/img/productos/9.webp b/src/public/img/productos/9.webp
new file mode 100644
index 0000000..ce71ec1
Binary files /dev/null and b/src/public/img/productos/9.webp differ
diff --git a/src/public/js/carrito.js b/src/public/js/carrito.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/public/js/envios.js b/src/public/js/envios.js
new file mode 100644
index 0000000..416354a
--- /dev/null
+++ b/src/public/js/envios.js
@@ -0,0 +1,58 @@
+// Función para calcular el costo de envío basado en el código postal
+async function calcularCostoEnvio(codigoPostal) {
+ const res = await fetch(`/cp/${codigoPostal}`, {
+ method: "GET",
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ });
+
+ const data = await res.json();
+
+ if (res.ok) return data.price;
+
+ // Si el código postal está en la lista, devuelve el costo, si no, da un costo estándar
+ return "Código postal no encontrado. Aun no tenemos envios a tu zona";
+}
+
+// Función para validar el código postal
+function validarCodigoPostal(codigoPostal) {
+ if (!/^\d{4}$/.test(codigoPostal)) { // RegEx para verificar que sean exactamente 4 dígitos
+ throw new Error("El código postal debe tener exactamente 4 dígitos numéricos.");
+ }
+}
+
+// Función principal que usa el sistema de envío
+async function procesarEnvio() {
+ //Se obtiene el valor del input de codigo postal
+ const codigoPostalInput = document.getElementById("codigoPostal").value;
+ // Referencias a los elementos donde se mostraran los mensajes de costo y error
+ const errorMensaje = document.getElementById("errorMensaje");
+ const costoEnvioElemento = document.getElementById("costoEnvio");
+
+ // Se oculta el mensaje de error y limpiar el mensaje de costo en cada nuevo intento
+ errorMensaje.style.display = "none";
+ costoEnvioElemento.textContent = "";
+
+ try {
+ // Llama a la funcion de validacion del codigo postal
+ validarCodigoPostal(codigoPostalInput);
+ // Si es valido se obtiene el costo para el codigo ingresado
+ const costo = await calcularCostoEnvio(codigoPostalInput);
+
+
+ if (typeof costo === "string") {
+ //Si el codigo No esta en la lista se muestra el mensaje de error.
+ errorMensaje.textContent = costo;
+ errorMensaje.style.display = "block";
+ } else {
+ // Si el codigo es valido y esta en la lista, muestra el costo en "costoEnvio"
+ costoEnvioElemento.textContent = `Costo de envio: $${costo}`;
+ }
+ } catch (error) {
+ // Si la validacion falla, muestra el mensaje de error.
+ errorMensaje.textContent = error.message;
+ errorMensaje.style.display = "block";
+ if (finalizarCompraBoton) finalizarCompraBoton.style.display = "none";
+ }
+}
diff --git a/src/public/js/index.js b/src/public/js/index.js
new file mode 100644
index 0000000..5bff5ee
--- /dev/null
+++ b/src/public/js/index.js
@@ -0,0 +1,291 @@
+const mp = new MercadoPago('APP_USR-a50a3f8c-5878-49db-9b44-bf263f2b06ff', {
+ locale: 'es-AR'
+});
+const bricksBuilder = mp.bricks();
+
+const mountMPButton = async (preferenceId) => {
+ bricksBuilder.create("wallet", "wallet_container", {
+ initialization: {
+ preferenceId
+ }
+ })
+}
+
+class Carrito {
+ constructor() {
+ this.products = this.loadCartFromLocalStorage();
+
+ this.content = document.querySelector("#carrito .container");
+ this.element = document.querySelector("#carrito");
+ this.open_button = document.querySelector("button#open-cart");
+ this.close_button = document.querySelector("button#close-cart");
+
+ this.open_button.addEventListener("click", () => this.open());
+ this.close_button.addEventListener("click", () => this.close());
+
+ this.updateView();
+ }
+
+ getFullCartIcon() {
+ return `
+`;
+ }
+
+ getEmptyCartIcon() {
+ return ``;
+ }
+
+ open() {
+ this.element.classList.toggle("invisible");
+ }
+
+ close() {
+ this.element.classList.toggle("invisible");
+ }
+
+ addProduct(product) {
+ const in_cart = this.products.find(
+ element => element.id == product.id
+ );
+
+ if (!in_cart) {
+ this.products.push({ ...product, quantity: 1 });
+ } else {
+ this.products = this.products.map(element => {
+ if (element.id !== product.id) return element;
+ return { ...element, quantity: element.quantity + 1 };
+ });
+ }
+
+ this.open_button.innerHTML = this.getFullCartIcon();
+
+ this.updateLocalStorage();
+ this.updateView();
+ }
+
+ removeProduct(product_id) {
+ this.products = this.products.filter(
+ product => product.id !== product_id
+ );
+
+ if (this.products.length == 0) this.open_button.innerHTML = this.getEmptyCartIcon();
+
+ this.updateLocalStorage();
+ this.updateView();
+ }
+
+ getRowFromProduct(product) {
+ const product_row = document.createElement("div");
+ product_row.classList.add("product-row");
+
+ const product_title = document.createElement("p");
+ product_title.innerText = `${product.name} x ${product.quantity}`;
+
+ const product_price = document.createElement("span");
+ product_price.innerText = `$ ${product.price}`;
+
+ const remove_button = document.createElement("button");
+ remove_button.innerHTML = `
+
+ `;
+ remove_button.addEventListener("click", () => this.removeProduct(product.id));
+
+ product_row.appendChild(product_title);
+ product_row.appendChild(product_price);
+ product_row.appendChild(remove_button);
+
+ return product_row;
+ }
+
+ getTotalPrice() {
+ let total_price = this.products.reduce(
+ (total, product) => total + (product.price * product.quantity), 0
+ );
+
+ if (localStorage.getItem('token')) {
+ total_price -= total_price * 0.01;
+ total_price = `${total_price} (Descuento: 1%)`;
+ }
+
+ return total_price;
+ }
+
+ async generateNewMPButton(self) {
+
+ console.log(self.products);
+
+ try {
+
+ const response = await fetch("/mp/preference", {
+ method: 'POST',
+ headers: {
+ 'content-type': 'application/json'
+ },
+ body: JSON.stringify({
+ 'products': self.products
+ })
+ });
+
+ const preference = await response.json();
+
+ mountMPButton(preference.id);
+
+ } catch (error) {
+ console.error(error);
+ }
+
+ }
+
+ updateView() {
+ this.content.innerHTML = "";
+
+ if (this.products.length === 0) {
+ this.open_button.innerHTML = this.getEmptyCartIcon();
+ const empty_message = document.createElement("span");
+ empty_message.innerText = "Carrito vacío 🛒";
+ this.content.appendChild(empty_message);
+ return;
+ }
+
+ const fragment = document.createDocumentFragment();
+
+ this.open_button.innerHTML = this.getFullCartIcon();
+
+ this.products.forEach(product => {
+ const row = this.getRowFromProduct(product);
+ fragment.appendChild(row);
+ });
+
+ const total_row = document.createElement("div");
+ total_row.classList.add("total-row");
+
+ const total_text = document.createElement("p");
+ total_text.innerText = "Total: ";
+
+ const total_amount = document.createElement("span");
+ total_amount.innerText = `$ ${this.getTotalPrice()}`;
+
+ const buy_button = document.createElement("button");
+ buy_button.id = "buy";
+ buy_button.innerText = "Comprar";
+ buy_button.addEventListener("click", () => this.generateNewMPButton(this));
+
+ const wallet_container = document.createElement("div");
+ wallet_container.id = "wallet_container";
+
+
+ total_row.appendChild(total_text);
+ total_row.appendChild(total_amount);
+
+ fragment.appendChild(total_row);
+ fragment.appendChild(buy_button);
+ fragment.appendChild(wallet_container);
+
+ this.content.appendChild(fragment);
+ }
+
+ loadCartFromLocalStorage() {
+ const cart = localStorage.getItem("cart");
+ return cart ? JSON.parse(cart) : [];
+ }
+
+ updateLocalStorage() {
+ localStorage.setItem("cart", JSON.stringify(this.products));
+ }
+}
+
+
+
+const carrito = new Carrito();
+const products_section = document.querySelector("#products");
+
+const mostrarProducto = (producto) => {
+
+ const fragment = document.createDocumentFragment();
+
+ const container_product = document.createElement("div");
+ container_product.classList.add("container");
+
+ const header = document.createElement("div");
+
+ const image = document.createElement("img");
+
+ const body = document.createElement("div");
+
+ const title = document.createElement("p");
+
+ const price = document.createElement("span");
+
+ image.src = producto.image;
+ title.innerText = producto.name;
+ price.innerText = `$ ${producto.price}`;
+
+ header.appendChild(image);
+ body.appendChild(title);
+ body.appendChild(price);
+
+ const buy_button = document.createElement("button");
+ buy_button.innerText = "Comprar";
+ buy_button.addEventListener("click", () => carrito.addProduct(producto));
+
+ body.appendChild(buy_button);
+
+ container_product.appendChild(header);
+ container_product.appendChild(body);
+
+ fragment.appendChild(container_product);
+
+ products_section.appendChild(fragment);
+
+}
+
+document.addEventListener("DOMContentLoaded", async () => {
+
+ const saved_products_str = window.sessionStorage.getItem("data");
+
+ if (saved_products_str) {
+
+ console.log("Se evito una llamada al servidor");
+
+ const saved_products = JSON.parse(saved_products_str);
+
+ saved_products.forEach(producto => mostrarProducto(producto));
+
+ return;
+
+ }
+
+ console.log("Se hizo una llamada al servidor");
+
+ const res = await fetch('/products', {
+ headers: {
+ 'content-type': "json/application"
+ }
+ });
+
+ const data = await res.json();
+
+ const { products } = data;
+
+ console.log(products);
+
+ products.forEach(producto => mostrarProducto(producto));
+
+ window.sessionStorage.setItem("data", JSON.stringify(products));
+});
+require('dotenv').config();
+
+const connection = mysql.createConnection({
+ host: process.env.DB_HOST,
+ user: process.env.DB_USER,
+ password: process.env.DB_PASSWORD,
+ database: process.env.DB_NAME,
+});
\ No newline at end of file
diff --git a/client/html-js/js/index.js b/src/public/js/old_index.js
similarity index 100%
rename from client/html-js/js/index.js
rename to src/public/js/old_index.js
diff --git a/src/public/js/profile.js b/src/public/js/profile.js
new file mode 100644
index 0000000..2367371
--- /dev/null
+++ b/src/public/js/profile.js
@@ -0,0 +1,42 @@
+document.querySelector("#singout").addEventListener("click", () => {
+ window.localStorage.removeItem("token");
+ window.location.href = '/';
+})
+
+document.addEventListener("DOMContentLoaded", async () => {
+ const nameElement = document.getElementById('name');
+ const emailElement = document.getElementById('email');
+ const phoneElement = document.getElementById('phone');
+ const addressElement = document.getElementById('address');
+
+ const token = localStorage.getItem('token');
+
+ if (!token) {
+ window.location.href = '/';
+ return;
+ }
+
+ try {
+ const response = await fetch('/auth/profile', {
+ headers: {
+ 'Authorization': `Bearer ${token}`,
+ 'Content-Type': 'application/json'
+ }
+ }); // Ruta que devuelve los datos del usuario
+ const userData = await response.json();
+
+ if (response.ok) {
+ // Asignar los datos del usuario a los elementos HTML
+ nameElement.textContent = userData.name || "No disponible";
+ emailElement.textContent = userData.email || "No disponible";
+ phoneElement.textContent = userData.phone || "No disponible";
+ addressElement.textContent = userData.address || "No disponible";
+ } else {
+ console.error("Error al obtener los datos del usuario:", userData.message);
+ alert("Error al cargar los datos del perfil.");
+ }
+ } catch (error) {
+ console.error("Error en la solicitud:", error);
+ alert("Hubo un problema al cargar los datos del perfil.");
+ }
+});
diff --git a/src/routes/auth.routes.js b/src/routes/auth.routes.js
new file mode 100644
index 0000000..9038a39
--- /dev/null
+++ b/src/routes/auth.routes.js
@@ -0,0 +1,101 @@
+import { Router } from "express";
+import User from "../models/User.js";
+import bcrypt from "bcrypt";
+import jwt from "jsonwebtoken";
+import { config } from "dotenv";
+
+config();
+
+const router = Router();
+
+const verifyToken = (req, res, next) => {
+ const token = req.headers['authorization'];
+
+ if (!token) {
+ return res.status(403).json({ message: 'No se envió token' });
+ }
+
+ // Quitar el prefijo 'Bearer ' del token
+ const actualToken = token.split(' ')[1];
+
+ jwt.verify(actualToken, process.env.JWT_SECRET, (err, decoded) => {
+ if (err) {
+ return res.status(401).json({ message: 'Token inválido o expirado' });
+ }
+
+ req.userId = decoded.userId;
+ next(); // Pasar al siguiente middleware o controlador
+ });
+};
+
+router.post("/register", async (req, res) => {
+ try {
+ const { name, email, password, phone, address } = req.body;
+
+ // Verificar si el usuario ya existe
+ const existingUser = await User.getByEmail(email);
+
+ if (existingUser) {
+ return res.status(400).json({ message: "El usuario ya existe." });
+ }
+
+ const hashedPassword = bcrypt.hashSync(password, bcrypt.genSaltSync(10));
+
+ // Crear el nuevo usuario
+ const userId = await User.create({ name, email, password: hashedPassword, phone, address });
+
+ if (!userId) throw new Error("No se pudo registrar el usuario.");
+
+ return res.status(201).json({ message: "Usuario registrado exitosamente." });
+ } catch (error) {
+ return res.status(500).json({ message: "Error en el servidor.", error });
+ }
+});
+
+router.post("/login", async (req, res) => {
+ try {
+ const { email, password } = req.body;
+
+ // Buscar al usuario por email
+ const user = await User.getByEmail(email);
+
+ if (!user) {
+ return res.status(404).json({ message: "Usuario no encontrado." });
+ }
+
+ // Comparar la contraseña
+ const isMatch = bcrypt.compareSync(password, user.password);
+ if (!isMatch) {
+ return res.status(401).json({ message: "Contraseña incorrecta." });
+ }
+
+ // Crear el token JWT
+ const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET, { expiresIn: '1h' });
+
+ return res.status(200).json({ message: "Inicio de sesión exitoso.", token });
+ } catch (error) {
+ return res.status(500).json({ message: "Error en el servidor.", error });
+ }
+});
+
+router.get('/profile', verifyToken, async (req, res) => {
+ try {
+ // Supón que tienes un middleware de autenticación que agrega userId al objeto req
+ const userId = req.userId;
+
+ // Obtener los datos del usuario
+ const user = await User.getById(userId);
+
+ if (!user) {
+ return res.status(404).json({ message: "Usuario no encontrado" });
+ }
+
+ res.json(user);
+ } catch (error) {
+ console.error("Error al obtener el perfil del usuario:", error);
+ res.status(500).json({ message: "Error del servidor" });
+ }
+});
+
+
+export default router;
diff --git a/src/routes/contact.routes.js b/src/routes/contact.routes.js
new file mode 100644
index 0000000..548ca5c
--- /dev/null
+++ b/src/routes/contact.routes.js
@@ -0,0 +1,72 @@
+import { Router } from 'express';
+import path from 'path';
+import { pool } from '../db.js'; // conexión a la base de datos
+
+const router = Router();
+
+// laruta del formulario de contacto
+router.get('/contacto', (req, res) => {
+ res.sendFile(path.join(process.cwd(), 'src/pages/contacto.html'));
+});
+
+
+// Ruta para manejar el formulario de contacto
+router.post('/contacto', async (req, res) => {
+ console.log('Se ha recibido una solicitud POST a /contacto');
+ console.log('Datos recibidos del formulario:', req.body);
+
+ const { nombre, email, mensaje } = req.body;
+
+ try {
+ const query = `
+ INSERT INTO mensajes_contacto (nombre, email, mensaje)
+ VALUES (?, ?, ?);
+ `;
+ await pool.query(query, [nombre, email, mensaje]);
+ console.log('Datos guardados en la base de datos correctamente.');
+
+ // Enviar HTML para mostrar mensaje y redirigir al inicio con contador regresivo 10seg
+ res.setHeader('Content-Type', 'text/html');
+ res.send(`
+
+
+
+
+
+ Mensaje Enviado
+
+
+
+
+
+
¡Gracias por contactarnos!
+
Responderemos tu mensaje a la brevedad. vas a volver al inicio en 10 segundos.
+
+
+
+ `);
+ } catch (error) {
+ console.error('Error al guardar el mensaje de contacto:', error);
+ res.status(500).send('Hubo un error al enviar tu mensaje. Por favor, intenta de nuevo más tarde.');
+ }
+ });
+
+
+
+export default router;
diff --git a/src/routes/cp.routes.js b/src/routes/cp.routes.js
new file mode 100644
index 0000000..e344aa8
--- /dev/null
+++ b/src/routes/cp.routes.js
@@ -0,0 +1,20 @@
+import { Router } from "express";
+import CodigoPostal from "../models/CodigoPostal.js";
+
+const router = Router();
+
+router.get("/", async (req, res) => {
+ return res.json(await CodigoPostal.getAll());
+});
+
+router.get("/:cp", async (req, res) => {
+ const result = await CodigoPostal.getByCP(req.params.cp);
+
+ if (!result) return res.status(404).json({
+ message: "Envio no disponible para esa zona."
+ })
+
+ return res.json(result);
+})
+
+export default router;
\ No newline at end of file
diff --git a/src/routes/mp.routes.js b/src/routes/mp.routes.js
new file mode 100644
index 0000000..cddb166
--- /dev/null
+++ b/src/routes/mp.routes.js
@@ -0,0 +1,96 @@
+import { Router } from "express";
+import { MercadoPagoConfig, Preference } from "mercadopago";
+import { body, validationResult } from "express-validator";
+
+const router = Router();
+
+const client = new MercadoPagoConfig({
+ accessToken: "APP_USR-3338153327237083-091421-a3dcc8f1836ba5dca212648316f6ecd1-1105831639"
+});
+
+/**
+ * @param {Express.Request} request
+ * @param {Express.Response} res
+ * @param {import("express").NextFunction} next
+*/
+const preference_error_handler = (request, res, next) => {
+
+ const errors = validationResult(request);
+
+ if (!errors.isEmpty()) {
+ console.log({ errors: errors.array() })
+ return res.status(400).json({ errors: errors.array() });
+ }
+
+ const { products } = request.body;
+
+ res.locals.products = products.map(product => ({
+ title: product.name,
+ unit_price: Number(product.price),
+ quantity: Number(product.quantity),
+ currency_id: "ARS"
+ }));
+
+ next();
+
+}
+
+const preference_validator = [
+ body("products").exists("Tu carrito esta vacio"),
+ body("products").isArray().withMessage("Este campo debe ser una lista de productos"),
+ body("products.*.name").exists().isString().withMessage("El nombre del producto debe ser un string"),
+ body("products.*.price").exists().isNumeric().withMessage("El precio unitario debe ser un numero"),
+ body("products.*.quantity").exists().isNumeric().withMessage("La cantidad debe ser un numero"),
+ preference_error_handler
+];
+
+router.post("/preference", ...preference_validator, async function (req, res) {
+
+ if (req.query.test != undefined) {
+ console.log("A continuación se muestra los datos sobre los productos: ");
+ console.log(res.locals.products);
+ return res.status(200).json({
+ id: -1
+ });
+ }
+
+ const data = {
+ items: res.locals.products,
+ back_urls: {
+ "success": `http://localhost:8080/mp/feedback`,
+ "failure": `http://localhost:8080/mp/feedback`,
+ "pending": `http://localhost:8080/mp/feedback`
+ },
+ auto_return: "approved",
+ };
+
+ try {
+
+ const preference = new Preference(client);
+ const result = await preference.create({ body: data });
+
+ return res.status(200).json({
+ id: result.id
+ });
+
+ } catch (e) {
+
+ console.log(e);
+
+ return res.status(500).json({
+ message: "Hubo un error al pagar con Mercado Pago",
+ id: -1
+ });
+
+ }
+});
+
+router.get('/feedback', function (req, res) {
+ return res.json({
+ Payment: req.query.payment_id,
+ Status: req.query.status,
+ MerchantOrder: req.query.merchant_order_id
+ });
+});
+
+export default router;
\ No newline at end of file
diff --git a/src/routes/products.routes.js b/src/routes/products.routes.js
new file mode 100644
index 0000000..c221a75
--- /dev/null
+++ b/src/routes/products.routes.js
@@ -0,0 +1,16 @@
+import { Router } from "express";
+import Product from "../models/Product.js";
+
+const router = Router();
+
+router.get("/", async (_req, res) => {
+
+ res.status(200).json({
+ products: await Product.getAll()
+ });
+
+ return;
+
+});
+
+export default router;
\ No newline at end of file
diff --git a/src/server.js b/src/server.js
new file mode 100644
index 0000000..457fa66
--- /dev/null
+++ b/src/server.js
@@ -0,0 +1,30 @@
+import express from "express";
+import cors from "cors";
+import path from "path";
+import { fileURLToPath } from "url";
+
+const app = express();
+
+const fromRoot = (...p) => path.join(
+ path.dirname(fileURLToPath(import.meta.url)),
+ ...p
+)
+
+app.use((req, _res, next) => {
+ req.fromRoot = fromRoot;
+ return next();
+});
+
+app.use(express.json());
+
+app.use(express.urlencoded({
+ extended: true
+}));
+
+app.use(cors());
+
+app.set("port", process.env.PORT ?? 8080);
+
+app.use(express.static(fromRoot("public")));
+
+export default app;
\ No newline at end of file