commit ec253bd419e8d96cc87f165114c31c99072d2336 Author: dmunozv Date: Mon Jun 1 10:14:22 2026 -0400 commit inicial diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ac2722a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +node_modules +npm-debug.log +yarn-debug.log +yarn-error.log +.git +.gitignore +.dockerignore +Dockerfile +.env +.env.* +.vscode +.idea +README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f038e0b --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# Dependency directories +node_modules/ + +# Logs +logs/ +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# IDEs and OS files +.idea/ +.vscode/ +.DS_Store +Thumbs.db + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..01084c5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +# Use the official Node.js 20 lightweight Alpine image as the base +FROM node:20-alpine + +# Set the working directory inside the container +WORKDIR /usr/src/app + +# Copy dependency manifests +COPY package.json yarn.lock ./ + +# Install dependencies (using --frozen-lockfile to guarantee exact versions from yarn.lock) +RUN yarn install --frozen-lockfile + +# Copy the rest of the application code +COPY . . + +# Expose the port that the API server listens on (default is 3150) +EXPOSE 3150 + +# Set environment variables +ENV NODE_ENV=production + +# By default, run the API server. +# To run the cron process, you can override the CMD at runtime: docker run node src/cronIndex.js +CMD [ "node", "src/apiIndex.js" ] diff --git a/otros/codigos_ubigeo.xlsx b/otros/codigos_ubigeo.xlsx new file mode 100644 index 0000000..1d9d2fd Binary files /dev/null and b/otros/codigos_ubigeo.xlsx differ diff --git a/package.json b/package.json new file mode 100644 index 0000000..7b6ba08 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "uc", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "nodemon ./src/apiIndex.js", + "cron": "nodemon ./src/cronIndex.js" + }, + "type": "module", + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "date-fns": "^3.3.1", + "date-fns-tz": "^2.0.0", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "moment": "^2.30.1", + "moment-timezone": "^0.5.44", + "morgan": "^1.10.0", + "mysql2": "^3.6.5", + "node-cron": "^3.0.3", + "node-fetch": "^3.3.2", + "nodemon": "^3.0.2", + "sequelize": "^6.35.2", + "swagger-jsdoc": "^6.2.8", + "swagger-ui-express": "^5.0.0", + "winston": "^3.11.0" + } +} diff --git a/src/apiIndex.js b/src/apiIndex.js new file mode 100644 index 0000000..4e2e57d --- /dev/null +++ b/src/apiIndex.js @@ -0,0 +1,73 @@ +import dotenv from 'dotenv'; +import express, { json } from 'express'; +import cors from 'cors'; +import morgan from 'morgan'; +import winston from 'winston'; +import { swaggerSpec, swaggerUI } from '../swagger.js'; // Importa la configuración de Swagger +import https from 'https'; +import v1Router from './v1/routes/index.js'; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + + +dotenv.config(); + +const app = express(); +const port = process.env.PORT || 3150; + +// Configuración de Winston para el logging +const logger = winston.createLogger({ + level: 'info', + format: winston.format.combine( + winston.format.timestamp(), + winston.format.json() + ), + transports: [ + new winston.transports.File({ filename: 'api.log' }) + ], +}); + + +// Middlewares +app.use(morgan('combined', { stream: { write: message => logger.info(message.trim()) } })); +app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerSpec)); + +app.use(json()); +app.use(cors({ + origin: ['*'], + methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'], + allowedHeaders: ['Content-Type', 'Authorization', 'x-access-token'], +})); + +// Rutas +app.use("/api/v1/guias", v1Router); + +// Manejador de errores +app.use((error, req, res, next) => { + logger.error(error.message); + res.status(500).json({ mensaje: error.message || 'Error interno del servidor' }); +}); + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const privateKeyPath = path.join(__dirname, 'certificados', 'privateKey.key'); +const certPath = path.join(__dirname, 'certificados', 'certificado.crt'); + +const httpsOptions = { + key: fs.readFileSync(privateKeyPath), + cert: fs.readFileSync(certPath) +}; + + +const server = https.createServer(httpsOptions, app); + +server.listen(port, () => { + console.log(`Excecuting on port ${port}`) +}) + + +// Iniciar el servidor +// app.listen(port, () => { +// console.log(`Excecuting Server on port ${port}`); +// }); diff --git a/src/certificados/certificado.crt b/src/certificados/certificado.crt new file mode 100644 index 0000000..d129917 --- /dev/null +++ b/src/certificados/certificado.crt @@ -0,0 +1,60 @@ +-----BEGIN CERTIFICATE----- +MIIE/DCCA+SgAwIBAgISBHsV0eMgVVb6w9yJeUIsAHWzMA0GCSqGSIb3DQEBCwUA +MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD +EwJSMzAeFw0yNDAzMDYxNzE3MTNaFw0yNDA2MDQxNzE3MTJaMCIxIDAeBgNVBAMT +F3dzLWFwaS5jYXRvbGljYS5zaWFsLmNsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAhpblspKKXYj5pkJt1fq2KLAgVsojq06fpzUXLBofdQvIZXimXuQI +CpyzEQNupxmBvaIa6+u2mIU+X4N4F0IMZbbIZkhb2tzLRDgPlKms01ChCG1e8P+V +9/88+CNBChLODrpdjFZhWr8iuyRpfnc8Z1sGGJpqfy3QlykiAPHRyWX/C7scLykg +Sbvm5FB2NA2fka2E2MugRTFuL58v2POQ4VfC5ilDNdUbS5SjNcp0ZQIDcERQiaR7 +ZmdtWZ9KRjDfdhTXeY+gkAHGC2qblJyCz1TYIvme0zkyoXWiQxCeCFgTq4//UBtA +1NrV2KweP8ztFQOVePzhvQg8QVReCDZoUwIDAQABo4ICGjCCAhYwDgYDVR0PAQH/ +BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8E +AjAAMB0GA1UdDgQWBBSL8BMaV5muVX11/Zt2x9lZxZvZ1TAfBgNVHSMEGDAWgBQU +LrMXt1hWy65QCUDmH6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGG +FWh0dHA6Ly9yMy5vLmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmku +bGVuY3Iub3JnLzAiBgNVHREEGzAZghd3cy1hcGkuY2F0b2xpY2Euc2lhbC5jbDAT +BgNVHSAEDDAKMAgGBmeBDAECATCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB3AEiw +42vapkc0D+VqAvqdMOscUgHLVt0sgdm7v6s52IRzAAABjhT72ugAAAQDAEgwRgIh +ALgZcElG+WObTY4PtnshKirY85359FzxtX7oOEutXbXrAiEA+7Pe2hNWWjOVVy9G +O41co802R+DHCbvRL3iGdU9yezoAdgCi4r/WHt4vLweg1k5tN6fcZUOwxrUuotq3 +iviabfUX2AAAAY4U+9sLAAAEAwBHMEUCIHVyWgfvBa7/G1w7kCuL90sBC0U7IQb+ +2DWWGam9MaMVAiEA+4uonnOGe0YmhBOXI+xFUvYooDHh3bBtqjRZmrCa8jYwDQYJ +KoZIhvcNAQELBQADggEBAKI0cK+PPO/oYi8PGcY54CaWE+ajVcdhUzsJJxDQgtFe +JGcA39qXAwtto7TzPNOfP2ah/NThLw1Zx+83H2os4gbQQbP1LCx2r0B9vUlHRfrt +NYyFMCpqcH5imdTo3/fD4N0CGMM5/6JwwQbNFm+dLu/pArlawpuL5f+RsTeXW2sV +WumNXHkvz1x4mgUOvuWGgQNDnkpY371RfKNJDxn2/WjkIrl5YRIaT26lzT3WSROq +RiSeaHwThkqtvf8nRByo/IasuJns0JzrW4DnX4p+U1aQXkyQ0JSB/fVWpLeNHtsA +XSaHunMNKWTch4fAuP8dRp/yZ7XMKmNCPg3/3d7gHpc= +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw +WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP +R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx +sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm +NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg +Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG +/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB +Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA +FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw +AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw +Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB +gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W +PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl +ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz +CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm +lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4 +avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2 +yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O +yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids +hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+ +HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv +MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX +nLRbwHOoq7hHwg== +-----END CERTIFICATE----- diff --git a/src/certificados/privateKey.key b/src/certificados/privateKey.key new file mode 100644 index 0000000..482be70 --- /dev/null +++ b/src/certificados/privateKey.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCGluWykopdiPmm +Qm3V+rYosCBWyiOrTp+nNRcsGh91C8hleKZe5AgKnLMRA26nGYG9ohrr67aYhT5f +g3gXQgxltshmSFva3MtEOA+UqazTUKEIbV7w/5X3/zz4I0EKEs4Oul2MVmFavyK7 +JGl+dzxnWwYYmmp/LdCXKSIA8dHJZf8LuxwvKSBJu+bkUHY0DZ+RrYTYy6BFMW4v +ny/Y85DhV8LmKUM11RtLlKM1ynRlAgNwRFCJpHtmZ21Zn0pGMN92FNd5j6CQAcYL +apuUnILPVNgi+Z7TOTKhdaJDEJ4IWBOrj/9QG0DU2tXYrB4/zO0VA5V4/OG9CDxB +VF4INmhTAgMBAAECggEACGbFAeep4Xracql058WVt2Z/LkvB/ECVML/cqXEcA5dv +s/3bDNNZOShc+TPopV+vPKIw4gc9x7mRki7HwVPrKDJHwjLEIR5lReXl+xa4ZhyD +YN5K7epWdzukl6zDs5hG6p5xloAR5bNGvL3iI/XXfHAvKjwBZ9z5R2ZW7A4sVVEE +dNzXzrD6Rlme7UQmZcKoL5qGzWSAPYSvlP00n63d7Z2gtSnX5k8dKaeP49GN0sFw +fbh0KzPmdCfz7X7kmevcsLmEdSYCoBrJ2PW+8cUu/yGpLUMvF9WrmyPKLxHX8G4K +WDZWuQSQtx1GU+Y5C7WPkiJwh7H9twIvj9PW1kdCkQKBgQC7aLHcKHdP2taU95bh +LrTRFAAYx1ZBtuspZRTcOUHB9ZYUq5KbuDc9pPV0cPym6Zg1VOxA8zmZJbL3V4GZ +mDYJsfZQjqK+QzFWhhn8RhPohoa614fC+wscpsbozKyMXKa3Mf7+QxAWo376L/DS +7ZhpyKuo5VXsVaRrIfV/YZHP+QKBgQC32UVoGqt/ADRmNN7mEBtMIMT88AYRpe7X +3bO2wIQ29IuIIgYpU8CQ8ltA1FuPgxgAmJAS3O/RSoEEl389nP4dAP456DSMUBrX +idiLUAcFhUZ9+uLpfCUcH6Pw6fe/rbJQYb6gWR5Uc7C/HQbTzfF53kVcJFvXXgJ5 +k8zWYi2lqwKBgDzAgq/I2myjl14xKNMUrf79Cc7+h6LD5lXD89A0K3Hx59YJjHw4 +aofsOrmlivGc1f+r6O5hKnHP+8Ucs+GTqyjXbO7OXklpRMw0qqXSHdAKFBDrn5IA +iaifE+oRt3nE6zKF3ZCVMtjz5Uy7T8lAxmC8cZFNzt3PIX6tQoUpnvgZAoGAZYim +3kGsaO1SAwg7+c73ZGnMoOxmTaTYbXtRXyKfYkJYNQylXnmUpfhTEVC2aGG8Bcg7 ++U7vWyTMcB7C9OIZLSd5P73QF5W93T+Ryg6echwSvEysuMoJLKkEv25XlxJ0ohP5 +VVEigP2LpWCAfsUEEYwBvkuONTkEIOTRgayjDRUCgYA+2OUrH7AuhIKEfR+ckXqQ +/kBDNhz0ZS73BAAdRQiYiNO350m6m6C5kUEexeH4A8HzWQh4zvr28goMnYE6qrJA +CYeHRObfWjfVAs0gEJy8e9z5ohAOFog8Yh/y/WWN8UW72+1SvxUw5gOPo5DCwuL/ +lExkIN6WrdGmTu6SzCzKug== +-----END PRIVATE KEY----- diff --git a/src/controllers/guiasController.js b/src/controllers/guiasController.js new file mode 100644 index 0000000..25d17d9 --- /dev/null +++ b/src/controllers/guiasController.js @@ -0,0 +1,31 @@ +import { unlinkSync } from 'fs'; +import { enviarGuias } from '../services/envioGuia.js'; + +const enviarGuiasController = async (req, res, next) => { + try { + let idGuia = req.params.idGuia; + const resGuia = await enviarGuias(idGuia); + + if (!resGuia) { + res.status(404).send("Guía no encontrada."); + } + + // Por ejemplo: + // if (body.estados) { + // let estados = body.estados; + // encabezados = await obtenerEncabezadosPorEstado(estados); + // } else { + // encabezados = await obtenerEncabezados(); + // } + + res.status(200).send("Guia enviada exitosamente."); + } catch (error) { + // Pasar el error al middleware de errores + next(error); + } +} + +export { + enviarGuiasController + +} \ No newline at end of file diff --git a/src/cronIndex.js b/src/cronIndex.js new file mode 100644 index 0000000..96fc69e --- /dev/null +++ b/src/cronIndex.js @@ -0,0 +1,52 @@ +import dotenv from 'dotenv'; +import winston from 'winston'; +import cron from 'node-cron'; +import { envioDte } from './services/envioDte.js'; +import { envioEstados } from './services/envioEstado.js'; + +import Logger from './utils/logger.js'; + +dotenv.config(); + +// Configuración de Winston para logging +// const Logger = winston.createLogger({ +// level: 'info', +// format: winston.format.combine( +// winston.format.timestamp(), +// winston.format.json() +// ), +// transports: [ +// new winston.transports.File({ filename: 'cron.log' }), + +// new winston.transports.Console({ +// format: winston.format.simple(), +// }), +// ], +// }); + +cron.schedule('*/10 * * * *', async () => { + Logger.info({ message: 'Iniciando el proceso de envío de Dte...', proceso: 'cron' }); + + try { + await envioDte(); + Logger.info({ message: 'Proceso de envío de Dte finalizado.', proceso: 'cron' }); + + + } catch (error) { + Logger.error('Error al enviar Dte: ', error); + + } +}); + +cron.schedule('*/10 * * * *', async () => { + Logger.info({ message: 'Iniciando el proceso de actualización de estados...', proceso: 'cron' }); + + try { + await envioEstados(); + Logger.info({ message: 'Proceso de actualización de estados finalizado.', proceso: 'cron' }); + + } catch (error) { + Logger.error('Error al enviar estados: ', error); + + } +}); \ No newline at end of file diff --git a/src/database/UC/config/config.json b/src/database/UC/config/config.json new file mode 100644 index 0000000..1eda0f8 --- /dev/null +++ b/src/database/UC/config/config.json @@ -0,0 +1,10 @@ +{ + "dbCentral": { + "username": "sialuc", + "password": "Sialuc2930.,", + "database": "centraluc", + "host": "cloudoracle.sial.cl", + "dialect": "mysql", + "port": "3306" + } +} \ No newline at end of file diff --git a/src/database/UC/config/db.models.js b/src/database/UC/config/db.models.js new file mode 100644 index 0000000..7dca9de --- /dev/null +++ b/src/database/UC/config/db.models.js @@ -0,0 +1,34 @@ +import Sequelize from 'sequelize'; +import dbs from './config.json' assert {type: 'json'}; +// import { crm as dbCrmConfig } from './config.json'; +// import { store as dbStoreConfig } from './config.json'; + +const dbCentralConfig = dbs.dbCentral; +// const dbEcommerceConfig = dbs.dbEcommerce; + +const dbCentral = new Sequelize(dbCentralConfig.database, dbCentralConfig.username, dbCentralConfig.password, { + host: dbCentralConfig.host, + dialect: dbCentralConfig.dialect, + port: dbCentralConfig.port, + define: { + freezeTableName: true + } + +}); + +// const dbEcommerce = new Sequelize(dbEcommerceConfig.database, dbEcommerceConfig.username, dbEcommerceConfig.password, { +// host: dbEcommerceConfig.host, +// dialect: dbEcommerceConfig.dialect, +// port: dbEcommerceConfig.port, +// define: { +// freezeTableName: true +// } + +// }); + + + +export { + dbCentral, + +}; \ No newline at end of file diff --git a/src/database/UC/models/central/arti.js b/src/database/UC/models/central/arti.js new file mode 100644 index 0000000..b201777 --- /dev/null +++ b/src/database/UC/models/central/arti.js @@ -0,0 +1,146 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const Arti = dbCentral.define('arti', { + CODINT_MA: { + type: DataTypes.DECIMAL(11, 0), + allowNull: false, + primaryKey: true, + defaultValue: '0', + }, + CLASE_MA: { + type: DataTypes.STRING(15), + allowNull: true, + defaultValue: '0', + }, + CODMOD_MA: { + type: DataTypes.STRING(15), + allowNull: true, + defaultValue: null, + }, + MODELO_MA: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + CODCOL_MA: { + type: DataTypes.STRING(5), + allowNull: true, + defaultValue: null, + }, + COLOR_MA: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + TALNUM_MA: { + type: DataTypes.STRING(5), + allowNull: true, + defaultValue: null, + }, + MARCA_MA: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + GENERO_MA: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + MATERIAL_MA: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: null, + }, + LINEA_MA: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + TEMPORADA_MA: { + type: DataTypes.STRING(10), + allowNull: true, + defaultValue: null, + }, + SELECCION_MA: { + type: DataTypes.CHAR(1), + allowNull: true, + defaultValue: null, + }, + ESTADO_MA: { + type: DataTypes.CHAR(1), + allowNull: true, + defaultValue: null, + }, + ESTILO_MA: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + KANBAN_MA: { + type: DataTypes.DECIMAL(5, 0), + allowNull: true, + defaultValue: '0', + }, + CLASIFICACION_MA: { + type: DataTypes.CHAR(1), + allowNull: true, + defaultValue: null, + }, + PRECIO_MA: { + type: DataTypes.DOUBLE(10, 2), + allowNull: true, + defaultValue: null, + }, + NUMERO_PROMOCION: { + type: DataTypes.DECIMAL(8, 0), + allowNull: true, + defaultValue: null, + }, + PRECIO_PROMOCION: { + type: DataTypes.DECIMAL(8, 0), + allowNull: true, + defaultValue: null, + }, + TIPOPRO_MA: { + type: DataTypes.STRING(1), + allowNull: true, + defaultValue: null, + }, + CODIVA_MA: { + type: DataTypes.INTEGER(11), + allowNull: true, + defaultValue: '1', + }, + PRENDA_MA: { + type: DataTypes.STRING(30), + allowNull: true, + defaultValue: null, + }, + TEMPORADA_COMERCIAL: { + type: DataTypes.STRING(30), + allowNull: true, + defaultValue: null, + }, + GRUPO_MA: { + type: DataTypes.STRING(30), + allowNull: true, + defaultValue: '', + }, + empaque_ma: { + type: DataTypes.INTEGER(11), + allowNull: true, + defaultValue: '1', + }, +}, { + timestamps: false, // No se incluyen timestamps + collate: 'latin1_swedish_ci', // No se incluye collate + indexes: [], // No se incluyen índices en este ejemplo + sync: { force: false }, // No se sincroniza automáticamente + primaryKey: true, // Se especifica que `CODINT_MA` es la llave primaria +}); + +export default Arti; + diff --git a/src/database/UC/models/central/cadenas.js b/src/database/UC/models/central/cadenas.js new file mode 100644 index 0000000..72219f9 --- /dev/null +++ b/src/database/UC/models/central/cadenas.js @@ -0,0 +1,58 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const Cadenas = dbCentral.define('cadenas', { + codigo_cad: { + type: DataTypes.DECIMAL(5, 0), + allowNull: false, + primaryKey: true + }, + nombre_cad: { + type: DataTypes.STRING(20), + defaultValue: '', + }, + division_cad: { + type: DataTypes.INTEGER(11), + defaultValue: 0, + }, + empresa_cad: { + type: DataTypes.INTEGER(10), + defaultValue: 1, + }, + mensajeurl_cad: { + type: DataTypes.STRING(70), + defaultValue: null, + }, + rutaimagen_cad: { + type: DataTypes.STRING(70), + defaultValue: null, + }, + mensajemail1_cad: { + type: DataTypes.STRING(80), + defaultValue: null, + }, + cuentamail_cad: { + type: DataTypes.STRING(30), + defaultValue: null, + }, + clavemail_cad: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + servidormail_cad: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + puertomail_cad: { + type: DataTypes.INTEGER(5), + defaultValue: null, + }, +}, { + timestamps: false, // No se incluyen timestamps + collate: 'latin1_swedish_ci', // No se incluye collate + sync: { force: false }, // No se sincroniza automáticamente + primaryKey: true, // Se especifica que `codigo_cad` es la llave primaria +}); + +export default Cadenas; diff --git a/src/database/UC/models/central/clie.js b/src/database/UC/models/central/clie.js new file mode 100644 index 0000000..8abedd6 --- /dev/null +++ b/src/database/UC/models/central/clie.js @@ -0,0 +1,136 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const Clie = dbCentral.define('clie', { + RUTCLI_CL: { + type: DataTypes.STRING(11), + allowNull: false, + primaryKey: true, + defaultValue: '', + }, + CORREL_CL: { + type: DataTypes.DECIMAL(5, 0), + allowNull: false, + primaryKey: true, + defaultValue: 0, + }, + nombre_cl: { + type: DataTypes.STRING(100), + allowNull: true, + defaultValue: '', + }, + direcc_cl: { + type: DataTypes.STRING(500), + allowNull: true, + }, + comuna_cl: { + type: DataTypes.STRING(100), + allowNull: true, + }, + ciudad_cl: { + type: DataTypes.STRING(100), + allowNull: true, + }, + ESTADO_CL: { + type: DataTypes.CHAR(1), + allowNull: true, + }, + FULCOM_CL: { + type: DataTypes.DATE, + allowNull: true, + }, + GIRO_CL: { + type: DataTypes.STRING(40), + allowNull: true, + }, + DESCTO_CL: { + type: DataTypes.FLOAT, + allowNull: true, + defaultValue: 0, + }, + FONO_CL: { + type: DataTypes.STRING(15), + allowNull: true, + }, + FAX_CL: { + type: DataTypes.STRING(15), + allowNull: true, + defaultValue: '0', + }, + email_cl: { + type: DataTypes.STRING(50), + allowNull: true, + }, + FECCRE_CL: { + type: DataTypes.DATE, + allowNull: true, + }, + ESTADOENV: { + type: DataTypes.INTEGER, + allowNull: true, + defaultValue: 0, + }, + AGENTERETE_CL: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: 0, + }, + AGENTEPERC_CL: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: 0, + }, + dnireplegal_cl: { + type: DataTypes.STRING(11), + allowNull: true, + }, + nombrereplegal_cl: { + type: DataTypes.STRING(50), + allowNull: true, + }, + formapago_cl: { + type: DataTypes.STRING(50), + allowNull: false, + defaultValue: '', + }, + lineacred_cl: { + type: DataTypes.DOUBLE(14, 2), + allowNull: true, + }, + datosalbaran_cl: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: 0, + }, + origen_cl: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: 1, + }, + apellido_cl: { + type: DataTypes.STRING(50), + allowNull: true, + }, + ubigeo_cl: { + type: DataTypes.CHAR(10), + allowNull: false, + defaultValue: '', + }, + provincia_cl: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: '', + }, + cuotas_cl: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 99, + }, +}, { + timestamps: false, +}, { + indexes: [], +}); + +export default Clie; \ No newline at end of file diff --git a/src/database/UC/models/central/ctrlSalesforce.js b/src/database/UC/models/central/ctrlSalesforce.js new file mode 100644 index 0000000..5af4313 --- /dev/null +++ b/src/database/UC/models/central/ctrlSalesforce.js @@ -0,0 +1,25 @@ +// Importar Sequelize y la conexión a la base de datos +import { Sequelize, DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const CtrlSalesforce = dbCentral.define('ctrl_salesforce', { + tabla: { + type: DataTypes.CHAR(30), + primaryKey: true, + allowNull: false, + collate: 'latin1_swedish_ci', + }, + fecha_mutt: { + type: DataTypes.DATE, + allowNull: false, + }, + fecha_ingenia: { + type: DataTypes.DATE, + allowNull: false, + }, +},{ + timestamps: false, +}); + + +export default CtrlSalesforce; \ No newline at end of file diff --git a/src/database/UC/models/central/dtfa.js b/src/database/UC/models/central/dtfa.js new file mode 100644 index 0000000..bf26db9 --- /dev/null +++ b/src/database/UC/models/central/dtfa.js @@ -0,0 +1,106 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + + +const Dtfa = dbCentral.define('Dtfa', { + NLOCAL_DF: { + type: DataTypes.DECIMAL(5, 0), + primaryKey: true + }, + FECDOC_DF: { + type: DataTypes.DECIMAL(11, 0), + primaryKey: true + }, + TIPDOC_DF: { + type: DataTypes.CHAR(2), + primaryKey: true + }, + NUMFAC_DF: { + type: DataTypes.DECIMAL(11, 0), + primaryKey: true + }, + TERMINAL_DF: { + type: DataTypes.DECIMAL(5, 0), + primaryKey: true + }, + TRANSACCION_DF: { + type: DataTypes.DECIMAL(11, 0), + primaryKey: true + }, + CODPRO_DF: { + type: DataTypes.STRING(30), + primaryKey: true + }, + CODEAN_DF: { + type: DataTypes.STRING(30) + }, + CANPED_DF: { + type: DataTypes.DECIMAL(11, 0) + }, + PREVEN_DF: { + type: DataTypes.DOUBLE(10, 2) + }, + DSCPOR_DF: { + type: DataTypes.DOUBLE(10, 2), + primaryKey: true + }, + DSCPES_DF: { + type: DataTypes.DOUBLE(10, 2) + }, + PREFIN_DF: { + type: DataTypes.DOUBLE(10, 2) + }, + COSUNI_DF: { + type: DataTypes.DOUBLE(10, 2) + }, + NUMERO_REGISTRO: { + type: DataTypes.DECIMAL(11, 0) + }, + COSPRO_DF: { + type: DataTypes.DOUBLE(10, 2) + }, + COSULT_DF: { + type: DataTypes.DOUBLE(10, 2) + }, + prenet_df: { + type: DataTypes.DOUBLE(10, 2) + }, + adicional1_df: { + type: DataTypes.STRING(20) + }, + adicional2_df: { + type: DataTypes.STRING(20) + }, + adicional3_df: { + type: DataTypes.STRING(20) + }, + adicional4_df: { + type: DataTypes.STRING(50) + }, + adicional5_df: { + type: DataTypes.STRING(50) + }, + adicional6_df: { + type: DataTypes.STRING(50) + }, + adicional7_df: { + type: DataTypes.STRING(50) + }, + adicional8_df: { + type: DataTypes.STRING(50) + }, + adicional9_df: { + type: DataTypes.STRING(50) + }, + adicional10_df: { + type: DataTypes.STRING(50) + } +}, { + tableName: 'dtfa', + timestamps: false +}); + + + +export default Dtfa; \ No newline at end of file diff --git a/src/database/UC/models/central/dtpg.js b/src/database/UC/models/central/dtpg.js new file mode 100644 index 0000000..e3a24f1 --- /dev/null +++ b/src/database/UC/models/central/dtpg.js @@ -0,0 +1,171 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; +import MaestroCi from './maestroCi.js'; + +const Dtpg = dbCentral.define('dtpg', { + NLOCAL_PG: { + type: DataTypes.DECIMAL(5, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + FECVTA_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + TIPDOC_PG: { + type: DataTypes.CHAR(2), + allowNull: true, + primaryKey: true, + defaultValue: null, + }, + NUMDOC_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + TERMINAL_PG: { + type: DataTypes.DECIMAL(5, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + TRANSACCION_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + TIPOPAGO_PG: { + type: DataTypes.DECIMAL(5, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + NUMCHQ_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + primaryKey: true, + defaultValue: '0', + }, + NUMERO_REGISTRO: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + primaryKey: true, + defaultValue: null, + }, + MONTO_PG: { + type: DataTypes.DOUBLE(10, 4), + allowNull: true, + defaultValue: null, + }, + MONTOADI_PG: { + type: DataTypes.DOUBLE(10, 4), + allowNull: true, + defaultValue: null, + }, + TARJETA_PG: { + type: DataTypes.STRING(20), + allowNull: true, + defaultValue: null, + }, + CODAUT_PG: { + type: DataTypes.STRING(12), + allowNull: true, + defaultValue: null, + }, + CUOTAS_PG: { + type: DataTypes.DECIMAL(5, 0), + allowNull: true, + defaultValue: '0', + }, + RUTPAGA_PG: { + type: DataTypes.STRING(13), + allowNull: true, + defaultValue: null, + }, + RUTCOMP_PG: { + type: DataTypes.STRING(13), + allowNull: true, + defaultValue: null, + }, + OCVAL_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + defaultValue: '0', + }, + FECOCVAL_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + defaultValue: '0', + }, + TIPOCAMBIO_PG: { + type: DataTypes.DOUBLE(10, 3), + allowNull: true, + defaultValue: '0.000', + }, + FONO_PG: { + type: DataTypes.STRING(15), + allowNull: true, + defaultValue: null, + }, + BANCO_PG: { + type: DataTypes.DECIMAL(5, 0), + allowNull: true, + defaultValue: '0', + }, + CTACTE_PG: { + type: DataTypes.STRING(15), + allowNull: true, + defaultValue: null, + }, + FECVEN_PG: { + type: DataTypes.DECIMAL(11, 0), + allowNull: true, + defaultValue: '0', + }, + user1_pg: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: ' ', + }, + user2_pg: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: ' ', + }, + user3_pg: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: ' ', + }, + user4_pg: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: ' ', + }, + user5_pg: { + type: DataTypes.STRING(50), + allowNull: true, + defaultValue: ' ', + }, +}, { + timestamps: false, // No se incluyen timestamps + indexes: [], // No se incluyen índices en este ejemplo +}); + +MaestroCi.hasMany(Dtpg, { + foreignKey: 'TIPOPAGO_PG', + sourceKey: 'CODIGO_CI' +}); + +Dtpg.belongsTo(MaestroCi, { + foreignKey: 'TIPOPAGO_PG', + targetId: 'CODIGO_CI' +}); + +export default Dtpg; diff --git a/src/database/UC/models/central/estadosOrdenes.js b/src/database/UC/models/central/estadosOrdenes.js new file mode 100644 index 0000000..1b3134c --- /dev/null +++ b/src/database/UC/models/central/estadosOrdenes.js @@ -0,0 +1,46 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const EstadoOrdenes = dbCentral.define('EstadoOrdenes', { + pedido: { + type: DataTypes.INTEGER, + primaryKey: true + }, + ordenecommerce: { + type: DataTypes.CHAR(22) + }, + idecommerce: { + type: DataTypes.INTEGER, + unique: true + }, + operador: { + type: DataTypes.INTEGER, + unique: true + }, + estado: { + type: DataTypes.TINYINT, + unique: true + }, + empresa: { + type: DataTypes.INTEGER, + unique: true + }, + observacion: { + type: DataTypes.STRING(500) + }, + fechahora: { + type: DataTypes.DATE + }, + EstadoEnvio: { + type: DataTypes.CHAR(1) + }, + FechaProceso: { + type: DataTypes.DATE + } +}, { + tableName: 'estado_ordenes', + timestamps: false // Suponiendo que no quieres que Sequelize maneje automáticamente campos como createdAt y updatedAt +}); + +export default EstadoOrdenes; \ No newline at end of file diff --git a/src/database/UC/models/central/labelOperador.js b/src/database/UC/models/central/labelOperador.js new file mode 100644 index 0000000..d743490 --- /dev/null +++ b/src/database/UC/models/central/labelOperador.js @@ -0,0 +1,51 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +import EstadoOrdenes from './estadosOrdenes.js'; + +const LabelOperador = dbCentral.define('LabelOperador', { + bodega: { + type: DataTypes.INTEGER, + allowNull: false, + primaryKey: true + }, + pedido: { + type: DataTypes.INTEGER, + allowNull: false, + primaryKey: true + }, + fecha: { + type: DataTypes.DATE, + allowNull: false + }, + operador: { + type: DataTypes.INTEGER, + allowNull: false, + primaryKey: true + }, + label: { + type: DataTypes.CHAR(50), + allowNull: false + }, + numeroorden: { + type: DataTypes.CHAR(25), + allowNull: false + }, + sitio: { + type: DataTypes.INTEGER, + allowNull: false + }, + estado: { + type: DataTypes.STRING, + allowNull: false + } +}, { + tableName: 'label_operador', + timestamps: false +}); + +LabelOperador.hasMany(EstadoOrdenes, { foreignKey: 'pedido', sourceKey: 'pedido' }); +EstadoOrdenes.belongsTo(LabelOperador, { foreignKey: 'pedido', targetKey: 'pedido' }); + +export default LabelOperador; \ No newline at end of file diff --git a/src/database/UC/models/central/locales.js b/src/database/UC/models/central/locales.js new file mode 100644 index 0000000..56ec749 --- /dev/null +++ b/src/database/UC/models/central/locales.js @@ -0,0 +1,199 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const Loca = dbCentral.define('loca', { + CODEMP_LOC: { + type: DataTypes.DECIMAL(5, 0), + allowNull: false, + primaryKey: true, + }, + cadena_loc: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + NLOCAL_LOC: { + type: DataTypes.DECIMAL(5, 0), + allowNull: false, + primaryKey: true, + }, + REGION_LOC: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + NOMBRE_LOC: { + type: DataTypes.STRING(25), + defaultValue: null, + }, + DIRECC_LOC: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + comuna_loc: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + ciudad_loc: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + NUMCAJ_LOC: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + TIPCAJ_LOC: { + type: DataTypes.STRING(25), + defaultValue: null, + }, + ADMINI_LOC: { + type: DataTypes.STRING(25), + defaultValue: null, + }, + SUBADM_LOC: { + type: DataTypes.STRING(25), + defaultValue: null, + }, + FONO_LOC: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + ESTADO_LOC: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + MAX_CUOTAS: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + MAX_MES_APLICACION: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + REGALIA: { + type: DataTypes.DECIMAL(5, 0), + defaultValue: null, + }, + ANEXO: { + type: DataTypes.STRING(15), + defaultValue: null, + }, + ANEXO_IP: { + type: DataTypes.STRING(15), + defaultValue: null, + }, + FAX_IP: { + type: DataTypes.STRING(15), + defaultValue: null, + }, + CAMPO1: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + CAMPO2: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + CAMPO3: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + CAMPO4: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + RUTLOC_LOC: { + type: DataTypes.STRING(11), + defaultValue: null, + }, + GIRO_LOC: { + type: DataTypes.STRING(30), + defaultValue: null, + }, + FANTAS_LOC: { + type: DataTypes.STRING(35), + defaultValue: null, + }, + ccosto_loc: { + type: DataTypes.STRING(10), + defaultValue: null, + }, + NOMBRE_CORTO: { + type: DataTypes.STRING(6), + defaultValue: null, + }, + GRUPO1: { + type: DataTypes.DECIMAL(1), + defaultValue: null, + }, + PRIORI_LOC: { + type: DataTypes.DECIMAL(11), + defaultValue: null, + }, + email_loc: { + type: DataTypes.STRING(30), + defaultValue: null, + }, + rpm_loc: { + type: DataTypes.STRING(20), + defaultValue: null, + }, + conteo_loc: { + type: DataTypes.STRING(1), + defaultValue: null, + }, + comision_loc: { + type: DataTypes.DOUBLE(6, 3), + defaultValue: 0.000, + }, + zona_loc: { + type: DataTypes.STRING(30), + defaultValue: ' ', + }, + tipotienda_loc: { + type: DataTypes.STRING(2), + defaultValue: ' ', + }, + factor_loc: { + type: DataTypes.DOUBLE(10, 2), + defaultValue: 0.00, + }, + tiempo_loc: { + type: DataTypes.DECIMAL(11), + defaultValue: 0, + }, + maximoseg_loc: { + type: DataTypes.DECIMAL(10, 0), + defaultValue: 0, + }, + bloqueo_loc: { + type: DataTypes.TINYINT(3), + defaultValue: 0, + }, + codsunat_loc: { + type: DataTypes.STRING(8), + defaultValue: '0', + }, + ubigeo_loc: { + type: DataTypes.CHAR(10), + defaultValue: null, + }, + provincia_loc: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + comisiondigital_loc: { + type: DataTypes.DOUBLE(6, 3), + defaultValue: 0.000, + }, + codigosunat: { + type: DataTypes.CHAR(5), + defaultValue: '', + }, +}, { + timestamps: false, // No se incluyen timestamps + collate: 'latin1_swedish_ci', // No se incluye collate + sync: { force: false }, // No se sincroniza automáticamente + primaryKey: true, // Se especifica que la combinación de `CODEMP_LOC` y `NLOCAL_LOC` es la llave primaria +}); + +export default Loca; \ No newline at end of file diff --git a/src/database/UC/models/central/logSalesforce.js b/src/database/UC/models/central/logSalesforce.js new file mode 100644 index 0000000..d39b7ab --- /dev/null +++ b/src/database/UC/models/central/logSalesforce.js @@ -0,0 +1,89 @@ +// Importar Sequelize y la conexión a la base de datos +import { Sequelize, DataTypes, STRING } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; +import CtrlSalesforce from './ctrlSalesforce.js'; + +// Definir el modelo para la tabla log_salesforce +const LogSalesforce = dbCentral.define('log_salesforce', { + id: { + type: DataTypes.INTEGER.UNSIGNED, + primaryKey: true, + autoIncrement: true, + allowNull: false, + }, + tabla: { + type: DataTypes.CHAR(30), + allowNull: false, + collate: 'latin1_swedish_ci', + }, + user1: { + type: DataTypes.CHAR(30), + allowNull: false, + collate: 'latin1_swedish_ci', + }, + user2: { + type: DataTypes.CHAR(30), + allowNull: true, + defaultValue: null, + collate: 'latin1_swedish_ci', + }, + user3: { + type: DataTypes.CHAR(30), + allowNull: true, + defaultValue: null, + collate: 'latin1_swedish_ci', + }, + user4: { + type: DataTypes.CHAR(30), + allowNull: true, + defaultValue: null, + collate: 'latin1_swedish_ci', + }, + user5: { + type: DataTypes.CHAR(30), + allowNull: true, + defaultValue: null, + collate: 'latin1_swedish_ci', + }, + user6: { + type: DataTypes.CHAR(30), + allowNull: true, + defaultValue: null, + collate: 'latin1_swedish_ci', + }, + insercion: { + type: DataTypes.DATE, + allowNull: false, + }, + id_ingenia: { + type: DataTypes.STRING, + allowNull: true, + }, + id_interno: { + type: DataTypes.STRING, + allowNull: true, + }, + fecha_ingenia: { + type: DataTypes.DATE, + allowNull: true, + }, + request_json: { + type: DataTypes.TEXT, + allowNull: true + } +},{ + // Opciones adicionales del modelo + timestamps: false, // Si no necesitas createdAt y updatedAt +}); + +CtrlSalesforce.hasMany(LogSalesforce, { + foreignKey: 'tabla', + sourceKey: 'tabla' +}); + +LogSalesforce.belongsTo(CtrlSalesforce, { + foreignKey: 'tabla', + targetId: 'tabla' +}); + +export default LogSalesforce; \ No newline at end of file diff --git a/src/database/UC/models/central/lvta.js b/src/database/UC/models/central/lvta.js new file mode 100644 index 0000000..d9d10fa --- /dev/null +++ b/src/database/UC/models/central/lvta.js @@ -0,0 +1,139 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; +import Dtfa from './dtfa.js'; + +const Lvta = dbCentral.define('Lvta', { + NLOCAL_LV: { + type: DataTypes.DECIMAL(5, 0), + primaryKey: true + }, + FECMOV_LV: { + type: DataTypes.DECIMAL(11, 0), + primaryKey: true + }, + TIPDOC_LV: { + type: DataTypes.CHAR(2), + primaryKey: true + }, + NRODOC_LV: { + type: DataTypes.DECIMAL(11, 0), + primaryKey: true + }, + TERMINAL_LV: { + type: DataTypes.DECIMAL(5, 0), + primaryKey: true + }, + TRANSAC_LV: { + type: DataTypes.DECIMAL(11, 0) + }, + NROASO_LV: { + type: DataTypes.DECIMAL(5, 0) + }, + NROPED_LV: { + type: DataTypes.DECIMAL(11, 0) + }, + RUTCLI_LV: { + type: DataTypes.STRING(13) + }, + CORREL_LV: { + type: DataTypes.DECIMAL(5, 0) + }, + DCTPOR_LV: { + type: DataTypes.DECIMAL(11, 0) + }, + DCTPES_LV: { + type: DataTypes.STRING(15) + }, + TOTNET_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTIVA_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTEXE_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTILA1_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTILA2_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + totila3_lv: { + type: DataTypes.CHAR(30) + }, + TOTILA4_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTILA5_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTILA6_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTILA7_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + TOTBRT_LV: { + type: DataTypes.DOUBLE(10, 2) + }, + ESTADO_LV: { + type: DataTypes.CHAR(1) + }, + CLASI_LV: { + type: DataTypes.CHAR(2) + }, + NUMERO_REGISTRO: { + type: DataTypes.DECIMAL(11, 0) + }, + impuesto_lv: { + type: DataTypes.DOUBLE(5, 2) + }, + adicional1_lv: { + type: DataTypes.STRING(20) + }, + adicional2_lv: { + type: DataTypes.STRING(20) + }, + adicional3_lv: { + type: DataTypes.STRING(20) + }, + adicional4_lv: { + type: DataTypes.STRING(50) + }, + adicional5_lv: { + type: DataTypes.STRING(50) + }, + adicional6_lv: { + type: DataTypes.STRING(50) + }, + //numero documento + adicional7_lv: { + type: DataTypes.STRING(50) + }, + adicional8_lv: { + type: DataTypes.STRING(50) + }, + adicional9_lv: { + type: DataTypes.STRING(50) + }, + adicional10_lv: { + type: DataTypes.STRING(50) + } +}, { + tableName: 'lvta', + timestamps: false +}); + +Lvta.hasMany(Dtfa, { + foreignKey: 'NUMFAC_DF', + sourceKey: 'NRODOC_LV' +}); + +Dtfa.belongsTo(Lvta, { + foreignKey: 'NUMFAC_DF', + targetKey: 'NRODOC_LV' +}); + +export default Lvta; \ No newline at end of file diff --git a/src/database/UC/models/central/maestroCi.js b/src/database/UC/models/central/maestroCi.js new file mode 100644 index 0000000..af28536 --- /dev/null +++ b/src/database/UC/models/central/maestroCi.js @@ -0,0 +1,45 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const MaestroCi = dbCentral.define('maestro_ci', { + CODIGO_CI: { + type: DataTypes.INTEGER(2), + allowNull: false, + primaryKey: true + }, + DESCRIPCION_CI: { + type: DataTypes.STRING(30), + allowNull: true, + defaultValue: null, + }, + ANALISIS_CI: { + type: DataTypes.CHAR(2), + allowNull: true, + defaultValue: null, + }, + BANCO_CI: { + type: DataTypes.CHAR(2), + allowNull: true, + defaultValue: null, + }, + TIPO_CI: { + type: DataTypes.INTEGER(1).UNSIGNED, + allowNull: true, + defaultValue: null, + }, + posintegrado_ci: { + type: DataTypes.TINYINT(2), + allowNull: false, + defaultValue: '0', + }, + marcatarjeta_ci: { + type: DataTypes.CHAR(20), + allowNull: false, + defaultValue: '', + }, +}, { + timestamps: false, // No se incluyen timestamps +}); + +export default MaestroCi; diff --git a/src/database/UC/models/central/parametrosNuevaGuiaEntrega.js b/src/database/UC/models/central/parametrosNuevaGuiaEntrega.js new file mode 100644 index 0000000..f7e7d43 --- /dev/null +++ b/src/database/UC/models/central/parametrosNuevaGuiaEntrega.js @@ -0,0 +1,233 @@ +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const ParametrosNuevaGuiaEntrega = dbCentral.define( + 'ParametrosNuevaGuiaEntrega', + { + estado: { + type: DataTypes.TINYINT.UNSIGNED, + defaultValue: 0, + }, + id: { + type: DataTypes.INTEGER.UNSIGNED, + allowNull: false, + defaultValue: 0, + primaryKey: true, + }, + operador: { + type: DataTypes.INTEGER.UNSIGNED, + allowNull: false, + defaultValue: 0, + }, + codcliente: { + type: DataTypes.CHAR(30), + charset: 'latin1', + collate: 'latin1_swedish_ci', + allowNull: false, + defaultValue: '', + }, + nombredestinatario: { + type: DataTypes.STRING(100), + charset: 'latin1', + collate: 'latin1_swedish_ci', + allowNull: false, + defaultValue: '', + }, + telefonodestinatario: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + direcciondestinatario: { + type: DataTypes.STRING(100), + charset: 'latin1', + collate: 'latin1_swedish_ci', + allowNull: false, + defaultValue: '', + }, + direcciondestinatario2: { + type: DataTypes.STRING(100), + defaultValue: null, + }, + informacionadicional: { + type: DataTypes.STRING(100), + defaultValue: null, + }, + numeropaquetes: { + type: DataTypes.INTEGER.UNSIGNED, + allowNull: false, + defaultValue: 1, + }, + pesopaquetes: { + type: DataTypes.DOUBLE(5, 2), + allowNull: false, + defaultValue: 0.00, + }, + numeropedido: { + type: DataTypes.CHAR(30), + charset: 'latin1', + collate: 'latin1_swedish_ci', + defaultValue: null, + }, + ubigeoorigen: { + type: DataTypes.CHAR(10), + charset: 'latin1', + collate: 'latin1_swedish_ci', + allowNull: false, + defaultValue: '', + }, + ubigeodestino: { + type: DataTypes.CHAR(10), + charset: 'latin1', + collate: 'latin1_swedish_ci', + allowNull: false, + defaultValue: '', + }, + descripcion: { + type: DataTypes.STRING(400), + defaultValue: null, + }, + sucursal: { + type: DataTypes.CHAR(30), + defaultValue: null, + }, + codigoproducto: { + type: DataTypes.CHAR(30), + charset: 'latin1', + collate: 'latin1_swedish_ci', + allowNull: false, + defaultValue: '', + }, + descripcionproducto: { + type: DataTypes.STRING(1000), + allowNull: false, + defaultValue: '', + }, + modeloproducto: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + marcaproducto: { + type: DataTypes.STRING(50), + defaultValue: null, + }, + pesoproducto: { + type: DataTypes.DOUBLE(5, 2), + allowNull: false, + defaultValue: 0.00, + }, + valorreferencial: { + type: DataTypes.DOUBLE(10, 2), + defaultValue: null, + }, + anchoproducto: { + type: DataTypes.DOUBLE(5, 2), + defaultValue: null, + }, + altoproducto: { + type: DataTypes.DOUBLE(5, 2), + defaultValue: null, + }, + largoproducto: { + type: DataTypes.DOUBLE(5, 2), + defaultValue: null, + }, + pesovolumetrico: { + type: DataTypes.DOUBLE(5, 2), + defaultValue: null, + }, + latitud_desde: { + type: DataTypes.DOUBLE(13, 10), + defaultValue: null, + }, + longitud_desde: { + type: DataTypes.DOUBLE(13, 10), + defaultValue: null, + }, + latitud_hasta: { + type: DataTypes.DOUBLE(13, 10), + defaultValue: null, + }, + longitud_hasta: { + type: DataTypes.DOUBLE(13, 10), + defaultValue: null, + }, + direccion_origen: { + type: DataTypes.STRING(100), + defaultValue: null, + }, + documentodestinatario: { + type: DataTypes.CHAR(13), + defaultValue: null, + }, + centrocosto: { + type: DataTypes.TINYINT, + defaultValue: null, + }, + occliente: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + cantidad: { + type: DataTypes.INTEGER, + defaultValue: null, + }, + turnorecojo: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + fecharegistro: { + type: DataTypes.DATE, + defaultValue: null, + }, + paymentMethodID: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + paymentProofID: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + serviceID: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + packageEnvelope: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + packageWeight: { + type: DataTypes.INTEGER, + defaultValue: null, + }, + packageSizeID: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + crossdocking: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + dropPrimaryReference: { + type: DataTypes.CHAR(50), + defaultValue: null, + }, + dropSecondaryReference: { + type: DataTypes.CHAR(50), + defaultValue: null, + }, + dropContactName: { + type: DataTypes.CHAR(80), + defaultValue: null, + }, + dropContactEmail: { + type: DataTypes.CHAR(80), + defaultValue: null, + }, + }, + { + tableName: 'parametros_nuevaguiaentrega', + timestamps: false, // Desactivar timestamps + } +); + +export default ParametrosNuevaGuiaEntrega; \ No newline at end of file diff --git a/src/database/UC/models/central/pedidosDetail.js b/src/database/UC/models/central/pedidosDetail.js new file mode 100644 index 0000000..335b2cd --- /dev/null +++ b/src/database/UC/models/central/pedidosDetail.js @@ -0,0 +1,50 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const PedidosDetail = dbCentral.define('PedidosDetail', { + NROPED_PD: { + type: DataTypes.DECIMAL(10, 0), + primaryKey: true + }, + IDDETA_PD: { + type: DataTypes.INTEGER, + unique: true + }, + CODINT_PD: { + type: DataTypes.STRING(30) + }, + PRECIO_PD: { + type: DataTypes.DOUBLE(10, 2) + }, + CANPED_PD: { + type: DataTypes.DOUBLE(10, 2) + }, + CANDES_PD: { + type: DataTypes.DOUBLE(10, 2) + }, + ESTADO_PD: { + type: DataTypes.DECIMAL(2, 0) + }, + DSCTOIT_PD: { + type: DataTypes.DOUBLE(10, 2) + }, + DSCTOTO_PD: { + type: DataTypes.DOUBLE(10, 2) + }, + PREORI_PD: { + type: DataTypes.DOUBLE(10, 2) + }, + CODLOC_PD: { + type: DataTypes.INTEGER, + unique: true + }, + canori_pd: { + type: DataTypes.DOUBLE(10, 2) + } +}, { + tableName: 'pedidos_detail', + timestamps: false // Si no deseas que Sequelize maneje los campos createdAt y updatedAt +}); + +export default PedidosDetail; \ No newline at end of file diff --git a/src/database/UC/models/central/pedidosHeader.js b/src/database/UC/models/central/pedidosHeader.js new file mode 100644 index 0000000..e61f20b --- /dev/null +++ b/src/database/UC/models/central/pedidosHeader.js @@ -0,0 +1,178 @@ +// Importar Sequelize y la conexión a la base de datos +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; +import PedidosDetail from './pedidosDetail.js'; +import EstadoOrdenes from './estadosOrdenes.js'; +import LabelOperador from './labelOperador.js'; + +const PedidosHeader = dbCentral.define('pedidos_header', { + NROPED_PH: { + type: DataTypes.DECIMAL(10, 0), + primaryKey: true + }, + IDCLIE_PH: { + type: DataTypes.STRING(13) + }, + FECPED_PH: { + type: DataTypes.DATEONLY + }, + FECENT_PH: { + type: DataTypes.DATEONLY + }, + CODPAG_PH: { + type: DataTypes.DECIMAL(5, 0) + }, + APRO01_PH: { + type: DataTypes.DECIMAL(10, 0) + }, + FECAP1_PH: { + type: DataTypes.DATEONLY + }, + APRO02_PH: { + type: DataTypes.STRING(30) + }, + FECAP2_PH: { + type: DataTypes.DATEONLY + }, + ESTADO_PH: { + type: DataTypes.DECIMAL(2, 1) + }, + CODLOC_PH: { + type: DataTypes.DECIMAL(5, 0), + primaryKey: true + }, + CODVEN_PH: { + type: DataTypes.DECIMAL(6, 0) + }, + NROORC_PH: { + type: DataTypes.STRING(15) + }, + DIRDES_PH: { + type: DataTypes.STRING(50) + }, + COMDES_PH: { + type: DataTypes.STRING(30) + }, + CIUDES_PH: { + type: DataTypes.STRING(30) + }, + FECEXP_PH: { + type: DataTypes.DATEONLY + }, + PRIORI_PH: { + type: DataTypes.DECIMAL(2, 0) + }, + FECREG_PH: { + type: DataTypes.DATE + }, + FECMLS_PH: { + type: DataTypes.DATE + }, + FECDOC_PH: { + type: DataTypes.DATE + }, + FECREC_PH: { + type: DataTypes.DATE + }, + TIPUBI_PH: { + type: DataTypes.INTEGER + }, + ORIGEN_PH: { + type: DataTypes.INTEGER + }, + condicion_ph: { + type: DataTypes.STRING(40) + }, + bodega_ph: { + type: DataTypes.DECIMAL(5, 0) + }, + empresa_ph: { + type: DataTypes.INTEGER + }, + ordcli_ph: { + type: DataTypes.STRING(20) + }, + fecord_ph: { + type: DataTypes.DATEONLY + }, + succli_ph: { + type: DataTypes.INTEGER + }, + conceptoped_ph: { + type: DataTypes.INTEGER + }, + GLOSA_PH: { + type: DataTypes.STRING(100) + }, + tipopago_ph: { + type: DataTypes.INTEGER + }, + ntarjeta_ph: { + type: DataTypes.CHAR(20) + }, + cuota_ph: { + type: DataTypes.INTEGER + }, + nroautorizacion_ph: { + type: DataTypes.CHAR(20) + }, + marcatarjeta_ph: { + type: DataTypes.CHAR(40) + }, + depto_ph: { + type: DataTypes.CHAR(20) + }, + referencia_ph: { + type: DataTypes.STRING(10) + }, + nombrerecibe_ph: { + type: DataTypes.STRING(60) + }, + vigilancia_ph: { + type: DataTypes.TINYINT + }, + IdOrdenOMS_ph: { + type: DataTypes.STRING(20) + }, + bodegadespacho_ph: { + type: DataTypes.INTEGER + }, + UrlDoc_ph: { + type: DataTypes.STRING(300) + } +}, { + tableName: 'pedidos_header', + timestamps: false +}); + +PedidosHeader.hasMany(PedidosDetail, { + foreignKey: 'NROPED_PD', + sourceKey: 'NROPED_PH' +}); + +PedidosDetail.belongsTo(PedidosHeader, { + foreignKey: 'NROPED_PD', + targetKey: 'NROPED_PH' +}); + +PedidosHeader.hasMany(EstadoOrdenes, { + foreignKey: 'pedido', + sourceKey: 'NROPED_PH' +}); + +EstadoOrdenes.belongsTo(PedidosHeader, { + foreignKey: 'pedido', + targetKey: 'NROPED_PH' +}); + +PedidosHeader.hasMany(LabelOperador, { + foreignKey: 'pedido', + sourceKey: 'NROPED_PH' +}); + +LabelOperador.belongsTo(PedidosHeader, { + foreignKey: 'pedido', + targetKey: 'NROPED_PH' +}); + +export default PedidosHeader; \ No newline at end of file diff --git a/src/database/UC/models/central/respuestaNuevaGuiaEntrega.js b/src/database/UC/models/central/respuestaNuevaGuiaEntrega.js new file mode 100644 index 0000000..8270c0a --- /dev/null +++ b/src/database/UC/models/central/respuestaNuevaGuiaEntrega.js @@ -0,0 +1,49 @@ +import { DataTypes } from 'sequelize'; +import { dbCentral } from '../../config/db.models.js'; + +const RespuestaNuevaGuiaEntrega = dbCentral.define( + 'RespuestaNuevaGuiaEntrega', + { + id: { + type: DataTypes.INTEGER.UNSIGNED, + allowNull: false, + primaryKey: true, + }, + estado: { + type: DataTypes.CHAR(10), + defaultValue: null, + }, + descripcion: { + type: DataTypes.STRING(300), + charset: 'latin1', + collate: 'latin1_swedish_ci', + defaultValue: null, + }, + numeroguia: { + type: DataTypes.CHAR(30), + defaultValue: null, + }, + mensajeerror: { + type: DataTypes.STRING(1000), + defaultValue: null, + }, + ordenservicio: { + type: DataTypes.CHAR(20), + defaultValue: null, + }, + fecha: { + type: DataTypes.DATE, + defaultValue: null, + }, + json_guia: { + type: DataTypes.JSON, + defaultValue: null, + }, + }, + { + tableName: 'respuesta_nuevaguiaentrega', + timestamps: false, // Desactivar timestamps + } +); + +export default RespuestaNuevaGuiaEntrega; \ No newline at end of file diff --git a/src/services/config.json b/src/services/config.json new file mode 100644 index 0000000..afd4d61 --- /dev/null +++ b/src/services/config.json @@ -0,0 +1,21 @@ +{ + "dataUrbano": { + "url": "https://app.urbanoexpress.cl/ws/ue/ge/", + "id_contrato": 2292, + "linea": 3, + "userHeader": "WS_PUC", + "passHeader": "d4e434db64fd3567a94b098d381a575e535142b2" + }, + "dataInfracommerce": { + "urlDte": "https://oms.brandlive.net/api/v2/document/:oms_id/create", + "urlEstados": "https://oms.brandlive.net/api/v2/shipment/:oms_id", + "AppKey": "9285785147", + "AppToken": "0bd1741dabf2ba558bd92ec045d65d08", + "skuShipping": "1032426" + }, + "dataEnvioEstados": { + "url": "https://oms.brandlive.net/api/v2/shipment/:oms_id", + "AppKey": "9285785147", + "AppToken": "0bd1741dabf2ba558bd92ec045d65d08" + } +} \ No newline at end of file diff --git a/src/services/envioDte.js b/src/services/envioDte.js new file mode 100644 index 0000000..e1e4e39 --- /dev/null +++ b/src/services/envioDte.js @@ -0,0 +1,212 @@ +import { Op } from 'sequelize'; +import moment from 'moment-timezone'; + +import PedidosHeader from '../database/UC/models/central/pedidosHeader.js'; +import PedidosDetail from '../database/UC/models/central/pedidosDetail.js'; +import EstadoOrdenes from '../database/UC/models/central/estadosOrdenes.js'; +import Lvta from '../database/UC/models/central/lvta.js'; +import Dtfa from '../database/UC/models/central/dtfa.js'; + +import Logger from '../utils/logger.js' +import { sendRequestInfracommerce } from '../utils/utils.js'; +import config from './config.json' assert {type: 'json'}; + +const dataInfracommerce = config.dataInfracommerce; + +// { +// "document": { +// "type": "invoice", +// "id": "001-01", +// "parent_document": "", +// "total_amount": 4871, +// "date": "2023-04-11 15:00:00", +// "url": "WWW.facturaenPDFViru.com.ar/001", +// "shipping": { +// "sku": 1, +// "price": 371, +// "vat": 21 +// }, +// "items": [ +// { +// "sku": "2182118.992", +// "price": 1500, +// "vat": 21 +// }, +// { +// "sku": "2182118.992", +// "price": 1500, +// "vat": 21 +// }, +// { +// "sku": "2182118.992", +// "price": 1500, +// "vat": 21 +// } +// ] +// } +// } + +const envioDte = async () => { + try { + const dataEstados = await EstadoOrdenes.findAll({ + where: { + estado: 1, //Documentado + EstadoEnvio: 'R', + // pedido: 127821 + }, + include: [PedidosHeader] + }); + + // console.log(JSON.stringify(dataEstados, null, 2)) + + const skuShipping = dataInfracommerce.skuShipping; + for (const element of dataEstados) { + const omsId = `${element.pedidos_header.IdOrdenOMS_ph}`; + const url = dataInfracommerce.urlDte.replace(':oms_id', omsId); + // console.log(url); + + const urlDoc = element.pedidos_header.UrlDoc_ph; + const pedido = element.pedido; + let fechaRegistro = element.pedidos_header.FECREG_PH; + fechaRegistro = moment(fechaRegistro).format("YYYY-MM-DD HH:mm:ss"); + + console.log(pedido) + const dataLvta = await Lvta.findOne({ + where: { + // NROPED_LV: { [Op.gt]: 0 }, + adicional7_lv: pedido, + + // NRODOC_LV: 51 + }, + include: [{ + model: Dtfa, + attributes: ['CODPRO_DF', 'PREFIN_DF'], + + }] + }); + + // console.log(JSON.stringify(dataLvta, null, 2)) + // return; + + let res; + // for (const elementLvta of dataLvta) { + // await dataLvta.forEach(async element => { + if (!dataLvta) { + continue; + } + const { NLOCAL_LV, TIPDOC_LV, NRODOC_LV, TERMINAL_LV, TRANSAC_LV, TOTBRT_LV } = dataLvta; + + let items = []; + let shipping = {}; + // let valorTotal = 0; + let valorTotal = TOTBRT_LV; + for (const elementDtfa of dataLvta.Dtfas) { + let { CODPRO_DF, PREFIN_DF } = elementDtfa; + + if (CODPRO_DF == skuShipping) { + if (Number(PREFIN_DF) > 0) { + shipping = { + sku: CODPRO_DF, + price: PREFIN_DF, + vat: 21 + } + } + + } else { + items.push({ + sku: CODPRO_DF, + price: PREFIN_DF, + + vat: 21 + }); + } + + } + + let payload + if (Object.keys(shipping).length > 0) { + payload = { + document: { + "type": "invoice", + "id": NRODOC_LV, + "parent_document": "", + "total_amount": valorTotal, + "date": fechaRegistro, + "url": urlDoc, + items: items, + shipping: shipping + }, + + }; + } else { + payload = { + document: { + "type": "invoice", + "id": NRODOC_LV, + "parent_document": "", + "total_amount": valorTotal, + "date": fechaRegistro, + "url": urlDoc, + items: items, + }, + + }; + } + + // console.log(JSON.stringify(payload, null, 2)) + // return + res = await sendRequestInfracommerce(payload, url); + console.log(payload) + console.log(res) + + + Logger.info({ message: `Payload enviado: ${JSON.stringify(payload, null, 2)}`, proceso: 'cron' }); + Logger.info({ message: `Respuesta del documento ${NRODOC_LV}: ${JSON.stringify(res, null, 2)}`, proceso: 'cron' }); + // console.log(JSON.stringify(res, null, 2)) + + + // if (res) { + // if (res.status) { + // if (res.status == "error") { + // element.set({ + // EstadoEnvio: 'P' + // }); + + // await element.save(); + // } + // } + // } + + if (res) { + if (res.status) { + if (res.status == "error") { + if (res.data == "Ya se encuentra un documento para la orden") { + element.set({ + EstadoEnvio: 'P' + }); + + await element.save(); + } + + } else { + element.set({ + EstadoEnvio: 'P' + }); + + await element.save(); + } + } + } + + } + } catch (error) { + console.error('Error en Proceso de envío de Dte:', error); + Logger.error(`Error en envío de Dte: ${error}`) + } +}; + +// await envioDte(); + +export { + envioDte +} \ No newline at end of file diff --git a/src/services/envioEstado.js b/src/services/envioEstado.js new file mode 100644 index 0000000..90d35ca --- /dev/null +++ b/src/services/envioEstado.js @@ -0,0 +1,201 @@ +import { Sequelize, Op } from 'sequelize'; +import moment from 'moment'; + +import PedidosHeader from '../database/UC/models/central/pedidosHeader.js'; +import PedidosDetail from '../database/UC/models/central/pedidosDetail.js'; +import EstadoOrdenes from '../database/UC/models/central/estadosOrdenes.js'; +import LabelOperador from '../database/UC/models/central/labelOperador.js'; +import Lvta from '../database/UC/models/central/lvta.js'; +import Dtfa from '../database/UC/models/central/dtfa.js'; +import Logger from '../utils/logger.js'; + +import { sendRequestInfracommerce } from '../utils/utils.js'; +import config from './config.json' assert {type: 'json'}; + +const dataInfracommerce = config.dataInfracommerce; +const dataUrbano = config.dataUrbano; + + +const envioEstados = async () => { + try { + + const dataOperador = await LabelOperador.findAll({ + where: { + estado: 'A', // Activo + // EstadoEnvio: 'P', + + }, + include: [{ + model: PedidosHeader, + attributes: ['IdOrdenOMS_ph'] + }] + + }); + + for (const element of dataOperador) { + const omsId = element.pedidos_header.IdOrdenOMS_ph; + const url = dataInfracommerce.urlEstados.replace(':oms_id', omsId); + const trackingCode = element.label; + const dataTracking = await fetchTrackingInfo(trackingCode); + const estadoEnvioUrbano = dataTracking[0].chk; + + // SS : Solicitud de Servicio + // AO : Admitido en Origen + // DD : Despachadas a su Destino + // AD : Arribado en Destino + // ER : Salió a Ruta + // NT : No hubo tiempo (incidencia en ruta) + // EN : Entregado + // CV : Visitado + + let estadoSial; + //1 => documentado, 2 => pendiente, 3 => despachado, 4 => entregado, 5 => no entregado + + let payload; + if (estadoEnvioUrbano == 'SS' || estadoEnvioUrbano == 'AO') { + /** + * Estado 2 => Pendiente + */ + estadoSial = 2; + + } else if (estadoEnvioUrbano == 'DD' || estadoEnvioUrbano == 'AD' || estadoEnvioUrbano == 'ER' || estadoEnvioUrbano == 'NT') { + /** + * Estado 3 => Despachado + */ + + estadoSial = 3; + let urlSeguimiento = `https://portal.urbanoexpress.cl/rastrear-shipper/${trackingCode}`; + payload = { + "status": "shipped", + "tracking_number": trackingCode, + "tracking_url": urlSeguimiento + + } + } else if (estadoEnvioUrbano == 'EN') { + + /** + * Estado 4 => Entregado + */ + + estadoSial = 4; + + payload = { + "status": "delivered", + + } + + } else if (estadoEnvioUrbano == 'CV') { + /** + * Estado 5 => No Entregado + */ + + estadoSial = 5; + + payload = { + "status": "not_delivered", + + } + + } + + let date = new Date(); + + let dataRegistroEstado = { + "pedido": element.pedido, + "ordenecommerce": element.numeroorden, + // "idecommerce": element.idecommerce, + "idecommerce": 1, + // "operador": element.operador, + "estado": estadoSial, + // "empresa": element.empresa, + // "observacion": element.observacion, + "fechahora": date, + "EstadoEnvio": "P", + "FechaProceso": element.FechaProceso + + } + + if (estadoSial == 4) { + element.set({ + estado: 'C' //cerrado + }); + + await element.save(); + } + + dataRegistroEstado.estado = estadoSial; + + const dataEstado = await EstadoOrdenes.findOne({ + attributes: ['pedido', [Sequelize.fn('MAX', Sequelize.col('estado')), 'estado']], + where: { + pedido: element.pedido + }, + }); + + console.log(element.pedido, JSON.stringify(dataEstado, null, 2)) + + if (dataEstado.pedido) { + if ((dataEstado.estado < estadoSial)) { + if (estadoSial == 3 || estadoSial == 4 || estadoSial == 5) { + const res = await sendRequestInfracommerce(payload, url); + + console.log(res) + Logger.info({ message: `Estado de la orden ${omsId}: ${estadoEnvioUrbano}, resInfracommerce: ${JSON.stringify(res, null, 2)}`, proceso: 'cron' }); + + } + + + // console.log(dataEstado.estado, estadoSial) + await EstadoOrdenes.create(dataRegistroEstado) + + } + + } else { + console.log("No existe Guía") + } + + + }; + + + } catch (error) { + // Logger.error(`Error en la actualización de estados: ${error.message}`); + console.error('Error al enviar estado:', error); + } +}; + + +const fetchTrackingInfo = async (guia) => { + + const user = dataUrbano.userHeader; + const pass = dataUrbano.passHeader; + + const url = `https://app.urbanoexpress.cl/ws/ue/tracking/?json={"guia":"${guia}","docref":"","vp_linea":"3"}`; + + try { + const response = await fetch(url, { + headers: { + 'user': user, + 'pass': pass + } + }); + + if (!response.ok) { + throw new Error(`Error: ${response.status}`); + } + + const data = await response.json(); + return data; + + } catch (error) { + console.error('Error fetching data: ', error); + } +} + +await envioEstados(); + + +export { + envioEstados +} + diff --git a/src/services/envioEstadoOld.js b/src/services/envioEstadoOld.js new file mode 100644 index 0000000..c4fa951 --- /dev/null +++ b/src/services/envioEstadoOld.js @@ -0,0 +1,200 @@ +import { Op } from 'sequelize'; +import moment from 'moment'; + +import PedidosHeader from '../database/UC/models/central/pedidosHeader.js'; +import PedidosDetail from '../database/UC/models/central/pedidosDetail.js'; +import EstadoOrdenes from '../database/UC/models/central/estadosOrdenes.js'; +import LabelOperador from '../database/UC/models/central/labelOperador.js'; +import Lvta from '../database/UC/models/central/lvta.js'; +import Dtfa from '../database/UC/models/central/dtfa.js'; +import Logger from '../utils/logger.js'; + +import { sendRequestInfracommerce } from '../utils/utils.js'; +import config from './config.json' assert {type: 'json'}; + +const dataInfracommerce = config.dataInfracommerce; +const dataUrbano = config.dataUrbano; + + +const envioEstados = async () => { + try { + + const dataEstados = await EstadoOrdenes.findAll({ + where: { + estado: [1, 2, 3], //1 => documentado, 2 => pendiente, 3 => despachado, 4 => entregado, 5 => no entregado + EstadoEnvio: 'P', + pedido: [1426, 1427] + }, + include: [LabelOperador, PedidosHeader] + // include: [PedidosHeader] + + }); + console.log(JSON.stringify(dataEstados, null, 2)) + // const trackingCode = 'WB178651579'; + + // return; + for (const element of dataEstados) { + // dataEstados.forEach(async element => { + // console.log(JSON.stringify(element, null, 2)) + + let trackingCode; + let urlSeguimiento; + if (element.LabelOperador) { + trackingCode = element.LabelOperador.label; + urlSeguimiento = `https://portal.urbanoexpress.cl/rastrear-shipper/${trackingCode}`; + } else { + // trackingCode = ""; + // urlSeguimiento = ""; + trackingCode = "WB179882541"; + urlSeguimiento = `https://portal.urbanoexpress.cl/rastrear-shipper/${trackingCode}`; + } + + // 'WB178649450' + const omsId = element.pedidos_header.IdOrdenOMS_ph; + // const omsId = 6252; + + // Logger.info(`Actualización de estado de envío de la orden ${omsId}`) + + + const url = dataInfracommerce.urlEstados.replace(':oms_id', omsId); + // const dataTracking = await fetchTrackingInfo(trackingCode); + // console.log(JSON.stringify(dataTracking, null, 2)) + + // const estadoEnvioUrbano = dataTracking[0].chk; + const estadoEnvioUrbano = "EN"; + + // SS : Solicitud de Servicio + // AO : Admitido en Origen + // DD : Despachadas a su Destino + // AD : Arribado en Destino + // ER : Salió a Ruta + // NT : No hubo tiempo (incidencia en ruta) + // EN : Entregado + // CV : Visitado + let payload; + let date = new Date(); + let dataRegistroEstado = { + "pedido": element.pedido, + "ordenecommerce": element.ordenecommerce, + "idecommerce": element.idecommerce, + "operador": element.operador, + "estado": element.estado, + "empresa": element.empresa, + "observacion": element.observacion, + "fechahora": date, + "EstadoEnvio": "P", + "FechaProceso": element.FechaProceso + + + } + + let estadoSial; + if (estadoEnvioUrbano == 'SS' || estadoEnvioUrbano == 'AO' || estadoEnvioUrbano == 'DD' || estadoEnvioUrbano == 'AD') { + /** + * Estado 2 => Pendiente + */ + estadoSial = 2; + + // payload = { + // "status": "shipped", + // "tracking_number": trackingCode, + // "tracking_url": urlSeguimiento + + // } + } else { + if (estadoEnvioUrbano == 'ER') { + /** + * Estado 3 => Despachado + */ + + estadoSial = 3; + + payload = { + "status": "shipped", + "tracking_number": trackingCode, + "tracking_url": urlSeguimiento + + } + + } else if (estadoEnvioUrbano == 'EN') { + /** + * Estado 4 => Entregado + */ + + estadoSial = 4; + + payload = { + "status": "delivered", + + } + + } else if (estadoEnvioUrbano == 'CV') { + /** + * Estado 5 => No Entregado + */ + + estadoSial = 5; + + payload = { + "status": "not_delivered", + + } + + } + console.log(payload, url) + + const res = await sendRequestInfracommerce(payload, url) + console.log(res) + } + Logger.info({ message: `Estado de la orden ${omsId}: ${estadoEnvioUrbano}`, proceso: 'cron' }); + + dataRegistroEstado.estado = estadoSial; + await EstadoOrdenes.create(dataRegistroEstado) + // console.log(dataRegistroEstado) + }; + + + } catch (error) { + // Logger.error(`Error en la actualización de estados: ${error.message}`); + console.error('Error al enviar estado:', error); + } +}; + + +const fetchTrackingInfo = async (guia) => { + + const user = dataUrbano.userHeader; + const pass = dataUrbano.passHeader; + + const url = `https://app.urbanoexpress.cl/ws/ue/tracking/?json={"guia":"${guia}","docref":"","vp_linea":"3"}`; + + try { + const response = await fetch(url, { + headers: { + 'user': user, + 'pass': pass + } + }); + + if (!response.ok) { + throw new Error(`Error: ${response.status}`); + } + + const data = await response.json(); + // console.log(data); + return data; + + } catch (error) { + console.error('Error fetching data: ', error); + } +} + +// const actualizarEstadoEnvioSial = async (estado) +await envioEstados(); + + +export { + envioEstados +} + +// fetchTrackingInfo('WB178651579', 'WS_PUC', 'd4e434db64fd3567a94b098d381a575e535142b2'); diff --git a/src/services/envioGuia.js b/src/services/envioGuia.js new file mode 100644 index 0000000..f1743bb --- /dev/null +++ b/src/services/envioGuia.js @@ -0,0 +1,188 @@ +import ParametrosGuia from '../database/UC/models/central/parametrosNuevaGuiaEntrega.js'; +import RespuestaGuia from '../database/UC/models/central/respuestaNuevaGuiaEntrega.js'; +import PedidosHeader from '../database/UC/models/central/pedidosHeader.js'; +import { sendData } from '../utils/utils.js'; +import moment from 'moment-timezone'; + + +import config from './config.json' assert {type: 'json'}; + +const dataUrbano = config.dataUrbano; + + +const enviarGuias = async (idGuia) => { + + const url = dataUrbano.url; + const idContrato = dataUrbano.id_contrato; + const linea = dataUrbano.linea; + // console.log(url, idContrato); + + const guias = await ParametrosGuia.findAll({ + where: { + id: idGuia, + // estado: 0 + } + }); + + if (!guias) { + return false; + } + + if (guias && guias.length > 0) { + let date = new Date(guias[0].fecharegistro) + let mes = `${date.getMonth() + 1}`.padStart(2, "0") + let fecha = `${date.getDate().toString().padStart(2, "0")}/${mes}/${date.getFullYear()}`; + + // let dataDireccion = guias[0].direcciondestinatario.split(':'); + + // let direccionEntrega = dataDireccion[0]; + let direccionEntrega = guias[0].direcciondestinatario; + let numeroPedido = guias[0].numeropedido; + let cantidad = guias.length; + let telefonoMovil = guias[0].telefonodestinatario.slice(-9); + let emailDestinatario = guias[0].informacionadicional; + + const dataPedidosHeader = await PedidosHeader.findOne({ + where: { + NROPED_PH: numeroPedido + } + }) + + let referenciaDireccion = ''; + + if (dataPedidosHeader) { + referenciaDireccion = dataPedidosHeader.referencia_ph; + + } + + let dataGuia = { + // Identificador del Servicio + linea: linea, + id_contrato: idContrato, + + // Identificador del Envío + cod_rastreo: `URB${numeroPedido}`, + cod_barra: '',//no requerido + fech_emi_vent: fecha,//no requerido + nro_o_compra: '',//no requerido + nro_guia_trans: idGuia,//no requerido + + // Datos del Seller / Vendedor + venta_seller: '', //no requerido + sell_codigo: '', //no requerido + sell_nombre: '', //no requerido + sell_direcc: '', //no requerido + sell_ubigeo: '', //no requerido + + // Datos del receptor (Cliente) + cod_cliente: guias[0].codcliente, + nom_cliente: guias[0].nombredestinatario, + nom_empresa: '', //no requerido + nro_telf: '', //no requerido + nro_telf_mobil: telefonoMovil,//no requerido + correo_elec: emailDestinatario,//no requerido + + // Dirección de entrega + dir_entrega: direccionEntrega, + nro_via: '', + nro_int: '', + nro_urb: '',//no requerido + ubi_direc: guias[0].ubigeodestino, + ref_direc: referenciaDireccion,//no requerido + id_direc: '',//no requerido + + // Datos para despachos + peso_total: guias[0].pesopaquetes, + // pieza_total: cantidad, + pieza_total: 1, + urgente: '',//no requerido + picking: '',//no requerido + asegurado: '',//no requerido + monto_asegurado: '',//no requerido + via_aereo: '',//no requerido + + // Datos para la entrega + // de aqui en adelante no son requeridos + fech_pro: '', + arco_hor: '', + fech_venc: '', + + // Datos autorizados para entrega + nom_autorizado: '', + nro_doc_autorizado: '', + nom_autorizado_2: '', + nro_doc_autorizado_2: '', + + // Datos para Cobranza + med_pago: '', + descripcion: '', + anotacion: '', + moneda: '', + importe: '', + tipo_empaque: '', + }; + + + guias.forEach(async entry => { + entry.set({ + estado: 1 + }); + await entry.save(); + }) + + const payload = dataGuia; + + console.log(JSON.stringify(payload, null, 2)) + + try { + const res = await sendData(url, null, payload); + await guardarRespuesta(idGuia, 1, res, payload); + return true; + + } catch (error) { + console.error("Error en el envío de guía:", error); + await guardarRespuesta(idGuia, 0, { error: -1, mensaje: "Error en el envío de guía" }, payload); + + } + } + + +} + +const guardarRespuesta = async (idGuia, estado = 1, respuesta, payloadRequest) => { + + const date = moment().tz("America/Santiago").utc().format(); + + let dataRespuesta; + if (respuesta.error >= 0) { + console.log("aca") + console.log(respuesta) + dataRespuesta = { + numeroguia: respuesta.guia, + id: idGuia, + fecha: date, + descripcion: respuesta.etiqueta, + mensajeerror: JSON.stringify(respuesta), + json_guia: JSON.stringify(payloadRequest), + estado: estado + + } + } else { + dataRespuesta = { + numeroguia: respuesta.numeroguia, + id: idGuia, + fecha: date, + mensajeerror: JSON.stringify(respuesta), + estado: estado, + json_guia: JSON.stringify(payloadRequest), + + } + } + + await RespuestaGuia.create(dataRespuesta); + +} + +export { + enviarGuias +} \ No newline at end of file diff --git a/src/services/parche.js b/src/services/parche.js new file mode 100644 index 0000000..2d1c539 --- /dev/null +++ b/src/services/parche.js @@ -0,0 +1,75 @@ +import { Sequelize } from "sequelize"; +import dbs from '../database/UC/config/config.json' assert {type: 'json'}; + +const dbCentralConfig = dbs.dbParche; +const dbEcommerceConfig = dbs.dbParcheEcommerce; + +const dbCentral = new Sequelize(dbCentralConfig.database, dbCentralConfig.username, dbCentralConfig.password, { + host: dbCentralConfig.host, + dialect: dbCentralConfig.dialect, + port: dbCentralConfig.port, + define: { + freezeTableName: true + } + +}); + +const dbEcommerce = new Sequelize(dbEcommerceConfig.database, dbEcommerceConfig.username, dbEcommerceConfig.password, { + host: dbEcommerceConfig.host, + dialect: dbEcommerceConfig.dialect, + port: dbEcommerceConfig.port, + define: { + freezeTableName: true + } + +}); + + + + +const data = await dbCentral.query(`select shgroup_ph from pedidos_header where ecommerceorigen_ph='forusapp' and fecped_ph >= '2024-01-22' +and length(trim(direccion2_ph))=0 and estado_ph=1`); + +for (const element of data[0]) { + const campoSh = element.shgroup_ph + console.log(campoSh) + + + const dataLog = await dbEcommerce.query(`select * from log_ordenes_fapp where shGroup = ${campoSh}`); + + const jsonData = dataLog[0][0].json; + + console.log(dataLog) + const neighborhood = jsonData.shippingData.neighborhood + console.log(jsonData.shippingData.neighborhood) + + await dbCentral.query(`update pedidos_header set direccion2_ph='${neighborhood}' where shgroup_ph='${campoSh}'`); + await dbEcommerce.query(`update pedidos_header set direccion2_ph='${neighborhood}' where shgroup_ph='${campoSh}'`); +} +// data[0].forEach(async element => { + + +// }); +// console.log(JSON.stringify(data, null, 2)) +// let campoSh = data[0][0].shgroup_ph +// let campoSh = data[0][0].shgroup_ph + +// const dataLog = await dbEcommerce.query(`select * from log_ordenes_fapp where shGroup = ${campoSh}`); + +// const jsonData = dataLog[0][0].json; + +// console.log(dataLog) +// const neighborhood = jsonData.shippingData.neighborhood +// console.log(jsonData.shippingData.neighborhood) + +// await dbCentral.query(`update pedidos_header set direccion2_ph='${neighborhood}' where shgroup_ph='${campoSh}'`); +// await dbEcommerce.query(`update pedidos_header set direccion2_ph='${neighborhood}' where shgroup_ph='${campoSh}'`); + + + +// // "username": "sialuc", +// // "password": "Sialuc2930.,", +// // "database": "centraluc", +// // "host": "201.236.140.150", +// // "dialect": "mysql", +// // "port": "3397" \ No newline at end of file diff --git a/src/utils/logger.js b/src/utils/logger.js new file mode 100644 index 0000000..9c12a5a --- /dev/null +++ b/src/utils/logger.js @@ -0,0 +1,46 @@ +import winston from 'winston'; + +const cronLogFilter = winston.format((info, opts) => { + return info.proceso === 'cron' ? info : false; +}); + +const apiLogFilter = winston.format((info, opts) => { + return info.proceso === 'api' ? info : false; +}); + +const borrarCampoProceso = winston.format((info) => { + //Evita que aparezca el campo proceso en el log. + + delete info.proceso; + return info; +}); + +const logger = winston.createLogger({ + format: winston.format.combine( + winston.format.timestamp(), + winston.format.json() + ), + transports: [ + new winston.transports.File({ + filename: 'cron.log', + level: 'info', + format: winston.format.combine( + cronLogFilter(), + borrarCampoProceso(), + winston.format.json() + ) + }), + new winston.transports.File({ + filename: 'api.log', + level: 'info', + format: winston.format.combine( + apiLogFilter(), + borrarCampoProceso(), + winston.format.json() + ) + }), + ] +}); + + +export default logger; \ No newline at end of file diff --git a/src/utils/utils.js b/src/utils/utils.js new file mode 100644 index 0000000..0ed7e05 --- /dev/null +++ b/src/utils/utils.js @@ -0,0 +1,78 @@ +import fetch from 'node-fetch'; +import { Op } from 'sequelize'; + +import config from '../services/config.json' assert {type: 'json'}; +import { interval } from 'date-fns'; + +const dataUrbano = config.dataUrbano; +const dataInfracommerce = config.dataInfracommerce; + +const sendData = async (url, token = null, payload) => { + + try { + const headers = { + // 'Authorization': `Bearer ${token}`, + 'user': dataUrbano.userHeader, + 'pass': dataUrbano.passHeader, + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + const options = { + method: 'POST', + headers: headers, + body: `json=${JSON.stringify(payload)}` + }; + + const response = await fetch(url, options); + + const result = await response.json(); + return result; + + } catch (error) { + console.error(error); + return error; + } +}; + +const sendRequestInfracommerce = async (payload, url) => { + // if (!omsId) { + // throw new Error('omsId no proporcionado'); + // } + + // const url = dataEnvioEstados.url.replace(':oms_id', omsId); + const { AppKey, AppToken } = dataInfracommerce; + + console.log(AppKey, AppToken) + + try { + const headers = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'OMS-AppKey': AppKey, + 'OMS-AppTok': AppToken + }; + + const response = await fetch(url, { + method: 'POST', + headers, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + const res = await response.json(); + const data = JSON.stringify(res, null, 2); + throw new Error(`Error en la solicitud: ${response.status} ${data}`); + } + const result = await response.json(); + return result; + + } catch (error) { + console.error(error.message); + } +} + + +export { + sendData, + sendRequestInfracommerce +} \ No newline at end of file diff --git a/src/v1/routes/index.js b/src/v1/routes/index.js new file mode 100644 index 0000000..d60891a --- /dev/null +++ b/src/v1/routes/index.js @@ -0,0 +1,36 @@ +import { Router } from 'express'; +const router = Router(); + +import { enviarGuiasController } from '../../controllers/guiasController.js'; + +/** + * @swagger + + * /api/v1/guias/{idGuia}/nueva: + * get: + * + * summary: Obtener información de una guía específica. + * description: Retorna detalles de una guía según su ID. + * parameters: + * - in: path + * tittle: Test api + * name: idGuia + * schema: + * type: string + * required: true + * description: ID único de la guía. + * responses: + * 200: + * description: Guía enviada exitosamente. + * 404: + * description: La guía no fue encontrada. + * 500: + * description: Error interno del servidor. + * operationId: obtenerGuiaPorId + + */ + +router + .get('/:idGuia/nueva', enviarGuiasController) + +export default router; \ No newline at end of file diff --git a/swagger.js b/swagger.js new file mode 100644 index 0000000..4155de0 --- /dev/null +++ b/swagger.js @@ -0,0 +1,30 @@ +// swagger.js + +import swaggerJSDoc from 'swagger-jsdoc'; +import swaggerUI from 'swagger-ui-express'; + +const options = { + definition: { + openapi: '3.0.0', + info: { + title: 'API envío de Guías', + // version: '1.0.0', + description: '', + }, + }, + apis: ['./src/v1/routes/*.js', './src/v1/controllers/*.js'], // Rutas donde se encuentran tus archivos de especificación Swagger + swaggerOptions: { + // Cambia el nombre del grupo de rutas + tags: [ + { + name: 'GrupoDeRutas', // Cambia este nombre + description: 'Descripción del grupo de rutas', + }, + ], + defaultTag: 'OtraEtiqueta', + }, +}; + +const swaggerSpec = swaggerJSDoc(options); + +export { swaggerSpec, swaggerUI }; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..4bb36f7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1357 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apidevtools/json-schema-ref-parser@^9.0.6": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz#8ff5386b365d4c9faa7c8b566ff16a46a577d9b8" + integrity sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.6" + call-me-maybe "^1.0.1" + js-yaml "^4.1.0" + +"@apidevtools/openapi-schemas@^2.0.4": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz#32057ae99487872c4dd96b314a1ab4b95d89eaf5" + integrity sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g== + dependencies: + "@apidevtools/json-schema-ref-parser" "^9.0.6" + "@apidevtools/openapi-schemas" "^2.0.4" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + call-me-maybe "^1.0.1" + z-schema "^5.0.1" + +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@types/debug@^4.1.8": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/json-schema@^7.0.6": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*": + version "20.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== + dependencies: + undici-types "~5.26.4" + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/validator@^13.7.17": + version "13.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +basic-auth@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + 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.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + 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" + +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + +chokidar@^3.5.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +commander@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" + integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +date-fns-tz@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-2.0.0.tgz#1b14c386cb8bc16fc56fe333d4fc34ae1d1099d5" + integrity sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ== + +date-fns@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.3.1.tgz#7581daca0892d139736697717a168afbb908cfed" + integrity sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + 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" + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +doctrine@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dotenv@^16.3.1: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +dottie@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.6.tgz#34564ebfc6ec5e5772272d466424ad5b696484d4" + integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +express@^4.18.2: + version "4.18.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4" + integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + 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.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + 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" + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + 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" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-property-descriptors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + 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" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +inflection@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" + integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +long@^5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru-cache@^8.0.0: + version "8.0.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" + integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +minimatch@^3.0.4, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +moment-timezone@^0.5.43, moment-timezone@^0.5.44: + version "0.5.45" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" + integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== + dependencies: + moment "^2.29.4" + +moment@^2.29.4, moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +morgan@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== + dependencies: + basic-auth "~2.0.1" + debug "2.6.9" + depd "~2.0.0" + on-finished "~2.3.0" + on-headers "~1.0.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mysql2@^3.6.5: + version "3.9.2" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.9.2.tgz#567343581f9742032598b6c15bd7aa65d2f7d4af" + integrity sha512-3Cwg/UuRkAv/wm6RhtPE5L7JlPB877vwSF6gfLAS68H+zhH+u5oa3AieqEd0D0/kC3W7qIhYbH419f7O9i/5nw== + dependencies: + denque "^2.1.0" + generate-function "^2.3.1" + iconv-lite "^0.6.3" + long "^5.2.1" + lru-cache "^8.0.0" + named-placeholders "^1.1.3" + seq-queue "^0.0.5" + sqlstring "^2.3.2" + +named-placeholders@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" + integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w== + dependencies: + lru-cache "^7.14.1" + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-cron@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-3.0.3.tgz#c4bc7173dd96d96c50bdb51122c64415458caff2" + integrity sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A== + dependencies: + uuid "8.3.2" + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +nodemon@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" + integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== + 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" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +pg-connection-string@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + 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" + +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +retry-as-promised@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz#9df73adaeea08cb2948b9d34990549dc13d800a2" + integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + 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" + +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== + +sequelize-pool@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" + integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== + +sequelize@^6.35.2: + version "6.37.1" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.1.tgz#9380fe0a3b5ff17638d3fce30c3cf3a2396c2343" + integrity sha512-vIKKzQ9dGp2aBOxQRD1FmUYViuQiKXSJ8yah8TsaBx4U3BokJt+Y2A0qz2C4pj08uX59qpWxRqSLEfRmVOEgQw== + dependencies: + "@types/debug" "^4.1.8" + "@types/validator" "^13.7.17" + debug "^4.3.4" + dottie "^2.0.6" + inflection "^1.13.4" + lodash "^4.17.21" + moment "^2.29.4" + moment-timezone "^0.5.43" + pg-connection-string "^2.6.1" + retry-as-promised "^7.0.4" + semver "^7.5.4" + sequelize-pool "^7.1.0" + toposort-class "^1.0.1" + uuid "^8.3.2" + validator "^13.9.0" + wkx "^0.5.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + 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" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +swagger-jsdoc@^6.2.8: + version "6.2.8" + resolved "https://registry.yarnpkg.com/swagger-jsdoc/-/swagger-jsdoc-6.2.8.tgz#6d33d9fb07ff4a7c1564379c52c08989ec7d0256" + integrity sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ== + dependencies: + commander "6.2.0" + doctrine "3.0.0" + glob "7.1.6" + lodash.mergewith "^4.6.2" + swagger-parser "^10.0.3" + yaml "2.0.0-1" + +swagger-parser@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/swagger-parser/-/swagger-parser-10.0.3.tgz#04cb01c18c3ac192b41161c77f81e79309135d03" + integrity sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg== + dependencies: + "@apidevtools/swagger-parser" "10.0.3" + +swagger-ui-dist@>=5.0.0: + version "5.11.10" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.11.10.tgz#99722e8f496c8f689f2585404791aef16b0b3b10" + integrity sha512-wAHf32iFqJCBkdQRBYB1pR8kJuliJbgCXcdgkU7GkDvrOfD2gVmyEwdTi9rERCur/OrufifnH5UecOzlQ07CYg== + +swagger-ui-express@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz#7a00a18dd909574cb0d628574a299b9ba53d4d49" + integrity sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA== + dependencies: + swagger-ui-dist ">=5.0.0" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@8.3.2, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +validator@^13.7.0, validator@^13.9.0: + version "13.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" + integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +winston-transport@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.12.0.tgz#a5d965a41d3dc31be5408f8c66e927958846c0d0" + integrity sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.7.0" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@2.0.0-1: + version "2.0.0-1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.0.0-1.tgz#8c3029b3ee2028306d5bcf396980623115ff8d18" + integrity sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ== + +z-schema@^5.0.1: + version "5.0.6" + resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-5.0.6.tgz#46d6a687b15e4a4369e18d6cb1c7b8618fc256c5" + integrity sha512-+XR1GhnWklYdfr8YaZv/iu+vY+ux7V5DS5zH1DQf6bO5ufrt/5cgNhVO5qyhsjFXvsqQb/f08DWE9b6uPscyAg== + dependencies: + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + validator "^13.7.0" + optionalDependencies: + commander "^10.0.0"