diff --git a/api/controller/Banners/banners.controller.js b/api/controller/Banners/banners.controller.js new file mode 100644 index 0000000..49b7df0 --- /dev/null +++ b/api/controller/Banners/banners.controller.js @@ -0,0 +1,16 @@ +const db = require("../../db/db"); +const fs = require('fs'); +const path = require('path'); + +class BannersController { + async findAll(req, res) { + const rows = await db.findAll_banner() + return res.status(200).send({ + data: rows + }) + } + +} + + +module.exports = new BannersController() \ No newline at end of file diff --git a/api/controller/Payment/payment.services.js b/api/controller/Payment/payment.services.js index f0db6d0..26f7256 100644 --- a/api/controller/Payment/payment.services.js +++ b/api/controller/Payment/payment.services.js @@ -1,6 +1,6 @@ const db = require("../../db/db"); -const payPalProviders = require('./paypal.providers') -const redsysProviders = require('./redsys.providers') +const payPalProviders = require('./paypal/paypal.providers') +const redsysProviders = require('./redsys/redsys.providers') class PaymentServices { async Create(req, res) { @@ -56,16 +56,12 @@ class PaymentServices { data: { ...data, orderId: orderFk } }) } - /* if (newOrder) { - return res.status(200).send({ - data: { link: newOrder.links, orderId: orderFk } - }) - } */ + } catch (error) { - console.log(error); return res.status(422).send({ data: { - message: "Error al iniciar el pago" + message: "Error al iniciar el pago", + error: error.message } }) } @@ -74,38 +70,32 @@ class PaymentServices { async Success(req, res) { try { //Parameters payment - const { paymentId, PayerID, orderId } = req.body - const payerId = { 'payer_id': PayerID }; - - //API validation payent and confirnm order - paypal.payment.execute(paymentId, payerId, async function (error, payment) { - if (error) { - return res.status(422).send({ - data: { - message: "payment not successful" - } - }) - } else { - if (payment.state == 'approved') { - await db.order_confirm(orderId) - return res.status(200).send({ - data: { - id: payment.id, - message: "payment completed successfully", - } - }) - } else { - return res.status(422).send({ - data: { - message: "payment not successful" - } - }) + const { orderId, type, ...paramns } = req.body + if (type === "paypal") { + const payerId = { 'payer_id': paramns.PayerID }; + const data = await payPalProviders.success(paramns.paymentId, payerId, orderId) + return res.status(200).send({ + data: { + ...data, + message: "Payment success" } - } - }); + }) + } + if (type === "redsys") { + return res.status(200).send({ + data: { + message: "Payment success" + } + }) + } + } catch (error) { - throw error; + return res.status(422).send({ + data: { + message: "Payment Error" + } + }) } } } diff --git a/api/controller/Payment/paypal.providers.js b/api/controller/Payment/paypal/paypal.providers.js similarity index 69% rename from api/controller/Payment/paypal.providers.js rename to api/controller/Payment/paypal/paypal.providers.js index d1c3edf..5e3bb9a 100644 --- a/api/controller/Payment/paypal.providers.js +++ b/api/controller/Payment/paypal/paypal.providers.js @@ -1,4 +1,5 @@ const paypal = require('paypal-rest-sdk'); +const db = require("../../../db/db"); class PayPalProviders { async New(orderFk, price) { @@ -6,7 +7,7 @@ class PayPalProviders { const payReq = JSON.stringify({ 'intent': 'sale', 'redirect_urls': { - 'return_url': `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}`, + 'return_url': `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}&type=paypal`, 'cancel_url': `${process.env.BASE_URL}/checkout/error` }, 'payer': { @@ -14,14 +15,13 @@ class PayPalProviders { }, 'transactions': [{ 'amount': { - 'total': 0.0000000001, + 'total': price, 'currency': 'EUR' }, 'description': 'This is the payment transaction description.' }] }); - //Starting checkout process and returning sandbox url const newOrder = await new Promise(async (resolve, reject) => { paypal.payment.create(payReq, function (error, payment) { if (error) { @@ -54,6 +54,28 @@ class PayPalProviders { throw error; } } + + async success(paymentId, payerId, orderId) { + try { + return new Promise(async (resolve, reject) => { + paypal.payment.execute(paymentId, payerId, async function (error, payment) { + if (error) { + reject() + } else { + if (payment.state == 'approved') { + await db.order_confirm(orderId) + resolve({ id: payment.id }) + } else { + reject() + } + } + }); + }).then(res => res) + } catch (error) { + throw error + } + + } } module.exports = new PayPalProviders(); \ No newline at end of file diff --git a/api/controller/Payment/redsys.providers.js b/api/controller/Payment/redsys.providers.js deleted file mode 100644 index bab2fa8..0000000 --- a/api/controller/Payment/redsys.providers.js +++ /dev/null @@ -1,33 +0,0 @@ -const RedsysPos = require('redsys-pos'); -const { - CURRENCIES, TRANSACTION_TYPES -} = RedsysPos; - -class RedsysProviders { - async New(orderFk, price) { - try { - const MERCHANT_KEY = "sq7HjrUOBfKmC576ILgskD5srU870gJ7"; - const redsys = new RedsysPos(MERCHANT_KEY); - const obj = { - amount: String(price), - orderReference: String(orderFk), - merchantName: "Floranet", - merchantCode: "999008881", - currency: CURRENCIES.EUR, - transactionType: TRANSACTION_TYPES.AUTHORIZATION, // '0' - terminal: "001", - merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`, - successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}`, - errorURL: `${process.env.BASE_URL}/checkout/error` - }; - - const result = redsys.makePaymentParameters(obj); - console.log(result); - return result - } catch (error) { - throw error; - } - } -} - -module.exports = new RedsysProviders(); \ No newline at end of file diff --git a/api/controller/Payment/redsys/redsys.providers.js b/api/controller/Payment/redsys/redsys.providers.js new file mode 100644 index 0000000..25cfcb4 --- /dev/null +++ b/api/controller/Payment/redsys/redsys.providers.js @@ -0,0 +1,43 @@ +const RedsysPos = require('redsys-pos'); +const { + CURRENCIES, TRANSACTION_TYPES +} = RedsysPos; + +class RedsysProviders { + async New(orderFk, price) { + try { + const MERCHANT_KEY = process.env.REDSYS_MERCHANT_KEY; + const redsys = new RedsysPos(MERCHANT_KEY); + + let orderValue = String(orderFk) + while (true) { + if (orderValue.length == 4) { + break + } + orderValue = '0' + orderValue + } + const regexAmount = /[,.]/ + const amountValue = regexAmount.test(String(price)) ? String(price).replace(/[,.]/g, '') : String(price + '00') + + const obj = { + amount: amountValue, + orderReference: orderValue, + merchantName: process.env.REDSYS_MERCHANT_NAME, + merchantCode: process.env.REDSYS_MERCHANT_CODE, + currency: "978", + transactionType: "0", // '0' + terminal: process.env.REDSYS_MERCHANT_TERMINAL, + merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`, + successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}&type=redsys`, + errorURL: `${process.env.BASE_URL}/checkout/error` + }; + + const result = redsys.makePaymentParameters(obj); + return { ...result, DS_MERCHANT_ORDER: obj.orderReference } + } catch (error) { + throw error; + } + } +} + +module.exports = new RedsysProviders(); \ No newline at end of file diff --git a/api/controller/product/product.controller.js b/api/controller/product/product.controller.js deleted file mode 100644 index f1f9a9e..0000000 --- a/api/controller/product/product.controller.js +++ /dev/null @@ -1,113 +0,0 @@ -const db = require("../../db/db"); -<<<<<<<< HEAD:api/controller/product/product.controller.js - -const productsJson = require("./products.json") -======== ->>>>>>>> master:api/controller/Product/product.controller.js - -class ProductController { - async findAll(req, res) { - - const params = req.query; - const _products = await db.getProducts(params.dateExpired, params.postalCode); - let productsFilter = _products[0] - - if (Number(params.recommend)) { - productsFilter = productsFilter.filter(item => item.recommend == params.recommend) - } - if (params.type) { - productsFilter = productsFilter.filter(item => item.type === params.type) - } - - if (params.minPrice && !params.maxPrice) { - productsFilter = productsFilter.filter(item => { - const price = Number(item.price) - if (price >= Number(params.minPrice)) { - return item - } - }) - } - if (params.maxPrice && !params.minPrice) { - productsFilter = productsFilter.filter(item => { - const price = Number(item.price) - if (price <= Number(params.maxPrice)) { - return item - } - }) - } - if (params.maxPrice && params.minPrice) { - productsFilter = productsFilter.filter(item => { - const price = Number(item.price) - if (price >= Number(params.minPrice) && price <= Number(params.maxPrice)) { - return item - } - }) - } - - - if (Number(params.bigPrice)) { - productsFilter.sort((a, b) => { - const itemA = Number(a.price) - const itemB = Number(b.price) - return itemB - itemA; - }) - } - - if (Number(params.lowPrice)) { - productsFilter.sort((a, b) => { - const itemA = Number(a.price) - const itemB = Number(b.price) - return itemA - itemB; - }) - } - - if (Number(params.order_descending)) { - productsFilter.sort((a, b) => { - const itemA = a.order_position - const itemB = b.order_position - return itemB - itemA; - }) - } - - if (Number(params.order_crescent)) { - productsFilter.sort((a, b) => { - const itemA = a.order_position - const itemB = b.order_position - return itemA - itemB; - }) - } - - if (Number(params.isNew)) { - productsFilter = productsFilter.filter(item => item.isNew == Number(params.isNew)) - } - - /* let productsFilterPages = [] - const totalItens = params?.itens ? Number(params.itens) : 200 - const page = params.page ? Number(params.page) : 1 - const startIndex = (totalItens * page) - totalItens - const lastIndex = (totalItens * page) - const products = productsFilter.slice(startIndex, lastIndex) - productsFilterPages.push({ - page: page, - productsPerPage: products.length, - products: products - }) */ - - - return res.status(200).send({ - data: productsFilter - }) - } - - async findById(req, res) { - const id = Number(req.params.id) - const _products = await db.getProducts(); - const filterProduct = _products[0].filter(item => item.id === id) - - return res.status(200).send({ - data: filterProduct - }) - } -} - -module.exports = new ProductController(); diff --git a/api/db/db.js b/api/db/db.js index 733d2e9..6ddbcf6 100644 --- a/api/db/db.js +++ b/api/db/db.js @@ -72,5 +72,20 @@ async function contact_Request(name, phone, email, message) { return rows; } +async function findAll_banner() { + const conn = await connect(); + const [rows] = await conn.query(`SELECT * FROM floranet.banners`); + return rows; +} -module.exports = { getProducts, orderData_get, orderData_put, getProvinces, deliveryDate_get, contact_Request, order_confirm } \ No newline at end of file + +module.exports = { + getProducts, + orderData_get, + orderData_put, + getProvinces, + deliveryDate_get, + contact_Request, + order_confirm, + findAll_banner +} \ No newline at end of file diff --git a/api/index.js b/api/index.js index a65219e..03c3009 100644 --- a/api/index.js +++ b/api/index.js @@ -7,6 +7,7 @@ const paymengtController = require('./controller/Payment/payment.controller'); const provincesController = require('./controller/Provinces/provinces.controller'); const deliveryController = require('./controller/Delivery/delivery.controller'); const contactController = require('./controller/Contact/contact.controller'); +const bannersController = require('./controller/Banners/banners.controller'); paypal.configure({ 'mode': 'sandbox', @@ -17,7 +18,7 @@ paypal.configure({ const app = express(); const port = 9999; -const allowedOrigins = ['http://localhost:9100', 'https://floranet.onecommerce.dev','http://49.13.85.117','http://floranet.onecommerce.dev']; +const allowedOrigins = ['http://localhost:9100', 'https://floranet.onecommerce.dev', 'http://49.13.85.117', 'http://floranet.onecommerce.dev']; const corsOptions = { origin: allowedOrigins, optionsSuccessStatus: 200, @@ -46,7 +47,7 @@ app.get('/api/payment/cancel', paymengtController.Cancel) app.get('/api/provinces', provincesController.findAll) app.get('/api/delivery/dates', deliveryController.findByPostalCode) app.post('/api/contact/save', contactController.Create) - +app.get('/api/banners/', bannersController.findAll) app.listen(port, () => { diff --git a/package-lock.json b/package-lock.json index 171528a..0fd5b07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,13 +17,9 @@ "express": "^4.18.2", "fs": "^0.0.1-security", "mysql2": "^3.7.0", - "node-redsys-api": "^0.0.5", "paypal-rest-sdk": "^1.8.1", "pinia": "^2.0.11", "quasar": "^2.6.0", - "redsys-easy": "^5.2.3", - "redsys-pay": "^1.2.0", - "redsys-pos": "^1.0.2", "vee-validate": "^4.12.2", "vue": "^3.0.0", "vue-country-flag-next": "^2.3.2", @@ -157,14 +153,6 @@ "npm": ">=6.14.13" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "engines": { - "node": ">=14" - } - }, "node_modules/@floating-ui/core": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", @@ -1255,14 +1243,6 @@ } ] }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -1899,11 +1879,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1921,11 +1896,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2162,6 +2132,118 @@ "esbuild-windows-arm64": "0.14.51" } }, + "node_modules/esbuild-android-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", + "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", + "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", + "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz", + "integrity": "sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", + "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", + "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", + "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-linux-64": { "version": "0.14.51", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", @@ -2178,6 +2260,198 @@ "node": ">=12" } }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", + "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", + "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", + "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", + "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", + "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", + "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", + "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", + "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", + "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", + "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", + "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -2574,27 +2848,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-xml-parser": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz", - "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -2819,6 +3072,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3991,14 +4258,6 @@ "lower-case": "^1.1.1" } }, - "node_modules/node-redsys-api": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/node-redsys-api/-/node-redsys-api-0.0.5.tgz", - "integrity": "sha512-8WSRa5hZFRiGqY2mm1SF01UMF/Gh5dvy9GGIFlZj0OzzXauPh4bIX+S12q+kqO6dFJ9wswNfvrUb9+1XBP3A2g==", - "dependencies": { - "base64url": "^3.0.1" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -4618,35 +4877,6 @@ "node": ">=8.10.0" } }, - "node_modules/redsys-easy": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/redsys-easy/-/redsys-easy-5.2.3.tgz", - "integrity": "sha512-4yNhGEK1jo7x43eEi6zEqV6xhIDRwqgjioIKsqVim2RzGx43BcrSdpH8AZf3h4bLYIXT9eKy/MQxtR7LhG8IVQ==", - "dependencies": { - "base64url": "^3.0.1", - "dayjs": "^1.11.9", - "decimal.js": "^10.4.3", - "fast-xml-parser": "^4.2.7", - "tslib": "^2.6.1", - "undici": "^6.0.0" - } - }, - "node_modules/redsys-pay": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redsys-pay/-/redsys-pay-1.2.0.tgz", - "integrity": "sha512-cPw6zbMOHElHL45jS0GMXCRDaRpJheXUktC3M07jUmHOZig1DUD/KHYeu/nVTfaUVsq8QapgBEbsuRoMblMxMg==", - "dependencies": { - "xml": "^1.0.1" - } - }, - "node_modules/redsys-pos": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/redsys-pos/-/redsys-pos-1.0.2.tgz", - "integrity": "sha512-h99WqjrW1XBKPpO0q3BJumxU5GghSovYq8ZScSqvoIZmOoYygV8VLVIEQivJtTdJeuq3yn80SyrMwFmuc+d0sw==", - "dependencies": { - "base64url": "^3.0.0" - } - }, "node_modules/register-service-worker": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.2.tgz", @@ -5189,11 +5419,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5362,7 +5587,8 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", @@ -5424,17 +5650,6 @@ "node": ">=0.8.0" } }, - "node_modules/undici": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.6.2.tgz", - "integrity": "sha512-vSqvUE5skSxQJ5sztTZ/CdeJb1Wq0Hf44hlYMciqHghvz+K88U0l7D6u1VsndoFgskDcnU+nG3gYmMzJVzd9Qg==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=18.0" - } - }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -5754,11 +5969,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" - }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",