diff --git a/.env b/.env index d079de4b..382058dc 100644 --- a/.env +++ b/.env @@ -2,4 +2,8 @@ DB_HOST = 'localhost' DB_PORT = 3306 DB_NAME = 'threadsintimes' DB_USER = 'admin69' -DB_PWD = 'password' \ No newline at end of file +DB_PWD = 'password' +STRIPE_SECRET_KEY = 'sk_test_51L5mAuGwc6VaRqW2Cw32gXfTJjA7SNoAOLMQP7R9nPgMObdeoDCr9pC91MoMhOJXdpglix2p9H4zWf13cHQR8FOY00rXFqUfzD' +STRIPE_PUBLIC_KEY = 'pk_test_51L5mAuGwc6VaRqW2TedYbYI4AiHKvQUXakCY9EfIiXOQ5601kqJESOjzSvQc0YqUY3nyATjfvxAf49b5C0H7W5Sp00THRKbfMM' +WEBHOOK_SECRET = 'whsec_f4043c4a5811b6e3ea97012646107b78034625935321a7d01ccee15473d8808d' +SERVER_URL = https://localhost:5000 \ No newline at end of file diff --git a/.gitignore b/.gitignore index ff8e74c1..9713af62 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -TODO.txt \ No newline at end of file +TODO.txt +.env \ No newline at end of file diff --git a/config/DBConfig.js b/config/DBConfig.js index 59343893..4bd97a97 100644 --- a/config/DBConfig.js +++ b/config/DBConfig.js @@ -18,10 +18,6 @@ const sequelize = new Sequelize( ); - - - - //Chart Section module.exports = sequelize; diff --git a/config/DBConnection.js b/config/DBConnection.js index dc892839..0dad41a1 100644 --- a/config/DBConnection.js +++ b/config/DBConnection.js @@ -1,5 +1,6 @@ const mySQLDB = require('./DBConfig'); const Appointment = require('../models/Appointment') +const Cart = require('../models/Cart'); const CartProduct = require('../models/CartProduct') const FAQ = require('../models/FAQ') const Feedback = require('../models/FAQ') @@ -23,6 +24,17 @@ const CustomerSatisfactionLog = require('../models/Logs/CustomerSatisfactionLog' const NewsLetterLog = require("../models/Logs/NewsLetterLogs") const Tailor = require('../models/Tailor'); +const Order = require('../models/Orders'); +const OrderItems = require('../models/OrderItems'); +const Review = require('../models/Reviews'); +const Notification = require('../models/Notification'); +const UserNotification = require('../models/UserNotifications'); +const Chat = require('../models/Chat'); +const Msg = require('../models/Msg'); +const ChatUser = require('../models/ChatUser'); +const NotificationCount = require('../models/NotificationCount'); +const RequestItem = require('../models/RequestItem'); +const Withdrawal = require('../models/Withdrawal'); // If drop is true, all existing tables are dropped and recreated const setUpDB = (drop) => { @@ -34,24 +46,71 @@ const setUpDB = (drop) => { The primary key from user will be a foreign key in video. */ - User.hasMany(Request) - User.hasMany(Appointment) - User.hasOne(Tailor, {foreignKey: {allowNull: false}}) + User.hasMany(Request, {onDelete: 'CASCADE'}) + User.hasMany(Appointment, {onDelete: 'CASCADE'}) + User.hasOne(Tailor, {foreignKey: {allowNull: false}, onDelete: 'CASCADE'}) - Request.belongsTo(User) - Request.hasMany(Appointment) - Request.belongsTo(Tailor) - Request.belongsTo(Service, { as: 'service' }); + User.hasOne(NotificationCount) + NotificationCount.belongsTo(User) - Appointment.belongsTo(Request) - Appointment.belongsTo(User) + User.belongsToMany(Notification, {through: UserNotification}) + Notification.belongsToMany(User, {through: UserNotification}) + + Request.hasMany(Appointment, {onDelete: 'CASCADE'}) + Request.belongsTo(User, {as: 'user', foreignKey: 'userId'}) + Request.belongsTo(User, {as: 'tailor', foreignKey: 'tailorId'}) + Request.belongsTo(User, {as: 'tailorChange', foreignKey: 'tailorChangeId'}) + Request.hasMany(RequestItem) + RequestItem.belongsTo(Request) - Service.hasMany(Request, { as: 'requests'}) + Appointment.belongsTo(Request) + Appointment.belongsTo(User, {as: 'user', foreignKey: 'userId'}) + Appointment.belongsTo(User, {as: 'tailor', foreignKey: 'tailorId'}) + Tailor.hasMany(Appointment) Tailor.belongsTo(User) Tailor.hasMany(Request) + Product.belongsToMany(Cart, { through: CartProduct }) + Cart.belongsToMany(Product, { through: CartProduct }) + + User.hasOne(Cart) + Cart.belongsTo(User) + + Order.hasMany(OrderItems) + OrderItems.belongsTo(Order) + + Order.belongsTo(User) + User.hasMany(Order) + + Wishlist.belongsTo(Product) + Product.hasMany(Wishlist) + + Review.belongsTo(User) + User.hasMany(Review) + + Review.belongsTo(Product) + Product.hasMany(Review) + + Chat.hasMany(Request, {onDelete: "CASCADE"}) + Request.belongsTo(Chat, {onDelete: "CASCADE"}) + + Chat.belongsToMany(User, {through: ChatUser}) + User.belongsToMany(Chat, {through: ChatUser}) + + Chat.hasMany(ChatUser) + ChatUser.belongsTo(Chat) + User.hasMany(ChatUser) + ChatUser.belongsTo(User) + + Chat.hasMany(Msg, {onDelete: "CASCADE"}) + Msg.belongsTo(Chat, {onDelete: "CASCADE"}) + Msg.belongsTo(User, {onDelete: "CASCADE"}) + + User.hasMany(Withdrawal) + Withdrawal.belongsTo(User) + mySQLDB.sync({ alter: true, force: drop diff --git a/config/Dialogflow.js b/config/Dialogflow.js deleted file mode 100644 index 151870e5..00000000 --- a/config/Dialogflow.js +++ /dev/null @@ -1,49 +0,0 @@ -const dialogflow = require('@google-cloud/dialogflow'); -const uuid = require('uuid'); - - -async function InitaliseDialogFlow() { -/** - * Send a query to the dialogflow agent, and return the query result. - * @param {string} projectId The project to be used - */ -async function runSample(projectId = 'newagent-qopk') { - // A unique identifier for the given session - const sessionId = uuid.v4(); - - // Create a new session - const sessionClient = new dialogflow.SessionsClient(); - const sessionPath = sessionClient.projectAgentSessionPath( - projectId, - sessionId - ); - - // The text query request. - const request = { - session: sessionPath, - queryInput: { - text: { - // The query to send to the dialogflow agent - text: 'hello', - // The language used by the client (en-US) - languageCode: 'en-US', - }, - }, - }; - - // Send request and log result - const responses = await sessionClient.detectIntent(request); - console.log('Detected intent'); - const result = responses[0].queryResult; - console.log(` Query: ${result.queryText}`); - console.log(` Response: ${result.fulfillmentText}`); - if (result.intent) { - console.log(` Intent: ${result.intent.displayName}`); - } else { - console.log(' No intent matched.'); - } -} -console.log("Dialogflow Initalised"); -} - -module.exports = InitaliseDialogFlow; \ No newline at end of file diff --git a/controllers/serviceController.js b/controllers/serviceController.js index 3ad105e1..c0f891ed 100644 --- a/controllers/serviceController.js +++ b/controllers/serviceController.js @@ -1,3 +1,107 @@ const Appointment = require('../models/Appointment') +const Request = require('../models/Request') +const { Op } = require('sequelize'); +const moment = require('moment'); +const Tailor = require('../models/Tailor'); -// const \ No newline at end of file + + +const checkAppointment = async (req, res, next) => { + await Appointment.unscoped().findAll({ + include: Request, + where: { + "$request.statusCode$": 2, + confirmed: { + [Op.is]: null + }, + datetime: { + [Op.lt]: moment().add(5, 'd') + } + } + }).then(async (appt) => { + appt.forEach(async function (a) { + await Appointment.unscoped().update({ confirmed: false }, { where: { id: a.id } }) + await Request.update({ statusCode: -1 }, { where: { id: a.requestId } }) + }); + }) + next(); +} + +const appointmentDelete = async (req, res) => { + let x = await Appointment.findByPk(req.body.id) + await Request.update({ status: 'Appointment Cancelled', adminStatus: "User Cancelled Appointment", userColor: "red", adminColor: 'blue' }, { where: { id: x.requestId } }) + let appt = await Appointment.findByPk(req.body.id) + await Appointment.destroy({ where: { id: req.body.id } }).then((count) => { + let payload = {}; + if (count == 1) { + payload = { send: true, title: 'Appointment Cancelled', body: `Appointment on ${appt.datetimeHuman} was canceled by ${req.user.name}`, by: req.user.name, url: '/admin/requests', to: appt.tailorId } + } else { + payload = { send: false, title: null, body: null, by: null, url: null, to: null } + } + return res.json(payload); + }) +} + +const requestDelete = async (req, res) => { + let requested = await Request.findByPk(req.body.id) + await Request.destroy({ where: { id: req.body.id } }).then((count) => { + let payload = {}; + if (count == 1) { + payload = { send: true, title: 'Request Cancelled', body: `Request ID ${req.body.id} was canceled by ${req.user.name}`, by: req.user.name, url: '/admin/requests', to: requested.tailorId } + } else { + payload = { send: false, title: null, body: null, by: null, url: null, to: null } + } + return res.json(payload); + }) +} + +const tailorChangeDelete = async (req, res) => { + let requested = await Request.findByPk(req.body.id) + await Request.update({ tailorChangeId: null }, { where: { id: req.body.id } }).then((count) => { + if (count == 1) { + payload = { send: true, title: 'Tailor Change Cancelled', body: `Tailor Change requested was canceled by ${req.user.name} for Request ID ${req.body.id}`, by: req.user.name, url: '/admin/requests', to: requested.tailorId } + } else { + payload = { send: false, title: null, body: null, by: null, url: null, to: null } + } + return res.json(payload); + }) +} + +const requestStatus = async (req, res, next) => { + let adminstatus + let adminColor + let userColor + console.log(req.body.status); + if (req.body.status == 'Finished Appointment' || req.body.status == 'Cancel Fitting Appointment Request') { + status = 'In Progress' + adminstatus = 'In Progress' + userColor = 'blue' + adminColor = 'blue' + } else if (req.body.status == 'Request Fitting Appointment') { + status = 'Ready for fitting! Please book your appointment' + adminstatus = 'Awaiting Fitting Appointment Booking' + userColor = 'yellow' + adminColor = 'yellow' + } else if (req.body.status == 'Finished Request') { + status = 'Request is completed! Ready for pickup' + + adminstatus = 'Request completed! Ready for pickup!' + userColor = 'green' + adminColor = 'green' + } else if (req.body.status == "In Progress") { + status = 'Request in progress' + adminstatus = 'Request in progress' + userColor = 'blue' + adminColor = 'blue' + } + await Request.update({ status: status, adminstatus: adminstatus, userColor: userColor, adminColor: adminColor }, { where: { id: req.body.statusId } }) + next() +} + +module.exports = { + appointmentDelete, + requestDelete, + tailorChangeDelete, + requestStatus, + checkAppointment, +} \ No newline at end of file diff --git a/controllers/userController.js b/controllers/userController.js index 9c69b4f0..11428758 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -1,26 +1,41 @@ const flashMessage = require('../views/helpers/messenger'); +const User = require("../models/User") -const loginRedirect = (req, res) => { - var role = req.user.role; - let redirectTo = req.session.redirectTo; - delete req.session.redirectTo; - if(role=="C"){ - flashMessage(res, 'success', "Success You are logged in as: "+ req.user.name); - res.redirect(redirectTo || '/profile'); - } else if(role == "A" || role == "T"){ - flashMessage(res, 'success', "Success You are logged in as Administrator: "+ req.user.name); - res.redirect(redirectTo || "/admin") - }else if(role=="S"){ - flashMessage(res, 'success', "Success You are logged in as Seller: "+ req.user.name); - res.redirect(redirectTo || "/seller") +const loginRedirect = async (req, res) => { + var role = req.user.role; + let redirectTo = req.session.redirectTo; + delete req.session.redirectTo; + if (role == "C") { + console.log(req.user.id, 'wuehfoihfoiehfoisihfioes') + userr1 = await User.findOne({ where: { id: req.user.id } }) + console.log(userr1.isban, 'wuehfoihfoiehfoisihfioes') + if (userr1.isban == "T") { + req.logout() + flashMessage(res, 'error', 'You have been banned! Please contact your local administrator'); + return res.redirect('/login') } - - else{ - res.redirect("/login") + flashMessage(res, 'success', "Success You are logged in as: " + req.user.name); + res.redirect(redirectTo || '/profile'); + } else if (role == "A" || "T") { + flashMessage(res, 'success', "Success You are logged in as Administrator: " + req.user.name); + res.redirect(redirectTo || "/admin") + } else if (role == "S") { + userr1 = await User.findOne({ where: { id: req.user.id } }) + if (userr1.isban == "T") { + req.logout() + flashMessage(res, 'error', 'You have been banned! Please contact your local administrator'); + return res.redirect('/login') } + flashMessage(res, 'success', "Success You are logged in as Seller: " + req.user.name); + res.redirect(redirectTo || "/seller") + } + + else { + res.redirect("/login") + } } module.exports = { - loginRedirect, + loginRedirect, } \ No newline at end of file diff --git a/models/Alteration.js b/models/Alteration.js new file mode 100644 index 00000000..f6a4ec6b --- /dev/null +++ b/models/Alteration.js @@ -0,0 +1,27 @@ +const { Op, where } = require('sequelize'); +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const Appointment = require('./Appointment'); +const moment = require("moment") + +class Alteration extends sequelize.Model { + +} +Alteration.init({ + title: { type: sequelize.STRING, allowNull: false }, + description: { type: sequelize.STRING(1000) }, + image: {type: sequelize.STRING}, + statusCode: { type: sequelize.ENUM('In Progress', 'Ready for pick up on'), allowNull: false, defaultValue: 'In Progress' }, +}, + { + hooks: { + // beforeFind: async function (request) { + + // } + }, + timestamps: true, + sequelize: db, + modelName: "alteration", + } +) +module.exports = Alteration; \ No newline at end of file diff --git a/models/Appointment.js b/models/Appointment.js index 27b53da2..93cd465e 100644 --- a/models/Appointment.js +++ b/models/Appointment.js @@ -1,18 +1,68 @@ -const sequelize = require('sequelize'); +const sequelize = require('sequelize'); const db = require('../config/DBConfig'); +const moment = require('moment'); +const { Op } = require('sequelize'); + +class Appointment extends sequelize.Model { -class Appointment extends sequelize.Model{ - } Appointment.init({ - date: {type:sequelize.DATEONLY,allowNull: false}, - time: {type:sequelize.TIME,allowNull: false}, - description: { type: sequelize.STRING(1000),allowNull: false } + datetime: { + type: sequelize.DATE, + get() { + return moment(this.getDataValue('datetime')) + }, + }, + date: { + type: sequelize.VIRTUAL, + get() { + return this.datetime.format('YYYY-MM-DD'); + }, + set(value) { + throw new Error('Do not try to set the `date` value!'); + } + }, + time: { + type: sequelize.VIRTUAL, + get() { + return this.datetime.format('HH:mm:ss'); + }, + set(value) { + throw new Error('Do not try to set the `time` value!'); + } + }, + datetimeHuman: { + type: sequelize.VIRTUAL, + get() { + let datetime = moment(`${this.date} ${this.time}`, "YYYY-MM-DD HH:mm:ss") + return datetime.format("Do MMMM YYYY, h:mm a"); + }, + set(value) { + throw new Error('Do not try to set the `datetime` value!'); + } + }, + confirmed: { type: sequelize.ENUM, values: ['Rejected', 'Pending', 'Confirmed'], defaultValue: null}, + type: { type: sequelize.ENUM, values: ['Measurement', 'Fitting'], defaultValue: null}, + }, { + // defaultScope: { + // where: { + // datetime: { + // [Op.gte]: moment() + // } + // } + // }, + indexes: [ + { + name: 'apptKey', + unique: true, + fields: ['datetime', 'tailorId', 'confirmed'] + } + ], timestamps: true, sequelize: db, modelName: "appointment", } -) +) module.exports = Appointment; \ No newline at end of file diff --git a/models/Cart.js b/models/Cart.js index 5686c6b5..2ea8a055 100644 --- a/models/Cart.js +++ b/models/Cart.js @@ -9,10 +9,10 @@ class Cart extends sequelize.Model{ } Cart.init({ id: {type: sequelize.INTEGER, autoIncrement: false, primaryKey: true}, - cartOwner:{type:sequelize.STRING}, - cartOwnerID:{type: sequelize.INTEGER}, + // cartOwner:{type:sequelize.STRING}, + // cartOwnerID:{type: sequelize.INTEGER}, cartTotal:{ type: sequelize.FLOAT }, - discountcodeused:{type: sequelize.STRING}, + discountcodeused:{type: sequelize.STRING, allowNull: true}, }, { diff --git a/models/CartProduct.js b/models/CartProduct.js index 6e9adc51..a2590eb2 100644 --- a/models/CartProduct.js +++ b/models/CartProduct.js @@ -1,5 +1,7 @@ const sequelize = require('sequelize'); const db = require('../config/DBConfig'); +const Cart = require('./Cart'); +const Product = require('./Product'); // Create Product table in MySQL Database @@ -8,15 +10,8 @@ class CartProduct extends sequelize.Model{ } CartProduct.init({ - id: {type: sequelize.INTEGER, autoIncrement: false, primaryKey: true}, - sku:{type: sequelize.INTEGER}, - name: { type: sequelize.STRING }, - description: { type: sequelize.STRING(2000) }, - price: { type: sequelize.FLOAT }, - category:{type:sequelize.STRING}, - cartOwner:{type:sequelize.STRING}, - cartOwnerID:{type: sequelize.INTEGER}, - totalCost:{ type: sequelize.FLOAT }, + cartId: { type: sequelize.INTEGER, references: { model: Cart, key: 'id' } }, + productSku: { type: sequelize.INTEGER, references: { model: Product, key: 'sku' } }, qtyPurchased:{ type: sequelize.INTEGER } }, diff --git a/models/Chat.js b/models/Chat.js new file mode 100644 index 00000000..53ca32c4 --- /dev/null +++ b/models/Chat.js @@ -0,0 +1,20 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); + +class Chat extends sequelize.Model { + +} +Chat.init({ + open: { type: sequelize.BOOLEAN, allowNull: false, defaultValue: true }, + livechat: { type: sequelize.BOOLEAN, allowNull: false, defaultValue: false }, + liveId: { type: sequelize.STRING, allowNull: true } +}, + { + timestamps: true, + sequelize: db, + modelName: "chat", + } +) + + +module.exports = Chat; \ No newline at end of file diff --git a/models/ChatUser.js b/models/ChatUser.js new file mode 100644 index 00000000..b3f6b8ce --- /dev/null +++ b/models/ChatUser.js @@ -0,0 +1,28 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const User = require('./User'); +const Chat = require('./Chat'); + +class ChatUser extends sequelize.Model { + +} +ChatUser.init({ + userId: { type: sequelize.INTEGER, references: { model: User, key: 'id' } }, + chatId: { type: sequelize.INTEGER, references: { model: Chat, key: 'id' } }, + type: { type: sequelize.ENUM('Request', 'Seller'), allowNull: false }, +}, + { + freezeTableName: true, + sequelize: db, + modelName: "chatuser", + indexes: [ + { + name: 'type', + unique: true, + fields: ['type', 'chatId', 'userId'] + }, + ] + } +) + +module.exports = ChatUser; \ No newline at end of file diff --git a/models/LiveChat.js b/models/LiveChat.js new file mode 100644 index 00000000..7770eee7 --- /dev/null +++ b/models/LiveChat.js @@ -0,0 +1,18 @@ +// const sequelize = require('sequelize'); +// const db = require('../config/DBConfig'); + +// class LiveChat extends sequelize.Model { + +// } +// LiveChat.init({ +// open: { type: sequelize.BOOLEAN, allowNull: false, defaultValue: true }, +// }, +// { +// timestamps: true, +// sequelize: db, +// modelName: "livechat", +// } +// ) + + +// module.exports = LiveChat; \ No newline at end of file diff --git a/models/Msg.js b/models/Msg.js new file mode 100644 index 00000000..e6074544 --- /dev/null +++ b/models/Msg.js @@ -0,0 +1,19 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); + +class Msg extends sequelize.Model { + +} +Msg.init({ + content: { type: sequelize.STRING, allowNull: false }, + seen: { type: sequelize.BOOLEAN, allowNull: false, defaultValue: false } +}, + { + timestamps: true, + sequelize: db, + modelName: "msg", + } +) + + +module.exports = Msg; \ No newline at end of file diff --git a/models/Notification.js b/models/Notification.js new file mode 100644 index 00000000..5737ccd3 --- /dev/null +++ b/models/Notification.js @@ -0,0 +1,22 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); + +class Notification extends sequelize.Model{ + +} +Notification.init({ + title: { type: sequelize.STRING,allowNull: false }, + body: { type: sequelize.STRING(2000),allowNull: false }, + url: {type: sequelize.STRING(200)}, + senderId:{type: sequelize.INTEGER} +}, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "notification", + } +) + + +module.exports = Notification; \ No newline at end of file diff --git a/models/NotificationCount.js b/models/NotificationCount.js new file mode 100644 index 00000000..c38c674f --- /dev/null +++ b/models/NotificationCount.js @@ -0,0 +1,21 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const User = require('./User'); +const Notification = require('./Notification'); + +class NotificationCount extends sequelize.Model { + +} +NotificationCount.init({ + msgCount: { type: sequelize.INTEGER, defaultValue: 0}, + notificationCount: { type: sequelize.INTEGER, defaultValue: 0}, +}, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "notificationcount", + } +) + +module.exports = NotificationCount; \ No newline at end of file diff --git a/models/OrderItems.js b/models/OrderItems.js new file mode 100644 index 00000000..e36966fe --- /dev/null +++ b/models/OrderItems.js @@ -0,0 +1,31 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const Orders = require('../models/Orders') + +class OrderItems extends sequelize.Model{ + +} +OrderItems.init({ + productSku: { type: sequelize.INTEGER}, + qtyPurchased:{ type: sequelize.INTEGER }, + product_name:{ type: sequelize.STRING}, + product_price:{ type: sequelize.INTEGER}, + shipping_type:{type: sequelize.STRING}, + shipping_rate:{type: sequelize.FLOAT}, + seller_name: { type: sequelize.STRING}, + seller_id: { type: sequelize.INTEGER}, + orderStatus:{type: sequelize.STRING}, + posterURL: { type: sequelize.STRING }, + review: { type: sequelize.BOOLEAN}, + seller_cut :{ type: sequelize.FLOAT }, + tit_cut :{ type: sequelize.FLOAT}, + }, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "orderitems", + } +) + +module.exports = OrderItems; \ No newline at end of file diff --git a/models/Orders.js b/models/Orders.js index b563ac64..90307b4a 100644 --- a/models/Orders.js +++ b/models/Orders.js @@ -8,12 +8,17 @@ class Order extends sequelize.Model{ } Order.init({ - id: {type: sequelize.INTEGER, autoIncrement: false, primaryKey: true}, - cartOwner:{type:sequelize.STRING}, - cartOwnerID:{type: sequelize.INTEGER}, - cartTotal:{ type: sequelize.FLOAT }, + id: {type: sequelize.INTEGER, autoIncrement: true, primaryKey: true}, + orderUUID: {type: sequelize.STRING,}, + orderOwnerID:{type: sequelize.INTEGER}, + orderOwnerName:{type: sequelize.STRING}, + orderTotal:{ type: sequelize.FLOAT }, discountcodeused:{type: sequelize.STRING}, - + address:{type: sequelize.STRING}, + unit_number:{type: sequelize.STRING}, + postal_code:{type: sequelize.INTEGER}, + phone_number:{type: sequelize.INTEGER}, + email:{type: sequelize.STRING} }, { freezeTableName: true, diff --git a/models/Product.js b/models/Product.js index 24001f8f..9950259b 100644 --- a/models/Product.js +++ b/models/Product.js @@ -15,8 +15,13 @@ Product.init({ quantity: {type: sequelize.INTEGER}, category:{type:sequelize.STRING}, wishlistcount:{type: sequelize.INTEGER}, + sold: {type: sequelize.INTEGER}, + sales: {type: sequelize.INTEGER}, Owner:{type:sequelize.STRING}, - OwnerID:{type: sequelize.INTEGER} + OwnerID:{type: sequelize.INTEGER}, + posterURL: { type: sequelize.STRING }, + stars_given: { type: sequelize.INTEGER}, + reviews_given: { type: sequelize.INTEGER}, }, { freezeTableName: true, diff --git a/models/Request.js b/models/Request.js index f49f3215..0dd4ccb2 100644 --- a/models/Request.js +++ b/models/Request.js @@ -1,19 +1,29 @@ -const sequelize = require('sequelize'); +const { Op, where } = require('sequelize'); +const sequelize = require('sequelize'); const db = require('../config/DBConfig'); +const Appointment = require('./Appointment'); +const moment = require("moment") + +class Request extends sequelize.Model { -class Request extends sequelize.Model{ - } Request.init({ - title:{type: sequelize.STRING,allowNull: false}, - description:{type: sequelize.STRING(1000)}, - status:{type: sequelize.STRING, allowNull: false, defaultValue: "Pending Appointment Booking"}, + title: { type: sequelize.STRING, allowNull: false }, + status: { type: sequelize.STRING, allowNull: false }, + adminstatus: { type: sequelize.STRING, allowNull: false }, + userColor: { type: sequelize.STRING, allowNull: false }, + adminColor: { type: sequelize.STRING, allowNull: false }, }, { + hooks: { + // beforeFind: async function (request) { + + // } + }, timestamps: true, sequelize: db, modelName: "request", } -) +) module.exports = Request; \ No newline at end of file diff --git a/models/RequestItem.js b/models/RequestItem.js new file mode 100644 index 00000000..62560048 --- /dev/null +++ b/models/RequestItem.js @@ -0,0 +1,34 @@ +const { Op, where } = require('sequelize'); +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const Appointment = require('./Appointment'); +const moment = require("moment") + +class RequestItem extends sequelize.Model { + +} +RequestItem.init({ + name: { type: sequelize.STRING, allowNull: false }, + description: { type: sequelize.STRING, allowNull: false }, + type: { type: sequelize.STRING, allowNull: false }, + color: { type: sequelize.STRING}, + qty: { type: sequelize.INTEGER, allowNull: false, defaultValue: 1 }, + + head: { type: sequelize.FLOAT }, + neck: { type: sequelize.FLOAT }, + bust: { type: sequelize.FLOAT }, + underBust: { type: sequelize.FLOAT }, + waist: { type: sequelize.FLOAT }, + arm: { type: sequelize.FLOAT }, + hip: { type: sequelize.FLOAT }, + hand: { type: sequelize.FLOAT }, + inseam: { type: sequelize.FLOAT }, + height: { type: sequelize.FLOAT }, +}, + { + timestamps: true, + sequelize: db, + modelName: "requestitem", + } +) +module.exports = RequestItem; \ No newline at end of file diff --git a/models/RequestStatus.js b/models/RequestStatus.js new file mode 100644 index 00000000..b0d1fb50 --- /dev/null +++ b/models/RequestStatus.js @@ -0,0 +1,22 @@ +const { Op, where } = require('sequelize'); +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const Appointment = require('./Appointment'); +const moment = require("moment") + +class RequestStatus extends sequelize.Model { + +} +RequestStatus.init({ + status: { type: sequelize.STRING, allowNull: false }, + adminstatus: { type: sequelize.STRING, allowNull: false }, + userColor: { type: sequelize.STRING, allowNull: false }, + adminColor: { type: sequelize.STRING, allowNull: false }, +}, + { + timestamps: true, + sequelize: db, + modelName: "requestStatus", + } +) +module.exports = RequestStatus; \ No newline at end of file diff --git a/models/Reviews.js b/models/Reviews.js new file mode 100644 index 00000000..8237cedd --- /dev/null +++ b/models/Reviews.js @@ -0,0 +1,24 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); + +// Create Review table in MySQL Database + + +class Review extends sequelize.Model{ + +} +Review.init({ + title: { type: sequelize.STRING }, + description: { type: sequelize.STRING(2000) }, + stars: { type: sequelize.INTEGER}, + sellerId: { type: sequelize.INTEGER}, +}, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "review", + } +) + +module.exports = Review; \ No newline at end of file diff --git a/models/Reward.js b/models/Reward.js index 8ff0c0d3..fc8aca25 100644 --- a/models/Reward.js +++ b/models/Reward.js @@ -8,14 +8,14 @@ class Reward extends sequelize.Model{ } Reward.init({ - id:{type: sequelize.INTEGER, autoIncrement: true, primaryKey: true}, + id:{type: sequelize.BIGINT, autoIncrement: true, primaryKey: true}, name: { type: sequelize.STRING }, voucher_code: { type: sequelize.STRING }, description: { type: sequelize.STRING(2000) }, spools_needed: { type: sequelize.INTEGER }, discount_amount: { type: sequelize.INTEGER }, quantity: {type: sequelize.INTEGER}, - expiry_date:{type:sequelize.DATE} + expiry_date:{type:sequelize.DATEONLY} }, { freezeTableName: true, diff --git a/models/Statistics.js b/models/Statistics.js index e69de29b..05d85fbc 100644 --- a/models/Statistics.js +++ b/models/Statistics.js @@ -0,0 +1,24 @@ +// const sequelize = require('sequelize'); +// const db = require('../config/DBConfig'); + +// // Create Product table in MySQL Database + + +// class Statistics extends sequelize.Model{ + +// } +// Statistics.init({ +// id:{type: sequelize.INTEGER, autoIncrement: true, primaryKey: true}, +// totalSales: {type: sequelize.INTEGER}, +// totalOrders: {type: sequelize.INTEGER}, +// total +// }, +// { +// freezeTableName: true, +// timestamps: true, +// sequelize: db, +// modelName: "statistics", +// } +// ) + +// module.exports = Statistics; \ No newline at end of file diff --git a/models/TempUser.js b/models/TempUser.js new file mode 100644 index 00000000..64face75 --- /dev/null +++ b/models/TempUser.js @@ -0,0 +1,40 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig.js'); +const bcrypt = require("bcrypt"); + +class TempUser extends sequelize.Model { + } + + TempUser.init( + { + email: { + type: sequelize.DataTypes.STRING, + allowNull: false, + }, + backupcode1: { + type: sequelize.DataTypes.STRING, + allowNull: false, + }, + backupcode2: { + type: sequelize.DataTypes.STRING, + allowNull: false, + }, + backupcode1check: { + type: sequelize.DataTypes.STRING, + allowNull: false, + }, + backupcode2check: { + type: sequelize.DataTypes.STRING, + allowNull: false, + }, + + }, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "Tempuser", + } + ); + +module.exports = TempUser; \ No newline at end of file diff --git a/models/User.js b/models/User.js index 02412013..f7223f12 100644 --- a/models/User.js +++ b/models/User.js @@ -16,6 +16,10 @@ class User extends sequelize.Model { primaryKey: true, }, + profilepic: { + type: sequelize.DataTypes.STRING, + allowNull: true, + }, name: { type: sequelize.DataTypes.STRING, allowNull: false, @@ -35,6 +39,14 @@ class User extends sequelize.Model { type: sequelize.DataTypes.STRING(8), allowNull: true, }, + bankName: { + type: sequelize.DataTypes.STRING, + allowNull: true, + }, + bankAccount: { + type: sequelize.DataTypes.STRING, + allowNull: true, + }, role: { type: sequelize.DataTypes.STRING, allowNull: true, @@ -71,6 +83,21 @@ class User extends sequelize.Model { type: sequelize.DataTypes.INTEGER, defaultValue: false }, + isban: { + type: sequelize.DataTypes.STRING, + allowNull: false, + defaultValue: "F", + }, + total_balance: { + type: sequelize.DataTypes.FLOAT, + allowNull: false, + defaultValue: 0, + }, + withdrawn_amount: { + type: sequelize.DataTypes.FLOAT, + allowNull: false, + defaultValue: 0, + }, }, { freezeTableName: true, diff --git a/models/UserNotifications.js b/models/UserNotifications.js new file mode 100644 index 00000000..29e4f8c6 --- /dev/null +++ b/models/UserNotifications.js @@ -0,0 +1,23 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); +const User = require('./User'); +const Notification = require('./Notification'); + +class UserNotification extends sequelize.Model { + +} +UserNotification.init({ + userId: { type: sequelize.INTEGER, references: { model: User, key: 'id' } }, + notificationId: { type: sequelize.INTEGER, references: { model: Notification, key: 'id' } }, + seen: { type: sequelize.BOOLEAN, defaultValue: false } + +}, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "usernotification", + } +) + +module.exports = UserNotification; \ No newline at end of file diff --git a/models/Wishlist.js b/models/Wishlist.js index 800d2ef9..dff65ab1 100644 --- a/models/Wishlist.js +++ b/models/Wishlist.js @@ -8,12 +8,7 @@ class Wishlist extends sequelize.Model{ } Wishlist.init({ - id:{type: sequelize.INTEGER, autoIncrement: false, primaryKey: true}, - sku:{type: sequelize.INTEGER}, - name: { type: sequelize.STRING }, - description: { type: sequelize.STRING(2000) }, - price: { type: sequelize.FLOAT }, - category:{type:sequelize.STRING}, + id:{type: sequelize.BIGINT, autoIncrement: false, primaryKey: true}, Owner:{type:sequelize.STRING}, OwnerID:{type: sequelize.INTEGER} }, diff --git a/models/Withdrawal.js b/models/Withdrawal.js new file mode 100644 index 00000000..6130bbc1 --- /dev/null +++ b/models/Withdrawal.js @@ -0,0 +1,26 @@ +const sequelize = require('sequelize'); +const db = require('../config/DBConfig'); + +// Create Withdrawal table in MySQL Database + + +class Withdrawal extends sequelize.Model{ + +} +Withdrawal.init({ + id:{type: sequelize.INTEGER, autoIncrement: true, primaryKey: true}, + sellerID:{type: sequelize.INTEGER}, + withdrawal_amount:{ type: sequelize.FLOAT}, + authorization_by:{type: sequelize.STRING,allowNull: true}, + authorizee_id:{type: sequelize.INTEGER,allowNull: true}, + status:{ type: sequelize.STRING} +}, + { + freezeTableName: true, + timestamps: true, + sequelize: db, + modelName: "withdrawal", + } +) + +module.exports = Withdrawal; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8d31179e..940b4d42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,15 @@ { - "name": "threadsintimewebsite", + "name": "threadsinnode", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "threadsintimewebsite", + "name": "threadsinnode", "version": "1.0.0", "license": "ISC", "dependencies": { - "@google-cloud/dialogflow": "^5.2.0", "@handlebars/allow-prototype-access": "^1.0.5", - "actions-on-google": "^3.0.0", "bcrypt": "^5.0.1", "bcryptjs": "^2.4.3", "blob-stream": "^0.1.3", @@ -19,8 +17,6 @@ "chartjs-to-image": "^1.0.5", "connect-flash": "^0.1.1", "danfojs-node": "^1.1.1", - "dialogflow": "^1.2.0", - "dialogflow-fulfillment": "^0.6.1", "dotenv": "^16.0.0", "express": "^4.18.1", "express-handlebars": "^6.0.5", @@ -28,43 +24,44 @@ "express-session": "^1.17.2", "flash": "^1.1.0", "flash-messenger": "^1.1.1", + "fontkit": "^2.0.2", "handlebars": "^4.7.7", "hbs": "^4.2.0", + "http": "^0.0.1-security", "install": "^0.13.0", + "jquery-validation": "^1.19.5", + "jsontoxml": "^1.0.1", "jspdf": "^2.5.1", + "luhn-js": "^1.1.2", "moment": "^2.29.4", "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", + "nanoid": "^3.3.4", "nodemailer": "^6.7.7", "nodemailer-express-handlebars": "^5.0.0", - "nodemon": "^2.0.16", + "nodemon": "^2.0.19", "npm": "^8.9.0", "passport": "^0.5.2", "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", + "pdf": "^0.1.0", "pdfkit": "^0.13.0", "pdfkit-table": "^0.1.99", "qrcode": "^1.5.1", "sequelize": "^6.19.0", "sessions": "^0.0.2-7", - "toast-me": "^1.4.8" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "socket.io": "^4.5.1", + "stripe": "^9.16.0", + "stripe-cli": "^0.1.0", + "toast-me": "^1.4.8", + "uuid": "^8.3.2", + "xlsx": "^0.18.5" } }, "node_modules/@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -72,356 +69,6 @@ "node": ">=6.9.0" } }, - "node_modules/@google-cloud/dialogflow": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/dialogflow/-/dialogflow-5.2.0.tgz", - "integrity": "sha512-B+bEyxA9xZMosr9D0N0qeWRKNnlCx82trBwkhAIQi3+5bGuPEg7kiMg/cRySHvobQMTJBATB+1Zb4az34DpBxA==", - "dependencies": { - "google-gax": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/@grpc/grpc-js": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.9.tgz", - "integrity": "sha512-01Dy1wqXVsuiMI4m4tDoX+IPYAeNI8EsfNFPqAJBX4OiCSs5VU8Gw0pJq5NhGizH6nKUprmHb/QvxTq3d1xL5g==", - "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/@grpc/proto-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", - "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/gaxios": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", - "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/gcp-metadata": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", - "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/google-auth-library": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.1.1.tgz", - "integrity": "sha512-eG3pCfrLgVJe19KhAeZwW0m1LplNEo0FX1GboWf3hu18zD2jq8TUH2K8900AB2YRAuJ7A+1aSXDp1BODjwwRzg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/google-gax": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.1.4.tgz", - "integrity": "sha512-+EOIVCSpFVabuqSBQHEy5kE8rGapc5sS47wbShJLzRnxIBWXs9+2vCnnmBP3pPZSsRQU08rp5C26j7spk+liUQ==", - "dependencies": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.0.0", - "protobufjs-cli": "1.0.0", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/google-p12-pem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.0.tgz", - "integrity": "sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/gtoken": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.0.tgz", - "integrity": "sha512-WPZcFw34wh2LUvbCUWI70GDhOlO7qHpSvFHFqq7d3Wvsf8dIJedE0lnUdOmsKuC0NgflKmF0LxIF38vsGeHHiQ==", - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/gtoken/node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@google-cloud/dialogflow/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/protobufjs-cli": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.0.tgz", - "integrity": "sha512-7NZEBrFuuU2ZdzlhmAmvh8fdU7A4OFhzYX9AB7a5vXjopAeiks6ZgUSjOlOO7ItCDJQm3y9RWjk7spUbHc4X0w==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^3.6.3", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/protobufjs/node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - }, - "node_modules/@google-cloud/dialogflow/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/retry-request": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.1.tgz", - "integrity": "sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/dialogflow/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", - "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", - "dependencies": { - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@handlebars/allow-prototype-access": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@handlebars/allow-prototype-access/-/allow-prototype-access-1.0.5.tgz", @@ -449,126 +96,25 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/@swc/helpers": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.17.tgz", - "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.6.tgz", + "integrity": "sha512-jUMFa2/gFJOBVBnd3ZZHKRNsgqD0OQQhJMlOFR5B5stMbrUlTQoI7rXORtIGb+M/BZAU/cuI68nho4De3gXzWA==", "dependencies": { "tslib": "^2.4.0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@tensorflow/tfjs": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.18.0.tgz", - "integrity": "sha512-mOzz4jJdgIpqFS7EHndVuxrQnLUDVIKGyTqOPTYps89fZwcOFfTVxi4BHemDNQpqlVE8IaGh9UUxVXpjgPY5+Q==", - "dependencies": { - "@tensorflow/tfjs-backend-cpu": "3.18.0", - "@tensorflow/tfjs-backend-webgl": "3.18.0", - "@tensorflow/tfjs-converter": "3.18.0", - "@tensorflow/tfjs-core": "3.18.0", - "@tensorflow/tfjs-data": "3.18.0", - "@tensorflow/tfjs-layers": "3.18.0", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.19.0.tgz", + "integrity": "sha512-fZF3HOON8jgKhFk06WIScIXf7j/gkl6cLbU1brFWutBhHlPSzxSWvdJR/TivCK7p+yMBunoyK50TjiwOrcoclA==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "3.19.0", + "@tensorflow/tfjs-backend-webgl": "3.19.0", + "@tensorflow/tfjs-converter": "3.19.0", + "@tensorflow/tfjs-core": "3.19.0", + "@tensorflow/tfjs-data": "3.19.0", + "@tensorflow/tfjs-layers": "3.19.0", "argparse": "^1.0.10", "chalk": "^4.1.0", "core-js": "3", @@ -580,109 +126,95 @@ } }, "node_modules/@tensorflow/tfjs-backend-cpu": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.18.0.tgz", - "integrity": "sha512-LcSqlylzGtpgngcMFIL3q9Q3eVaPRJ7ITZt7ivhzkCj4R5ZsnPa9qM3DCVihkQ77heAwSw4hPTo2jp5C4mJ4Cg==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.19.0.tgz", + "integrity": "sha512-02f+WkiL9gc9G7P8PwfsvuXREcAUdM/3uAL6fTle3xKEj7KOxX+E/mc3jxPY5UzjAsgHVBZrPJ2xi6AG16WPkQ==", "dependencies": { - "@types/seedrandom": "2.4.27", - "seedrandom": "2.4.3" + "@types/seedrandom": "^2.4.28", + "seedrandom": "^3.0.5" }, "engines": { "yarn": ">= 1.3.2" }, "peerDependencies": { - "@tensorflow/tfjs-core": "3.18.0" + "@tensorflow/tfjs-core": "3.19.0" } }, - "node_modules/@tensorflow/tfjs-backend-cpu/node_modules/seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" - }, "node_modules/@tensorflow/tfjs-backend-webgl": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.18.0.tgz", - "integrity": "sha512-3NknSzS1oX2BEBOrpjPMZl823S12RgshQthmIbG6QADHb4bCJA8aM4UjWpw+3bNQnRKbRDQdFbuvj10Un79s2A==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.19.0.tgz", + "integrity": "sha512-2HTkAE21t3WQTt8P6iK80ni03AzC8UNZmbIB7/pBDYBbhDwZwe/C5fXrJWnP9m6u4hvCdMAJ3o+OP3NeaEL1pw==", "dependencies": { - "@tensorflow/tfjs-backend-cpu": "3.18.0", + "@tensorflow/tfjs-backend-cpu": "3.19.0", "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "2.4.27", + "@types/seedrandom": "^2.4.28", "@types/webgl-ext": "0.0.30", "@types/webgl2": "0.0.6", - "seedrandom": "2.4.3" + "seedrandom": "^3.0.5" }, "engines": { "yarn": ">= 1.3.2" }, "peerDependencies": { - "@tensorflow/tfjs-core": "3.18.0" + "@tensorflow/tfjs-core": "3.19.0" } }, - "node_modules/@tensorflow/tfjs-backend-webgl/node_modules/seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" - }, "node_modules/@tensorflow/tfjs-converter": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.18.0.tgz", - "integrity": "sha512-hpChA+zVNQOVwRnCfqDb1WI9jbEAKA6DuEm4m75Zb3dIlE6VVooDmAaHBhlc++z2q2G1sBzF9A4Bv48SUpN6vA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.19.0.tgz", + "integrity": "sha512-B69HQq9/orsM8pGJPjNp1cV+hIcc90mxcRIsQSYGovTUNEcftmz2Sh+mqXDWysKUk0gRfx5CX6eJk6NaE55Xow==", "peerDependencies": { - "@tensorflow/tfjs-core": "3.18.0" + "@tensorflow/tfjs-core": "3.19.0" } }, "node_modules/@tensorflow/tfjs-core": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.18.0.tgz", - "integrity": "sha512-gMxisZozqsr5sCKlphF/eVBLg91MjlBiN60tjX8hJAu0WlSn6Gi5k65GNIL+Pq6hrxpvImcfdCmTH/2XJVZ0Mg==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.19.0.tgz", + "integrity": "sha512-znJ+TOJ3NdNL5yjw8M7dn2jO96sokiH1wfFuD7gglCkbZ4SXlFpFj2xelNdRHHmeYanMhJzqeyOW9whUnNcBqw==", "dependencies": { "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "2.4.27", + "@types/seedrandom": "^2.4.28", "@types/webgl-ext": "0.0.30", - "@webgpu/types": "^0.1.16", + "@webgpu/types": "0.1.16", "long": "4.0.0", "node-fetch": "~2.6.1", - "seedrandom": "2.4.3" + "seedrandom": "^3.0.5" }, "engines": { "yarn": ">= 1.3.2" } }, - "node_modules/@tensorflow/tfjs-core/node_modules/seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" - }, "node_modules/@tensorflow/tfjs-data": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.18.0.tgz", - "integrity": "sha512-s43vISJh8K/UN2E2zGRhtj/Kyn8dr4ll8EQkapwzm7fGO9afXCnMsTp6rkZq3fFXouCYA2k1B/j7JssIDr50+w==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.19.0.tgz", + "integrity": "sha512-rkZv+YZowZwnm4RaedkV44WDrjokRHld9Py/0Fb7IvMyUh37lY0WsAsV94kJ+QuLc6iVNcDLaV29K+dUz57bRA==", "dependencies": { "@types/node-fetch": "^2.1.2", - "node-fetch": "~2.6.1" + "node-fetch": "~2.6.1", + "string_decoder": "^1.3.0" }, "peerDependencies": { - "@tensorflow/tfjs-core": "3.18.0", - "seedrandom": "~2.4.3" + "@tensorflow/tfjs-core": "3.19.0", + "seedrandom": "^3.0.5" } }, "node_modules/@tensorflow/tfjs-layers": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.18.0.tgz", - "integrity": "sha512-AV7yDnPlH+RCcq8VPqkX1iyEchObE+e66m0XmJvLj+ncfKHYLa+39ZNroUA+OgB2/cMG6jgq77R4EhZbT6hwJA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.19.0.tgz", + "integrity": "sha512-+sVWjWWyTuT3sImrtNLtMv8/4FS30GAYpTgyJKhCQ3+GSvHUXulxJfncD0QqOg9fTbhtuF1TRAkzDU8v64791g==", "peerDependencies": { - "@tensorflow/tfjs-core": "3.18.0" + "@tensorflow/tfjs-core": "3.19.0" } }, "node_modules/@tensorflow/tfjs-node": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.18.0.tgz", - "integrity": "sha512-jW6bFKO6hH4tGvlijvpcIbCRRa6vDZ2xIIbEO7qZ17s0QOMPBGjDLyQGUaSQ00uog0Rid/sdZNpiueDqB0ZGbA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.19.0.tgz", + "integrity": "sha512-6l8+56J66zf5k+WS8zTA1SbXno+iV7LgchwKPa62fsPRwjdzNIm1QondJbQYbFOILYx6bsgJs7nOoxStOlygAw==", "hasInstallScript": true, "dependencies": { - "@mapbox/node-pre-gyp": "1.0.4", - "@tensorflow/tfjs": "3.18.0", + "@mapbox/node-pre-gyp": "1.0.9", + "@tensorflow/tfjs": "3.19.0", "adm-zip": "^0.5.2", "google-protobuf": "^3.9.2", "https-proxy-agent": "^2.2.1", @@ -694,109 +226,21 @@ "node": ">=8.11.0" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.4.tgz", - "integrity": "sha512-M669Qo4nRT7iDmQEjQYC7RU8Z6dpz9UmSbkJ1OFEja3uevCdLKh7IZZki7L1TZj02kRyl82snXFY8QqkyfowrQ==", - "dependencies": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "node_modules/@tensorflow/tfjs-node/node_modules/agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "es6-promisify": "^5.0.0" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/@tensorflow/tfjs-node/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } + "node_modules/@tensorflow/tfjs-node/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/@tensorflow/tfjs-node/node_modules/debug": { "version": "3.2.7", @@ -806,49 +250,12 @@ "ms": "^2.1.1" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@tensorflow/tfjs-node/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "minipass": "^2.6.0" } }, "node_modules/@tensorflow/tfjs-node/node_modules/https-proxy-agent": { @@ -863,56 +270,32 @@ "node": ">= 4.5.0" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/https-proxy-agent/node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "node_modules/@tensorflow/tfjs-node/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "node_modules/@tensorflow/tfjs-node/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "minipass": "^2.9.0" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/@tensorflow/tfjs-node/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/@tensorflow/tfjs-node/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "abbrev": "1" + "minimist": "^1.2.6" }, "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@tensorflow/tfjs-node/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "mkdirp": "bin/cmd.js" } }, "node_modules/@tensorflow/tfjs-node/node_modules/rimraf": { @@ -926,106 +309,150 @@ "rimraf": "bin.js" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/@tensorflow/tfjs-node/node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" }, "engines": { - "node": ">=10" + "node": ">=4.5" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "node_modules/@tensorflow/tfjs-node/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/@tensorflow/tfjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/@tensorflow/tfjs/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "node_modules/@tensorflow/tfjs/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.5" + "node": ">=7.0.0" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/chownr": { + "node_modules/@tensorflow/tfjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "node_modules/@tensorflow/tfjs/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "minipass": "^2.6.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "node_modules/@tensorflow/tfjs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" + "node_modules/@tensorflow/tfjs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@tensorflow/tfjs/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { - "minimist": "^1.2.6" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=10" } }, - "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "node_modules/@tensorflow/tfjs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } }, "node_modules/@tootallnate/once": { "version": "1.1.2", @@ -1035,27 +462,20 @@ "node": ">= 6" } }, - "node_modules/@types/aws-lambda": { - "version": "8.10.102", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.102.tgz", - "integrity": "sha512-BT05v46n9KtSHa9SgGuOvm49eSruJ9utD8iNXpdpuUVYk8wOcqmm1LEzpNRkrXxD0CULc38sdLpk6q3Wa2WOwg==" + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "node_modules/@types/debug": { "version": "4.1.7", @@ -1065,73 +485,20 @@ "@types/ms": "*" } }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "node_modules/@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" + "version": "18.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.5.tgz", + "integrity": "sha512-NcKK6Ts+9LqdHJaW6HQmgr7dT/i3GOHG+pt6BiWv++5SnjtRd4NXeiuN2kA153SjhXPR/AhHIPHPbrsbpUVOww==" }, "node_modules/@types/node-fetch": { "version": "2.6.2", @@ -1147,40 +514,21 @@ "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, "node_modules/@types/raf": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", "optional": true }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, "node_modules/@types/seedrandom": { - "version": "2.4.27", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", - "integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ==" - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } + "version": "2.4.30", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.30.tgz", + "integrity": "sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==" }, "node_modules/@types/validator": { - "version": "13.7.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz", - "integrity": "sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==" + "version": "13.7.5", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.5.tgz", + "integrity": "sha512-9rQHeAqz6Jw3gDhttkmWetoriW5FPbxylv/6h6mXtaj2NKRcOvOmvfcswVdLVpbuy10NrO486K3lCoLgoIhiIA==" }, "node_modules/@types/webgl-ext": { "version": "0.0.30", @@ -1193,9 +541,9 @@ "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==" }, "node_modules/@webgpu/types": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.20.tgz", - "integrity": "sha512-MFb5oyxX+A7PWQNjcY3kSCSG2FAHaBo7IJBWtxWFgsS20FtY3D9UY7lYqLZ6avS8fSkdSylIS4qiHzFlQUdXag==" + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.16.tgz", + "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==" }, "node_modules/abab": { "version": "2.0.6", @@ -1207,17 +555,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1261,14 +598,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -1277,169 +606,10 @@ "node": ">=0.4.0" } }, - "node_modules/actions-on-google": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/actions-on-google/-/actions-on-google-3.0.0.tgz", - "integrity": "sha512-aEXCAyulR0gWYOknMAJ+WFCdNyw3L8klXowPd9G1CTzzoxgktI2px5bHapPlrKzaCWkqopHpQ7ujUlBSwKdV9Q==", - "dependencies": { - "@types/aws-lambda": "^8.10.0", - "@types/debug": "^4.1.6", - "@types/express": "~4.17.9", - "@types/express-serve-static-core": "4.17.19", - "@types/serve-static": "1.13.9", - "debug": "^4.3.0", - "google-auth-library": "^7.2.0", - "googleapis": "^80.0.0" - }, - "engines": { - "node": ">=12.17.0" - } - }, - "node_modules/actions-on-google/node_modules/@types/express-serve-static-core": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", - "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/actions-on-google/node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/actions-on-google/node_modules/@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/actions-on-google/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/actions-on-google/node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/actions-on-google/node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/actions-on-google/node_modules/google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/actions-on-google/node_modules/google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/actions-on-google/node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/actions-on-google/node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/actions-on-google/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/actions-on-google/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, "node_modules/adler-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", - "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, - "bin": { - "adler32": "bin/adler32.njs" - }, + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", "engines": { "node": ">=0.8" } @@ -1463,27 +633,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1499,12 +648,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" } }, "node_modules/ansi-regex": { @@ -1516,17 +665,14 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/anymatch": { @@ -1563,19 +709,6 @@ "node": ">=10" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1587,15 +720,7 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/asn1": { "version": "0.2.6", @@ -1702,6 +827,14 @@ } ] }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/base64url": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", @@ -1734,7 +867,7 @@ "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, "node_modules/bignumber.js": { "version": "9.0.0", @@ -1765,11 +898,6 @@ "blob": "0.0.4" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -1793,27 +921,19 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1858,11 +978,6 @@ "node": ">= 0.4.0" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1887,45 +1002,6 @@ "node": ">= 0.8" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1939,14 +1015,11 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/canvg": { @@ -1973,17 +1046,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/cfb": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", @@ -1996,15 +1058,36 @@ "node": ">=0.8" } }, - "node_modules/cfb/node_modules/adler-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", - "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "node_modules/cfonts": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/cfonts/-/cfonts-2.10.1.tgz", + "integrity": "sha512-l5IcLv4SaOdL/EGR6BpOF5SEro88VcGJJ6+xbvJb+wXi19YC6UeHE/brv7a4vIcLZopnt3Ys3zWeNnyfB04UPg==", + "dependencies": { + "chalk": "^4", + "window-size": "^1.1.1" + }, + "bin": { + "cfonts": "bin/index.js" + }, "engines": { - "node": ">=0.8" + "node": ">=10" } }, - "node_modules/chalk": { + "node_modules/cfonts/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cfonts/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2019,7 +1102,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/has-flag": { + "node_modules/cfonts/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cfonts/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cfonts/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2027,7 +1126,7 @@ "node": ">=8" } }, - "node_modules/chalk/node_modules/supports-color": { + "node_modules/cfonts/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2038,6 +1137,29 @@ "node": ">=8" } }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chance": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.8.tgz", + "integrity": "sha512-v7fi5Hj2VbR6dJEGRWLmJBA83LJMS47pkAbmROFxHWd9qmE1esHRZW8Clf1Fhzr3rjxnNZVCjOEv/ivFxeIMtg==" + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "node_modules/chartjs-to-image": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/chartjs-to-image/-/chartjs-to-image-1.0.5.tgz", @@ -2081,30 +1203,49 @@ "node": ">=10" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/clear": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", + "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==", "engines": { - "node": ">=6" + "node": "*" + } + }, + "node_modules/cli-color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.3.2.tgz", + "integrity": "sha512-Ys/nDhHNRcxrS4EUI2RS/QCUE+61AMuEOj3sWDX+EIHkJWj+4XkRbOdwdxJteAJKjXYBbeFJMtfaEPd1MBF9pQ==", + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.2", + "memoizee": "0.3.x", + "timers-ext": "0.1.x" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.2.0" } }, "node_modules/clone": { @@ -2115,20 +1256,12 @@ "node": ">=0.8" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "node_modules/clui": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/clui/-/clui-0.3.6.tgz", + "integrity": "sha512-Z4UbgZILlIAjkEkZiDOa2aoYjohKx7fa6DxIh6cE9A6WNWZ61iXfQc6CmdC9SKdS5nO0P0UyQ+WfoXfB65e3HQ==", "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "engines": { - "node": ">=0.10.0" + "cli-color": "0.3.2" } }, "node_modules/codepage": { @@ -2140,20 +1273,17 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/color-support": { "version": "1.1.3", @@ -2191,10 +1321,15 @@ "url": "https://www.patreon.com/infusion" } }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -2210,26 +1345,64 @@ "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", "dependencies": { - "dot-prop": "^5.2.0", + "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/configstore/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/connect-flash": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", - "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA=", + "integrity": "sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==", "engines": { "node": ">= 0.4.0" } @@ -2237,7 +1410,7 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -2269,12 +1442,12 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-js": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.3.tgz", - "integrity": "sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q==", + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz", + "integrity": "sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -2286,6 +1459,18 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -2303,11 +1488,11 @@ "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/css-line-break": { @@ -2340,6 +1525,14 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, + "node_modules/d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha512-0SdM9V9pd/OXJHoWmTfNPTAeD+lw6ZqHg+isPyBFuJsZLSE0Ygg1cYZ/0l6DrKQXMOqGOu1oWupMoOfoRfMZrQ==", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, "node_modules/danfojs-node": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/danfojs-node/-/danfojs-node-1.1.1.tgz", @@ -2355,6 +1548,61 @@ "xlsx": "0.17.2" } }, + "node_modules/danfojs-node/node_modules/adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "adler32": "bin/adler32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/danfojs-node/node_modules/fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + }, + "node_modules/danfojs-node/node_modules/word": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.4.0.tgz", + "integrity": "sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw==", + "dependencies": { + "cfb": "^1.2.0", + "jsdom": "^16.2.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/danfojs-node/node_modules/xlsx": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.2.tgz", + "integrity": "sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ==", + "dependencies": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.15.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "fflate": "^0.3.8", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.4.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2412,11 +1660,19 @@ } }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { @@ -2428,20 +1684,9 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", + "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==" }, "node_modules/deep-equal": { "version": "2.0.5", @@ -2473,24 +1718,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -2506,6 +1738,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2517,12 +1760,12 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/denque": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "engines": { "node": ">=0.10" } @@ -2557,46 +1800,6 @@ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" }, - "node_modules/dialogflow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dialogflow/-/dialogflow-1.2.0.tgz", - "integrity": "sha512-pBrPKNRP3WhSUNAeOKtN0GhVBj+CAcl7tqfBAhrhE8da0IrnAi3F1dk2xLFnH7Wd4/vEhcqq1mekYuyfC15FOw==", - "dependencies": { - "google-gax": "^1.7.5", - "protobufjs": "^6.8.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/dialogflow-fulfillment": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/dialogflow-fulfillment/-/dialogflow-fulfillment-0.6.1.tgz", - "integrity": "sha512-lBnjPyXmO0P3grJfNBPTbVX1J3GVCBE1KZ+dEskbsH1O6DVXvFR/ncYroE85dfqGII7xUukfSjtqd084HT3W+w==", - "dependencies": { - "debug": "^3.1.0", - "lodash": "^4.17.11" - }, - "engines": { - "node": "6" - }, - "peerDependencies": { - "actions-on-google": "^2.4.1" - } - }, - "node_modules/dialogflow-fulfillment/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/dialogflow-fulfillment/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/dijkstrajs": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", @@ -2628,20 +1831,20 @@ "optional": true }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dependencies": { - "is-obj": "^2.0.0" + "is-obj": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", "engines": { "node": ">=12" } @@ -2651,22 +1854,6 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2676,18 +1863,10 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -2702,25 +1881,45 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/engine.io": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "dependencies": { - "once": "^1.4.0" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node_modules/engine.io-parser": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" } }, "node_modules/es-abstract": { @@ -2798,6 +1997,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-iterator/node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/es6-iterator/node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -2811,6 +2048,59 @@ "es6-promise": "^4.0.3" } }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-symbol/node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/es6-symbol/node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/es6-weak-map": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", + "integrity": "sha512-P+N5Cd2TXeb7G59euFiM7snORspgbInS29Nbf3KNO2JQp/DyhvMCDWd58nsVAXwYJ6W3Bx7qDdy6QQ3PCJ7jKQ==", + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.6", + "es6-iterator": "~0.1.3", + "es6-symbol": "~2.0.1" + } + }, + "node_modules/es6-weak-map/node_modules/es6-iterator": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", + "integrity": "sha512-6TOmbFM6OPWkTe+bQ3ZuUkvqcWUjAnYjKUCLdbvRsAUz2Pr+fYIibwNXNkLNtIK9PPFbNMZZddaRNkyJhlGJhA==", + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.5", + "es6-symbol": "~2.0.1" + } + }, + "node_modules/es6-weak-map/node_modules/es6-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", + "integrity": "sha512-wjobO4zO8726HVU7mI2OA/B6QszqwHJuKab7gKHVx+uRfVVYGcWJkCIFxV2Madqb9/RUSrhJ/r6hPfG7FsWtow==", + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.5" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2819,18 +2109,10 @@ "node": ">=6" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-latex": { "version": "1.2.0", @@ -2838,11 +2120,11 @@ "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" }, "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, "node_modules/escodegen": { @@ -2866,30 +2148,6 @@ "source-map": "~0.6.1" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -2921,19 +2179,34 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-emitter/node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, + "node_modules/event-emitter/node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, "node_modules/exit-on-epipe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", @@ -2984,11 +2257,11 @@ } }, "node_modules/express-handlebars": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.5.tgz", - "integrity": "sha512-XEujWSZpsdptky62Qt0Yj8jVGVT6yVXS6fOteL/b8wLdB122ykrxVlcQbNWVxFSEgusju3f6/0uqDC7R9qfwDw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.6.tgz", + "integrity": "sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ==", "dependencies": { - "glob": "^8.0.1", + "glob": "^8.0.2", "graceful-fs": "^4.2.10", "handlebars": "^4.7.7" }, @@ -2996,6 +2269,43 @@ "node": ">=v12.22.9" } }, + "node_modules/express-handlebars/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/express-handlebars/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/express-handlebars/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/express-mysql-session": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-2.1.8.tgz", @@ -3011,33 +2321,51 @@ "url": "https://degreesofzero.com/donate.html?project=express-mysql-session" } }, - "node_modules/express-mysql-session/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/express-mysql-session/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-mysql-session/node_modules/express-session": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", + "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==", "dependencies": { - "ms": "2.1.2" + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.8.0" + } + }, + "node_modules/express-mysql-session/node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, "node_modules/express-mysql-session/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express-session": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", - "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==", + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", "dependencies": { - "cookie": "0.4.1", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~2.0.0", @@ -3051,18 +2379,65 @@ } }, "node_modules/express-session/node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "engines": { "node": ">= 0.6" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -3086,15 +2461,29 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, - "node_modules/fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" - }, "node_modules/fflate": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", - "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, + "node_modules/figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } }, "node_modules/fill-range": { "version": "7.0.1", @@ -3124,6 +2513,19 @@ "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -3139,7 +2541,7 @@ "node_modules/flash": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/flash/-/flash-1.1.0.tgz", - "integrity": "sha1-irKyntO2ilz7Gom/mOf2nX8aAgo=" + "integrity": "sha512-2pvqSI88nkPRSyh8kOJV0TqxlfLjZKS9b2jDf67RWGeIyicEGJoDovSyVS9zdiWbx/M9jzZkmFB5TSdaeBNSZA==" }, "node_modules/flash-messenger": { "version": "1.1.1", @@ -3166,18 +2568,18 @@ } }, "node_modules/fontkit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.9.0.tgz", - "integrity": "sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz", + "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==", "dependencies": { - "@swc/helpers": "^0.3.13", + "@swc/helpers": "^0.4.2", "brotli": "^1.3.2", "clone": "^2.1.2", - "deep-equal": "^2.0.5", "dfa": "^1.2.0", - "restructure": "^2.0.1", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.3.1", + "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, @@ -3192,7 +2594,7 @@ "node_modules/foreachasync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" + "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==" }, "node_modules/forever-agent": { "version": "0.6.1", @@ -3246,7 +2648,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -3265,7 +2667,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -3329,33 +2731,6 @@ "node": ">=10" } }, - "node_modules/gaxios": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", - "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/gcp-metadata": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", - "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", - "dependencies": { - "gaxios": "^2.1.0", - "json-bigint": "^0.3.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", @@ -3373,29 +2748,18 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -3413,419 +2777,52 @@ }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", - "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/google-auth-library": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", - "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^2.1.0", - "gcp-metadata": "^3.4.0", - "gtoken": "^4.1.0", - "jws": "^4.0.0", - "lru-cache": "^5.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/google-auth-library/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/google-auth-library/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/google-gax": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.15.4.tgz", - "integrity": "sha512-Wzl43ueWEKNsLcMJ33sPps179nD7wn6Jcl/P+ZQNS+HxdCJcoQEgJe3AmulsJnatwjBE3pVPIE4HFJNhpRGvUw==", - "dependencies": { - "@grpc/grpc-js": "~1.3.6", - "@grpc/proto-loader": "^0.5.1", - "@types/fs-extra": "^8.0.1", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^3.6.0", - "google-auth-library": "^5.0.0", - "is-stream-ended": "^0.1.4", - "lodash.at": "^4.6.0", - "lodash.has": "^4.5.2", - "node-fetch": "^2.6.0", - "protobufjs": "^6.8.9", - "retry-request": "^4.0.0", - "semver": "^6.0.0", - "walkdir": "^0.4.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/google-gax/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/google-p12-pem": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.5.tgz", - "integrity": "sha512-7RLkxwSsMsYh9wQ5Vb2zRtkAHvqPvfoMGag+nugl1noYO7gf0844Yr9TIFA5NEBMAeVt2Z+Imu7CQMp3oNatzQ==", - "dependencies": { - "node-forge": "^0.10.0" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/google-protobuf": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz", - "integrity": "sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==" - }, - "node_modules/googleapis": { - "version": "80.2.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-80.2.0.tgz", - "integrity": "sha512-lpl+ieuD5YErItTbex/zdtRTndNTZUmbo0eInBtiIe428FSFdjFVZ7+RUdLdiOtMQSxdD1vHe24SXjL3E5U2Nw==", - "dependencies": { - "google-auth-library": "^7.0.2", - "googleapis-common": "^5.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis-common": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", - "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", - "dependencies": { - "extend": "^3.0.2", - "gaxios": "^4.0.0", - "google-auth-library": "^7.14.0", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/googleapis-common/node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis-common/node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis-common/node_modules/google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis-common/node_modules/google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis-common/node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis-common/node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/googleapis-common/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/googleapis/node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis/node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis/node_modules/google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis/node_modules/google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis/node_modules/gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/googleapis/node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { - "bignumber.js": "^9.0.0" + "assert-plus": "^1.0.0" } }, - "node_modules/googleapis/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">= 6.13.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8.6" + "node": ">= 6" } }, + "node_modules/google-protobuf": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.0.tgz", + "integrity": "sha512-byR7MBTK4tZ5PZEb+u5ZTzpt4SfrTxv5682MjPlHN16XeqgZE2/8HOIWeiXe8JKnT9OVbtBGhbq8mtvkK8cd5g==" + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/gtoken": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", - "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", - "dependencies": { - "gaxios": "^2.1.0", - "google-p12-pem": "^2.0.0", - "jws": "^4.0.0", - "mime": "^2.2.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/gtoken/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -3889,7 +2886,7 @@ "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } @@ -3933,15 +2930,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/hbs": { "version": "4.2.0", @@ -3980,10 +2969,10 @@ "node": ">=8.0.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "node_modules/http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -4013,27 +3002,6 @@ "node": ">= 6" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4060,27 +3028,6 @@ "node": ">= 6" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4095,20 +3042,12 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "engines": { - "node": ">=4" - } + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } @@ -4124,7 +3063,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4135,12 +3074,85 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { + "node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "engines": { - "node": ">=10" + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/install": { @@ -4172,6 +3184,17 @@ "node": ">= 0.10" } }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -4224,6 +3247,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -4235,15 +3263,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "ci-info": "^2.0.0" + "kind-of": "^6.0.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-date-object": { @@ -4260,10 +3288,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -4287,21 +3328,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -4321,17 +3347,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4355,19 +3370,11 @@ } }, "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/is-potential-custom-element-name": { @@ -4378,7 +3385,7 @@ "node_modules/is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, "node_modules/is-regex": { "version": "1.1.4", @@ -4414,22 +3421,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -4479,7 +3470,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-weakmap": { "version": "2.0.1", @@ -4512,15 +3503,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isstream": { "version": "0.1.2", @@ -4537,12 +3523,18 @@ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", + "peer": true + }, + "node_modules/jquery-validation": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.19.5.tgz", + "integrity": "sha512-X2SmnPq1mRiDecVYL8edWx+yTBZDyC8ohWXFhXdtqFHgU9Wd4KHkvcbCoIZ0JaSaumzS8s2gXSkP8F7ivg/8ZQ==", + "peerDependencies": { + "jquery": "^1.7 || ^2.0 || ^3.1" } }, "node_modules/jsbn": { @@ -4550,45 +3542,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, - "node_modules/jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "dependencies": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -4679,19 +3632,26 @@ "node": ">=10" } }, - "node_modules/json-bigint": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", - "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", - "dependencies": { - "bignumber.js": "^9.0.0" + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -4707,6 +3667,14 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, + "node_modules/jsontoxml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz", + "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/jspdf": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", @@ -4724,11 +3692,6 @@ "html2canvas": "^1.0.0-rc.5" } }, - "node_modules/jspdf/node_modules/fflate": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", - "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" - }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -4743,50 +3706,12 @@ "node": ">=0.6.0" } }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/levn": { @@ -4818,14 +3743,6 @@ "node": ">= 0.4" } }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4842,25 +3759,15 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.at": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz", - "integrity": "sha512-GOTh0SEp+Yosnlpjic+8cl2WM9MykorogkGA9xyIFkkObQ3H3kNZqZ+ohuq4K3FrSVo7hMcZBMataJemrxC3BA==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, - "node_modules/lodash.has": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "node_modules/lodash.truncate": { "version": "4.4.2", @@ -4872,14 +3779,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4891,6 +3790,19 @@ "node": ">=10" } }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/luhn-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/luhn-js/-/luhn-js-1.1.2.tgz", + "integrity": "sha512-GdINoHY50s4Zkhvmt6Pss/8ZwVxIOLsMHuJCg6EDcT1heSt4hM2V+7aKCihemn8rI0n22+lxqomzgvWDzMyEuQ==" + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -4913,46 +3825,6 @@ "semver": "bin/semver.js" } }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.4.tgz", - "integrity": "sha512-Ul4YVYZNxMJYALpKtu+ZRdrryYt/GlQ5CK+4l1bp/gWXOG2QWElt6AqF3Mih/wfUKdZbNAZVXGR73/n6U/8img==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/marked": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", - "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/mathjs": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.5.2.tgz", @@ -4975,33 +3847,42 @@ "node": ">= 12" } }, - "node_modules/mathjs/node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, + "node_modules/memoizee": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", + "integrity": "sha512-LLzVUuWwGBKK188spgOK/ukrp5zvd9JGsiLDH41pH9vt5jvhZfsu5pxDuAnYAMG8YEGce72KO07sSBy9KkvOfw==", + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.11", + "es6-weak-map": "~0.1.4", + "event-emitter": "~0.3.4", + "lru-queue": "0.1", + "next-tick": "~0.2.2", + "timers-ext": "0.1" + } + }, + "node_modules/memoizee/node_modules/next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==" + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } @@ -5036,10 +3917,10 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { "node": ">=4" } @@ -5061,9 +3942,9 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dependencies": { "yallist": "^4.0.0" }, @@ -5114,9 +3995,9 @@ } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multer": { "version": "1.4.5-lts.1", @@ -5146,6 +4027,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" + }, "node_modules/mysql": { "version": "2.18.1", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", @@ -5160,11 +4046,33 @@ "node": ">= 0.6" } }, + "node_modules/mysql/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "node_modules/mysql/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/mysql/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/mysql2": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", @@ -5225,7 +4133,18 @@ "node_modules/named-placeholders/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, "node_modules/negotiator": { "version": "0.6.3", @@ -5240,6 +4159,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -5264,18 +4188,10 @@ } } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/nodemailer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", - "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==", + "version": "6.7.8", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.8.tgz", + "integrity": "sha512-2zaTFGqZixVmTxpJRCFC+Vk5eGRd/fYtvIR+dl5u9QXLTQWGIf48x/JXvo58g9sa0bU6To04XUv554Paykum3g==", "engines": { "node": ">=6.0.0" } @@ -5289,9 +4205,9 @@ } }, "node_modules/nodemon": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz", - "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", "hasInstallScript": true, "dependencies": { "chokidar": "^3.5.2", @@ -5300,10 +4216,10 @@ "minimatch": "^3.0.4", "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" @@ -5324,15 +4240,18 @@ "ms": "^2.1.1" } }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } }, "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { "abbrev": "1" }, @@ -5340,7 +4259,7 @@ "nopt": "bin/nopt.js" }, "engines": { - "node": "*" + "node": ">=6" } }, "node_modules/normalize-path": { @@ -5351,18 +4270,10 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, "node_modules/npm": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.9.0.tgz", - "integrity": "sha512-4mhU5nEv7ktvHmJnM2nmWP2Zk4cCsD26imX+dvZ76HOuFUnIpU6+i1MWuoMg8N/xWHQgB0d2/ybWEGgJR9M/pw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.17.0.tgz", + "integrity": "sha512-tIcfZd541v86Sqrf+t/GW6ivqiT8b/2b3EAjNw3vRe+eVnL4mlkVwu17hjCOrsPVntLb5C6tQG4jPUE5Oveeyw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -5416,6 +4327,7 @@ "npm-user-validate", "npmlog", "opener", + "p-map", "pacote", "parse-conflict-json", "proc-log", @@ -5439,14 +4351,14 @@ "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^5.0.4", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.1.0", + "@npmcli/config": "^4.2.1", "@npmcli/fs": "^2.1.0", "@npmcli/map-workspaces": "^2.0.3", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.2.1", "abbrev": "~1.1.1", "archy": "~1.0.0", - "cacache": "^16.0.7", + "cacache": "^16.1.1", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", @@ -5471,24 +4383,25 @@ "libnpmsearch": "^5.0.2", "libnpmteam": "^4.0.2", "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.2", + "make-fetch-happen": "^10.2.0", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", "ms": "^2.1.2", - "node-gyp": "^9.0.0", - "nopt": "^5.0.0", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", "npm-audit-report": "^3.0.0", "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.2", + "npm-package-arg": "^9.1.0", "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.0", "npm-user-validate": "^1.0.1", "npmlog": "^6.0.2", "opener": "^1.5.2", - "pacote": "^13.3.0", + "p-map": "^4.0.0", + "pacote": "^13.6.1", "parse-conflict-json": "^2.0.2", "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", @@ -5498,7 +4411,7 @@ "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", "semver": "^7.3.7", - "ssri": "^9.0.0", + "ssri": "^9.0.1", "tar": "^6.1.11", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", @@ -5535,7 +4448,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.1.1", + "version": "5.5.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5547,21 +4460,23 @@ "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^2.0.0", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/query": "^1.1.1", + "@npmcli/run-script": "^4.1.3", "bin-links": "^3.0.0", "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npm-install-checks": "^5.0.0", "npm-package-arg": "^9.0.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.0", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "parse-conflict-json": "^2.0.1", "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", @@ -5590,14 +4505,14 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.1.0", + "version": "4.2.1", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^2.0.2", "ini": "^3.0.0", "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "proc-log": "^2.0.0", "read-package-json-fast": "^2.0.3", "semver": "^7.3.5", @@ -5619,7 +4534,7 @@ } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "2.1.0", + "version": "2.1.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -5665,7 +4580,7 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.3", + "version": "2.0.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -5679,7 +4594,7 @@ } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.0", + "version": "3.1.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -5739,15 +4654,29 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "3.0.2", + "version": "4.2.1", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" @@ -5835,7 +4764,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "3.0.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -5843,7 +4772,7 @@ "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/asap": { @@ -5889,7 +4818,7 @@ } }, "node_modules/npm/node_modules/builtins": { - "version": "5.0.0", + "version": "5.0.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -5897,7 +4826,7 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "16.0.7", + "version": "16.1.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -6062,6 +4991,17 @@ "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", "inBundle": true, @@ -6201,7 +5141,7 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "8.0.1", + "version": "8.0.3", "inBundle": true, "license": "ISC", "dependencies": { @@ -6209,8 +5149,7 @@ "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "once": "^1.3.0" }, "engines": { "node": ">=12" @@ -6278,7 +5217,7 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.0", + "version": "5.0.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -6381,7 +5320,7 @@ } }, "node_modules/npm/node_modules/ip": { - "version": "1.1.5", + "version": "2.0.0", "inBundle": true, "license": "MIT" }, @@ -6405,7 +5344,7 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.8.1", + "version": "2.10.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -6455,12 +5394,12 @@ "license": "MIT" }, "node_modules/npm/node_modules/just-diff": { - "version": "5.0.1", + "version": "5.1.1", "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.2.0", + "version": "5.4.1", "inBundle": true, "license": "MIT" }, @@ -6479,7 +5418,7 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "4.0.3", + "version": "4.0.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -6489,7 +5428,7 @@ "diff": "^5.0.0", "minimatch": "^5.0.1", "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "tar": "^6.1.0" }, "engines": { @@ -6497,21 +5436,23 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.5", + "version": "4.0.10", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/arborist": "^5.0.0", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", "npm-package-arg": "^9.0.1", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", "walk-up-path": "^1.0.0" }, "engines": { @@ -6554,13 +5495,13 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "4.0.3", + "version": "4.1.2", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5" + "pacote": "^13.6.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" @@ -6605,12 +5546,12 @@ } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.4", + "version": "3.0.6", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "json-parse-even-better-errors": "^2.3.1", "proc-log": "^2.0.0", "semver": "^7.3.7" @@ -6620,7 +5561,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "7.8.1", + "version": "7.13.2", "inBundle": true, "license": "ISC", "engines": { @@ -6628,12 +5569,12 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.1.2", + "version": "10.2.0", "inBundle": true, "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", - "cacache": "^16.0.2", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -6646,7 +5587,7 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", + "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" }, "engines": { @@ -6654,7 +5595,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "5.0.1", + "version": "5.1.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -6665,7 +5606,7 @@ } }, "node_modules/npm/node_modules/minipass": { - "version": "3.1.6", + "version": "3.3.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -6799,7 +5740,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "9.0.0", + "version": "9.1.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -6831,14 +5772,14 @@ } }, "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.0", + "version": "7.2.3", "inBundle": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -6860,7 +5801,7 @@ "node": "*" } }, - "node_modules/npm/node_modules/nopt": { + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { "version": "5.0.0", "inBundle": true, "license": "ISC", @@ -6874,6 +5815,20 @@ "node": ">=6" } }, + "node_modules/npm/node_modules/nopt": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm/node_modules/normalize-package-data": { "version": "4.0.0", "inBundle": true, @@ -6924,11 +5879,12 @@ "license": "ISC" }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.0.2", + "version": "9.1.0", "inBundle": true, "license": "ISC", "dependencies": { "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" }, @@ -6937,7 +5893,7 @@ } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "5.0.2", + "version": "5.1.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -6968,7 +5924,7 @@ } }, "node_modules/npm/node_modules/npm-profile": { - "version": "6.0.3", + "version": "6.2.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -6980,7 +5936,7 @@ } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.1.1", + "version": "13.3.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -7046,14 +6002,14 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "13.3.0", + "version": "13.6.1", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.1.0", "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", @@ -7061,7 +6017,7 @@ "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.0.0", + "npm-packlist": "^5.1.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", @@ -7100,6 +6056,18 @@ "node": ">=0.10.0" } }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/npm/node_modules/proc-log": { "version": "2.0.1", "inBundle": true, @@ -7257,14 +6225,14 @@ } }, "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", + "version": "7.2.3", "inBundle": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -7356,11 +6324,11 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.6.2", + "version": "2.7.0", "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -7369,13 +6337,13 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "6.1.1", + "version": "7.0.0", "inBundle": true, "license": "MIT", "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { "node": ">= 10" @@ -7410,7 +6378,7 @@ "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { - "version": "9.0.0", + "version": "9.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -7606,14 +6574,6 @@ "set-blocking": "^2.0.0" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/nwsapi": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", @@ -7635,23 +6595,15 @@ "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7718,11 +6670,22 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -7739,12 +6702,12 @@ "node": ">= 0.8.0" } }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, "node_modules/p-limit": { @@ -7780,28 +6743,6 @@ "node": ">=6" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -7826,9 +6767,9 @@ } }, "node_modules/passport": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.2.tgz", - "integrity": "sha512-w9n/Ot5I7orGD4y+7V3EFJCQEznE5RxHamUxcqLT2QoJY0f2JdN8GyHonYFvN0Vz+L6lUJfVhrk2aZz2LbuREw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", + "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", "dependencies": { "passport-strategy": "1.x.x", "pause": "0.0.1" @@ -7855,7 +6796,7 @@ "node_modules/passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", - "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", "dependencies": { "passport-strategy": "1.x.x" }, @@ -7885,7 +6826,7 @@ "node_modules/passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", "engines": { "node": ">= 0.4.0" } @@ -7901,7 +6842,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -7909,12 +6850,20 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/pause": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "node_modules/pdf": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/pdf/-/pdf-0.1.0.tgz", + "integrity": "sha512-OCrtycX8Fb0wXJJbU11xjWZbZHpvYq3kUHrWLnPC7+Czjocvg2iI25kRt4CUTq74/rX5aUv8zIAYC/Ky3Bybrg==", + "engines": { + "node": "*" + } }, "node_modules/pdfkit": { "version": "0.13.0", @@ -7932,9 +6881,38 @@ "resolved": "https://registry.npmjs.org/pdfkit-table/-/pdfkit-table-0.1.99.tgz", "integrity": "sha512-BaunFJ7cvKqIPONzX9FXUpeC/3iJeLo0v2nVNjCccAxdMXKvDMBjxyF4wZhKOYlmP+nYZcikf9ByVJeCzjNK6g==", "dependencies": { - "pdfkit": "latest" + "pdfkit": "latest" + } + }, + "node_modules/pdfkit/node_modules/@swc/helpers": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.17.tgz", + "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/pdfkit/node_modules/fontkit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.9.0.tgz", + "integrity": "sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==", + "dependencies": { + "@swc/helpers": "^0.3.13", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "deep-equal": "^2.0.5", + "dfa": "^1.2.0", + "restructure": "^2.0.1", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.3.1", + "unicode-trie": "^2.0.0" } }, + "node_modules/pdfkit/node_modules/restructure": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz", + "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -7956,6 +6934,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, "node_modules/png-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", @@ -7977,14 +6963,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "engines": { - "node": ">=4" - } - }, "node_modules/printj": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", @@ -8009,71 +6987,6 @@ "node": ">=0.4.0" } }, - "node_modules/proto3-json-serializer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.0.3.tgz", - "integrity": "sha512-4Xo7uzbTfc8ur9R8VgI0pJpI6aHix76cc7DHJEfZKrZ6vOUbOddxBrsMzAGG2s6b3iHknl4Gn50dA2Y3AoCdow==", - "dependencies": { - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proto3-json-serializer/node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - }, - "node_modules/proto3-json-serializer/node_modules/protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8089,27 +7002,18 @@ "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -8118,17 +7022,6 @@ "node": ">=6" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -8146,75 +7039,6 @@ "node": ">=10.13.0" } }, - "node_modules/qrcode/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qrcode/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/qrcode/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/qrcode/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -8241,7 +7065,7 @@ "node_modules/random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", "engines": { "node": ">= 0.8" } @@ -8268,44 +7092,19 @@ "node": ">= 0.8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -8338,28 +7137,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -8442,65 +7219,28 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "node_modules/requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dependencies": { - "lowercase-keys": "^1.0.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/restructure": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz", - "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.0.tgz", + "integrity": "sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw==" }, "node_modules/retry-as-promised": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" }, - "node_modules/retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/retry-request/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/retry-request/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/rgbcolor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", @@ -8524,25 +7264,30 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "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" + "tslib": "^1.9.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "npm": ">=2.0.0" } }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -8579,36 +7324,22 @@ } }, "node_modules/seedrandom": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", - "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", - "peer": true + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { - "semver": "^6.3.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { @@ -8634,6 +7365,19 @@ "node": ">= 0.8.0" } }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -8642,12 +7386,12 @@ "node_modules/seq-queue": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/sequelize": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.19.0.tgz", - "integrity": "sha512-B3oGIdpYBERDjRDm74h7Ky67f6ZLcmBXOA7HscYObiOSo4pD7VBc9mtm44wNV7unc0uk8I1d30nbZBTQCE377A==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.21.3.tgz", + "integrity": "sha512-cJPrTTVCofUxaaNKoIETiXCYh2xJ+OFq5jMHJQqftp34M4kNoLpTfUMPSwYtRUeTcSh1/5HodfJXIBi7troIFA==", "funding": [ { "type": "opencollective", @@ -8710,41 +7454,6 @@ "node": ">= 10.0.0" } }, - "node_modules/sequelize/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sequelize/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/sequelize/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -8762,7 +7471,7 @@ "node_modules/sessions": { "version": "0.0.2-7", "resolved": "https://registry.npmjs.org/sessions/-/sessions-0.0.2-7.tgz", - "integrity": "sha1-mb+zSF6riHUQWfUt6J4sjR/75+I=", + "integrity": "sha512-pAB43NwQ1SjGWLVdTHi1DKL1aMgZwS/T4c/AU1SEBStRrimUj1CXrEKXDA3Y88QkPCOEycPaCfIK2U2otSOlRg==", "engines": { "node": ">= 0.4.0" } @@ -8770,7 +7479,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -8795,6 +7504,25 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -8811,6 +7539,70 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/socket.io": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + }, + "node_modules/socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8827,7 +7619,7 @@ "node_modules/sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=", + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", "engines": { "node": ">= 0.6" } @@ -8897,11 +7689,6 @@ "stream-chain": "^2.2.5" } }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -8911,18 +7698,13 @@ } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -8973,12 +7755,56 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "node_modules/stripe": { + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-9.16.0.tgz", + "integrity": "sha512-Dn8K+jSoQcXjxCobRI4HXUdHjOXsiF/KszK49fJnkbeCFjZ3EZxLG2JiM/CX+Hcq27NBDtv/Sxhvy+HhTmvyaQ==", + "dependencies": { + "@types/node": ">=8.1.0", + "qs": "^6.10.3" + }, "engines": { - "node": ">=0.10.0" + "node": "^8.1 || >=10.*" + } + }, + "node_modules/stripe-cli": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stripe-cli/-/stripe-cli-0.1.0.tgz", + "integrity": "sha512-P7VrZrBDGh4z2Nu2+1t+XPJLqlbI1LtsUdhjd6HUOQ3O1VW6Vc9XaFiW1Kn779rwDLrU39OZi7Pq6x1ShCALnw==", + "dependencies": { + "cfonts": "^2.3.0", + "chalk": "^2.4.1", + "chance": "^1.0.17", + "clear": "^0.1.0", + "clui": "^0.3.6", + "configstore": "^4.0.0", + "figlet": "^1.2.1", + "inquirer": "^6.2.1", + "minimist": "^1.2.0", + "stripe": "^6.17.0" + } + }, + "node_modules/stripe-cli/node_modules/stripe": { + "version": "6.36.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-6.36.0.tgz", + "integrity": "sha512-7vjyVO4NCWvX38CH1AuSQH16uRxcQN+UhUTBPs4UHsIl5+SJXLBvCsHrMgd+bY9k1YDliT0fQB1fH9OI3GrEhw==", + "dependencies": { + "lodash.isplainobject": "^4.0.6", + "qs": "^6.6.0", + "safe-buffer": "^5.1.1", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stripe-cli/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" } }, "node_modules/supports-color": { @@ -9042,11 +7868,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -9072,6 +7893,20 @@ "utrie": "^1.0.2" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, "node_modules/tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -9083,22 +7918,14 @@ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { - "rimraf": "^3.0.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" + "node": ">=0.6.0" } }, "node_modules/to-regex-range": { @@ -9128,7 +7955,7 @@ "node_modules/toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, "node_modules/touch": { "version": "3.1.0", @@ -9141,6 +7968,20 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -9156,7 +7997,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/tslib": { "version": "2.4.0", @@ -9179,6 +8020,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, + "node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -9190,17 +8036,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -9226,23 +8061,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, "node_modules/uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" }, @@ -9309,14 +8132,14 @@ } }, "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dependencies": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/universalify": { @@ -9330,52 +8153,11 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -9384,31 +8166,15 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } @@ -9441,7 +8207,7 @@ "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } @@ -9491,18 +8257,10 @@ "foreachasync": "^3.0.0" } }, - "node_modules/walkdir": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", - "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-encoding": { "version": "1.0.5", @@ -9520,7 +8278,7 @@ "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -9587,15 +8345,41 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/window-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", + "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", "dependencies": { - "string-width": "^4.0.0" + "define-property": "^1.0.0", + "is-number": "^3.0.0" + }, + "bin": { + "window-size": "cli.js" }, "engines": { - "node": ">=8" + "node": ">= 0.10.0" + } + }, + "node_modules/window-size/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/window-size/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wkx": { @@ -9615,13 +8399,9 @@ } }, "node_modules/word": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/word/-/word-0.4.0.tgz", - "integrity": "sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw==", - "dependencies": { - "cfb": "^1.2.0", - "jsdom": "^16.2.2" - }, + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", "engines": { "node": ">=0.8" } @@ -9637,46 +8417,72 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dependencies": { + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.2" } }, "node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -9692,28 +8498,25 @@ } }, "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/xlsx": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.2.tgz", - "integrity": "sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ==", + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "dependencies": { - "adler-32": "~1.2.0", - "cfb": "^1.1.4", + "adler-32": "~1.3.0", + "cfb": "~1.2.1", "codepage": "~1.15.0", - "commander": "~2.17.1", - "crc-32": "~1.2.0", - "exit-on-epipe": "~1.0.1", - "fflate": "^0.3.8", + "crc-32": "~1.2.1", "ssf": "~0.11.2", "wmf": "~1.0.1", - "word": "~0.4.0" + "word": "~0.3.0" }, "bin": { "xlsx": "bin/xlsx.njs" @@ -9732,11 +8535,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -9746,12 +8544,9 @@ } }, "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/yallist": { "version": "4.0.0", @@ -9759,309 +8554,48 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=10" + "node": ">=8" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { - "node": ">=10" + "node": ">=6" } } }, "dependencies": { - "@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==" - }, "@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "@google-cloud/dialogflow": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/dialogflow/-/dialogflow-5.2.0.tgz", - "integrity": "sha512-B+bEyxA9xZMosr9D0N0qeWRKNnlCx82trBwkhAIQi3+5bGuPEg7kiMg/cRySHvobQMTJBATB+1Zb4az34DpBxA==", - "requires": { - "google-gax": "^3.0.1" - }, - "dependencies": { - "@grpc/grpc-js": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.9.tgz", - "integrity": "sha512-01Dy1wqXVsuiMI4m4tDoX+IPYAeNI8EsfNFPqAJBX4OiCSs5VU8Gw0pJq5NhGizH6nKUprmHb/QvxTq3d1xL5g==", - "requires": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - } - }, - "@grpc/proto-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz", - "integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "gaxios": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.1.tgz", - "integrity": "sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==", - "requires": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", - "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", - "requires": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - } - }, - "google-auth-library": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.1.1.tgz", - "integrity": "sha512-eG3pCfrLgVJe19KhAeZwW0m1LplNEo0FX1GboWf3hu18zD2jq8TUH2K8900AB2YRAuJ7A+1aSXDp1BODjwwRzg==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - } - }, - "google-gax": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.1.4.tgz", - "integrity": "sha512-+EOIVCSpFVabuqSBQHEy5kE8rGapc5sS47wbShJLzRnxIBWXs9+2vCnnmBP3pPZSsRQU08rp5C26j7spk+liUQ==", - "requires": { - "@grpc/grpc-js": "~1.6.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.0.0", - "protobufjs-cli": "1.0.0", - "retry-request": "^5.0.0" - } - }, - "google-p12-pem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.0.tgz", - "integrity": "sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gtoken": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.0.tgz", - "integrity": "sha512-WPZcFw34wh2LUvbCUWI70GDhOlO7qHpSvFHFqq7d3Wvsf8dIJedE0lnUdOmsKuC0NgflKmF0LxIF38vsGeHHiQ==", - "requires": { - "gaxios": "^4.0.0", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "dependencies": { - "gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - } - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - } - } - }, - "protobufjs-cli": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.0.tgz", - "integrity": "sha512-7NZEBrFuuU2ZdzlhmAmvh8fdU7A4OFhzYX9AB7a5vXjopAeiks6ZgUSjOlOO7ItCDJQm3y9RWjk7spUbHc4X0w==", - "requires": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^3.6.3", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "retry-request": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.1.tgz", - "integrity": "sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig==", - "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@grpc/grpc-js": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", - "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", - "requires": { - "@types/node": ">=12.12.47" - } - }, - "@grpc/proto-loader": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", - "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", - "requires": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - } - }, "@handlebars/allow-prototype-access": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@handlebars/allow-prototype-access/-/allow-prototype-access-1.0.5.tgz", @@ -10082,205 +8616,189 @@ "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.11" - }, - "dependencies": { - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" } }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, "@swc/helpers": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.17.tgz", - "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.6.tgz", + "integrity": "sha512-jUMFa2/gFJOBVBnd3ZZHKRNsgqD0OQQhJMlOFR5B5stMbrUlTQoI7rXORtIGb+M/BZAU/cuI68nho4De3gXzWA==", "requires": { "tslib": "^2.4.0" } }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, "@tensorflow/tfjs": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.18.0.tgz", - "integrity": "sha512-mOzz4jJdgIpqFS7EHndVuxrQnLUDVIKGyTqOPTYps89fZwcOFfTVxi4BHemDNQpqlVE8IaGh9UUxVXpjgPY5+Q==", - "requires": { - "@tensorflow/tfjs-backend-cpu": "3.18.0", - "@tensorflow/tfjs-backend-webgl": "3.18.0", - "@tensorflow/tfjs-converter": "3.18.0", - "@tensorflow/tfjs-core": "3.18.0", - "@tensorflow/tfjs-data": "3.18.0", - "@tensorflow/tfjs-layers": "3.18.0", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.19.0.tgz", + "integrity": "sha512-fZF3HOON8jgKhFk06WIScIXf7j/gkl6cLbU1brFWutBhHlPSzxSWvdJR/TivCK7p+yMBunoyK50TjiwOrcoclA==", + "requires": { + "@tensorflow/tfjs-backend-cpu": "3.19.0", + "@tensorflow/tfjs-backend-webgl": "3.19.0", + "@tensorflow/tfjs-converter": "3.19.0", + "@tensorflow/tfjs-core": "3.19.0", + "@tensorflow/tfjs-data": "3.19.0", + "@tensorflow/tfjs-layers": "3.19.0", "argparse": "^1.0.10", "chalk": "^4.1.0", "core-js": "3", "regenerator-runtime": "^0.13.5", "yargs": "^16.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } } }, "@tensorflow/tfjs-backend-cpu": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.18.0.tgz", - "integrity": "sha512-LcSqlylzGtpgngcMFIL3q9Q3eVaPRJ7ITZt7ivhzkCj4R5ZsnPa9qM3DCVihkQ77heAwSw4hPTo2jp5C4mJ4Cg==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.19.0.tgz", + "integrity": "sha512-02f+WkiL9gc9G7P8PwfsvuXREcAUdM/3uAL6fTle3xKEj7KOxX+E/mc3jxPY5UzjAsgHVBZrPJ2xi6AG16WPkQ==", "requires": { - "@types/seedrandom": "2.4.27", - "seedrandom": "2.4.3" - }, - "dependencies": { - "seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" - } + "@types/seedrandom": "^2.4.28", + "seedrandom": "^3.0.5" } }, "@tensorflow/tfjs-backend-webgl": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.18.0.tgz", - "integrity": "sha512-3NknSzS1oX2BEBOrpjPMZl823S12RgshQthmIbG6QADHb4bCJA8aM4UjWpw+3bNQnRKbRDQdFbuvj10Un79s2A==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.19.0.tgz", + "integrity": "sha512-2HTkAE21t3WQTt8P6iK80ni03AzC8UNZmbIB7/pBDYBbhDwZwe/C5fXrJWnP9m6u4hvCdMAJ3o+OP3NeaEL1pw==", "requires": { - "@tensorflow/tfjs-backend-cpu": "3.18.0", + "@tensorflow/tfjs-backend-cpu": "3.19.0", "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "2.4.27", + "@types/seedrandom": "^2.4.28", "@types/webgl-ext": "0.0.30", "@types/webgl2": "0.0.6", - "seedrandom": "2.4.3" - }, - "dependencies": { - "seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" - } + "seedrandom": "^3.0.5" } }, "@tensorflow/tfjs-converter": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.18.0.tgz", - "integrity": "sha512-hpChA+zVNQOVwRnCfqDb1WI9jbEAKA6DuEm4m75Zb3dIlE6VVooDmAaHBhlc++z2q2G1sBzF9A4Bv48SUpN6vA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.19.0.tgz", + "integrity": "sha512-B69HQq9/orsM8pGJPjNp1cV+hIcc90mxcRIsQSYGovTUNEcftmz2Sh+mqXDWysKUk0gRfx5CX6eJk6NaE55Xow==", "requires": {} }, "@tensorflow/tfjs-core": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.18.0.tgz", - "integrity": "sha512-gMxisZozqsr5sCKlphF/eVBLg91MjlBiN60tjX8hJAu0WlSn6Gi5k65GNIL+Pq6hrxpvImcfdCmTH/2XJVZ0Mg==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.19.0.tgz", + "integrity": "sha512-znJ+TOJ3NdNL5yjw8M7dn2jO96sokiH1wfFuD7gglCkbZ4SXlFpFj2xelNdRHHmeYanMhJzqeyOW9whUnNcBqw==", "requires": { "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "2.4.27", + "@types/seedrandom": "^2.4.28", "@types/webgl-ext": "0.0.30", - "@webgpu/types": "^0.1.16", + "@webgpu/types": "0.1.16", "long": "4.0.0", "node-fetch": "~2.6.1", - "seedrandom": "2.4.3" - }, - "dependencies": { - "seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" - } + "seedrandom": "^3.0.5" } }, "@tensorflow/tfjs-data": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.18.0.tgz", - "integrity": "sha512-s43vISJh8K/UN2E2zGRhtj/Kyn8dr4ll8EQkapwzm7fGO9afXCnMsTp6rkZq3fFXouCYA2k1B/j7JssIDr50+w==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.19.0.tgz", + "integrity": "sha512-rkZv+YZowZwnm4RaedkV44WDrjokRHld9Py/0Fb7IvMyUh37lY0WsAsV94kJ+QuLc6iVNcDLaV29K+dUz57bRA==", "requires": { "@types/node-fetch": "^2.1.2", - "node-fetch": "~2.6.1" + "node-fetch": "~2.6.1", + "string_decoder": "^1.3.0" } }, "@tensorflow/tfjs-layers": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.18.0.tgz", - "integrity": "sha512-AV7yDnPlH+RCcq8VPqkX1iyEchObE+e66m0XmJvLj+ncfKHYLa+39ZNroUA+OgB2/cMG6jgq77R4EhZbT6hwJA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.19.0.tgz", + "integrity": "sha512-+sVWjWWyTuT3sImrtNLtMv8/4FS30GAYpTgyJKhCQ3+GSvHUXulxJfncD0QqOg9fTbhtuF1TRAkzDU8v64791g==", "requires": {} }, "@tensorflow/tfjs-node": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.18.0.tgz", - "integrity": "sha512-jW6bFKO6hH4tGvlijvpcIbCRRa6vDZ2xIIbEO7qZ17s0QOMPBGjDLyQGUaSQ00uog0Rid/sdZNpiueDqB0ZGbA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.19.0.tgz", + "integrity": "sha512-6l8+56J66zf5k+WS8zTA1SbXno+iV7LgchwKPa62fsPRwjdzNIm1QondJbQYbFOILYx6bsgJs7nOoxStOlygAw==", "requires": { - "@mapbox/node-pre-gyp": "1.0.4", - "@tensorflow/tfjs": "3.18.0", + "@mapbox/node-pre-gyp": "1.0.9", + "@tensorflow/tfjs": "3.19.0", "adm-zip": "^0.5.2", "google-protobuf": "^3.9.2", "https-proxy-agent": "^2.2.1", @@ -10289,85 +8807,18 @@ "tar": "^4.4.6" }, "dependencies": { - "@mapbox/node-pre-gyp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.4.tgz", - "integrity": "sha512-M669Qo4nRT7iDmQEjQYC7RU8Z6dpz9UmSbkJ1OFEja3uevCdLKh7IZZki7L1TZj02kRyl82snXFY8QqkyfowrQ==", + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "requires": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } + "es6-promisify": "^5.0.0" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "debug": { "version": "3.2.7", @@ -10377,37 +8828,12 @@ "ms": "^2.1.1" } }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minipass": "^2.6.0" } }, "https-proxy-agent": { @@ -10417,48 +8843,31 @@ "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - } } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { - "number-is-nan": "^1.0.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "requires": { - "abbrev": "1" + "minipass": "^2.9.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "minimist": "^1.2.6" } }, "rimraf": { @@ -10469,32 +8878,6 @@ "glob": "^7.1.3" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, "tar": { "version": "4.4.19", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", @@ -10507,52 +8890,12 @@ "mkdirp": "^0.5.5", "safe-buffer": "^5.2.1", "yallist": "^3.1.1" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -10561,27 +8904,20 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, - "@types/aws-lambda": { - "version": "8.10.102", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.102.tgz", - "integrity": "sha512-BT05v46n9KtSHa9SgGuOvm49eSruJ9utD8iNXpdpuUVYk8wOcqmm1LEzpNRkrXxD0CULc38sdLpk6q3Wa2WOwg==" + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "@types/debug": { "version": "4.1.7", @@ -10591,73 +8927,20 @@ "@types/ms": "*" } }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "requires": { - "@types/node": "*" - } - }, - "@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, "@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, - "@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" + "version": "18.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.5.tgz", + "integrity": "sha512-NcKK6Ts+9LqdHJaW6HQmgr7dT/i3GOHG+pt6BiWv++5SnjtRd4NXeiuN2kA153SjhXPR/AhHIPHPbrsbpUVOww==" }, "@types/node-fetch": { "version": "2.6.2", @@ -10673,40 +8956,21 @@ "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, "@types/raf": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", "optional": true }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, "@types/seedrandom": { - "version": "2.4.27", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", - "integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ==" - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } + "version": "2.4.30", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.30.tgz", + "integrity": "sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==" }, "@types/validator": { - "version": "13.7.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz", - "integrity": "sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==" + "version": "13.7.5", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.5.tgz", + "integrity": "sha512-9rQHeAqz6Jw3gDhttkmWetoriW5FPbxylv/6h6mXtaj2NKRcOvOmvfcswVdLVpbuy10NrO486K3lCoLgoIhiIA==" }, "@types/webgl-ext": { "version": "0.0.30", @@ -10719,9 +8983,9 @@ "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==" }, "@webgpu/types": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.20.tgz", - "integrity": "sha512-MFb5oyxX+A7PWQNjcY3kSCSG2FAHaBo7IJBWtxWFgsS20FtY3D9UY7lYqLZ6avS8fSkdSylIS4qiHzFlQUdXag==" + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.16.tgz", + "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==" }, "abab": { "version": "2.0.6", @@ -10733,14 +8997,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -10771,147 +9027,15 @@ } } }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "actions-on-google": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/actions-on-google/-/actions-on-google-3.0.0.tgz", - "integrity": "sha512-aEXCAyulR0gWYOknMAJ+WFCdNyw3L8klXowPd9G1CTzzoxgktI2px5bHapPlrKzaCWkqopHpQ7ujUlBSwKdV9Q==", - "requires": { - "@types/aws-lambda": "^8.10.0", - "@types/debug": "^4.1.6", - "@types/express": "~4.17.9", - "@types/express-serve-static-core": "4.17.19", - "@types/serve-static": "1.13.9", - "debug": "^4.3.0", - "google-auth-library": "^7.2.0", - "googleapis": "^80.0.0" - }, - "dependencies": { - "@types/express-serve-static-core": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", - "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "requires": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - } - }, - "google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - } - }, - "google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "requires": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - } - } - }, - "adler-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", - "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" }, "adm-zip": { "version": "0.5.9", @@ -10924,21 +9048,6 @@ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "ajv": { @@ -10952,13 +9061,10 @@ "uri-js": "^4.2.2" } }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - } + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { "version": "5.0.1", @@ -10966,11 +9072,11 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -10999,18 +9105,6 @@ "requires": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "argparse": { @@ -11024,12 +9118,7 @@ "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "asn1": { "version": "0.2.6", @@ -11098,6 +9187,11 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, "base64url": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", @@ -11123,7 +9217,7 @@ "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, "bignumber.js": { "version": "9.0.0", @@ -11148,11 +9242,6 @@ "blob": "0.0.4" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -11170,21 +9259,21 @@ "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "brace-expansion": { @@ -11222,11 +9311,6 @@ "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -11245,35 +9329,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -11284,9 +9339,9 @@ } }, "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "canvg": { "version": "3.0.10", @@ -11309,14 +9364,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, - "catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "requires": { - "lodash": "^4.17.15" - } - }, "cfb": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", @@ -11324,24 +9371,47 @@ "requires": { "adler-32": "~1.3.0", "crc-32": "~1.2.0" - }, - "dependencies": { - "adler-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", - "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" - } } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "cfonts": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/cfonts/-/cfonts-2.10.1.tgz", + "integrity": "sha512-l5IcLv4SaOdL/EGR6BpOF5SEro88VcGJJ6+xbvJb+wXi19YC6UeHE/brv7a4vIcLZopnt3Ys3zWeNnyfB04UPg==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "chalk": "^4", + "window-size": "^1.1.1" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11357,6 +9427,26 @@ } } }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chance": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.8.tgz", + "integrity": "sha512-v7fi5Hj2VbR6dJEGRWLmJBA83LJMS47pkAbmROFxHWd9qmE1esHRZW8Clf1Fhzr3rjxnNZVCjOEv/ivFxeIMtg==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "chartjs-to-image": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/chartjs-to-image/-/chartjs-to-image-1.0.5.tgz", @@ -11386,24 +9476,43 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "clear": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", + "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==" + }, + "cli-color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.3.2.tgz", + "integrity": "sha512-Ys/nDhHNRcxrS4EUI2RS/QCUE+61AMuEOj3sWDX+EIHkJWj+4XkRbOdwdxJteAJKjXYBbeFJMtfaEPd1MBF9pQ==", + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.2", + "memoizee": "0.3.x", + "timers-ext": "0.1.x" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "requires": { + "restore-cursor": "^2.0.0" + } }, - "cli-boxes": { + "cli-width": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.2.0" } }, "clone": { @@ -11411,36 +9520,31 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "clui": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/clui/-/clui-0.3.6.tgz", + "integrity": "sha512-Z4UbgZILlIAjkEkZiDOa2aoYjohKx7fa6DxIh6cE9A6WNWZ61iXfQc6CmdC9SKdS5nO0P0UyQ+WfoXfB65e3HQ==", "requires": { - "mimic-response": "^1.0.0" + "cli-color": "0.3.2" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, "codepage": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "color-support": { "version": "1.1.3", @@ -11465,10 +9569,15 @@ "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", @@ -11479,30 +9588,69 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", "requires": { - "dot-prop": "^5.2.0", + "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + } } }, "connect-flash": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", - "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA=" + "integrity": "sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==" }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "content-disposition": { "version": "0.5.4", @@ -11525,18 +9673,27 @@ "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "core-js": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.3.tgz", - "integrity": "sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q==" + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz", + "integrity": "sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==" }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -11548,9 +9705,9 @@ "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" }, "css-line-break": { "version": "2.1.0", @@ -11581,6 +9738,14 @@ } } }, + "d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha512-0SdM9V9pd/OXJHoWmTfNPTAeD+lw6ZqHg+isPyBFuJsZLSE0Ygg1cYZ/0l6DrKQXMOqGOu1oWupMoOfoRfMZrQ==", + "requires": { + "es5-ext": "~0.10.2" + } + }, "danfojs-node": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/danfojs-node/-/danfojs-node-1.1.1.tgz", @@ -11594,6 +9759,48 @@ "stream-json": "^1.7.3", "table": "6.7.1", "xlsx": "0.17.2" + }, + "dependencies": { + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + }, + "word": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.4.0.tgz", + "integrity": "sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw==", + "requires": { + "cfb": "^1.2.0", + "jsdom": "^16.2.2" + } + }, + "xlsx": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.2.tgz", + "integrity": "sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ==", + "requires": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.15.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "fflate": "^0.3.8", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.4.0" + } + } } }, "dashdash": { @@ -11640,11 +9847,11 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { @@ -11653,17 +9860,9 @@ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", + "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==" }, "deep-equal": { "version": "2.0.5", @@ -11694,21 +9893,11 @@ } } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -11718,6 +9907,14 @@ "object-keys": "^1.1.1" } }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -11726,12 +9923,12 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "denque": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" }, "depd": { "version": "2.0.0", @@ -11753,39 +9950,6 @@ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" }, - "dialogflow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dialogflow/-/dialogflow-1.2.0.tgz", - "integrity": "sha512-pBrPKNRP3WhSUNAeOKtN0GhVBj+CAcl7tqfBAhrhE8da0IrnAi3F1dk2xLFnH7Wd4/vEhcqq1mekYuyfC15FOw==", - "requires": { - "google-gax": "^1.7.5", - "protobufjs": "^6.8.0" - } - }, - "dialogflow-fulfillment": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/dialogflow-fulfillment/-/dialogflow-fulfillment-0.6.1.tgz", - "integrity": "sha512-lBnjPyXmO0P3grJfNBPTbVX1J3GVCBE1KZ+dEskbsH1O6DVXvFR/ncYroE85dfqGII7xUukfSjtqd084HT3W+w==", - "requires": { - "debug": "^3.1.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, "dijkstrajs": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", @@ -11813,39 +9977,23 @@ "optional": true }, "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "requires": { - "is-obj": "^2.0.0" + "is-obj": "^1.0.0" } }, "dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" }, "dottie": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -11855,18 +10003,10 @@ "safer-buffer": "^2.1.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "emoji-regex": { "version": "8.0.0", @@ -11881,20 +10021,36 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "engine.io": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "requires": { - "once": "^1.4.0" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + } } }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + "engine.io-parser": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" }, "es-abstract": { "version": "1.20.1", @@ -11958,6 +10114,42 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + } + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -11971,20 +10163,72 @@ "es6-promise": "^4.0.3" } }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + }, + "dependencies": { + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + } + } + }, + "es6-weak-map": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", + "integrity": "sha512-P+N5Cd2TXeb7G59euFiM7snORspgbInS29Nbf3KNO2JQp/DyhvMCDWd58nsVAXwYJ6W3Bx7qDdy6QQ3PCJ7jKQ==", + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.6", + "es6-iterator": "~0.1.3", + "es6-symbol": "~2.0.1" + }, + "dependencies": { + "es6-iterator": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", + "integrity": "sha512-6TOmbFM6OPWkTe+bQ3ZuUkvqcWUjAnYjKUCLdbvRsAUz2Pr+fYIibwNXNkLNtIK9PPFbNMZZddaRNkyJhlGJhA==", + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.5", + "es6-symbol": "~2.0.1" + } + }, + "es6-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", + "integrity": "sha512-wjobO4zO8726HVU7mI2OA/B6QszqwHJuKab7gKHVx+uRfVVYGcWJkCIFxV2Madqb9/RUSrhJ/r6hPfG7FsWtow==", + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.5" + } + } + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-latex": { "version": "1.2.0", @@ -11992,9 +10236,9 @@ "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" }, "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { "version": "2.0.0", @@ -12008,21 +10252,6 @@ "source-map": "~0.6.1" } }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -12041,12 +10270,32 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + }, + "dependencies": { + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + } + } }, "exit-on-epipe": { "version": "1.0.1", @@ -12089,16 +10338,61 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "express-handlebars": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.5.tgz", - "integrity": "sha512-XEujWSZpsdptky62Qt0Yj8jVGVT6yVXS6fOteL/b8wLdB122ykrxVlcQbNWVxFSEgusju3f6/0uqDC7R9qfwDw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.6.tgz", + "integrity": "sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ==", "requires": { - "glob": "^8.0.1", + "glob": "^8.0.2", "graceful-fs": "^4.2.10", "handlebars": "^4.7.7" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "express-mysql-session": { @@ -12112,27 +10406,49 @@ "underscore": "1.13.3" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "express-session": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", + "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "express-session": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", - "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==", + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", "requires": { - "cookie": "0.4.1", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~2.0.0", @@ -12143,17 +10459,48 @@ }, "dependencies": { "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -12174,15 +10521,23 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, - "fast-text-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", - "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" - }, "fflate": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", - "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, + "figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "requires": { + "escape-string-regexp": "^1.0.5" + } }, "fill-range": { "version": "7.0.1", @@ -12204,6 +10559,21 @@ "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "find-up": { @@ -12218,7 +10588,7 @@ "flash": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/flash/-/flash-1.1.0.tgz", - "integrity": "sha1-irKyntO2ilz7Gom/mOf2nX8aAgo=" + "integrity": "sha512-2pvqSI88nkPRSyh8kOJV0TqxlfLjZKS9b2jDf67RWGeIyicEGJoDovSyVS9zdiWbx/M9jzZkmFB5TSdaeBNSZA==" }, "flash-messenger": { "version": "1.1.1", @@ -12231,18 +10601,18 @@ "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" }, "fontkit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.9.0.tgz", - "integrity": "sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz", + "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==", "requires": { - "@swc/helpers": "^0.3.13", + "@swc/helpers": "^0.4.2", "brotli": "^1.3.2", "clone": "^2.1.2", - "deep-equal": "^2.0.5", "dfa": "^1.2.0", - "restructure": "^2.0.1", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.3.1", + "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, @@ -12257,7 +10627,7 @@ "foreachasync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" + "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==" }, "forever-agent": { "version": "0.6.1", @@ -12292,7 +10662,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs-minipass": { "version": "2.1.0", @@ -12305,7 +10675,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -12350,27 +10720,6 @@ "wide-align": "^1.1.2" } }, - "gaxios": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", - "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - } - }, - "gcp-metadata": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", - "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", - "requires": { - "gaxios": "^2.1.0", - "json-bigint": "^0.3.0" - } - }, "generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", @@ -12382,366 +10731,66 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", - "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "requires": { - "ini": "2.0.0" - } - }, - "google-auth-library": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", - "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^2.1.0", - "gcp-metadata": "^3.4.0", - "gtoken": "^4.1.0", - "jws": "^4.0.0", - "lru-cache": "^5.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "google-gax": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.15.4.tgz", - "integrity": "sha512-Wzl43ueWEKNsLcMJ33sPps179nD7wn6Jcl/P+ZQNS+HxdCJcoQEgJe3AmulsJnatwjBE3pVPIE4HFJNhpRGvUw==", - "requires": { - "@grpc/grpc-js": "~1.3.6", - "@grpc/proto-loader": "^0.5.1", - "@types/fs-extra": "^8.0.1", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^3.6.0", - "google-auth-library": "^5.0.0", - "is-stream-ended": "^0.1.4", - "lodash.at": "^4.6.0", - "lodash.has": "^4.5.2", - "node-fetch": "^2.6.0", - "protobufjs": "^6.8.9", - "retry-request": "^4.0.0", - "semver": "^6.0.0", - "walkdir": "^0.4.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" } }, - "google-p12-pem": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.5.tgz", - "integrity": "sha512-7RLkxwSsMsYh9wQ5Vb2zRtkAHvqPvfoMGag+nugl1noYO7gf0844Yr9TIFA5NEBMAeVt2Z+Imu7CQMp3oNatzQ==", + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "requires": { - "node-forge": "^0.10.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } }, - "google-protobuf": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz", - "integrity": "sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==" - }, - "googleapis": { - "version": "80.2.0", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-80.2.0.tgz", - "integrity": "sha512-lpl+ieuD5YErItTbex/zdtRTndNTZUmbo0eInBtiIe428FSFdjFVZ7+RUdLdiOtMQSxdD1vHe24SXjL3E5U2Nw==", + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "requires": { - "google-auth-library": "^7.0.2", - "googleapis-common": "^5.0.2" - }, - "dependencies": { - "gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "requires": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - } - }, - "google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - } - }, - "google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "requires": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - } + "assert-plus": "^1.0.0" } }, - "googleapis-common": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.1.0.tgz", - "integrity": "sha512-RXrif+Gzhq1QAzfjxulbGvAY3FPj8zq/CYcvgjzDbaBNCD6bUl+86I7mUs4DKWHGruuK26ijjR/eDpWIDgNROA==", + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { - "extend": "^3.0.2", - "gaxios": "^4.0.0", - "google-auth-library": "^7.14.0", - "qs": "^6.7.0", - "url-template": "^2.0.8", - "uuid": "^8.0.0" - }, - "dependencies": { - "gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "requires": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - } - }, - "google-auth-library": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", - "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - } - }, - "google-p12-pem": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", - "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gtoken": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", - "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", - "requires": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.1.3", - "jws": "^4.0.0" - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "is-glob": "^4.0.1" } }, + "google-protobuf": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.0.tgz", + "integrity": "sha512-byR7MBTK4tZ5PZEb+u5ZTzpt4SfrTxv5682MjPlHN16XeqgZE2/8HOIWeiXe8JKnT9OVbtBGhbq8mtvkK8cd5g==" + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "gtoken": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", - "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", - "requires": { - "gaxios": "^2.1.0", - "google-p12-pem": "^2.0.0", - "jws": "^4.0.0", - "mime": "^2.2.0" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } - } - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -12784,7 +10833,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.0", @@ -12810,12 +10859,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "hbs": { "version": "4.2.0", @@ -12844,10 +10888,10 @@ "text-segmentation": "^1.0.3" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" }, "http-errors": { "version": "2.0.0", @@ -12869,21 +10913,6 @@ "@tootallnate/once": "1", "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "http-signature": { @@ -12903,21 +10932,6 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "iconv-lite": { @@ -12931,17 +10945,12 @@ "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "inflection": { "version": "1.13.2", @@ -12951,7 +10960,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -12962,10 +10971,69 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } }, "install": { "version": "0.13.0", @@ -12987,6 +11055,14 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -13021,17 +11097,22 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "ci-info": "^2.0.0" + "kind-of": "^6.0.0" } }, "is-date-object": { @@ -13042,10 +11123,20 @@ "has-tostringtag": "^1.0.0" } }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -13060,15 +11151,6 @@ "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -13079,11 +11161,6 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13098,14 +11175,9 @@ } }, "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" }, "is-potential-custom-element-name": { "version": "1.0.1", @@ -13115,7 +11187,7 @@ "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, "is-regex": { "version": "1.1.4", @@ -13139,16 +11211,6 @@ "call-bind": "^1.0.2" } }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -13180,7 +11242,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-weakmap": { "version": "2.0.1", @@ -13204,15 +11266,10 @@ "get-intrinsic": "^1.1.1" } }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isstream": { "version": "0.1.2", @@ -13229,48 +11286,23 @@ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" }, - "js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "requires": { - "xmlcreate": "^2.0.4" - } + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", + "peer": true + }, + "jquery-validation": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.19.5.tgz", + "integrity": "sha512-X2SmnPq1mRiDecVYL8edWx+yTBZDyC8ohWXFhXdtqFHgU9Wd4KHkvcbCoIZ0JaSaumzS8s2gXSkP8F7ivg/8ZQ==", + "requires": {} }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, - "jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "requires": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - }, - "dependencies": { - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - } - } - }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -13337,22 +11369,15 @@ "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} } } }, - "json-bigint": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", - "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -13368,6 +11393,11 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, + "jsontoxml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz", + "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==" + }, "jspdf": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", @@ -13381,13 +11411,6 @@ "dompurify": "^2.2.0", "fflate": "^0.4.8", "html2canvas": "^1.0.0-rc.5" - }, - "dependencies": { - "fflate": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", - "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" - } } }, "jsprim": { @@ -13401,48 +11424,10 @@ "verror": "1.10.0" } }, - "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "requires": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "levn": { "version": "0.3.0", @@ -13469,14 +11454,6 @@ } } }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "requires": { - "uc.micro": "^1.0.1" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -13490,25 +11467,15 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.at": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz", - "integrity": "sha512-GOTh0SEp+Yosnlpjic+8cl2WM9MykorogkGA9xyIFkkObQ3H3kNZqZ+ohuq4K3FrSVo7hMcZBMataJemrxC3BA==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, - "lodash.has": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "lodash.truncate": { "version": "4.4.2", @@ -13520,11 +11487,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -13533,6 +11495,19 @@ "yallist": "^4.0.0" } }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "requires": { + "es5-ext": "~0.10.2" + } + }, + "luhn-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/luhn-js/-/luhn-js-1.1.2.tgz", + "integrity": "sha512-GdINoHY50s4Zkhvmt6Pss/8ZwVxIOLsMHuJCg6EDcT1heSt4hM2V+7aKCihemn8rI0n22+lxqomzgvWDzMyEuQ==" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -13548,36 +11523,6 @@ } } }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - } - } - }, - "markdown-it-anchor": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.4.tgz", - "integrity": "sha512-Ul4YVYZNxMJYALpKtu+ZRdrryYt/GlQ5CK+4l1bp/gWXOG2QWElt6AqF3Mih/wfUKdZbNAZVXGR73/n6U/8img==", - "requires": {} - }, - "marked": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", - "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==" - }, "mathjs": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.5.2.tgz", @@ -13592,34 +11537,43 @@ "seedrandom": "^3.0.5", "tiny-emitter": "^2.1.0", "typed-function": "^2.0.0" - }, - "dependencies": { - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - } } }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memoizee": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", + "integrity": "sha512-LLzVUuWwGBKK188spgOK/ukrp5zvd9JGsiLDH41pH9vt5jvhZfsu5pxDuAnYAMG8YEGce72KO07sSBy9KkvOfw==", + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.11", + "es6-weak-map": "~0.1.4", + "event-emitter": "~0.3.4", + "lru-queue": "0.1", + "next-tick": "~0.2.2", + "timers-ext": "0.1" + }, + "dependencies": { + "next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==" + } + } }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "mime": { "version": "1.6.0", @@ -13639,10 +11593,10 @@ "mime-db": "1.52.0" } }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "minimatch": { "version": "3.1.2", @@ -13658,9 +11612,9 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "requires": { "yallist": "^4.0.0" } @@ -13693,9 +11647,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multer": { "version": "1.4.5-lts.1", @@ -13721,6 +11675,11 @@ } } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" + }, "mysql": { "version": "2.18.1", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", @@ -13732,10 +11691,32 @@ "sqlstring": "2.3.1" }, "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -13789,10 +11770,15 @@ "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" } } }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -13803,6 +11789,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -13816,15 +11807,10 @@ "whatwg-url": "^5.0.0" } }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - }, "nodemailer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", - "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + "version": "6.7.8", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.8.tgz", + "integrity": "sha512-2zaTFGqZixVmTxpJRCFC+Vk5eGRd/fYtvIR+dl5u9QXLTQWGIf48x/JXvo58g9sa0bU6To04XUv554Paykum3g==" }, "nodemailer-express-handlebars": { "version": "5.0.0", @@ -13835,9 +11821,9 @@ } }, "nodemon": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz", - "integrity": "sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -13845,10 +11831,10 @@ "minimatch": "^3.0.4", "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" }, "dependencies": { "debug": { @@ -13859,17 +11845,17 @@ "ms": "^2.1.1" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { "abbrev": "1" } @@ -13879,27 +11865,22 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - }, "npm": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.9.0.tgz", - "integrity": "sha512-4mhU5nEv7ktvHmJnM2nmWP2Zk4cCsD26imX+dvZ76HOuFUnIpU6+i1MWuoMg8N/xWHQgB0d2/ybWEGgJR9M/pw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.17.0.tgz", + "integrity": "sha512-tIcfZd541v86Sqrf+t/GW6ivqiT8b/2b3EAjNw3vRe+eVnL4mlkVwu17hjCOrsPVntLb5C6tQG4jPUE5Oveeyw==", "requires": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^5.0.4", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.1.0", + "@npmcli/config": "^4.2.1", "@npmcli/fs": "^2.1.0", "@npmcli/map-workspaces": "^2.0.3", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.2.1", "abbrev": "~1.1.1", "archy": "~1.0.0", - "cacache": "^16.0.7", + "cacache": "^16.1.1", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", @@ -13924,24 +11905,25 @@ "libnpmsearch": "^5.0.2", "libnpmteam": "^4.0.2", "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.2", + "make-fetch-happen": "^10.2.0", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", "ms": "^2.1.2", - "node-gyp": "^9.0.0", - "nopt": "^5.0.0", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", "npm-audit-report": "^3.0.0", "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.2", + "npm-package-arg": "^9.1.0", "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.0", "npm-user-validate": "^1.0.1", "npmlog": "^6.0.2", "opener": "^1.5.2", - "pacote": "^13.3.0", + "p-map": "^4.0.0", + "pacote": "^13.6.1", "parse-conflict-json": "^2.0.2", "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", @@ -13951,7 +11933,7 @@ "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", "semver": "^7.3.7", - "ssri": "^9.0.0", + "ssri": "^9.0.1", "tar": "^6.1.11", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", @@ -13975,7 +11957,7 @@ "bundled": true }, "@npmcli/arborist": { - "version": "5.1.1", + "version": "5.5.0", "bundled": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", @@ -13986,21 +11968,23 @@ "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^2.0.0", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/query": "^1.1.1", + "@npmcli/run-script": "^4.1.3", "bin-links": "^3.0.0", "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npm-install-checks": "^5.0.0", "npm-package-arg": "^9.0.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.0", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "parse-conflict-json": "^2.0.1", "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", @@ -14019,13 +12003,13 @@ "bundled": true }, "@npmcli/config": { - "version": "4.1.0", + "version": "4.2.1", "bundled": true, "requires": { "@npmcli/map-workspaces": "^2.0.2", "ini": "^3.0.0", "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "proc-log": "^2.0.0", "read-package-json-fast": "^2.0.3", "semver": "^7.3.5", @@ -14040,7 +12024,7 @@ } }, "@npmcli/fs": { - "version": "2.1.0", + "version": "2.1.1", "bundled": true, "requires": { "@gar/promisify": "^1.1.3", @@ -14071,7 +12055,7 @@ } }, "@npmcli/map-workspaces": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, "requires": { "@npmcli/name-from-folder": "^1.0.1", @@ -14081,7 +12065,7 @@ } }, "@npmcli/metavuln-calculator": { - "version": "3.1.0", + "version": "3.1.1", "bundled": true, "requires": { "cacache": "^16.0.0", @@ -14120,14 +12104,24 @@ "infer-owner": "^1.0.4" } }, + "@npmcli/query": { + "version": "1.1.1", + "bundled": true, + "requires": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + } + }, "@npmcli/run-script": { - "version": "3.0.2", + "version": "4.2.1", "bundled": true, "requires": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" } }, "@tootallnate/once": { @@ -14182,7 +12176,7 @@ "bundled": true }, "are-we-there-yet": { - "version": "3.0.0", + "version": "3.0.1", "bundled": true, "requires": { "delegates": "^1.0.0", @@ -14221,14 +12215,14 @@ } }, "builtins": { - "version": "5.0.0", + "version": "5.0.1", "bundled": true, "requires": { "semver": "^7.0.0" } }, "cacache": { - "version": "16.0.7", + "version": "16.1.1", "bundled": true, "requires": { "@npmcli/fs": "^2.1.0", @@ -14336,6 +12330,10 @@ "version": "1.1.0", "bundled": true }, + "cssesc": { + "version": "3.0.0", + "bundled": true + }, "debug": { "version": "4.3.4", "bundled": true, @@ -14434,15 +12432,14 @@ } }, "glob": { - "version": "8.0.1", + "version": "8.0.3", "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "once": "^1.3.0" } }, "graceful-fs": { @@ -14485,7 +12482,7 @@ } }, "https-proxy-agent": { - "version": "5.0.0", + "version": "5.0.1", "bundled": true, "requires": { "agent-base": "6", @@ -14556,7 +12553,7 @@ } }, "ip": { - "version": "1.1.5", + "version": "2.0.0", "bundled": true }, "ip-regex": { @@ -14571,7 +12568,7 @@ } }, "is-core-module": { - "version": "2.8.1", + "version": "2.10.0", "bundled": true, "requires": { "has": "^1.0.3" @@ -14602,11 +12599,11 @@ "bundled": true }, "just-diff": { - "version": "5.0.1", + "version": "5.1.1", "bundled": true }, "just-diff-apply": { - "version": "5.2.0", + "version": "5.4.1", "bundled": true }, "libnpmaccess": { @@ -14620,7 +12617,7 @@ } }, "libnpmdiff": { - "version": "4.0.3", + "version": "4.0.4", "bundled": true, "requires": { "@npmcli/disparity-colors": "^2.0.0", @@ -14629,25 +12626,27 @@ "diff": "^5.0.0", "minimatch": "^5.0.1", "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "tar": "^6.1.0" } }, "libnpmexec": { - "version": "4.0.5", + "version": "4.0.10", "bundled": true, "requires": { "@npmcli/arborist": "^5.0.0", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", "npm-package-arg": "^9.0.1", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", "walk-up-path": "^1.0.0" } }, @@ -14675,12 +12674,12 @@ } }, "libnpmpack": { - "version": "4.0.3", + "version": "4.1.2", "bundled": true, "requires": { - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5" + "pacote": "^13.6.1" } }, "libnpmpublish": { @@ -14710,26 +12709,26 @@ } }, "libnpmversion": { - "version": "3.0.4", + "version": "3.0.6", "bundled": true, "requires": { "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "json-parse-even-better-errors": "^2.3.1", "proc-log": "^2.0.0", "semver": "^7.3.7" } }, "lru-cache": { - "version": "7.8.1", + "version": "7.13.2", "bundled": true }, "make-fetch-happen": { - "version": "10.1.2", + "version": "10.2.0", "bundled": true, "requires": { "agentkeepalive": "^4.2.1", - "cacache": "^16.0.2", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -14742,19 +12741,19 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", + "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" } }, "minimatch": { - "version": "5.0.1", + "version": "5.1.0", "bundled": true, "requires": { "brace-expansion": "^2.0.1" } }, "minipass": { - "version": "3.1.6", + "version": "3.3.4", "bundled": true, "requires": { "yallist": "^4.0.0" @@ -14840,7 +12839,7 @@ "bundled": true }, "node-gyp": { - "version": "9.0.0", + "version": "9.1.0", "bundled": true, "requires": { "env-paths": "^2.2.0", @@ -14864,13 +12863,13 @@ } }, "glob": { - "version": "7.2.0", + "version": "7.2.3", "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -14881,14 +12880,21 @@ "requires": { "brace-expansion": "^1.1.7" } + }, + "nopt": { + "version": "5.0.0", + "bundled": true, + "requires": { + "abbrev": "1" + } } } }, "nopt": { - "version": "5.0.0", + "version": "6.0.0", "bundled": true, "requires": { - "abbrev": "1" + "abbrev": "^1.0.0" } }, "normalize-package-data": { @@ -14927,16 +12933,17 @@ "bundled": true }, "npm-package-arg": { - "version": "9.0.2", + "version": "9.1.0", "bundled": true, "requires": { "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } }, "npm-packlist": { - "version": "5.0.2", + "version": "5.1.1", "bundled": true, "requires": { "glob": "^8.0.1", @@ -14956,7 +12963,7 @@ } }, "npm-profile": { - "version": "6.0.3", + "version": "6.2.1", "bundled": true, "requires": { "npm-registry-fetch": "^13.0.1", @@ -14964,7 +12971,7 @@ } }, "npm-registry-fetch": { - "version": "13.1.1", + "version": "13.3.0", "bundled": true, "requires": { "make-fetch-happen": "^10.0.6", @@ -15009,13 +13016,13 @@ } }, "pacote": { - "version": "13.3.0", + "version": "13.6.1", "bundled": true, "requires": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.1.0", "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", @@ -15023,7 +13030,7 @@ "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.0.0", + "npm-packlist": "^5.1.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", @@ -15048,6 +13055,14 @@ "version": "1.0.1", "bundled": true }, + "postcss-selector-parser": { + "version": "6.0.10", + "bundled": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, "proc-log": { "version": "2.0.1", "bundled": true @@ -15151,13 +13166,13 @@ } }, "glob": { - "version": "7.2.0", + "version": "7.2.3", "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -15209,20 +13224,20 @@ "bundled": true }, "socks": { - "version": "2.6.2", + "version": "2.7.0", "bundled": true, "requires": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "6.1.1", + "version": "7.0.0", "bundled": true, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" } }, "spdx-correct": { @@ -15250,7 +13265,7 @@ "bundled": true }, "ssri": { - "version": "9.0.0", + "version": "9.0.1", "bundled": true, "requires": { "minipass": "^3.1.1" @@ -15397,11 +13412,6 @@ "set-blocking": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" - }, "nwsapi": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", @@ -15420,17 +13430,12 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-is": { "version": "1.1.5", @@ -15473,11 +13478,19 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "requires": { + "mimic-fn": "^1.0.0" + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -15491,10 +13504,10 @@ "word-wrap": "~1.2.3" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-limit": { "version": "2.3.0", @@ -15517,24 +13530,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, "pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -15556,9 +13551,9 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "passport": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.2.tgz", - "integrity": "sha512-w9n/Ot5I7orGD4y+7V3EFJCQEznE5RxHamUxcqLT2QoJY0f2JdN8GyHonYFvN0Vz+L6lUJfVhrk2aZz2LbuREw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", + "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", "requires": { "passport-strategy": "1.x.x", "pause": "0.0.1" @@ -15575,7 +13570,7 @@ "passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", - "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", "requires": { "passport-strategy": "1.x.x" } @@ -15595,7 +13590,7 @@ "passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" }, "path-exists": { "version": "4.0.0", @@ -15605,17 +13600,22 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "pause": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "pdf": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/pdf/-/pdf-0.1.0.tgz", + "integrity": "sha512-OCrtycX8Fb0wXJJbU11xjWZbZHpvYq3kUHrWLnPC7+Czjocvg2iI25kRt4CUTq74/rX5aUv8zIAYC/Ky3Bybrg==" }, "pdfkit": { "version": "0.13.0", @@ -15626,6 +13626,37 @@ "fontkit": "^1.8.1", "linebreak": "^1.0.2", "png-js": "^1.0.0" + }, + "dependencies": { + "@swc/helpers": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.17.tgz", + "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==", + "requires": { + "tslib": "^2.4.0" + } + }, + "fontkit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.9.0.tgz", + "integrity": "sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==", + "requires": { + "@swc/helpers": "^0.3.13", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "deep-equal": "^2.0.5", + "dfa": "^1.2.0", + "restructure": "^2.0.1", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.3.1", + "unicode-trie": "^2.0.0" + } + }, + "restructure": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz", + "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==" + } } }, "pdfkit-table": { @@ -15651,6 +13682,11 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, "png-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", @@ -15666,11 +13702,6 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, "printj": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", @@ -15686,61 +13717,6 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, - "proto3-json-serializer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.0.3.tgz", - "integrity": "sha512-4Xo7uzbTfc8ur9R8VgI0pJpI6aHix76cc7DHJEfZKrZ6vOUbOddxBrsMzAGG2s6b3iHknl4Gn50dA2Y3AoCdow==", - "requires": { - "protobufjs": "^7.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" - }, - "protobufjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz", - "integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - } - } - } - }, - "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -15753,40 +13729,23 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, "qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -15796,65 +13755,6 @@ "encode-utf8": "^1.0.3", "pngjs": "^5.0.0", "yargs": "^15.3.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } } }, "qs": { @@ -15877,7 +13777,7 @@ "random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" }, "range-parser": { "version": "1.2.1", @@ -15895,43 +13795,14 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - } - } - }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -15957,22 +13828,6 @@ "functions-have-names": "^1.2.2" } }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -16037,56 +13892,25 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "requires": { - "lodash": "^4.17.14" - } - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "requires": { - "lowercase-keys": "^1.0.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "restructure": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz", - "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.0.tgz", + "integrity": "sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw==" }, "retry-as-promised": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" }, - "retry-request": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", - "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "rgbcolor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", @@ -16099,20 +13923,25 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "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" - } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -16135,29 +13964,16 @@ } }, "seedrandom": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", - "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", - "peer": true + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "lru-cache": "^6.0.0" } }, "send": { @@ -16180,6 +13996,21 @@ "statuses": "2.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -16190,12 +14021,12 @@ "seq-queue": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "sequelize": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.19.0.tgz", - "integrity": "sha512-B3oGIdpYBERDjRDm74h7Ky67f6ZLcmBXOA7HscYObiOSo4pD7VBc9mtm44wNV7unc0uk8I1d30nbZBTQCE377A==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.21.3.tgz", + "integrity": "sha512-cJPrTTVCofUxaaNKoIETiXCYh2xJ+OFq5jMHJQqftp34M4kNoLpTfUMPSwYtRUeTcSh1/5HodfJXIBi7troIFA==", "requires": { "@types/debug": "^4.1.7", "@types/validator": "^13.7.1", @@ -16213,29 +14044,6 @@ "uuid": "^8.3.2", "validator": "^13.7.0", "wkx": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "sequelize-pool": { @@ -16257,12 +14065,12 @@ "sessions": { "version": "0.0.2-7", "resolved": "https://registry.npmjs.org/sessions/-/sessions-0.0.2-7.tgz", - "integrity": "sha1-mb+zSF6riHUQWfUt6J4sjR/75+I=" + "integrity": "sha512-pAB43NwQ1SjGWLVdTHi1DKL1aMgZwS/T4c/AU1SEBStRrimUj1CXrEKXDA3Y88QkPCOEycPaCfIK2U2otSOlRg==" }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "setprototypeof": { "version": "1.2.0", @@ -16284,6 +14092,21 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -16292,6 +14115,57 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "socket.io": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + }, + "socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" } }, "source-map": { @@ -16307,7 +14181,7 @@ "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==" }, "ssf": { "version": "0.11.2", @@ -16357,29 +14231,17 @@ "stream-chain": "^2.2.5" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } + "safe-buffer": "~5.2.0" } }, "string-width": { @@ -16420,10 +14282,49 @@ "ansi-regex": "^5.0.1" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "stripe": { + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-9.16.0.tgz", + "integrity": "sha512-Dn8K+jSoQcXjxCobRI4HXUdHjOXsiF/KszK49fJnkbeCFjZ3EZxLG2JiM/CX+Hcq27NBDtv/Sxhvy+HhTmvyaQ==", + "requires": { + "@types/node": ">=8.1.0", + "qs": "^6.10.3" + } + }, + "stripe-cli": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stripe-cli/-/stripe-cli-0.1.0.tgz", + "integrity": "sha512-P7VrZrBDGh4z2Nu2+1t+XPJLqlbI1LtsUdhjd6HUOQ3O1VW6Vc9XaFiW1Kn779rwDLrU39OZi7Pq6x1ShCALnw==", + "requires": { + "cfonts": "^2.3.0", + "chalk": "^2.4.1", + "chance": "^1.0.17", + "clear": "^0.1.0", + "clui": "^0.3.6", + "configstore": "^4.0.0", + "figlet": "^1.2.1", + "inquirer": "^6.2.1", + "minimist": "^1.2.0", + "stripe": "^6.17.0" + }, + "dependencies": { + "stripe": { + "version": "6.36.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-6.36.0.tgz", + "integrity": "sha512-7vjyVO4NCWvX38CH1AuSQH16uRxcQN+UhUTBPs4UHsIl5+SJXLBvCsHrMgd+bY9k1YDliT0fQB1fH9OI3GrEhw==", + "requires": { + "lodash.isplainobject": "^4.0.6", + "qs": "^6.6.0", + "safe-buffer": "^5.1.1", + "uuid": "^3.3.2" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } }, "supports-color": { "version": "5.5.0", @@ -16475,11 +14376,6 @@ } } }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -16502,6 +14398,20 @@ "utrie": "^1.0.2" } }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, "tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -16513,18 +14423,13 @@ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { - "rimraf": "^3.0.0" + "os-tmpdir": "~1.0.2" } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16546,7 +14451,7 @@ "toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, "touch": { "version": "3.1.0", @@ -16554,6 +14459,16 @@ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "requires": { "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + } } }, "tough-cookie": { @@ -16568,7 +14483,7 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "tslib": { "version": "2.4.0", @@ -16588,6 +14503,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -16596,11 +14516,6 @@ "prelude-ls": "~1.1.2" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -16620,23 +14535,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, "uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==" + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "optional": true }, "uid-safe": { "version": "2.1.5", @@ -16691,11 +14594,11 @@ } }, "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "requires": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^1.0.0" } }, "universalify": { @@ -16706,38 +14609,7 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "uri-js": { "version": "4.4.1", @@ -16747,28 +14619,15 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "utrie": { "version": "1.0.2", @@ -16792,7 +14651,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "verror": { "version": "1.10.0", @@ -16835,15 +14694,10 @@ "foreachasync": "^3.0.0" } }, - "walkdir": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", - "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==" - }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-encoding": { "version": "1.0.5", @@ -16861,7 +14715,7 @@ "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -16916,12 +14770,31 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "window-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", + "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", "requires": { - "string-width": "^4.0.0" + "define-property": "^1.0.0", + "is-number": "^3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "wkx": { @@ -16938,13 +14811,9 @@ "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" }, "word": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/word/-/word-0.4.0.tgz", - "integrity": "sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw==", - "requires": { - "cfb": "^1.2.0", - "jsdom": "^16.2.2" - } + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" }, "word-wrap": { "version": "1.2.3", @@ -16954,60 +14823,79 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "requires": { + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.2" } }, "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "requires": {} }, "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==" }, "xlsx": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.2.tgz", - "integrity": "sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ==", + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", "requires": { - "adler-32": "~1.2.0", - "cfb": "^1.1.4", + "adler-32": "~1.3.0", + "cfb": "~1.2.1", "codepage": "~1.15.0", - "commander": "~2.17.1", - "crc-32": "~1.2.0", - "exit-on-epipe": "~1.0.1", - "fflate": "^0.3.8", + "crc-32": "~1.2.1", "ssf": "~0.11.2", "wmf": "~1.0.1", - "word": "~0.4.0" + "word": "~0.3.0" } }, "xml-name-validator": { @@ -17020,20 +14908,15 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { "version": "4.0.0", @@ -17041,23 +14924,31 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } } diff --git a/package.json b/package.json index ce787eba..a8a3de27 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,24 @@ { - "name": "threadsintimewebsite", + "name": "threadsinnode", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { - "start": "nodemon server.js" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/PMerilo/ThreadsInNode.git" }, "author": "", "license": "ISC", + "bugs": { + "url": "https://github.com/PMerilo/ThreadsInNode/issues" + }, + "homepage": "https://github.com/PMerilo/ThreadsInNode#readme", "dependencies": { - "@google-cloud/dialogflow": "^5.2.0", "@handlebars/allow-prototype-access": "^1.0.5", - "actions-on-google": "^3.0.0", "bcrypt": "^5.0.1", "bcryptjs": "^2.4.3", "blob-stream": "^0.1.3", @@ -19,8 +26,6 @@ "chartjs-to-image": "^1.0.5", "connect-flash": "^0.1.1", "danfojs-node": "^1.1.1", - "dialogflow": "^1.2.0", - "dialogflow-fulfillment": "^0.6.1", "dotenv": "^16.0.0", "express": "^4.18.1", "express-handlebars": "^6.0.5", @@ -28,25 +33,37 @@ "express-session": "^1.17.2", "flash": "^1.1.0", "flash-messenger": "^1.1.1", + "fontkit": "^2.0.2", "handlebars": "^4.7.7", "hbs": "^4.2.0", + "http": "^0.0.1-security", "install": "^0.13.0", + "jquery-validation": "^1.19.5", + "jsontoxml": "^1.0.1", "jspdf": "^2.5.1", + "luhn-js": "^1.1.2", "moment": "^2.29.4", "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", + "nanoid": "^3.3.4", "nodemailer": "^6.7.7", "nodemailer-express-handlebars": "^5.0.0", - "nodemon": "^2.0.16", + "nodemon": "^2.0.19", "npm": "^8.9.0", "passport": "^0.5.2", "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", + "pdf": "^0.1.0", "pdfkit": "^0.13.0", "pdfkit-table": "^0.1.99", "qrcode": "^1.5.1", "sequelize": "^6.19.0", "sessions": "^0.0.2-7", - "toast-me": "^1.4.8" + "socket.io": "^4.5.1", + "stripe": "^9.16.0", + "stripe-cli": "^0.1.0", + "toast-me": "^1.4.8", + "uuid": "^8.3.2", + "xlsx": "^0.18.5" } } diff --git a/public/images/ChartImages/CustomerSatisfactionBarChart.png b/public/images/ChartImages/CustomerSatisfactionBarChart.png index 96cb7abe..d7c6040f 100644 Binary files a/public/images/ChartImages/CustomerSatisfactionBarChart.png and b/public/images/ChartImages/CustomerSatisfactionBarChart.png differ diff --git a/public/images/ChartImages/UsersGendersPieChart.png b/public/images/ChartImages/UsersGendersPieChart.png index 31927d9b..ecb0201f 100644 Binary files a/public/images/ChartImages/UsersGendersPieChart.png and b/public/images/ChartImages/UsersGendersPieChart.png differ diff --git a/public/images/ChartImages/UsersJoinedChart.png b/public/images/ChartImages/UsersJoinedChart.png index ff8fa2bc..93d87dd8 100644 Binary files a/public/images/ChartImages/UsersJoinedChart.png and b/public/images/ChartImages/UsersJoinedChart.png differ diff --git a/public/images/ChartImages/UsersRolesPieChart.png b/public/images/ChartImages/UsersRolesPieChart.png index 6bbf9a87..3a4d1798 100644 Binary files a/public/images/ChartImages/UsersRolesPieChart.png and b/public/images/ChartImages/UsersRolesPieChart.png differ diff --git a/public/images/ChartImages/UsersSubscriptionChart.png b/public/images/ChartImages/UsersSubscriptionChart.png index 8398623e..cc2895ca 100644 Binary files a/public/images/ChartImages/UsersSubscriptionChart.png and b/public/images/ChartImages/UsersSubscriptionChart.png differ diff --git a/public/images/banner2.png b/public/images/banner2.png new file mode 100644 index 00000000..df85bbec Binary files /dev/null and b/public/images/banner2.png differ diff --git a/public/images/banner3.png b/public/images/banner3.png new file mode 100644 index 00000000..1e27690b Binary files /dev/null and b/public/images/banner3.png differ diff --git a/public/images/banner4.png b/public/images/banner4.png new file mode 100644 index 00000000..6a068780 Binary files /dev/null and b/public/images/banner4.png differ diff --git a/public/images/banner5.png b/public/images/banner5.png new file mode 100644 index 00000000..e7018771 Binary files /dev/null and b/public/images/banner5.png differ diff --git a/public/images/empty-cart.png b/public/images/empty-cart.png new file mode 100644 index 00000000..04df86c4 Binary files /dev/null and b/public/images/empty-cart.png differ diff --git a/public/images/empty-cartt.jpg b/public/images/empty-cartt.jpg new file mode 100644 index 00000000..f4697df9 Binary files /dev/null and b/public/images/empty-cartt.jpg differ diff --git a/public/images/hanger-line.png b/public/images/hanger-line.png new file mode 100644 index 00000000..4643532d Binary files /dev/null and b/public/images/hanger-line.png differ diff --git a/public/images/items/16.png b/public/images/items/16.png new file mode 100644 index 00000000..f756e22d Binary files /dev/null and b/public/images/items/16.png differ diff --git a/public/images/items/17.jpeg b/public/images/items/17.jpeg new file mode 100644 index 00000000..7079bb66 Binary files /dev/null and b/public/images/items/17.jpeg differ diff --git a/public/images/items/18.jpeg b/public/images/items/18.jpeg new file mode 100644 index 00000000..99e23470 Binary files /dev/null and b/public/images/items/18.jpeg differ diff --git a/public/images/no-img.png b/public/images/no-img.png new file mode 100644 index 00000000..df2310d5 Binary files /dev/null and b/public/images/no-img.png differ diff --git a/public/images/nothing.png b/public/images/nothing.png new file mode 100644 index 00000000..8df8dd8e Binary files /dev/null and b/public/images/nothing.png differ diff --git a/public/images/stars4.png b/public/images/stars4.png new file mode 100644 index 00000000..b25880b3 Binary files /dev/null and b/public/images/stars4.png differ diff --git a/public/images/stars5.png b/public/images/stars5.png new file mode 100644 index 00000000..b8ee3570 Binary files /dev/null and b/public/images/stars5.png differ diff --git a/public/images/user_img.png b/public/images/user_img.png new file mode 100644 index 00000000..1bcfb708 Binary files /dev/null and b/public/images/user_img.png differ diff --git a/public/js/demo/chart-area-demo.js b/public/js/demo/chart-area-demo.js index a451d913..c8ea89d3 100644 --- a/public/js/demo/chart-area-demo.js +++ b/public/js/demo/chart-area-demo.js @@ -3,6 +3,20 @@ '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; Chart.defaults.global.defaultFontColor = "#858796"; +$(document).ready(function () { + setDate() + setTimeout(() => filterData(), 30); +}) +var prev_btn = document.getElementById('prev-btn'); +var next_btn = document.getElementById('next-btn'); +var now = new Date(); +var dd = String(now.getDate()).padStart(2, '0'); +var mm = String(now.getMonth() + 1).padStart(2, '0'); //January is 0! +var yyyy = now.getFullYear(); + +const today = dd + '/' + mm + '/' + yyyy; +const lastweekdisplay = formatDate(getWeek(-1)); + function number_format(number, decimals, dec_point, thousands_sep) { // * example: number_format(1234.56, 2, ',', ' '); // * return: '1 234,56' @@ -30,8 +44,8 @@ function number_format(number, decimals, dec_point, thousands_sep) { // No Of Users Joined Chart var ctxUsersJoined = document -.getElementById("NoOfUsersJoinedChart") -.getContext("2d"); + .getElementById("NoOfUsersJoinedChart") + .getContext("2d"); var NoOfUsers_day = []; var dates_day = []; var NoOfUsers_month = []; @@ -39,8 +53,7 @@ var dates_month = []; var NoOfUsers_year = []; var dates_year = []; // console.log(NoOfUsers_day); -$.get("/datapipeline/NoOfUsersJoined") -.done(function (data) { +$.get("/datapipeline/NoOfUsersJoined").done(function (data) { // console.log(NoOfUsers_day); // console.log("hi"); // console.log(data); @@ -56,7 +69,7 @@ $.get("/datapipeline/NoOfUsersJoined") NoOfUsers_year.push(element["NoOfUsersJoined_sum"]); dates_year.push(element["Dates"].slice(0, 10)); }); - + // console.log(NoOfUsers_day); window.NoOfUsersJoinedChart = new Chart(ctxUsersJoined, { type: "line", @@ -166,7 +179,7 @@ function setChartType(element) { NoOfUsersJoinedChart.data.labels = dates_day NoOfUsersJoinedChart.data.datasets[0].data = NoOfUsers_day document.getElementById("usersJoinedSortedBy").innerHTML = "No. of Users Joined By Day"; - } else if(id_dates == "dates_month") { + } else if (id_dates == "dates_month") { NoOfUsersJoinedChart.data.labels = [...dates_month] NoOfUsersJoinedChart.data.datasets[0].data = [...NoOfUsers_month] document.getElementById("usersJoinedSortedBy").innerHTML = "No. of Users Joined By Month"; @@ -178,23 +191,23 @@ function setChartType(element) { // console.log(dates) // console.log(dates_day) // console.log(users) - - - - + + + + // NoOfUsersJoinedChart.data.labels = dates; // NoOfUsersJoinedChart.data.datasets[0].data = users; NoOfUsersJoinedChart.update(); // var updated_NoOfUsers = [...NoOfUsers]; // var updated_dates = [...date]; - + } // No Of Users Subscribed Chart var ctxUsersSubscribed = document -.getElementById("NoOfUsersSubscribedChart") -.getContext("2d"); + .getElementById("NoOfUsersSubscribedChart") + .getContext("2d"); var NoOfUsersSubscribed_day = []; var datesSubscribed_day = []; var NoOfUsersSubscribed_month = []; @@ -202,8 +215,7 @@ var datesSubscribed_month = []; var NoOfUsersSubscribed_year = []; var datesSubscribed_year = []; // console.log(NoOfUsers_day); -$.get("/datapipeline/NoOfNewsLetterSubscriptions") -.done(function (data) { +$.get("/datapipeline/NoOfNewsLetterSubscriptions").done(function (data) { // console.log(NoOfUsers_day); // console.log("hi"); // console.log(data); @@ -219,7 +231,7 @@ $.get("/datapipeline/NoOfNewsLetterSubscriptions") NoOfUsersSubscribed_year.push(element["NoOfNewsLetterSubscriptions_sum"]); datesSubscribed_year.push(element["Dates"].slice(0, 10)); }); - + // console.log(NoOfUsers_day); window.NoOfUsersSubscribedChart = new Chart(ctxUsersSubscribed, { type: "line", @@ -328,7 +340,7 @@ function setChartTypeNewsLetter(element) { NoOfUsersSubscribedChart.data.labels = datesSubscribed_day NoOfUsersSubscribedChart.data.datasets[0].data = NoOfUsersSubscribed_day document.getElementById("usersSubscribedSortedBy").innerHTML = "No. of Users Subscribed By Day"; - } else if(id_dates == "dates_monthSubscribed") { + } else if (id_dates == "dates_monthSubscribed") { NoOfUsersSubscribedChart.data.labels = [...datesSubscribed_month] NoOfUsersSubscribedChart.data.datasets[0].data = [...NoOfUsersSubscribed_month] document.getElementById("usersSubscribedSortedBy").innerHTML = "No. of Users Subscribed By Month"; @@ -341,17 +353,197 @@ function setChartTypeNewsLetter(element) { // console.log(dates) // console.log(dates_day) // console.log(users) - - - - + + + + // NoOfUsersJoinedChart.data.labels = dates; // NoOfUsersJoinedChart.data.datasets[0].data = users; NoOfUsersSubscribedChart.update(); - // var updated_NoOfUsers = [...NoOfUsers]; - // var updated_dates = [...date]; +} +// var updated_NoOfUsers = [...NoOfUsers]; +// var updated_dates = [...date]; +var getTITSalesData = $.get('/datapipeline/totalSalesPerDay') +var ctxTITSales = document.getElementById("TITSales").getContext('2d'); +var Sales = [] +var dates = [] +getTITSalesData.done(function (data) { + data.data.forEach(element => { + Sales.push(element["Sales_sum"]) + dates.push(element["Dates"].slice(0, 10)) + + }); + + window.myTITSalesChart = new Chart(ctxTITSales, { + type: 'line', + data: { + labels: dates, + datasets: [{ + label: "Sales S$", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223, 0.05)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: Sales, + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7, + + } + }], + yAxes: [{ + ticks: { + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function (value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + } + }); +}) + +function getWeek(week) { + var noofdays = week * 6 + const now = new Date(); + return new Date(now.getFullYear(), now.getMonth(), now.getDate() + noofdays); +} + +function formatDate(date) { + var dd = String(date.getDate()).padStart(2, '0'); + var mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0! + var yyyy = date.getFullYear(); + const formattedweek = dd + '/' + mm + '/' + yyyy; + return formattedweek; +} + +$(".previous-week").click(function () { + var val = $("#weekcount").val() + var weekcount = val - 1 + $("#weekcount").val(weekcount) + var week = $(".date-span").text().slice(0, 10) + var prevweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount - 1)) + } + $(".date-span").text(prevweek + " - " + week) + $("#prev").val(prevweek) + $("#next").val(week) + setTimeout(() => filterData(), 300); +}) + +$(".next-week").click(function () { + var val = $("#weekcount").val() + var weekcount = parseInt(val) + 1 + $("#weekcount").val(weekcount) + var week = $(".date-span").text().slice(-10) + var nextweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount + 1)) + } + $(".date-span").text(week + " - " + nextweek) + $("#prev").val(week) + $("#next").val(nextweek) + setTimeout(() => filterData(), 300); +}) + +function setDate() { + $(".date-span").text(lastweekdisplay + " - " + today) + $("#prev").val(lastweekdisplay) + $("#next").val(today) +} + +function filterData() { + var prevweek = $("#prev").val(); + var nextweek = $("#next").val(); + const updated_dates = [...dates]; + const updated_sales = [...Sales]; + + var indexStart = updated_dates.indexOf(prevweek); + var indexEnd = updated_dates.indexOf(nextweek); + + if (indexStart < 0) { + indexStart = 0 + prev_btn.style.display = "none"; + } else { + prev_btn.style.display = ""; + } + if (!(indexEnd in updated_dates)) { + indexEnd = updated_dates.length - 1 + next_btn.style.display = "none"; + } else { + next_btn.style.display = ""; + } + + $(".actual-date-span").text("Daily Revenue figures from " + updated_dates[indexStart] + " - " + updated_dates[indexEnd]) + + const filterDate = updated_dates.slice(indexStart, indexEnd + 1); + const filterSales = updated_sales.slice(indexStart, indexEnd + 1); - + myTITSalesChart.data.labels = filterDate; + myTITSalesChart.data.datasets[0].data = filterSales; + myTITSalesChart.update(); } diff --git a/public/js/demo/chart-bar-demo.js b/public/js/demo/chart-bar-demo.js index e00139c6..af6cba40 100644 --- a/public/js/demo/chart-bar-demo.js +++ b/public/js/demo/chart-bar-demo.js @@ -11,7 +11,7 @@ function number_format(number, decimals, dec_point, thousands_sep) { sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = (typeof dec_point === 'undefined') ? '.' : dec_point, s = '', - toFixedFix = function(n, prec) { + toFixedFix = function (n, prec) { var k = Math.pow(10, prec); return '' + Math.round(n * k) / k; }; @@ -29,109 +29,109 @@ function number_format(number, decimals, dec_point, thousands_sep) { // Your Products Bar Chart -var getInventoryData = $.get('/datapipeline/InventoryReport') -var ctx6 = document.getElementById("InventoryReportBarchart"); -getInventoryData.done(function(data){ - var stock = [] - var name = [] - // console.log(data.data) - data.data.forEach(element => { - stock.push(element["Stocks"]) - name.push(element["ProductName"]) - // console.log(element["Stocks"]) - // console.log("hi") +// var getInventoryData = $.get('/datapipeline/InventoryReport') +// var ctx6 = document.getElementById("InventoryReportBarchart"); +// getInventoryData.done(function(data){ +// var stock = [] +// var name = [] +// // console.log(data.data) +// data.data.forEach(element => { +// stock.push(element["Stocks"]) +// name.push(element["ProductName"]) +// // console.log(element["Stocks"]) +// // console.log("hi") - }); +// }); - var mybarChart = new Chart(ctx6, { - type: 'bar', - data: { - labels: name, - datasets: [{ - label: "Current Stock", - lineTension: 0.3, - backgroundColor: "red", - borderColor: "rgba(78, 115, 223, 1)", - pointRadius: 3, - pointBackgroundColor: "rgba(78, 115, 223, 1)", - pointBorderColor: "rgba(78, 115, 223, 1)", - pointHoverRadius: 3, - pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", - pointHoverBorderColor: "rgba(78, 115, 223, 1)", - pointHitRadius: 10, - pointBorderWidth: 2, - data: stock, - }], - }, - options: { - maintainAspectRatio: false, - layout: { - padding: { - left: 10, - right: 25, - top: 25, - bottom: 0 - } - }, - scales: { - xAxes: [{ - time: { - unit: 'productname' - }, - gridLines: { - display: false, - drawBorder: false - }, - ticks: { - maxTicksLimit: 7 - } - }], - yAxes: [{ - ticks: { - maxTicksLimit: 5, - padding: 10, - // Include a dollar sign in the ticks - callback: function(value, index, values) { - return number_format(value); - } - }, - gridLines: { - color: "rgb(234, 236, 244)", - zeroLineColor: "rgb(234, 236, 244)", - drawBorder: false, - borderDash: [2], - zeroLineBorderDash: [2] - } - }], - }, - legend: { - display: false - }, - tooltips: { - backgroundColor: "rgb(255,255,255)", - bodyFontColor: "#858796", - titleMarginBottom: 10, - titleFontColor: '#6e707e', - titleFontSize: 14, - borderColor: '#dddfeb', - borderWidth: 1, - xPadding: 15, - yPadding: 15, - displayColors: false, - intersect: false, - mode: 'index', - caretPadding: 10, - callbacks: { - label: function(tooltipItem, chart) { - var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; - return datasetLabel + " "+ number_format(tooltipItem.yLabel); - } - } - } - } - }); +// var mybarChart = new Chart(ctx6, { +// type: 'bar', +// data: { +// labels: name, +// datasets: [{ +// label: "Current Stock", +// lineTension: 0.3, +// backgroundColor: "red", +// borderColor: "rgba(78, 115, 223, 1)", +// pointRadius: 3, +// pointBackgroundColor: "rgba(78, 115, 223, 1)", +// pointBorderColor: "rgba(78, 115, 223, 1)", +// pointHoverRadius: 3, +// pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", +// pointHoverBorderColor: "rgba(78, 115, 223, 1)", +// pointHitRadius: 10, +// pointBorderWidth: 2, +// data: stock, +// }], +// }, +// options: { +// maintainAspectRatio: false, +// layout: { +// padding: { +// left: 10, +// right: 25, +// top: 25, +// bottom: 0 +// } +// }, +// scales: { +// xAxes: [{ +// time: { +// unit: 'productname' +// }, +// gridLines: { +// display: false, +// drawBorder: false +// }, +// ticks: { +// maxTicksLimit: 7 +// } +// }], +// yAxes: [{ +// ticks: { +// maxTicksLimit: 5, +// padding: 10, +// // Include a dollar sign in the ticks +// callback: function(value, index, values) { +// return number_format(value); +// } +// }, +// gridLines: { +// color: "rgb(234, 236, 244)", +// zeroLineColor: "rgb(234, 236, 244)", +// drawBorder: false, +// borderDash: [2], +// zeroLineBorderDash: [2] +// } +// }], +// }, +// legend: { +// display: false +// }, +// tooltips: { +// backgroundColor: "rgb(255,255,255)", +// bodyFontColor: "#858796", +// titleMarginBottom: 10, +// titleFontColor: '#6e707e', +// titleFontSize: 14, +// borderColor: '#dddfeb', +// borderWidth: 1, +// xPadding: 15, +// yPadding: 15, +// displayColors: false, +// intersect: false, +// mode: 'index', +// caretPadding: 10, +// callbacks: { +// label: function(tooltipItem, chart) { +// var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; +// return datasetLabel + " "+ number_format(tooltipItem.yLabel); +// } +// } +// } +// } +// }); - }) +// }) // Customer Satisfaction Bar Chart diff --git a/public/js/demo/sellerdashboard.js b/public/js/demo/sellerdashboard.js new file mode 100644 index 00000000..bee48d93 --- /dev/null +++ b/public/js/demo/sellerdashboard.js @@ -0,0 +1,620 @@ +$(document).ready(function () { + setDate() + setTimeout(() => filterData(), 30); + updateStats() +}) +var seller_id = $("#seller_id").val() +function updateStats() { + var revenue = document.getElementById("revenue") + var orders = document.getElementById("orders") + var customers = document.getElementById("customers") + var balance = document.getElementById("balance") + console.log(revenue, customers, orders) + $.ajax({ + url: "/datapipeline/storestats", + method: 'POST', + contentType: "application/json", + data: JSON.stringify({ id: seller_id }), + success: function (res) { + console.log(res) + revenue.innerText = "S$" + res.revenue + orders.innerText = res.orders + customers.innerText = res.customers + balance.innerText = "S$" + res.balance + var string = res.bank + var n = string.length - 4 + var rest = string.length - n; + var str = string.slice(0, Math.ceil(rest / 2) + 1) + '*'.repeat(n) + string.slice(-Math.floor(rest / 2) + 1); + $("#bankacc").text("Bank Account : " + str) + } + }) +} + +var prev_btn = document.getElementById('prev-btn'); +var next_btn = document.getElementById('next-btn'); +var now = new Date(); +var dd = String(now.getDate()).padStart(2, '0'); +var mm = String(now.getMonth() + 1).padStart(2, '0'); //January is 0! +var yyyy = now.getFullYear(); + +const today = dd + '/' + mm + '/' + yyyy; +const lastweekdisplay = formatDate(getWeek(-1)); + +function number_format(number, decimals, dec_point, thousands_sep) { + // * example: number_format(1234.56, 2, ',', ' '); + // * return: '1 234,56' + number = (number + '').replace(',', '').replace(' ', ''); + var n = !isFinite(+number) ? 0 : +number, + prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), + sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, + dec = (typeof dec_point === 'undefined') ? '.' : dec_point, + s = '', + toFixedFix = function (n, prec) { + var k = Math.pow(10, prec); + return '' + Math.round(n * k) / k; + }; + // Fix for IE parseFloat(0.55).toFixed(0) = 0; + s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); + if (s[0].length > 3) { + s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); + } + if ((s[1] || '').length < prec) { + s[1] = s[1] || ''; + s[1] += new Array(prec - s[1].length + 1).join('0'); + } + return s.join(dec); +} +console.log('/datapipeline/salesPerDay/' + seller_id) +var getSalesPerDayData = $.get('/datapipeline/salesPerDay/' + seller_id) +var ctxsales = document.getElementById("SalesReportLineChart").getContext('2d'); +var Sales = [] +var dates = [] +const earliestDataset_Dates = dates[0] +const latestDataset_Dates = dates[-1] +getSalesPerDayData.done(function (data) { + data.data.forEach(element => { + Sales.push(element["Sales_sum"]) + dates.push(element["Dates"].slice(0, 10)) + }); + console.log(dates) + console.log(Sales) + + + window.mySalesChart = new Chart(ctxsales, { + type: 'line', + data: { + labels: dates, + datasets: [{ + label: "Revenue Per Day", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223, 0.05)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: Sales, + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7, + + } + }], + yAxes: [{ + beginAtZero: true, + ticks: { + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function (value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + } + }); + +}) + +function getWeek(week) { + var noofdays = week * 6 + const now = new Date(); + return new Date(now.getFullYear(), now.getMonth(), now.getDate() + noofdays); +} + +function formatDate(date) { + var dd = String(date.getDate()).padStart(2, '0'); + var mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0! + var yyyy = date.getFullYear(); + const formattedweek = dd + '/' + mm + '/' + yyyy; + return formattedweek; +} + +$(".previous-week").click(function () { + var val = $("#weekcount").val() + var weekcount = val - 1 + $("#weekcount").val(weekcount) + var week = $(".date-span").text().slice(0, 10) + var prevweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount - 1)) + } + $(".date-span").text(prevweek + " - " + week) + $("#prev").val(prevweek) + $("#next").val(week) + setTimeout(() => filterData(), 300); +}) + +$(".next-week").click(function () { + var val = $("#weekcount").val() + var weekcount = parseInt(val) + 1 + $("#weekcount").val(weekcount) + var week = $(".date-span").text().slice(-10) + var nextweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount + 1)) + } + $(".date-span").text(week + " - " + nextweek) + $("#prev").val(week) + $("#next").val(nextweek) + setTimeout(() => filterData(), 300); +}) + +function setDate() { + $(".date-span").text(lastweekdisplay + " - " + today) + $("#prev").val(lastweekdisplay) + $("#next").val(today) +} + +function filterData() { + var prevweek = $("#prev").val(); + var nextweek = $("#next").val(); + const updated_dates = [...dates]; + const updated_sales = [...Sales]; + + + var indexStart = updated_dates.indexOf(prevweek); + var indexEnd = updated_dates.indexOf(nextweek); + + if (indexStart < 0) { + indexStart = 0 + prev_btn.style.display = "none"; + } else { + prev_btn.style.display = ""; + } + if (!(indexEnd in updated_dates)) { + indexEnd = updated_dates.length - 1 + next_btn.style.display = "none"; + } else { + next_btn.style.display = ""; + } + + $(".actual-date-span").text("Daily Revenue figures from " + updated_dates[indexStart] + " - " + updated_dates[indexEnd]) + + const filterDate = updated_dates.slice(indexStart, indexEnd + 1); + const filterSales = updated_sales.slice(indexStart, indexEnd + 1); + + mySalesChart.data.labels = filterDate; + mySalesChart.data.datasets[0].data = filterSales; + mySalesChart.update(); +} + + +var getSalesData = $.get('/datapipeline/myProduct/' + seller_id) +var ctxpsales = document.getElementById("BestSellingProductChart").getContext('2d'); +var ctxpopular = document.getElementById("PopularProductChart").getContext('2d'); +var PSales = [] +var Names = [] +var Sold = [] +getSalesData.done(function (data) { + data.data.forEach(element => { + PSales.push(element["Sales"]) + Names.push(element["Name"]) + Sold.push(element["Sold"]) + }); + + + window.ProductSalesChart = new Chart(ctxpsales, { + type: 'bar', + data: { + labels: Names, + datasets: [{ + label: "S$ ", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: PSales, + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7, + + } + }], + yAxes: [{ + beginAtZero: true, + ticks: { + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function (value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + } + }); + + window.PopularProductChart = new Chart(ctxpopular, { + type: 'bar', + data: { + labels: Names, + datasets: [{ + label: "Sold", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: Sold, + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7, + + } + }], + yAxes: [{ + beginAtZero: true, + ticks: { + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function (value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + } + }); + +}) + +var getWishlistData = $.get('/datapipeline/myProductWishlist/' + seller_id) +var ctxwishlist = document.getElementById("WishlistedProductChart").getContext('2d'); +var Name = [] +var Wishlists = [] +getWishlistData.done(function (data) { + data.data.forEach(element => { + Name.push(element["Name"]) + Wishlists.push(element["Wishlistcount"]) + }); + + + window.myWishlistChart = new Chart(ctxwishlist, { + type: 'bar', + data: { + labels: Name, + datasets: [{ + label: "wishlisted", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: Wishlists, + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7, + + } + }], + yAxes: [{ + ticks: { + beginAtZero: true, + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function (value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + } + }); + +}) + +var getInventoryData = $.get('/datapipeline/InventoryReport') +var ctx6 = document.getElementById("InventoryReportBarchart"); +getInventoryData.done(function (data) { + var stock = [] + var name = [] + console.log(data.data) + data.data.forEach(element => { + stock.push(element["Stocks"]) + name.push(element["ProductName"]) + console.log(element["Stocks"]) + console.log("hi") + + }); + + var mybarChart = new Chart(ctx6, { + type: 'bar', + data: { + labels: name, + datasets: [{ + label: "Current Stock", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: stock, + }], + }, + options: { + maintainAspectRatio: false, + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + }) +}); \ No newline at end of file diff --git a/public/js/dynamic-weekchart.js b/public/js/dynamic-weekchart.js new file mode 100644 index 00000000..a0639a33 --- /dev/null +++ b/public/js/dynamic-weekchart.js @@ -0,0 +1,278 @@ +{/*
+
+
Revenue - {{user.name}}
+
+
+
+ +
+
+
+
Daily Revenue
+

Daily Revenue figures expressed in a line chart

+
+
+ +
+ + + + +
+
+
*/} +$(document).ready(function () { + setDate() + setTimeout(() => filterData(), 30); +}) +var seller_id = $("#seller_id").val() +var now = new Date(); +var dd = String(now.getDate()).padStart(2, '0'); +var mm = String(now.getMonth() + 1).padStart(2, '0'); //January is 0! +var yyyy = now.getFullYear(); + +const today = dd + '/' + mm + '/' + yyyy; +const lastweekdisplay = formatDate(getWeek(-1)); + +function number_format(number, decimals, dec_point, thousands_sep) { + // * example: number_format(1234.56, 2, ',', ' '); + // * return: '1 234,56' + number = (number + '').replace(',', '').replace(' ', ''); + var n = !isFinite(+number) ? 0 : +number, + prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), + sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, + dec = (typeof dec_point === 'undefined') ? '.' : dec_point, + s = '', + toFixedFix = function (n, prec) { + var k = Math.pow(10, prec); + return '' + Math.round(n * k) / k; + }; + // Fix for IE parseFloat(0.55).toFixed(0) = 0; + s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); + if (s[0].length > 3) { + s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); + } + if ((s[1] || '').length < prec) { + s[1] = s[1] || ''; + s[1] += new Array(prec - s[1].length + 1).join('0'); + } + return s.join(dec); +} +var getSalesPerDayData = $.get('/datapipeline/salesPerDay/' + seller_id) +var ctxsales = document.getElementById("SalesReportLineChart").getContext('2d'); +var Sales = [] +var dates = [] +const earliestDataset_Dates = dates[0] +const latestDataset_Dates = dates[-1] +getSalesPerDayData.done(function (data) { + data.data.forEach(element => { + Sales.push(element["Sales_sum"]) + dates.push(element["Dates"].slice(0, 10)) + }); + window.mySalesChart = new Chart(ctxsales, { + type: 'line', + data: { + labels: dates, + datasets: [{ + label: "Revenue Per Day", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223, 0.05)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: Sales, + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7, + + } + }], + yAxes: [{ + ticks: { + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function (value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function (tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + " " + number_format(tooltipItem.yLabel); + } + } + } + } + }); + +}) + +function getWeek(week) { + var noofdays = week * 6 + const now = new Date(); + return new Date(now.getFullYear(), now.getMonth(), now.getDate() + noofdays); +} + +function formatDate(date) { + var dd = String(date.getDate()).padStart(2, '0'); + var mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0! + var yyyy = date.getFullYear(); + const formattedweek = dd + '/' + mm + '/' + yyyy; + return formattedweek; +} + +var prev_btn = document.getElementById('prev-btn_sales'); +var next_btn = document.getElementById('next-btn_sales'); + +$(".previous-week").click(function () { + var val = $("#weekcount").val() + var weekcount = val - 1 + $("#weekcount").val(weekcount) + var week = $(".date-span").text().slice(0, 10) + var prevweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount - 1)) + } + $(".date-span").text(prevweek + " - " + week) + $("#prev").val(prevweek) + $("#next").val(week) + setTimeout(() => filterData(), 300); +}) + +$(".next-week").click(function () { + var val = $("#weekcount").val() + var weekcount = parseInt(val) + 1 + $("#weekcount").val(weekcount) + var week = $(".date-span").text().slice(-10) + var nextweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount + 1)) + } + $(".date-span").text(week + " - " + nextweek) + $("#prev").val(week) + $("#next").val(nextweek) + setTimeout(() => filterData(), 300); +}) + +function changeData(type, weekcountVal, dateSpan, prev, next, prev_btn, next_btn, list1, list2, chart) { + if (type == "prev") { + var val = $(weekcountVal).val() + var weekcount = val - 1 + $(weekcountVal).val(weekcount) + var week = $(dateSpan).text().slice(0, 10) + var prevweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount - 1)) + } + $(dateSpan).text(prevweek + " - " + week) + $(prev).val(prevweek) + $(next).val(week) + } else if (type == "next") { + var val = $(weekcountVal).val() + var weekcount = parseInt(val) + 1 + $(weekcountVal).val(weekcount) + var week = $(dateSpan).text().slice(-10) + var nextweek = formatDate(getWeek(weekcount)) + if (prevweek == week) { + var prevweek = formatDate(getWeek(weekcount + 1)) + } + $(dateSpan).text(week + " - " + nextweek) + $(prev).val(week) + $(next).val(nextweek) + } + setTimeout(() => filterData(prev_btn, next_btn,prev, next, list1, list2, chart), 300); +} + +function setDate() { + $(".date-span").text(lastweekdisplay + " - " + today) + $("#prev").val(lastweekdisplay) + $("#next").val(today) +} + +function filterData(prev_btn, next_btn, prevweek, nextweek, list1, list2, chart,date_span) { + var prev_btn = document.getElementById(prev_btn); + var next_btn = document.getElementById(next_btn); + var prevweek = $(prevweek).val(); + var nextweek = $(nextweek).val(); + const updated_dates = [...list1]; + const updated_sales = [...list2]; + + + var indexStart = updated_dates.indexOf(prevweek); + var indexEnd = updated_dates.indexOf(nextweek); + + if (indexStart < 0) { + indexStart = 0 + prev_btn.style.display = "none"; + } else { + prev_btn.style.display = ""; + } + if (!(indexEnd in updated_dates)) { + indexEnd = updated_dates.length - 1 + next_btn.style.display = "none"; + } else { + next_btn.style.display = ""; + } + + $(date_span).text("Daily Revenue figures from " + updated_dates[indexStart] + " - " + updated_dates[indexEnd]) + + const filterdata1 = updated_dates.slice(indexStart, indexEnd + 1); + const filterdata2 = updated_sales.slice(indexStart, indexEnd + 1); + var chart = chart + chart.data.labels = filterdata1; + chart.data.datasets[0].data = filterdata2; + chart.update(); +} diff --git a/public/pdfs/123.pdf b/public/pdfs/123.pdf new file mode 100644 index 00000000..457cce7e Binary files /dev/null and b/public/pdfs/123.pdf differ diff --git a/public/pdfs/User Satisfaction Report.pdf b/public/pdfs/User Satisfaction Report.pdf index 0fd60ea9..3bb07e5c 100644 Binary files a/public/pdfs/User Satisfaction Report.pdf and b/public/pdfs/User Satisfaction Report.pdf differ diff --git a/public/product_uploads/67831263.jfif b/public/product_uploads/67831263.jfif deleted file mode 100644 index da28bb7c..00000000 Binary files a/public/product_uploads/67831263.jfif and /dev/null differ diff --git a/public/scripts/admin/main.js b/public/scripts/admin/main.js index 2cc0bb31..91469846 100644 --- a/public/scripts/admin/main.js +++ b/public/scripts/admin/main.js @@ -1,40 +1,255 @@ -var $table = $('#reqTable') -var $editModal = $('#exampleModal') +var $table = $('table') +var $editModal = $('#editModal') +var $editApptModal = $('#editApptModal') var $delModal = $('#delModal') +var $delApptModal = $('#delApptModal') +var $tailorModal = $('#tailorModal') +var $editItemModal = $('#editItemModal') +var $removeItemModal = $('#delItemModal') +var $addItemModal = $('#addItemModal') +var $addApptModal = $('#addApptModal') -$(document).ready(function(){ - let data = {}; - $('.statusbtn').click(function() { - data = { - id: $(this).attr('data-bs-id'), - status: $(this).text() - } - +var $approveApptModal = $('#approveApptModal') +var $delModal = $('#delModal') +var $changeTailorModal = $('#changeTailorModal') +var $statusModal = $('#statusModal') +var $addItemModal = $('#addItemModal') +var $editItemModal = $('#editItemModal') +var $removeItemModal = $('#delItemModal') + +let datetime; + + +$(document).ready(function () { + $('.apprBtn').click(function () { + $('.apprBtn').removeClass("btn-success btn-primary") + $('.apprBtn').not($(this)).addClass("btn-primary") + $(this).addClass('btn-success') + $('[name="confirmed"]').val($(this).val()) + }) + + $("#approveApptModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + status: $('[name="confirmed"]').val(), + }; + $.post("/admin/appointment/status", data, function (result) { + $approveApptModal.modal('hide'); + location.reload() + }); + }); + + $('.status').click(function () { + $('.statusbtn').removeClass("btn-success btn-primary") + $('.statusbtn').addClass("btn-primary") + + $statusModal.find('.confirm').hide() + $statusModal.find('.confirm').removeAttr('data-bs-status') + $statusModal.find('.confirm').attr('data-bs-id', $(this).attr('data-bs-id')) + $('.statusbtn').parent().removeClass('d-grid') + $.get(`/api/appointment/${$(this).attr('data-bs-id')}`, ({ rows, confirmed }) => { + console.log(rows.length); + if (rows[0].request.adminstatus == 'In Progress') { + $('.statusbtn[value="Request Fitting Appointment"').parent().toggleClass('d-grid') + } else if (rows[0].request.adminstatus == 'In Progress' && confirmed > 1) { + $('.statusbtn[value="Request Fitting Appointment"').parent().toggleClass('d-grid') + $('.statusbtn[value="Finished Request"').parent().toggleClass('d-grid') + } else if (rows[0].request.adminstatus == 'Awaiting Fitting Appointment Booking') { + $('.statusbtn[value="Cancel Fitting Appointment Request"').parent().toggleClass('d-grid') + } else if (rows[0].confirmed == 'Confirmed') { + $('.statusbtn[value="Finished Appointment"').parent().toggleClass('d-grid') + } + }) + + }) + + $('.statusbtn').click(function () { + $statusModal.find('.confirm').attr("data-bs-status", $(this).val()) + $statusModal.find('.confirm').show() $('.statusbtn').removeClass("btn-success btn-primary") $('.statusbtn').not($(this)).addClass("btn-primary") $(this).addClass("btn-success") + }) - $(".confirm").click(function(){ - // console.log($(this).attr('data-bs-id')) - $.post("/admin/requests/edit", data, function() { - $editModal.modal('hide'); + $("#statusModal .confirm").click(function () { + let data = { + statusId: $(this).attr("data-bs-id"), + status: $(this).attr("data-bs-status") + } + console.log(data); + $.post("/admin/request/status", data, function (result) { + $statusModal.modal('hide'); + location.reload() + }); + }); + $('.change-tailor').click(function () { + $('#changeTailorModal').find('.confirm').attr('data-bs-id', $(this).attr('data-bs-id')) + $('#changeTailorModalLabel').text(`Confirm change of tailor to ${$(this).parentsUntil('card').find('.tailor-change-name').text()}?`) + }) + + $("#changeTailorModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + }; + console.log(data) + $.post("/admin/request/tailorChange", data, function (result) { + + $changeTailorModal.modal('hide'); + location.reload() + }); + }); + + + $("#editItemModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + name: $('[name="name"]', $editItemModal).val(), + type: $('[name="type"]', $editItemModal).val(), + color: $('[name="color"]', $editItemModal).val(), + description: $('textarea', $editItemModal).val(), + }; + + $.post("/services/item/edit", data, function (result) { + if (result.send) { + sendNotif('request:notif', 'Request Item Changed', `The request item in request ${data.id} was changed. Click here to see changes`, `/admin/requests`, ``, result.recipient) + } + $editItemModal.modal('hide'); $table.bootstrapTable('refresh'); }); }); - $('.del').click(function() { - // console.log($(this).attr('data-bs-id')) + $('.itemtable').on('load-success.bs.table', function (data) { + if ($(data.currentTarget).find('tbody tr').length > 2) { + console.log($(data.currentTarget).closest('.bootstrap-table').siblings('button')); + $(data.currentTarget).closest('.bootstrap-table').siblings('button').hide() + } + }) + + $('.del').click(function () { $.ajax({ - url: '/admin/requests/delete', + url: $(this).attr('data-bs-url'), type: 'DELETE', data: { id: $(this).attr('data-bs-id') }, success: (result) => { - $delModal.modal('hide'); + console.log(result) + $(this).closest('.modal').modal('hide'); $table.bootstrapTable('refresh') + if (result.send) { + sendNotif('request:notif', result.title, result.body, result.url, '', result.to) + } + location.reload() } - }); + }); + + }); + + $('.delete').click(function () { + $('#delModal').find('.del').attr('data-bs-id', $(this).attr('data-bs-id')) + }) + + + + $('.edit').click(function () { + let s = $(this).closest('.card').find('.req-title').text() + s = s.split(' - ') + $('#editModal').find('input[name=title]').val(s[1]) + $('#editModal').find(`option`).attr("selected", false) + $('#editModal').find(`textarea`).text($(this).closest('.card').find('.req-description').text().trim()) + $('#editModal').find(`option:contains("${s[0]}")`).attr("selected", '') + + $('#editModal').find('.btn.confirm').attr('data-bs-id', $(this).attr('data-bs-id')) + + }) + + $('.edit-tailor').click(function () { + $('#tailorModal').find('[name="tailor"]').val($(this).attr('data-bs-id')) + $('#tailorModal').find('.confirm').attr('data-bs-reqid', $(this).attr('data-bs-reqid')) }) -}); \ No newline at end of file + + $('.cancel-tailor').click(function () { + $('#cancelTailorModal').find('.del').attr('data-bs-id', $(this).attr('data-bs-id')) + }) + + // $('input[name=date]').change(function () { + + // let owndate = [$(this).val(), $(this).closest('.modal-body').find('[name=time]').val()] + // $('input[name="time"]').val('') + // let tailorId = $(this).closest('.modal-body').find('[name=tailorID]').val() + // let date = $(this).val() + // $.get(`/api/appointments?date=${date}&id=${tailorId}`, function (data) { + // data = data.rows + // var timings = ` + //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ //
+ // + // ` + // $('.timings').empty() + // $('.timings').append(timings) + // data.forEach(appt => { + // console.log([appt.date, appt.time], owndate); + // if ([appt.date, appt.time] == owndate) { + // $(`[value="${appt.time}"]`).addClass('btn-success') + // $(`[value="${appt.time}"]`).removeClass('btn-primary') + // } else { + // $(`[value="${appt.time}"]`).attr('disabled', '') + // } + // }); + // // console.log($('.timings button')) + + // }) + // }) + + + +}); +window.operateEvents = { + + 'click [title="Approve Appointment"]': function (e, value, row, index) { + $approveApptModal.find(`.apprBtn`).removeClass('btn-success btn-primary') + $approveApptModal.find(`.apprBtn`).addClass('btn-primary') + $approveApptModal.find('.confirm').attr('data-bs-id', row.id) + $approveApptModal.find(`.apprBtn[value="${row.confirmed}"]`).addClass('btn-success') + $approveApptModal.find(`.apprBtn[value="${row.confirmed}"]`).removeClass('btn-primary') + $('[name="confirmed"]').val(row.confirmed) + $approveApptModal.modal("show") + + }, + +} + +window.itemoperateEvents = { + 'click [title="Edit Item"]': function (e, value, row, index) { + $editItemModal.find('[name="name"]').val(row.name) + $editItemModal.find('[name="type"]').val(row.type) + $editItemModal.find('[name="color"]').val(row.color) + $editItemModal.find('[name="description"]').val(row.description) + + + $editItemModal.find('.confirm').attr('data-bs-id', row.id) + $editItemModal.modal("show") + }, +} diff --git a/public/scripts/admin/main_.js b/public/scripts/admin/main_.js new file mode 100644 index 00000000..2cc0bb31 --- /dev/null +++ b/public/scripts/admin/main_.js @@ -0,0 +1,40 @@ +var $table = $('#reqTable') +var $editModal = $('#exampleModal') +var $delModal = $('#delModal') + +$(document).ready(function(){ + let data = {}; + $('.statusbtn').click(function() { + data = { + id: $(this).attr('data-bs-id'), + status: $(this).text() + } + + $('.statusbtn').removeClass("btn-success btn-primary") + $('.statusbtn').not($(this)).addClass("btn-primary") + $(this).addClass("btn-success") + }) + + $(".confirm").click(function(){ + // console.log($(this).attr('data-bs-id')) + $.post("/admin/requests/edit", data, function() { + $editModal.modal('hide'); + $table.bootstrapTable('refresh'); + }); + }); + + $('.del').click(function() { + // console.log($(this).attr('data-bs-id')) + $.ajax({ + url: '/admin/requests/delete', + type: 'DELETE', + data: { + id: $(this).attr('data-bs-id') + }, + success: (result) => { + $delModal.modal('hide'); + $table.bootstrapTable('refresh') + } + }); + }) +}); \ No newline at end of file diff --git a/public/scripts/admin/main__.js b/public/scripts/admin/main__.js new file mode 100644 index 00000000..3abb38cc --- /dev/null +++ b/public/scripts/admin/main__.js @@ -0,0 +1,120 @@ +var $approveApptModal = $('#approveApptModal') +var $delModal = $('#delModal') +var $changeTailorModal = $('#changeTailorModal') +var $statusModal = $('#statusModal') +var $addItemModal = $('#addItemModal') +var $editItemModal = $('#editItemModal') +var $removeItemModal = $('#delItemModal') + + +$(document).ready(function () { + + $('.apprBtn').click(function () { + $('.apprBtn').removeClass("btn-success btn-primary") + $('.apprBtn').not($(this)).addClass("btn-primary") + $(this).addClass('btn-success') + $('[name="confirmed"]').val($(this).val()) + }) + + $("#approveApptModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + status: $('[name="confirmed"]').val(), + }; + $.post("/admin/appointment/status", data, function (result) { + $approveApptModal.modal('hide'); + location.reload() + }); + }); + + $('.change-tailor').click(function () { + $('#changeTailorModal').find('.confirm').attr('data-bs-id', $(this).attr('data-bs-id')) + $('#changeTailorModalLabel').text(`Confirm change of tailor to ${$(this).parentsUntil('card').find('.tailor-change-name').text()}?`) + }) + + $("#changeTailorModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + }; + console.log(data) + $.post("/admin/request/tailorChange", data, function (result) { + + $changeTailorModal.modal('hide'); + location.reload() + }); + }); + + $('.del').click(function () { + $.ajax({ + url: $(this).attr('data-bs-url'), + type: 'DELETE', + data: { + id: $(this).attr('data-bs-id') + }, + success: (result) => { + $(this).closest('.modal').modal('hide'); + location.reload() + } + }); + }); + + $('.delete').click(function () { + $delModal.find('.del').attr('data-bs-id', $(this).attr('data-bs-id')) + }) + + $('.status').click(function () { + let data = { + statusId: $(this).attr('data-bs-id') + } + $('.statusbtn').click(function() { + + data.status = $(this).val() + + $('.statusbtn').removeClass("btn-success btn-primary") + $('.statusbtn').not($(this)).addClass("btn-primary") + $(this).addClass("btn-success") + + $("#statusModal .confirm").click(function () { + $.post("/admin/request/status", data, function (result) { + $statusModal.modal('hide'); + location.reload() + }); + }); + }) + }) + + + + + +}); +window.operateEvents = { + + 'click [title="Approve Appointment"]': function (e, value, row, index) { + $approveApptModal.find(`.apprBtn`).removeClass('btn-success btn-primary') + $approveApptModal.find(`.apprBtn`).addClass('btn-primary') + $approveApptModal.find('.confirm').attr('data-bs-id', row.id) + $approveApptModal.find(`.apprBtn[value="${row.confirmed}"]`).addClass('btn-success') + $approveApptModal.find(`.apprBtn[value="${row.confirmed}"]`).removeClass('btn-primary') + $('[name="confirmed"]').val(row.confirmed) + $approveApptModal.modal("show") + + }, + +} +window.itemoperateEvents = { + 'click [title="Remove Item"]': function (e, value, row, index) { + $removeItemModal.find('.del').attr('data-bs-id', row.id) + $removeItemModal.modal("show") + }, + 'click [title="Edit Item"]': function (e, value, row, index) { + $editItemModal.find('[name="name"]').val(row.name) + $editItemModal.find('[name="type"]').val(row.type) + $editItemModal.find('[name="color"]').val(row.color) + $editItemModal.find('[name="description"]').val(row.description) + + + $editItemModal.find('.confirm').attr('data-bs-id', row.id) + $editItemModal.modal("show") + }, +} \ No newline at end of file diff --git a/public/scripts/admin/tableFormatters.js b/public/scripts/admin/tableFormatters.js index 47ef8599..d83899b0 100644 --- a/public/scripts/admin/tableFormatters.js +++ b/public/scripts/admin/tableFormatters.js @@ -1,12 +1,53 @@ + + function operateFormatter(value, row) { + if (row.confirmed == "Pending") { + btnOptions = ['secondary', 'dash','title="Approve Appointment"' ] + } else if (row.confirmed == "Confirmed") { + btnOptions = ['success pe-none', 'check', 'onclick="return false;"'] + } else { + btnOptions = ['danger pe-none', 'x', 'onclick="return false;"'] + } return [ - '
', - `', - '', - '
' - ].join('') + `
`, + ``, + `
`, + ].join('') } + + +function itemoperateFormatter(value, row) { + return [ + `
`, + ``, + `
`, + ].join('') +} + +function qtyFormatter(value, row) { + return `` +} + +function colorFormatter(value, row) { + if (value.startsWith('#') && value.length == 7) { + return `` + } else { + return value + } +} + + +function rowStyle(row, index) { + if (row.confirmed == "Pending") { + return { + classes: 'table-warning' + } + } else if (row.confirmed == "Rejected") { + return { classes: 'table-danger' } + } else { + + return { classes: 'table-success' } + } + + +} \ No newline at end of file diff --git a/public/scripts/admin/tableFormatters_.js b/public/scripts/admin/tableFormatters_.js new file mode 100644 index 00000000..7d6334d3 --- /dev/null +++ b/public/scripts/admin/tableFormatters_.js @@ -0,0 +1,9 @@ +function operateFormatter(value, row) { + return [ + '
', + `', + '
' + ].join('') +} diff --git a/public/scripts/admin/tableFormatters__.js b/public/scripts/admin/tableFormatters__.js new file mode 100644 index 00000000..08a6e004 --- /dev/null +++ b/public/scripts/admin/tableFormatters__.js @@ -0,0 +1,14 @@ +function operateFormatter(value, row) { + if (row.confirmed === null) { + btnOptions = ['secondary', 'dash','title="Approve Appointment"' ] + } else if (row.confirmed) { + btnOptions = ['success pe-none', 'check', 'onclick="return false;"'] + } else { + btnOptions = ['danger pe-none', 'x', 'onclick="return false;"'] + } + return [ + `
`, + ``, + `
`, + ].join('') +} diff --git a/public/scripts/cart.js b/public/scripts/cart.js index 813c8cea..64e41335 100644 --- a/public/scripts/cart.js +++ b/public/scripts/cart.js @@ -1,4 +1,4 @@ -$(document).ready (function() { +$(document).ready(function () { var quantityInputs = document.getElementsByClassName('cart-quantity-input') for (var i = 0; i < quantityInputs.length; i++) { var input = quantityInputs[i] @@ -12,34 +12,20 @@ $(document).ready (function() { } updateCartTotal() - }) function addtocartClicked(element) { var item = element.value; console.log(item) $.post("/addtoCart", - { - sku: item - }) + { + sku: item + }) } - -// function addtocartClicked(element) { -// var item = element.value; -// console.log(item) - -// $.ajax({ -// url: '/addtoCart', -// method: 'POST', -// contentType: 'application/json', -// data: JSON.stringify({sku: item}) -// }) -// } - -function disc(){ +function disc() { var discountamount = $('.cart-discount').text().replace('%', '') var subtotal = $('.cart-total-price').text().replace('S$', '') - subtotal = ((subtotal/100) * (100- discountamount)).toFixed(2) + subtotal = ((subtotal / 100) * (100 - discountamount)).toFixed(2) document.getElementsByClassName('cart-grandtotal-price')[0].innerText = 'S$' + subtotal } @@ -55,39 +41,44 @@ function quantityChanged(event) { function updateCartTotal() { - var cartItemContainer = document.getElementsByClassName('cart-items')[0] - var cartRows = cartItemContainer.getElementsByClassName('cart-row') - var subtotal = 0 - for (var i = 0; i < cartRows.length; i++) { - var cartRow = cartRows[i] - var priceElement = cartRow.getElementsByClassName('cart-price')[0] - var quantityElement = cartRow.getElementsByClassName('cart-quantity-input')[0] - var price = parseFloat(priceElement.innerText.replace('S$', '')) - var quantity = quantityElement.value - total = price * quantity - subtotal = subtotal + (price * quantity) - var points = document.getElementsByClassName('vouchers-points').innerText + var cartDisplay = $(".cart-display").val() + console.log(cartDisplay) + if (cartDisplay == 1) { + var cartItemContainer = document.getElementsByClassName('cart-items')[0] + var cartRows = cartItemContainer.getElementsByClassName('cart-row') + var subtotal = 0 + for (var i = 0; i < cartRows.length; i++) { + var cartRow = cartRows[i] + var priceElement = cartRow.getElementsByClassName('cart-price')[0] + var quantityElement = cartRow.getElementsByClassName('cart-quantity-input')[0] + var price = parseFloat(priceElement.innerText.replace('S$', '')) + var quantity = quantityElement.value + total = price * quantity + subtotal = subtotal + (price * quantity) + var points = document.getElementsByClassName('vouchers-points').innerText - cartRow.getElementsByClassName('cart-total')[0].innerText = 'S$' + total - } - subtotal = Math.round(subtotal * 100) / 100 - document.getElementsByClassName('cart-total-price')[0].innerText = 'S$' + subtotal - document.getElementsByClassName('cart-grandtotal-price')[0].innerText = 'S$' + subtotal - var checkout = document.getElementById('checkout') - if(subtotal == 0) { + cartRow.getElementsByClassName('cart-total')[0].innerText = 'S$' + total + } + subtotal = Math.round(subtotal * 100) / 100 + document.getElementsByClassName('cart-total-price')[0].innerText = 'S$' + subtotal + document.getElementsByClassName('cart-grandtotal-price')[0].innerText = 'S$' + subtotal + } else if (cartDisplay == 0) { + var checkout = document.getElementById('checkout') + var discButton = document.getElementById('apply-discount-button') checkout.disabled = true; + discButton.disabled = true; new SnackBar({ - message: "You need atleast one product in yout cart to checkout", + message: "You need atleast one product in your cart to checkout", status: "info", fixed: true, dismissible: false, timeout: false }) } - + } -$('.cart-quantity-input').change(function() { +$('.cart-quantity-input').change(function () { var sku = $(this).next().val() var quantity = $(this).val() console.log(quantity) @@ -95,32 +86,22 @@ $('.cart-quantity-input').change(function() { // var subtotal = $(this).parent('div').parent('div').parent('div').parent('div').parent('div').next().children().next().children().next().children().find('cart-total-price').text() $.post('updateCart', { sku: sku, - quantity : quantity, - }) + quantity: quantity, + }) disc() + setTimeout(() => checkoutsave(), 50); }) -$('.apply-discount-button').click(function() { +$('.apply-discount-button').click(function () { var discountcode = document.getElementsByClassName('discount-input')[0].value var discount_card = document.getElementById('discount-card') console.log(discountcode) - // if (discountcode != localStorage.getItem('discountcode')) { - // console.log(discountcode) - // $.getJSON('/transactions/discount', { - // discount_code: discountcode - // }, function(data) { - // console.log(data) - // $('.cart-discount').text(data.discountcode + "%") - // $('.flash').text(data.flash) - // disc() - // }) - // } $.ajax({ url: "/discount", method: 'POST', contentType: "application/json", - data: JSON.stringify({code : discountcode, status : "check"}), - success: function(res){ + data: JSON.stringify({ code: discountcode, status: "check" }), + success: function (res) { if (res.status == "success") { new SnackBar({ message: "Discount has been applied!", @@ -129,7 +110,9 @@ $('.apply-discount-button').click(function() { }) discount_card.style.display = ""; $('.cart-discount').text(res.discount_amount + "%") - localStorage.setItem("discount_amount",res.discount_amount) + console.log(discountcode) + $('#discount_code_entered').val(discountcode) + localStorage.setItem("discount_amount", res.discount_amount) disc() } else if (res.status == "spools_shortage") { new SnackBar({ @@ -139,6 +122,7 @@ $('.apply-discount-button').click(function() { }) discount_card.style.cssText = "display:none !important;"; $('.cart-discount').text(0 + "%") + $('#discount_code_entered').val("") localStorage.setItem("discount_amount", "") disc() } else if (res.status == "voucher_expired") { @@ -149,6 +133,7 @@ $('.apply-discount-button').click(function() { }) discount_card.style.cssText = "display:none !important;"; $('.cart-discount').text(0 + "%") + $('#discount_code_entered').val("") localStorage.setItem("discount_amount", "") disc() } else if (res.status == "voucher_ran_out") { @@ -159,6 +144,7 @@ $('.apply-discount-button').click(function() { }) discount_card.style.cssText = "display:none !important;"; $('.cart-discount').text(0 + "%") + $('#discount_code_entered').val("") localStorage.setItem("discount_amount", "") disc() } else if (res.status == "no_such_voucher") { @@ -169,6 +155,7 @@ $('.apply-discount-button').click(function() { }) discount_card.style.cssText = "display:none !important;"; $('.cart-discount').text(0 + "%") + $('#discount_code_entered').val("") localStorage.setItem("discount_amount", "") disc() } else { @@ -179,33 +166,51 @@ $('.apply-discount-button').click(function() { }) discount_card.style.cssText = "display:none !important;"; $('.cart-discount').text(0 + "%") + $('#discount_code_entered').val("") localStorage.setItem("discount_amount", "") disc() } + setTimeout(() => checkoutsave(), 50); } }) }) -$('.checkout').click(function() { +$('.checkout').click(function () { + checkoutsave() + // var subtotal = $('.cart-grandtotal-price').text().replace('S$', '') + // var discount_code = $('#discount_code_entered').val() + // // localStorage.setItem('total',subtotal) + // console.log(subtotal) + // console.log(discount_code) + + // $.post('/checkoutsave', { + // subtotal : subtotal, + // discount_code : discount_code + // }) +}) +function checkoutsave() { var subtotal = $('.cart-grandtotal-price').text().replace('S$', '') + var discount_code = $('#discount_code_entered').val() localStorage.setItem('total',subtotal) console.log(subtotal) + console.log(discount_code) - $.getJSON('/transactions/update_total', { - subtotal : subtotal, + $.post('/checkoutsave', { + subtotal: subtotal, + discount_code: discount_code }) -}) +} -$('.show-item').click(function() { +$('.modal-opener').click(function () { var sku = this.value var ele = $(this).parent("div").next().find(".wishlist") - console.log(sku) + console.log(ele) $.ajax({ url: "/wishlist", method: 'POST', contentType: "application/json", - data: JSON.stringify({sku : sku, status : "check"}), - success: function(res){ + data: JSON.stringify({ sku: sku, status: "check" }), + success: function (res) { if (res.response == 'add' && res.status == "check") { ele.addClass("bxs-bookmark-heart") // console.log("added") @@ -215,9 +220,35 @@ $('.show-item').click(function() { } } }) + + $.ajax({ + url: "/reviewUpdate", + method: 'POST', + contentType: "application/json", + data: JSON.stringify({ sku: sku , status:"modal"}), + success: function (res) { + var avgrating = res.starAvg + var roundedrating = res.roundedAvg + var reviewContainer = document.getElementById('review_'+sku) + var int = Math.floor(roundedrating) + console.log(roundedrating) + console.log(avgrating) + var stars = reviewContainer.getElementsByClassName('review-star') + var n = 0 + for (var i = 0; i < int; i++) { + var star = stars[i] + star.classList.add('bxs-star') + n++ + } + if (roundedrating > int && int <= 5) { + var star = stars[n] + star.classList.add("bxs-star-half") + } + } + }) }) -$(".delete-item-button").mouseenter(function() { +$(".delete-item-button").one("mouseenter", function () { new SnackBar({ message: "Clicking this will delete this item", status: "info", @@ -225,7 +256,7 @@ $(".delete-item-button").mouseenter(function() { }) }) -$(".delete-cart").mouseenter(function() { +$(".delete-cart").one("mouseenter", function () { new SnackBar({ message: "Clicking this will delete the cart", status: "error", @@ -234,51 +265,55 @@ $(".delete-cart").mouseenter(function() { }) function wishList(element) { - // element.classList.toggle("bxs-bookmark-heart") element.classList.add("bx-tada") var sku = element.value - - // $.post('wishlist', { - // sku: sku - // }) + console.log(sku) $.ajax({ url: "/wishlist", method: 'POST', contentType: "application/json", - data: JSON.stringify({sku : sku, status : "add/remove"}), - success: function(res){ + data: JSON.stringify({ sku: sku, status: "add/remove" }), + success: function (res) { if (res.response == 'add' && res.status == "add/remove") { element.classList.add("bxs-bookmark-heart") new SnackBar({ - message:"Item has been added to your wishlist!", + message: "Item has been added to your wishlist!", status: "info", - fixed : true + fixed: true }) - } else if (res.response == 'remove' && res.status == "add/remove"){ + } else if (res.response == 'remove' && res.status == "add/remove") { element.classList.remove("bxs-bookmark-heart") new SnackBar({ - message:"Item has been removed from your wishlist!", + message: "Item has been removed from your wishlist!", status: "info", - fixed : true + fixed: true }) } } }) - + if (element.classList.contains("bx-tada")) { setTimeout(() => element.classList.remove('bx-tada'), 1100); } - // if (element.classList.contains("bxs-bookmark-heart")) { - // new SnackBar({ - // message:"Item has been added to your wishlist!", - // status: "info", - // fixed : true - // }) - // } else { - // new SnackBar({ - // message:"Item has been removed from your wishlist!", - // status: "info", - // fixed : true - // }) - // } +} + + +function wishLists(element) { + var sku = element.value + console.log(sku) + $.ajax({ + url: "/wishlist", + method: 'POST', + contentType: "application/json", + data: JSON.stringify({ sku: sku, status: "add/remove" }), + success: function (res) { + if (res.response == 'remove' && res.status == "add/remove") { + new SnackBar({ + message: "Item has been removed from your wishlist!", + status: "info", + fixed: true + }) + } + } + }) } \ No newline at end of file diff --git a/public/scripts/payment.js b/public/scripts/payment.js index 949fda5b..cfab6075 100644 --- a/public/scripts/payment.js +++ b/public/scripts/payment.js @@ -25,7 +25,7 @@ document.querySelector('.card-number-input').oninput = () => { } else { card_type.forEach(element => { - element.src ='images/all3.png' + element.src = 'images/all3.png' }); // document.querySelector('.card-number-box').innerText = '################' @@ -84,4 +84,142 @@ if (total <= 75) { total = (Math.round(total * 100) / 100).toFixed(2); document.getElementsByClassName('shipping-fee')[0].innerText = 'FREE' document.getElementsByClassName('cart-grandtotal-price')[0].innerText = 'S$' + total -} \ No newline at end of file +} + + +function checkoutcheck() { + var fname = document.getElementById('fname').value + var email = document.getElementById('email').value + var phone = document.getElementById('phone').value + var address = document.getElementById('address').value + var unit_number = document.getElementById('unit_number').value + var postalcode = document.getElementById('postalcode').value + fetch("http://localhost:5000/checkout", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + fname: fname, + email: email, + phone: phone, + address: address, + unit_number: unit_number, + postal_code: postalcode + }), + }) + .then(res => { + if (res.ok) return res.json() + return res.json().then(json => Promise.reject(json)) + }) + .then(({ url }) => { + window.location = url + }) + .catch(e => { + console.error(e.error) + }) +} + + +// function checkoutcheck() { +// var fname = document.getElementById('fname').value +// var email = document.getElementById('email').value +// var phone = document.getElementById('phone').value +// var address = document.getElementById('address').value +// var unit_number = document.getElementById('unit_number').value +// var postalcode = document.getElementById('postalcode').value +// var cname = document.getElementById('name').value +// var card_number = document.getElementById('cardnumber').value +// var expiration_date = document.getElementById('expirationdate').value +// var securitycode = document.getElementById('securitycode').value + + +// $.ajax({ +// url: "/checkout", +// method: 'POST', +// contentType: "application/json", +// data: JSON.stringify({ +// fname: fname, +// email: email, +// phone: phone, +// address: address, +// unit_number: unit_number, +// postal_code: postalcode, +// cname: cname, +// card_number: card_number, +// expiration_date: expiration_date, +// securitycode: securitycode +// }), +// success: function (res) { +// if (res.status == "error") { +// if (res) { +// Swal.fire({ +// icon: res.icon, +// title: res.title, +// text: res.message +// }) +// } +// } +// } +// }) +// .then(res => { +// if (res.ok) return res.json() +// return res.json().then(json => Promise.reject(json)) +// }) +// .then(({ url }) => { +// window.location = url +// }) +// .catch(e => { +// console.error(e.error) +// }) +// } +// function checkoutcheck() { +// var fname = document.getElementById('fname').value +// var email = document.getElementById('email').value +// var phone = document.getElementById('phone').value +// var address = document.getElementById('address').value +// var unit_number = document.getElementById('unit_number').value +// var postalcode = document.getElementById('postalcode').value +// var cname = document.getElementById('name').value +// var card_number = document.getElementById('cardnumber').value +// var expiration_date = document.getElementById('expirationdate').value +// var securitycode = document.getElementById('securitycode').value + + +// $.ajax({ +// url: "/checkout", +// method: 'POST', +// contentType: "application/json", +// data: JSON.stringify({ +// fname : fname, +// email : email, +// phone : phone, +// address : address, +// unit_number : unit_number, +// postal_code : postalcode, +// cname: cname, +// card_number: card_number, +// expiration_date: expiration_date, +// securitycode: securitycode +// }), +// success: function(res) { +// if (res.status == "error") { +// if(res) { +// Swal.fire({ +// icon: res.icon, +// title: res.title, +// text: res.message +// }) +// } +// } else{ +// Swal.fire({ +// icon: res.icon, +// title: res.title +// }).then(function(){ +// location.replace("/") +// }) +// } +// } + +// }) +// } \ No newline at end of file diff --git a/public/scripts/services/datapicker.js b/public/scripts/services/datapicker.js index 67ef2adc..76efae37 100644 --- a/public/scripts/services/datapicker.js +++ b/public/scripts/services/datapicker.js @@ -1,34 +1,73 @@ -$('input[name=date]').change(function () { - // console.log(this.value) - $.get(`/api/appointments/${this.value}`, function (data) { +function timeClick() { + $('.datapicker').find('.timings button').click(function () { + $('.datapicker').find('.timings button').removeClass('btn-success') + $(this).addClass('btn-success') + $('.datapicker').find('.timings button').not($(this)).addClass('btn btn-lg btn-primary') + $('.datapicker').find('input[name="time"]').val(this.value) + // console.log($('input[name="time"]')) + $('.datapicker').find('.timelabel').text(`${$('.datapicker').find('input[name="date"]').val()} ${$('.datapicker').find('input[name="time"]').val()}`) + + }) + $('.datapicker').find('.timelabel').text(`${$('.datapicker').find('input[name="date"]').val()} ${$('.datapicker').find('input[name="time"]').val()}`) + + $('.datapicker').find(`[value="${$('.timelabel').text().split(' ')[1]}"]`).addClass('btn-success') + $('.datapicker').find(`[value="${$('.timelabel').text().split(' ')[1]}"]`).removeClass('btn-primary') + + +} + +function getTimings() { + $.get(`/api/appointments?date=${$('.datapicker').find('input[name=date]').val()}&id=${$('.datapicker').find('[name=tailorID]').val()}`, function (data) { data = data.rows + console.log(data) var timings = ` - -
-
- - - - - - +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
-
- ` - $('.timings').empty() - $('.timings').append(timings) + $('.datapicker').find('.timings').empty() + $('.datapicker').find('.timings').append(timings) data.forEach(appt => { - $(`[value="${appt.time}"]`).attr('disabled','') + $('.datapicker').find(`[value="${appt.time}"]`).attr('disabled', '') }); // console.log($('.timings button')) - $('.timings button').click(function() { - $('.timings button').removeClass('btn-success') - $(this).addClass('btn-success') - $('.timings button').not($(this)).addClass('btn-primary') - $('input[name="time"]').val(this.value) - // console.log($('input[name="time"]')) - }) - }) - + + }).then(timeClick) + +} + + +$('.datapicker').find('input[name=date]').change(function() { + // $('input[name="time"]').val('') + console.log($('[name=tailorID]').val()) + if($('[name=tailorID]').val() != "Select Tailor") { + getTimings() + } +}) +$('.datapicker').find('[name=tailorID]').change(function() { + $('input[name="time"]').val('') + console.log($('input[name=date]').val()) + if($('input[name=date]').val()) { + getTimings() + } }) diff --git a/public/scripts/services/datapickerRequest.js b/public/scripts/services/datapickerRequest.js new file mode 100644 index 00000000..db03588c --- /dev/null +++ b/public/scripts/services/datapickerRequest.js @@ -0,0 +1,75 @@ +function RtimeClick() { + $('.editApptpicker').find('.timings button').click(function () { + $('.editApptpicker').find('.timings button').removeClass('btn-success btn-outline-success') + $(this).addClass('btn-success') + $('.ori').not($(this)).addClass('btn-outline-success') + $('.editApptpicker').find('.timings button').not($(this)).not('.ori').addClass('btn btn-lg btn-primary') + $('.editApptpicker').find('input[name="time"]').val(this.value) + // console.log($('input[name="time"]')) + $('.editApptpicker').find('.timelabel').text(`${$('.editApptpicker').find('input[name="date"]').val()} ${$('.editApptpicker').find('input[name="time"]').val()}`) + }) + $('.editApptpicker').find('.timelabel').text(`${$('.editApptpicker').find('input[name="date"]').val()} ${$('.editApptpicker').find('input[name="time"]').val()}`) + + $('.editApptpicker').find(`[value="${$('.timelabel').text().split(' ')[1]}"]`).addClass('btn-success') + $('.editApptpicker').find(`[value="${$('.timelabel').text().split(' ')[1]}"]`).removeClass('btn-primary') + $('.editApptpicker').find(`[value="${$('.timelabel').text().split(' ')[1]}"]`).removeClass('btn-outline-success') + +} + +function RgetTimings() { + $.get(`/api/appointments?date=${$('.editApptpicker').find('input[name=date]').val()}&id=${$('.editApptpicker').find('[name=tailorID]').val()}`, function (data) { + data = data.rows + // console.log(data) + var timings = ` +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ ` + $('.editApptpicker').find('.timings').empty() + $('.editApptpicker').find('.timings').append(timings) + data.forEach(appt => { + if ($('.editApptpicker').find('input[name="date"]').val() == datetime[0] && $('.editApptpicker').find(`[value="${appt.time}"]`).val() == datetime[1]) { + $('.editApptpicker').find(`[value="${appt.time}"]`).addClass('btn-outline-success') + $('.editApptpicker').find(`[value="${appt.time}"]`).addClass('ori') + $('.editApptpicker').find(`[value="${appt.time}"]`).removeClass('btn-primary') + } else { + $('.editApptpicker').find(`[value="${appt.time}"]`).attr('disabled', '') + } + }); + + // console.log($('.timings button')) + + }).then(RtimeClick) + +} + + +$('.editApptpicker').find('input[name=date]').change(function () { + // $('input[name="time"]').val('') + console.log($('[name=tailorID]').val()) + if ($('[name=tailorID]').val() != "Select Tailor") { + RgetTimings() + } + +}) + diff --git a/public/scripts/services/main.js b/public/scripts/services/main.js index 400a5e89..628296d1 100644 --- a/public/scripts/services/main.js +++ b/public/scripts/services/main.js @@ -1,38 +1,378 @@ -var $table = $('#reqTable') -var $editModal = $('#exampleModal') +var $table = $('table') +var $editModal = $('#editModal') +var $editApptModal = $('#editApptModal') var $delModal = $('#delModal') +var $delApptModal = $('#delApptModal') +var $tailorModal = $('#tailorModal') +var $editItemModal = $('#editItemModal') +var $removeItemModal = $('#delItemModal') +var $addItemModal = $('#addItemModal') +var $addApptModal = $('#addApptModal') +let datetime; -$(document).ready(function(){ - - $(".confirm").click(function(){ + +$(document).ready(function () { + $("#tailorModal .confirm").click(function () { + console.log($(this).attr("data-bs-reqid")) + let data = { + id: $(this).attr("data-bs-reqid"), + tailorId: $tailorModal.find('select').val() + }; + $.post("/services/request/tailorChange", data, function (result) { + if (result.send) { + sendNotif('request:notif', "Tailor Change", `Customer ${result.by} wants to change their tailor from you to ${result.to}`, '/admin/requests', '', result.from) + } + $tailorModal.modal('hide'); + $table.bootstrapTable('refresh'); + location.reload() + }); + }); + + $("#editModal .confirm").click(function () { let data = { id: $(this).attr("data-bs-id"), title: $('input', $editModal).val(), description: $('textarea', $editModal).val(), service: $('[name=service]', $editModal).val() }; - console.log(data) - $.post("/services/request/edit", data, function(result) { + $.post("/services/request/edit", data, function (result) { + if (result.send) { + sendNotif('request:notif', "Request Changes", `Customer ${result.by} changed their request details of ID ${result.id}. Click here to see them.`, '/admin/requests', '', result.to) + } $editModal.modal('hide'); $table.bootstrapTable('refresh'); + location.reload() + + }); + }); + + $("#editApptModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + date: $('[name=date]', $editApptModal).val(), + time: $('[name=time]', $editApptModal).val(), + description: $('textarea', $editApptModal).val(), + }; + $.post("/services/appointment/edit", data, function (result) { + if (result.send) { + sendNotif('request:notif', "Appointment Changes", `Customer ${result.by} changed their appointment details. Click here to see them.`, '/admin/requests', '', result.to) + } + $editApptModal.modal('hide'); + $table.bootstrapTable('refresh'); + }); + }); + + $("#editItemModal .confirm").click(function () { + let data = { + id: $(this).attr("data-bs-id"), + name: $('[name="name"]', $editItemModal).val(), + type: $('[name="type"]', $editItemModal).val(), + color: $('[name="color"]', $editItemModal).val(), + description: $('textarea', $editItemModal).val(), + }; + + $.post("/services/item/edit", data, function (result) { + if (result.send) { + sendNotif('request:notif', 'Request Item Changed', `The request item in request ${data.id} was changed. Click here to see changes`, `/admin/requests`, ``, result.recipient) + } + $editItemModal.modal('hide'); + $table.bootstrapTable('refresh'); }); }); - $('.del').click(function() { - // console.log($(this).attr('data-bs-id')) + $('.itemtable').on('load-success.bs.table', function (data) { + if ($(data.currentTarget).find('tbody tr').length > 2) { + console.log($(data.currentTarget).closest('.bootstrap-table').siblings('button')); + $(data.currentTarget).closest('.bootstrap-table').siblings('button').hide() + } + }) + + $('[title="Add Item"]').click(function () { + $addItemModal.find('.confirm').attr('data-bs-id', $(this).attr('data-bs-id')) + $addItemModal.modal("show") + }) + + $('#addItemModal .confirm').click(function () { + let data = { + id: $(this).attr("data-bs-id"), + name: $('[name="name"]', $addItemModal).val(), + type: $('[name="type"]', $addItemModal).val(), + color: $('[name="color"]', $addItemModal).val(), + description: $('textarea', $addItemModal).val(), + }; + $.post("/services/item/add", data, function (result) { + if (result.send) { + sendNotif('request:notif', 'Request Item Added', `A request item in request ${data.id} was added. Click here to see it`, `/admin/requests`, ``, result.recipient) + } + $editItemModal.modal('hide'); + $table.bootstrapTable('refresh'); + }); + + $('[name="name"]', $addItemModal).val('') + $('[name="type"]', $addItemModal).val('') + $('[name="color"]', $addItemModal).val('') + $('textarea', $addItemModal).val('') + $addItemModal.modal('hide') + location.reload() + + }) + + $('[href="#addApptModal"]').click(function () { + let today = new Date() + $addApptModal.find('.confirm').attr('data-bs-id', $(this).attr('data-bs-reqId')) + $addApptModal.find('[name=time]').val('') + $addApptModal.find('[name=tailorID]').val($(this).attr('data-bs-id')) + console.log($('.datapicker').find('[name=tailorID]').val()); + + getTimings() + }) + + $('#addApptModal .confirm').click(function () { + let data = { + date: $('[name="date"]', $addApptModal).val(), + time: $('[name="time"]', $addApptModal).val(), + tailorId: $('[name="tailorID"]', $addApptModal).val(), + reqId: $(this).attr('data-bs-id') + }; + $.post("/services/appointment/add", data, function (result) { + if (result.send) { + sendNotif('request:notif', 'Appointment Booked', `You have an appointment scheduled for ${result.datetime}. Click here to see it`, `/admin/requests`, ``, result.to) + } + $addApptModal.modal('hide'); + $table.bootstrapTable('refresh'); + location.reload() + }); + + $('[name="date"]', $addApptModal).val('') + $('[name="time"]', $addApptModal).val('') + $('[name="tailorID"]', $addApptModal).val('') + $addApptModal.modal('hide') + + }) + + + + $('.del').click(function () { $.ajax({ - url: '/admin/requests/delete', + url: $(this).attr('data-bs-url'), type: 'DELETE', data: { id: $(this).attr('data-bs-id') }, success: (result) => { - $delModal.modal('hide'); + console.log(result) + $(this).closest('.modal').modal('hide'); $table.bootstrapTable('refresh') + if (result.send) { + sendNotif('request:notif', result.title, result.body, result.url, '', result.to) + } + location.reload() } - }); + }); + }); - console.log($('.toggle-view')) + $('.delete').click(function () { + $('#delModal').find('.del').attr('data-bs-id', $(this).attr('data-bs-id')) + }) + + $('.delivery').click(function () { + $('#deliverModal').find('.deliveryBtn').attr('data-bs-id', $(this).attr('data-bs-id')) + }) + + $('.deliveryBtn').click(function () { + let data = { + id: $(this).attr('data-bs-id'), + method: $(this).val(), + } + + $.post("/services/deliver", data, function (result) { + + $editItemModal.modal('hide'); + $table.bootstrapTable('refresh'); + }); + + }) + + + + $('.edit').click(function () { + let s = $(this).closest('.card').find('.req-title').text() + s = s.split(' - ') + $('#editModal').find('input[name=title]').val(s[1]) + $('#editModal').find(`option`).attr("selected", false) + $('#editModal').find(`textarea`).text($(this).closest('.card').find('.req-description').text().trim()) + $('#editModal').find(`option:contains("${s[0]}")`).attr("selected", '') + + $('#editModal').find('.btn.confirm').attr('data-bs-id', $(this).attr('data-bs-id')) + + }) + + $('.edit-tailor').click(function () { + $('#tailorModal').find('[name="tailor"]').val($(this).attr('data-bs-id')) + $('#tailorModal').find('.confirm').attr('data-bs-reqid', $(this).attr('data-bs-reqid')) + }) + + $('.cancel-tailor').click(function () { + $('#cancelTailorModal').find('.del').attr('data-bs-id', $(this).attr('data-bs-id')) + }) + + // $('input[name=date]').change(function () { + + // let owndate = [$(this).val(), $(this).closest('.modal-body').find('[name=time]').val()] + // $('input[name="time"]').val('') + // let tailorId = $(this).closest('.modal-body').find('[name=tailorID]').val() + // let date = $(this).val() + // $.get(`/api/appointments?date=${date}&id=${tailorId}`, function (data) { + // data = data.rows + // var timings = ` + //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ //
+ // + // ` + // $('.timings').empty() + // $('.timings').append(timings) + // data.forEach(appt => { + // console.log([appt.date, appt.time], owndate); + // if ([appt.date, appt.time] == owndate) { + // $(`[value="${appt.time}"]`).addClass('btn-success') + // $(`[value="${appt.time}"]`).removeClass('btn-primary') + // } else { + // $(`[value="${appt.time}"]`).attr('disabled', '') + // } + // }); + // // console.log($('.timings button')) + + // }) + // }) + + + +}); +window.operateEvents = { + 'click [title="Cancel Appointment"]': function (e, value, row, index) { + $delApptModal.find('.del').attr('data-bs-id', row.id) + $delApptModal.modal("show") + }, -}); \ No newline at end of file + 'click [title="Edit Appointment"]': function (e, value, row, index) { + $editApptModal.find('.confirm').attr('data-bs-id', row.id) + $editApptModal.find('[name=date]').val(row.date) + $editApptModal.find('[name=time]').val(row.time) + $editApptModal.find('[name=tailorID]').val(row.tailorId) + $editApptModal.modal("show") + datetime = [row.date, row.time] + RgetTimings() + + // $.get(`/api/appointments?date=${row.date}&id=${row.tailorId}`, function (data) { + // data = data.rows + // var timings = ` + //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ // + //
+ //
+ //
+ // + // ` + // $('.timings').empty() + // $('.timings').append(timings) + // data.forEach(appt => { + // $(`[value="${appt.time}"]`).attr('disabled', '') + // }); + // // console.log($('.timings button')) + + // }).then(function (e) { + // $editApptModal.find('.confirm').attr('data-bs-id', row.id) + // $editApptModal.find('[name=date]').val(row.date) + // $editApptModal.find('[name=time]').val(row.time) + // $editApptModal.find('[name=description]').val(row.description) + // $editApptModal.find('[name=tailorID]').val(row.tailorId) + // console.log($('.timings button.original')) + + // $(`.timings [value='${row.time}']`).addClass('original btn-success') + // $(`.timings [value='${row.time}']`).removeClass('btn-primary') + // $('.timings button').not($(`.timings [value='${row.time}']`)).addClass('btn-primary') + // $('.original').removeAttr('disabled') + + // $('.timings button').click(function () { + // $('.timings button').removeClass('btn-success') + // $('.original').addClass('btn-outline-success') + // if ($(this).val() == $('.original').val()) { + // $('.original').removeClass('btn-outline-success') + // $('.original').addClass('btn-success') + // } else { + // $(this).addClass('btn-success') + // } + // $('input[name="time"]').val(this.value) + // }) + // }) + + }, +} + +window.itemoperateEvents = { + 'click [title="Remove Item"]': function (e, value, row, index) { + $removeItemModal.find('.del').attr('data-bs-id', row.id) + $removeItemModal.modal("show") + }, + 'click [title="Edit Item"]': function (e, value, row, index) { + $editItemModal.find('[name="name"]').val(row.name) + $editItemModal.find('[name="type"]').val(row.type) + $editItemModal.find('[name="color"]').val(row.color) + $editItemModal.find('[name="description"]').val(row.description) + + + $editItemModal.find('.confirm').attr('data-bs-id', row.id) + $editItemModal.modal("show") + }, +} + +window.qtyEvents = { + 'change [name="qty"]': function (e, value, row, index) { + var id = row.id + var quantity = e.currentTarget.value + $.post('/services/item/updateqty', { + id: id, + qty: quantity, + }) + } +} \ No newline at end of file diff --git a/public/scripts/services/requestform.js b/public/scripts/services/requestform.js new file mode 100644 index 00000000..84805bab --- /dev/null +++ b/public/scripts/services/requestform.js @@ -0,0 +1,102 @@ +//jQuery time +var current_fs, next_fs, previous_fs; //fieldsets +var left, opacity, scale; //fieldset properties which we will animate +var animating; //flag to prevent quick multi-click glitches +var current =0 ; + +$(document).ready(function () { + let validator = $('#msform').validate() + + $(".ms-next").click(function () { + + if (!validator.form()||animating) return false; + animating = true; + + current_fs = $(this).parent(); + next_fs = $(this).parent().next(); + + //activate next step on progressbar using the index of next_fs + $("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active"); + + //show the next fieldset + next_fs.show(); + //hide the current fieldset with style + current_fs.animate({ opacity: 0 }, { + step: function (now, mx) { + //as the opacity of current_fs reduces to 0 - stored in "now" + //1. scale current_fs down to 80% + scale = 1 - (1 - now) * 0.2; + //2. bring next_fs from the right(50%) + left = (now * 50) + "%"; + //3. increase opacity of next_fs to 1 as it moves in + opacity = 1 - now; + current_fs.css({ + 'transform': 'scale(' + scale + ')', + 'position': 'absolute' + }); + next_fs.css({ 'left': left, 'opacity': opacity }); + }, + duration: 800, + complete: function () { + current_fs.hide(); + animating = false; + }, + //this comes from the custom easing plugin + easing: 'easeInOutBack' + }); + + + }); + + $(".previous").click(function () { + if (animating) return false; + animating = true; + + current_fs = $(this).parent(); + previous_fs = $(this).parent().prev(); + + //de-activate current step on progressbar + $("#progressbar li").eq($("fieldset").index(current_fs)).removeClass("active"); + + //show the previous fieldset + previous_fs.show(); + //hide the current fieldset with style + current_fs.animate({ opacity: 0 }, { + step: function (now, mx) { + //as the opacity of current_fs reduces to 0 - stored in "now" + //1. scale previous_fs from 80% to 100% + scale = 0.8 + (1 - now) * 0.2; + //2. take current_fs to the right(50%) - from 0% + left = ((1 - now) * 50) + "%"; + //3. increase opacity of previous_fs to 1 as it moves in + opacity = 1 - now; + current_fs.css({ 'left': left }); + previous_fs.css({ 'transform': 'scale(' + scale + ')', 'opacity': opacity }); + }, + duration: 800, + complete: function () { + current_fs.hide(); + animating = false; + }, + //this comes from the custom easing plugin + easing: 'easeInOutBack' + }); + }); + + + var TailorValid + $('[name="tailorID"]').one('change', function() { + TailorValid = true + }) + + $('.submit').click(function (e) { + e.preventDefault() + if (TailorValid && $('[name="time"]').val()) { + $('#msform').submit() + } + }) + + + + +}); \ No newline at end of file diff --git a/public/scripts/services/tableEvents.js b/public/scripts/services/tableEvents.js index 839c9ae4..139597f9 100644 --- a/public/scripts/services/tableEvents.js +++ b/public/scripts/services/tableEvents.js @@ -1,24 +1,2 @@ -var $table = $('#reqTable') -var exampleModal = document.getElementById('exampleModal') -var inputTitle = $('input', exampleModal) -var textarea = $('textarea', exampleModal) -var conBtn = $('.confirm') -var delBtn = document.querySelector('.del') -window.operateEvents = { - 'click .edit': function (e, value, row, index) { - inputTitle.val(row.title) - textarea.text(row.description) - conBtn.attr('data-bs-id', row.id) - }, - 'click .delete': function (e, value, row, index) { - delBtn.setAttribute('data-bs-id', row.id) - } -} -window.apptEvents = { - 'click .toggle-view': function (e, value, row, index) { - $table.bootstrapTable('toggleDetailView', index) - } - -}; \ No newline at end of file diff --git a/public/scripts/services/tableFormatters.js b/public/scripts/services/tableFormatters.js index cbdb0a69..ae1f5793 100644 --- a/public/scripts/services/tableFormatters.js +++ b/public/scripts/services/tableFormatters.js @@ -1,28 +1,52 @@ -var $table = $('table') + function operateFormatter(value, row) { + let datetime = moment(`${row.date} ${row.time}`) + if (moment() > datetime || row.confirmed == "Rejected") { + return null + } else { + return [ + `
`, + ``, + ``, + `
`, + ].join('') + } +} + +function itemoperateFormatter(value, row) { return [ - '
', - `', - '', - '
' + `
`, + ``, + ``, + `
`, ].join('') } -function nameFormatter(value, row) { - // console.log(value) - return value + ' ' + row.lName +function qtyFormatter(value, row) { + return `` } -function apptFormatter(value, row, index) { - return `` +function colorFormatter(value, row) { + if (value.startsWith('#') && value.length == 7) { + return `` + } else { + return value + } } -function apptDetailFormatter(value, row, index) { - console.log(row.appointments) - return value.date + +function rowStyle(row, index) { + if (row.confirmed == "Pending") { + return { + classes: 'table-secondary' + } + } else if (row.confirmed == "Rejected") { + return { classes: 'table-danger' } + } else { + + return { classes: 'table-success' } + } + + } \ No newline at end of file diff --git a/public/scripts/socket.js b/public/scripts/socket.js new file mode 100644 index 00000000..e3689327 --- /dev/null +++ b/public/scripts/socket.js @@ -0,0 +1,95 @@ +const socket = io({ autoConnect: false }); + +if (id) { + socket.auth = { id } + socket.connect() +} + + +socket.onAny((event, ...args) => { + console.log(event, args); +}); + +socket.on('test', (data) => { + console.log(data) +}) + +socket.on('connect', () => { + if (false) { + let event = "server:ping" + console.log(socket.id) + socket.emit(event, (answer) => { + console.log(`Tried to ping server using "${event}" event. Status: ${answer.status}`) + }) + } + console.log(`User ${socket.auth.id} has connected to server with socket id of ${socket.id}`) + if (socket.auth.id) { + $.get(`/api/getroles/${socket.auth.id}`, (data) => { + // console.log(data) + socket.emit('rooms', data) + }) + } + getNotifs() + if (window.location.pathname.startsWith('/admin')) { + socket.emit('livechat:get', {adminId: socket.id}) + } +}) + +socket.on('notification', (data) => { + if (data) { + if ($('#notifications').find('li').length == 0) { + $('#notifications').text('') + } + const x = ['
  • ', + ``, + `

    ${data.title}

    `, + `

    ${data.body}

    `, + ``, + `
    `, + `
  • `, + `
    ` + ] + $('#notifications').prepend(x.join('')) + } + updateNotificationCount("#notificationdropdown") +}) + + + + + +// socket.on('notification', (data) => { +// console.log("notification received") +// const x = `
  • +// +//

    ${data.title}

    +//

    ${data.body}

    + +// +// +//
    +//
  • + +//
    ` +// $('#notifications').empty() +// $('#notifications').append(x) + +// }) + +function sendNotif(event, title, body, url, sender, recipient) { + let data = { + title: title, + body: body, + url: url, + sender: sender, + recipient: recipient, + } + console.log(data); + $.post('/createNotification', data, function ({id}) { + data.id = id + socket.emit(event, data) + }) +} + + diff --git a/public/styles/admin.css b/public/styles/admin.css index 8f67dc5f..0129d8d5 100644 --- a/public/styles/admin.css +++ b/public/styles/admin.css @@ -1,7 +1,7 @@ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Comforter&display=swap'); -*{ +* { margin: 0; padding: 0; box-sizing: border-box; @@ -9,7 +9,7 @@ scrollbar-width: none; } -:root{ +:root { --body-color: #F4F6FC; --sidebar-color: #FFF; --primary-color: #695CFE; @@ -23,19 +23,19 @@ --tran-05: all 0.3s ease; } -body{ +body { min-height: 100vh; background-color: var(--body-color); transition: var(--tran-05); - + } -::selection{ +::selection { background-color: var(--primary-color); color: #fff; } -body.dark{ +body.dark { --body-color: #18191a; --sidebar-color: #242526; --primary-color: #0044d6; @@ -45,7 +45,7 @@ body.dark{ --odd-row-color: #595b5c; } - .sidebars{ +.sidebars { position: fixed; top: 0; left: 0; @@ -54,13 +54,14 @@ body.dark{ padding: 10px 14px; background: var(--sidebar-color); transition: var(--tran-05); - z-index: 100; + z-index: 100; } -.sidebars.close{ + +.sidebars.close { width: 88px; } -.sidebars li{ +.sidebars li { height: 50px; list-style: none; display: flex; @@ -69,12 +70,12 @@ body.dark{ } .sidebars header .image, -.sidebars .icon{ +.sidebars .icon { min-width: 60px; border-radius: 6px; } -.sidebars .icon{ +.sidebars .icon { min-width: 60px; border-radius: 6px; height: 100%; @@ -85,58 +86,61 @@ body.dark{ } .sidebars .text, -.sidebars .icon{ +.sidebars .icon { color: var(--text-color); transition: var(--tran-03); } -.sidebars .text{ +.sidebars .text { font-size: 17px; font-weight: 500; white-space: nowrap; opacity: 1; } -.sidebars.close .text{ + +.sidebars.close .text { z-index: 0; opacity: 0; } -.sidebars header{ +.sidebars header { position: relative; } -.sidebars header .image-text{ +.sidebars header .image-text { display: flex; align-items: center; } -.sidebars header .logo-text{ + +.sidebars header .logo-text { display: flex; flex-direction: column; } + header .image-text .name { margin-top: 2px; font-size: 18px; font-weight: 600; } -header .image-text .profession{ +header .image-text .profession { font-size: 16px; margin-top: -2px; display: block; } -.sidebars header .image{ +.sidebars header .image { display: flex; align-items: center; justify-content: center; } -.sidebars header .image img{ +.sidebars header .image img { width: 40px; border-radius: 6px; } -.sidebars header .toggle{ +.sidebars header .toggle { position: absolute; top: 50%; right: -25px; @@ -153,26 +157,28 @@ header .image-text .profession{ cursor: pointer; transition: var(--tran-05); } -.menu ul{ + +.menu ul { padding-left: 0; } + .menu .nav-link { padding: 0; } -body.dark .sidebars header .toggle{ +body.dark .sidebars header .toggle { color: var(--text-color); } -.sidebars.close .toggle{ +.sidebars.close .toggle { transform: translateY(-50%) rotate(0deg); } -.sidebars .menu{ +.sidebars .menu { margin-top: 40px; } -.sidebars li a{ +.sidebars li a { list-style: none; height: 100%; background-color: transparent; @@ -185,54 +191,62 @@ body.dark .sidebars header .toggle{ transition: var(--tran-03); } -.sidebars li a:hover{ +.sidebars li a:hover { background-color: var(--primary-color); } + .sidebars li a:hover .icon, -.sidebars li a:hover .text{ +.sidebars li a:hover .text { color: var(--sidebar-color); } + body.dark .sidebars li a:hover .icon, -body.dark .sidebars li a:hover .text{ +body.dark .sidebars li a:hover .text { color: var(--text-color); } -.sidebars .menu-bar{ +.sidebars .menu-bar { height: calc(100% - 55px); display: flex; flex-direction: column; justify-content: space-between; overflow-y: scroll; + overflow-x: hidden; } -.menu-bar::-webkit-scrollbar{ + +.menu-bar::-webkit-scrollbar { display: none; } -.sidebars .menu-bar .mode{ + +.sidebars .menu-bar .mode { border-radius: 6px; background-color: var(--primary-color-light); position: relative; transition: var(--tran-05); } -.menu-bar .mode .sun-moon{ +.menu-bar .mode .sun-moon { height: 50px; width: 60px; } -.mode .sun-moon i{ +.mode .sun-moon i { position: absolute; } -.mode .sun-moon i.sun{ + +.mode .sun-moon i.sun { opacity: 0; } -body.dark .mode .sun-moon i.sun{ + +body.dark .mode .sun-moon i.sun { opacity: 1; } -body.dark .mode .sun-moon i.moon{ + +body.dark .mode .sun-moon i.moon { opacity: 0; } -.menu-bar .bottom-content .toggle-switch{ +.menu-bar .bottom-content .toggle-switch { position: absolute; right: 0; height: 100%; @@ -243,7 +257,8 @@ body.dark .mode .sun-moon i.moon{ border-radius: 6px; cursor: pointer; } -.toggle-switch .switch{ + +.toggle-switch .switch { position: relative; height: 22px; width: 40px; @@ -252,7 +267,7 @@ body.dark .mode .sun-moon i.moon{ transition: var(--tran-05); } -.switch::before{ +.switch::before { content: ''; position: absolute; height: 15px; @@ -265,11 +280,11 @@ body.dark .mode .sun-moon i.moon{ transition: var(--tran-04); } -body.dark .switch::before{ +body.dark .switch::before { left: 20px; } -.home.shadow-sm{ +.home.shadow-sm { position: absolute; top: 0px; padding: 0px 30px; @@ -279,23 +294,26 @@ body.dark .switch::before{ background-color: var(--sidebar-color); transition: var(--tran-05); } -.home{ + +.home { position: absolute; top: 70px; padding-left: 30px; left: 250px; - height: 100vh; + height: calc(100vh - 78px); width: calc(100% - 250px); background-color: var(--body-color); transition: var(--tran-05); } -.home .text{ + +.home .text { font-size: 30px; font-weight: 500; color: var(--text-color); padding: 12px 60px; } -.home .content{ + +.home .content { color: var(--text-color); } @@ -304,9 +322,11 @@ body.dark .switch::before{ color: var(--text-color); } -.home .table-striped thead, tbody{ +.home .table-striped thead, +tbody { color: var(--text-color); } + .table-striped>tbody>tr:nth-of-type(odd)>* { color: var(--text-color); background-color: var(--odd-row-color) @@ -317,85 +337,43 @@ body.dark .switch::before{ color: var(--text-color); border: 7px; } + .admin-padding { color: var(--text-color); } -.admin-padding .form-control{ + +.admin-padding .form-control { color: var(--text-color); background-color: var(--sidebar-color) } -.sidebars.close ~ .mt-2.home{ +.sidebars.close~.mt-2.home { left: 78px; - height: 100vh; + height: calc(100vh - 78px); width: calc(100% - 78px); } -.sidebars.close ~ .home.shadow-sm{ + +.sidebars.close~.home.shadow-sm { left: 78px; height: 70px; width: calc(100% - 78px); } -body.dark .home .text{ +body.dark .home .text { color: var(--text-color); } -#goBack { - float: right; - padding: 15px; - border-radius: 5px; -} - -#goTo { - float: left; - padding: 15px; - border-radius: 5px; - background-color: rgb(72, 189, 224); - color: white; -} - -#goright { - float: right; - padding: 15px; - border-radius: 5px; - background-color: rgb(72, 189, 224); - color: white; -} - -#left { - float: left; - width: 47%; - padding-right: 0.1em; -} - -#right { - float: right; - width: 47%; - padding-left: 0.1em; -} - -#datetime { - float: right; - float:bottom; -} - -#noofproduct p{ - padding-top: 0.4em; - padding-left: 0.4em; - margin-bottom: 0; -} - - .sidebars li a.active { background-color: var(--primary-color); } .sidebars li a.active .icon, -.sidebars li a.active .text{ +.sidebars li a.active .text { color: var(--sidebar-color); } -#back-link, .breadcrumb { +#back-link, +.breadcrumb { z-index: 101; border: 0; } @@ -404,7 +382,7 @@ body.dark .home .text{ color: #0d6efd !important; } -#notificationdropdown + ul { +#notificationdropdown+ul { width: 250px; max-height: 400px; border-radius: .25rem 0 0 .25rem; @@ -412,21 +390,18 @@ body.dark .home .text{ scrollbar-color: var(--primary-color) #F5F5F5; } -#notificationdropdown + ul::-webkit-scrollbar-track -{ - box-shadow: inset 0 0 6px rgba(0,0,0,0.2); - background-color: #F5F5F5; +#notificationdropdown+ul::-webkit-scrollbar-track { + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2); + background-color: #F5F5F5; } -#notificationdropdown + ul::-webkit-scrollbar -{ - width: 6px; - background-color: #F5F5F5; +#notificationdropdown+ul::-webkit-scrollbar { + width: 6px; + background-color: #F5F5F5; } -#notificationdropdown + ul::-webkit-scrollbar-thumb -{ - background-color: var(--primary-color); +#notificationdropdown+ul::-webkit-scrollbar-thumb { + background-color: var(--primary-color); } @@ -443,14 +418,120 @@ body.dark .home .text{ font-size: 12px; } -#notificationdropdown:focus{ +#notificationdropdown:focus { box-shadow: 0 0 0 0 !important; } -.btn-primary, .bg-primary { +.btn-primary, +.bg-primary { background-color: var(--primary-color) !important; } .modal-dialog.w-75 { max-width: none; +} + +.form { + padding: 10px; +} + +.blue-btn { + width: 10rem; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.blue-btn:hover, +.blue-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} +.blue-btn-full { + width: 100%; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.blue-btn-full:hover, +.blue-btn-full:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} + +.warning-btn { + width: 100%; + background: #fdd626; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.warning-btn:hover, +.warning-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fdd626; +} + +.danger-btn { + width: 100%; + background: #fd3d3d; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.danger-btn:hover, +.danger-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fd3d3d; + color: #fff; +} +.danger-btn-fixed { + width: 47%; + background: #fd3d3d; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.danger-btn-fixed:hover, +.danger-btn-fixed:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fd3d3d; +} + +.light-btn { + min-width: 47%; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.light-btn:hover, +.light-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; } \ No newline at end of file diff --git a/public/styles/admin_navbar.css b/public/styles/admin_navbar.css index 7e591daf..d6975a6a 100644 --- a/public/styles/admin_navbar.css +++ b/public/styles/admin_navbar.css @@ -1,4 +1,4 @@ -/* Google Fonts Import Link */ +/* Google Fonts Import Link @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); *{ margin: 0; @@ -261,4 +261,4 @@ .sidebar.close .nav-links li .sub-menu{ display: none; } -} +} */ diff --git a/public/styles/btn.css b/public/styles/btn.css new file mode 100644 index 00000000..0e6a9b6a --- /dev/null +++ b/public/styles/btn.css @@ -0,0 +1,213 @@ +.blue-btn { + width: 7rem; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.blue-btn:hover, +.blue-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} +.blue-btn-25 { + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.blue-btn-25:hover, +.blue-btn-25:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} + +.blue-btn-full { + width: 100%; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.blue-btn-full:hover, +.blue-btn-full:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} + +.green-btn-full { + width: 100%; + background: #07fd6e; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.green-btn-full:hover, +.green-btn-full:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #07fd6e; +} +.green-btn-full-confirmed { + width: 100%; + background: #00be10; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.green-btn-full-confirmed:hover, +.green-btn-full-confirmed:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #00be10; +} +.green-btn-25 { + width: 47%; + background: #12ff7d; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.green-btn-25:hover, +.green-btn-25:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #12ff7d; +} + +.warning-btn { + width: 100%; + background: #fdd626; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.warning-btn:hover, +.warning-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fdd626; +} + +.danger-btn { + width: 100%; + background: #fd3d3d; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.danger-btn:hover, +.danger-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fd3d3d; + color: #fff; +} + +.danger-btn-fixed { + width: 47%; + background: #fd3d3d; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.danger-btn-fixed:hover, +.danger-btn-fixed:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fd3d3d; +} +.danger-btn-fixed { + width: 47%; + background: #fd3d3d; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.danger-btn-fixed:hover, +.danger-btn-fixed:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #fd3d3d; +} + +.light-btn { + min-width: 47%; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.light-btn:hover, +.light-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; +} +.light-btn-full { + min-width: 100%; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.light-btn-full:hover, +.light-btn-full:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; +} +.light-btn-25 { + background: #b3d9ff; + font-weight: bold; + color: rgb(255, 255, 255); + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.light-btn-25:hover, +.light-btn-25:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #b3d9ff; +} \ No newline at end of file diff --git a/public/styles/cart.css b/public/styles/cart.css index a87834cb..2a9524e3 100644 --- a/public/styles/cart.css +++ b/public/styles/cart.css @@ -39,7 +39,7 @@ .cart-total { font-size: 1.2em; color: #333; - border:none; + border: none; } .cart-item-title { @@ -94,7 +94,7 @@ background-color: black; color: white; float: right; - margin-left:auto; + margin-left: auto; } @@ -105,18 +105,18 @@ } .btn-danger .bx-x { - background-color:white; + background-color: white; color: black; } -.bx-x{ - font-size: 2.5em; - -webkit-text-stroke: 0.1px black; - } +.bx-x { + font-size: 2.5em; + -webkit-text-stroke: 0.1px black; +} .bx-trash { - font-size: 2em; - } + font-size: 2em; +} .card { padding: 10px; @@ -124,7 +124,7 @@ } .cart-card { - margin-top:60px; + margin-top: 60px; } .discount-card { @@ -132,17 +132,19 @@ } .apply-discount-button { - background-color:#265F63; + background-color: #265F63; color: white; } .discount-card .card-body input { line-height: 2em; border: 1px solid #dfdfdf; - width:100%; + width: 100%; } -.total, .shipping, .discount{ +.total, +.shipping, +.discount { padding: 10px; border-bottom: 1px solid black; } @@ -152,5 +154,22 @@ } .card-footer { - border:none; + border: none; +} + +.continue-shopping { + width: 100px; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.continue-shopping:hover, +.continue-shopping:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; } \ No newline at end of file diff --git a/public/styles/chat.css b/public/styles/chat.css new file mode 100644 index 00000000..d7578011 --- /dev/null +++ b/public/styles/chat.css @@ -0,0 +1,42 @@ +.chat-bubble { + padding: 10px 14px; + background: #eee; + margin: 10px 30px; + border-radius: 9px; + position: relative; + animation: fadeIn 1s ease-in; +} + +.chat-bubble:after { + content: ""; + position: absolute; + top: 50%; + width: 0; + height: 0; + border: 20px solid transparent; + border-bottom: 0; + margin-top: -10px; +} + +.chat-bubble--left:after { + left: 0; + border-right-color: #eee; + border-left: 0; + margin-left: -20px; +} + +.chat-bubble--right:after { + right: 0; + border-left-color: #74b9ff; + border-right: 0; + margin-right: -20px; +} + +.justify-content-end .chat-bubble { + background: #74b9ff; + color: #fff; + } + +.chat:hover { + background-color: #74b9ff; +} \ No newline at end of file diff --git a/public/styles/dashboard.css b/public/styles/dashboard.css new file mode 100644 index 00000000..2eb70ab1 --- /dev/null +++ b/public/styles/dashboard.css @@ -0,0 +1,73 @@ +.heading { + margin: 25px 0; + font-size: 24px; +} + +.dashboard-stat { + position: relative; + display: block; + margin: 0 0 25px; + overflow: hidden; + border-radius: 4px; +} + +.dashboard-stat .visual { + width: 80px; + height: 80px; + display: block; + float: left; + padding-top: 10px; + padding-left: 15px; + margin-bottom: 15px; + font-size: 35px; + line-height: 35px; +} + +.dashboard-stat .visual>i { + margin-left: -15px; + font-size: 110px; + line-height: 110px; + color: #fff; + opacity: .1; +} + +.dashboard-stat .details { + position: absolute; + right: 15px; + padding-right: 15px; + color: #fff; +} + +.dashboard-stat .details .number { + padding-top: 25px; + text-align: right; + font-size: 34px; + line-height: 36px; + letter-spacing: -1px; + margin-bottom: 0; + font-weight: 300; +} + +.dashboard-stat .details .number .desc { + text-transform: capitalize; + text-align: right; + font-size: 16px; + letter-spacing: 0; + font-weight: 300; +} + +.dashboard-stat.blue { + background-color: #337ab7; +} + +.dashboard-stat.red { + background-color: #e7505a; +} + +.dashboard-stat.purple { + background-color: #8E44AD; +} + +.dashboard-stat.hoki { + background-color: #67809F; +} \ No newline at end of file diff --git a/public/styles/home.css b/public/styles/home.css index 1063c687..d0bab026 100644 --- a/public/styles/home.css +++ b/public/styles/home.css @@ -20,7 +20,7 @@ body { #TransferModalContainer { align-items: center; flex-direction: column; - background-image: linear-gradient(to right, rgb(140, 156, 247), rgb(93, 109, 201)); + background-image: linear-gradient(to right, lightblue, rgb(0, 102, 255)); /* background-color: rgb(113, 132, 238) !important; */ padding: 0 !important; width: 100%; @@ -30,14 +30,14 @@ body { } #TransferModalContainer:hover { - background-image: linear-gradient(to right, rgb(152, 166, 243), rgb(104, 121, 214)); + background-image: linear-gradient(to right, rgb(0, 102, 255), lightblue); transition: 0.5s ease-in-out; } #ShoppingModalContainer { align-items: center; flex-direction: column; - background-image: linear-gradient(to right, rgb(247, 192, 140), rgb(228, 139, 80)); + background-image: linear-gradient(to right, #30496B, #30B8D2); /* background-color: rgb(113, 132, 238) !important; */ padding: 0 !important; width: 100%; @@ -47,14 +47,14 @@ body { } #ShoppingModalContainer:hover { - background-image: linear-gradient(to right, rgb(250, 207, 166), rgb(233, 153, 101)); + background-image: linear-gradient(to right, #30B8D2, #30496B); transition: 0.5s ease-in-out; } #ProfileModalContainer { align-items: center; flex-direction: column; - background-image: linear-gradient(to right, rgb(183, 163, 228), rgb(169, 97, 228)); + background-image: linear-gradient(to right, #B6C1D4, #EC68B1); /* background-color: rgb(113, 132, 238) !important; */ padding: 0 !important; width: 100%; @@ -65,14 +65,14 @@ body { #ProfileModalContainer:hover { - background-image: linear-gradient(to right, rgb(194, 178, 230), rgb(189, 131, 236)); + background-image: linear-gradient(to right, #EC68B1, #B6C1D4); transition: 0.5s ease-in-out; } #DashboardModalContainer { align-items: center; flex-direction: column; - background-image: linear-gradient(to right, rgb(221, 221, 221), rgb(173, 173, 173)); + background-image: linear-gradient(to right, #476892, #59355D); /* background-color: rgb(113, 132, 238) !important; */ padding: 0 !important; width: 100%; @@ -82,7 +82,7 @@ body { } #DashboardModalContainer:hover { - background-image: linear-gradient(to right, rgb(247, 247, 247), rgb(212, 212, 212)); + background-image: linear-gradient(to right, #59355D, #476892); transition: 0.5s ease-in-out; } @@ -123,26 +123,30 @@ body { .TransferModalContainer__Button { display: flex; position: relative; - height: 250px; - width: 100%; + height: 150px; + width: 50%; justify-content: left !important; text-decoration: none; } #TransferContainerWord { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; color: rgb(111, 90, 187); } #ShoppingContainerWord { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; color: rgb(199, 131, 91); } -#ProfilerContainerWord { +#ProfileContainerWord { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; color: rgb(84, 62, 165); } #DashboardContainerWord { - color: rgb(87, 87, 87); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + color: #474747; } #TransferWord { @@ -164,7 +168,7 @@ body { transition: 0.5s ease-in-out; } -.TransferModalContainer__Button:hover > #TransferWord { +.TransferModalContainer__Button:hover > #ProfileContainerWord { color: rgb(14, 13, 66); transition: 0.5s ease-in-out; } @@ -180,7 +184,7 @@ body { } .TransferModalContainer__Button:hover > #DashboardContainerWord { - color: rgb(46, 46, 46); + color: white; transition: 0.5s ease-in-out; } @@ -471,4 +475,21 @@ a:link { transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1); width: 150px; height: 150px; -} */ \ No newline at end of file +} */ + +.blue-btn { + width: 100px; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.blue-btn:hover, +.blue-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} \ No newline at end of file diff --git a/public/styles/homepage.css b/public/styles/homepage.css index 7aafb5f5..114f6b32 100644 --- a/public/styles/homepage.css +++ b/public/styles/homepage.css @@ -21,6 +21,7 @@ .card:hover { border-radius: 12px; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.454); } .card-button { @@ -40,11 +41,57 @@ transform: translateY(-120%); } -.show-item { +.content { + padding-top: 2rem; +} + +.content p { + font-size: 1.2em; +} + +.overlay { + position: absolute; + bottom: 0; + background: rgb(0, 0, 0); + background: rgba(0, 0, 0, 0.5); /* Black see-through */ + color: #f1f1f1; + width: 100%; + height:100%; + transition: .5s ease; + opacity:0; + color: white; + font-size: 20px; + padding: 20px; + text-align: center; +} + +.img .overlay { + opacity : 1; +} + +/* .show-item { text-align: center; background-color: #fff; border: 0.5px solid ; color: black; +} */ + +.show-item { + min-width: 50%; + text-align: center; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 15px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.show-item:hover, +.show-item:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; } @media (min-width: 992px) { @@ -93,6 +140,11 @@ align-items: center; } +.product-card { + max-width: 65rem; + justify-content: center; +} + .bx-heart { font-size: 1.5em; } @@ -101,6 +153,15 @@ color:orange; } +.bxs-star-half { + color:orange; +} + +.totalreviews { + font-size:0.8rem; + text-align:right; +} + .review { padding-top: 30px; } @@ -110,6 +171,12 @@ justify-content: center; } +.to-reviews { + cursor: pointer; + justify-content: right; + text-decoration: underline; +} + .x-button { position: absolute; right: 5px; @@ -129,3 +196,154 @@ background-color: rgb(94, 92, 92); } +.wrapper { + height: 100vh; + position: relative; +} + +.product-scard { + max-width: 65rem; + position: relative; + display: flex; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + box-shadow: -2rem 2rem 3.2rem rgba(0, 0, 0, 0.2); +} + +.product-left { + height: 100%; + width: 70%; + padding: 4rem 2rem; + border-top-left-radius: 0.5rem; + border-bottom-left-radius: 0.5rem; + display: flex; + flex-direction: column; + background: rgb(207, 255, 255); + color: rgb(0, 0, 0); +} + +.product-right { + background: #fff; + height: auto; + width: 100%; + border-top-right-radius: 0.5rem; + border-bottom-right-radius: 0.5rem; + display: flex; + justify-content: center; + align-items: center; +} + +.product-right img { + height: 30rem; +} + +.header h1 { + text-transform: uppercase; + margin: 2rem 0; + font-size: 2.5rem; +} + +/* Price */ + +.header h2 { + margin: 0rem 0 2rem 0; + font-weight: 300; + } + +/* Product Description */ + +.product-main p { + opacity: 0.5; + margin: 2rem 0; + line-height: 1.45; +} + +.focus { + text-transform: uppercase; + margin: 0 0 1rem 0; + padding: 0 0 0.9rem 0; + border-bottom: 0.2rem solid rgba(250, 250, 250, 0.3); +} + +.focus span:last-child { + margin: 0 0 0 1rem; + width: 100%; +} + +.focus span:first-child { + border-bottom: 0.2rem solid #fff; + padding: 0 0 0.9rem 0; +} + +/* Choose color / quantity */ + +.btns-group { + width: 100%; + margin: 0 0 2rem 0; +} + +/* Total Price */ + +.product-total { + margin: 0 0 2rem 0; +} + +.product-total p { + font-weight: 700; + font-size: 2rem; + opacity: 0.5; +} + +.product-total h3{ + margin: 0 0 1rem 0; +} + + +/* Add to cart button */ + +.product-add { + border: 1px solid #fff; + width: 100%; + padding: 1.5rem; + border-radius: 5rem; + transition: all 0.5s ease-out; +} + +.product-add:hover { + background-color: #fff; + color: #2e282a; +} + +.product-btns a { + text-decoration: none; + color: #fff; + text-transform: uppercase; + display: flex; + align-items: center; + justify-content: center; +} + +.dark-btn { + width:100%; + background: #000000; + background: rgba(0, 0, 0, 0.7); + opacity: 1; + font-weight: bold; + color: rgb(255, 255, 255); + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; + bottom: 0; +} + +.dark-btn:hover, +.dark-btn:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #000000; +} + +.btttn { + padding-top:75px; +} \ No newline at end of file diff --git a/public/styles/myorder.css b/public/styles/myorder.css index ab7028e3..380c2769 100644 --- a/public/styles/myorder.css +++ b/public/styles/myorder.css @@ -1,3 +1,35 @@ .card { border-radius:20px; +} + +h1 { + padding-left: 20px; +} + +.action-button-fixed { + min-width: 100%; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.action-button-fixed:hover, +.action-button-fixed:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; +} + +.bg { + display: flex; + align-items: center; + justify-content: space-around; + background: #f3fbfb; + margin: 0 auto; + width: 50%; + padding: 1rem 1rem; + border-radius: 30px; } \ No newline at end of file diff --git a/public/styles/pastorderDetails.css b/public/styles/pastorderDetails.css new file mode 100644 index 00000000..11391dcf --- /dev/null +++ b/public/styles/pastorderDetails.css @@ -0,0 +1,240 @@ +.modal-review { + background: rgb(244, 253, 255); +} + +.cont { + width: 95%; + max-width: 600px; + text-align: center; + margin: 4% auto; + padding: 30px 0; + background: rgb(244, 253, 255); + color: rgb(0, 0, 0); + border-radius: 5px; + overflow: hidden; +} + +hr { + margin: 20px; + border: none; +} + +div.title { + font-size: 2em; +} + +h1 span { + font-weight: 300; + color: #Fd4; +} + +div.stars { + width: 500px; + display: inline-block; +} + +input.star { + display: none; +} + +label.star { + float: right; + padding: 10px; + font-size: 36px; + color: #444; + transition: all .2s; +} + +input.star:checked~label.star:before { + content: '\f005'; + color: #FD4; + transition: all .25s; +} + +input.star:checked~label.star:before { + content: '\f005'; + color: #FD4; + transition: all .25s; +} + + +input.star-5:checked~label.star:before { + color: #FE7; + text-shadow: 0 0 20px #952; +} + +input.star-1:checked~label.star:before { + color: #F62; +} + +label.star:hover { + transform: rotate(-15deg) scale(1.3); +} + +label.star:before { + content: '\f006'; + font-family: FontAwesome; +} + +.rev-box { + overflow: hidden; + height: 0; + width: 100%; + transition: all .25s; +} + +textarea.review { + background: rgb(255, 255, 255); + border: none; + width: 100%; + max-width: 100%; + height: 100px; + padding: 20px; + box-sizing: border-box; + color: rgb(0, 0, 0); +} + +input.title { + background: rgb(255, 255, 255); + border: none; + width: 100%; + max-width: 100%; + height: 40px; + padding: 10px; + margin-bottom:20px; + color: rgb(0, 0, 0); +} +label.review { + display: block; + transition: opacity .25s; +} + + + +input.star:checked~.rev-box { + height: 125px; + overflow: visible; +} +.cart-header { + font-weight: bold; + font-size: 1.25em; + color: #333; + padding-left: 10px; +} + +.cart-column { + display: flex; + align-items: center; + border-bottom: 1px solid black; + margin-right: 1.5em; + padding-bottom: 10px; + margin-top: 10px; +} + +.cart-row { + display: flex; +} + +.cart-item { + width: 45%; +} + +.cart-price { + width: 25%; + font-size: 1.2em; + color: #333; +} + +.cart-quantity { + width: 30%; +} + +.cart-item-title { + color: #333; + margin-left: .5em; + font-size: 1.2em; +} + +.cart-item-image { + width: 75px; + height: auto; + border-radius: 10px; +} + +.btn-danger { + color: white; + background-color: #EB5757; + border: none; + border-radius: .3em; + font-weight: bold; + +} + +.btn-danger:hover { + background-color: #CC4C4C; +} + +.cart-quantityy { + height: 34px; + width: 50px; + border-radius: 5px; + color: #333; + padding: 0; + text-align: center; + font-size: 1.2em; + margin-right: 25px; +} + +.cart-row:last-child { + border-bottom: 1px solid black; +} + +.cart-row:last-child .cart-column { + border: none; +} + +.card { + padding: 10px; + margin-bottom: 20px; +} + +.cart-card { + margin-top: 60px; +} + +.summary-card { + margin-top: 60px; +} + +.total, +.shipping, +.discount { + padding: 10px; + border-bottom: 1px solid black; +} + +.grandtotal, +.grandtotal-after { + padding: 10px; +} + +.c-t { + width: 25%; +} + +.cart-total { + font-size: 1.2em; + color: #333; + border: none; +} +.submit-btn { + width: 100%; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} \ No newline at end of file diff --git a/public/styles/qna.css b/public/styles/qna.css new file mode 100644 index 00000000..1003f0e3 --- /dev/null +++ b/public/styles/qna.css @@ -0,0 +1,11 @@ +.action-button-fixed { + width: 150px; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} \ No newline at end of file diff --git a/public/styles/requestform.css b/public/styles/requestform.css new file mode 100644 index 00000000..a645d0ab --- /dev/null +++ b/public/styles/requestform.css @@ -0,0 +1,153 @@ +/*custom font*/ +@import url(https://fonts.googleapis.com/css?family=Montserrat); + +/*basic reset*/ +* { + margin: 0; + padding: 0; +} + +/*form styles*/ +#msform { + margin: 50px auto; + text-align: center; + position: relative; +} + +#msform fieldset { + background: white; + border: 0 none; + border-radius: 3px; + box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.4); + padding: 20px 30px; + box-sizing: border-box; + width: 100%; + margin: 0 0%; + + /*stacking fieldsets above each other*/ + position: relative; +} + +#msform fieldset:first-of-type { + background: white; + border: 0 none; + border-radius: 3px; + box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.4); + padding: 20px 30px; + box-sizing: border-box; + width: 50%; + margin: 0 25%; + + /*stacking fieldsets above each other*/ + position: relative; +} + +/*Hide all except first fieldset*/ +#msform fieldset:not(:first-of-type) { + display: none; +} + +/*inputs*/ +#msform input, +#msform textarea, #msform select { + padding: 15px; + border: 1px solid #ccc; + border-radius: 3px; + margin-bottom: 10px; + width: 100%; + box-sizing: border-box; + font-family: montserrat; + color: #2C3E50; + font-size: 13px; +} + +/*buttons*/ +#msform .action-button { + width: 100px; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 1px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +#msform .action-button:hover, +#msform .action-button:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #27AE60; +} + +/*headings*/ +.fs-title { + font-size: 15px; + text-transform: uppercase; + color: #2C3E50; + margin-bottom: 10px; +} + +.fs-subtitle { + font-weight: normal; + font-size: 13px; + color: #666; + margin-bottom: 20px; +} + +/*progressbar*/ +#progressbar { + padding: 0; + margin-bottom: 30px; + overflow: hidden; + /*CSS counters to number the steps*/ + counter-reset: step; +} + +#progressbar li { + list-style-type: none; + color: black; + text-transform: uppercase; + font-size: 9px; + width: 33.33%; + float: left; + position: relative; +} + +#progressbar li:before { + content: counter(step); + counter-increment: step; + width: 20px; + line-height: 20px; + display: block; + font-size: 10px; + color: #333; + background: gainsboro; + border-radius: 3px; + margin: 0 auto 5px auto; +} + +/*progressbar connectors*/ +#progressbar li:after { + content: ''; + width: 100%; + height: 2px; + background: gainsboro; + position: absolute; + left: -50%; + top: 9px; + z-index: -1; + /*put it behind the numbers*/ +} + +#progressbar li:first-child:after { + /*connector not needed before the first step*/ + content: none; +} + +/*marking active/completed steps green*/ +/*The number of the step and the connector before it = green*/ +#progressbar li.active:before, +#progressbar li.active:after { + background: #2098ce; + color: white; +} \ No newline at end of file diff --git a/public/styles/reviews.css b/public/styles/reviews.css new file mode 100644 index 00000000..514791bd --- /dev/null +++ b/public/styles/reviews.css @@ -0,0 +1,243 @@ +.card { + background: #fff; + border-radius: 8px; + box-shadow: 0px 32px 55px -23px rgba(162, 172, 203, 1); + font-weight: 400; + font-size: 62.5%; + width: 98%; + line-height: 1.7; + text-rendering: optimizeLegibility; + overflow-x: hidden; + display: flex; + align-items: center; + justify-content: center; +} + +.review-card { + padding-right: 20px; +} + +.title { + font-size: 2.4rem; + text-align: center; + margin: 2rem 0; +} + +.out-of { + display: flex; + align-items: center; + justify-content: space-around; + background: #f3fbfb; + margin: 0 auto; + width: 20rem; + padding: 1rem 1rem; + border-radius: 30px; +} + +.out-of .stars { + font-size: 1.4rem; + color: #fccc4d; +} + +.out-of span { + font-size: 1.4rem; +} + +.total-reviews { + text-align: center; + font-size: 1.4rem; + margin: 1rem 0; +} + +.ratings { + width: 27rem; + margin: 2rem auto; + font-size: 1.4rem; +} + +.ratings .star-number { + padding-right: 1rem; + flex: 1; +} + +.ratings .percent { + padding-left: 1rem; + flex: 1; +} + +.ratings .rating { + display: flex; + align-items: center; + justify-content: space-between; +} + +.ratings .rating:not(:last-of-type) { + margin-bottom: 1rem; +} + +.ratings .rating-bar { + background: #f3fbfb; + position: relative; + flex: 4; + height: 1.25rem; + border-radius: 30px; +} + +.bar { + background: #fccc4d; + height: 1.25rem; + width: 50%; + border-radius: 30px; + box-shadow: 5px 5px 15px 3px rgba(252, 204, 77, 0.45); +} + +.testimonial-box { + width: 100%; + box-shadow: 2px 2px 30px rgba(0, 0, 0, 0.1); + background-color: #ffffff; + padding: 20px; + margin: 15px; + cursor: pointer; +} + +.profile-img { + width: 50px; + height: 50px; + border-radius: 50%; + overflow: hidden; + margin-right: 10px; +} + +.profile-img img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; +} + +.profile { + display: flex; + align-items: center; +} + +.name-user { + display: flex; + flex-direction: column; +} + +.name-user strong { + color: #3d3d3d; + font-size: 1.1rem; + letter-spacing: 0.5px; +} + +.name-user span { + color: #979797; + font-size: 0.8rem; +} + +.reviews { + color: #f9d71c; +} + +.box-top { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} + +.client-comment p { + font-size: 0.9rem; + color: #4b4b4b; +} + +.testimonial-box:hover { + transform: translateY(-10px); + transition: all ease 0.3s; +} + +@media(max-width:1060px) { + .testimonial-box { + width: 45%; + padding: 10px; + } +} + +@media(max-width:790px) { + .testimonial-box { + width: 100%; + } + + .testimonial-heading h1 { + font-size: 1.4rem; + } +} + +@media(max-width:340px) { + .box-top { + flex-wrap: wrap; + margin-bottom: 10px; + } + + .reviews { + margin-top: 10px; + } +} + +::selection { + color: #ffffff; + background-color: #252525; +} + +.modal-info { + justify-content: center; + align-items: center; +} + +.bx-heart { + font-size: 1.5em; +} + +.bxs-star { + color: orange; +} + +.bxs-star-half { + color: orange; +} + +.totalreviews { + font-size: 0.8rem; + text-align: right; +} + +.review { + padding-top: 30px; +} + +.modal-footer { + border-top: 0 none; + justify-content: center; +} + +.to-reviews { + cursor: pointer; + justify-content: right; + text-decoration: underline; +} + +.x-button { + position: absolute; + right: 5px; + top: 5px; + padding: 10px; +} + +.shop-item-button { + background-color: black; + border: none; + width: 200px; + height: 50px; + padding-right: 20px; +} diff --git a/public/styles/services.css b/public/styles/services.css new file mode 100644 index 00000000..39f77766 --- /dev/null +++ b/public/styles/services.css @@ -0,0 +1,67 @@ +.action-button { + min-width: 40%; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.action-button:hover, +.action-button:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} + +.action-button-secondary { + min-width: 40%; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.action-button-secondary:hover, +.action-button-secondary:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; +} + +.action-button-fixed { + width: 100px; + background: #2098ce; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.action-button-fixed:hover, +.action-button-fixed:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; +} + +.action-button-fixed-secondary { + width: 100px; + background: #aCbEd0; + font-weight: bold; + color: white; + border: 0 none; + border-radius: 25px; + cursor: pointer; + padding: 10px 5px; + margin: 10px 5px; +} + +.action-button-fixed-secondary:hover, +.action-button-fixed-secondary:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #aCbEd0; +} \ No newline at end of file diff --git a/public/styles/test.css b/public/styles/test.css index 22121919..313e86ac 100644 --- a/public/styles/test.css +++ b/public/styles/test.css @@ -1,25 +1,4 @@ @import url('http://fonts.cdnfonts.com/css/rock-salt'); -/* body { - margin: 0; - padding: 0; - background-color: #f9f9f9; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-line-pack: center; - align-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - min-height: 100vh; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - font-family: 'Raleway'; -} */ - .card { margin-top:77.5px; position: relative; @@ -41,12 +20,6 @@ .grandtotal { padding-left: 10px; } - -.payment-title { - width: 100%; - text-align: center; -} - .cancel { width: 100px; background: #2098ce; @@ -59,333 +32,6 @@ margin: 10px 5px; } -.form-container .field-container:first-of-type { - grid-area: name; -} - -.form-container .field-container:nth-of-type(2) { - grid-area: number; -} - -.form-container .field-container:nth-of-type(3) { - grid-area: expiration; -} - -.form-container .field-container:nth-of-type(4) { - grid-area: security; -} - -/* .field-container input { - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -.field-container { - position: relative; -} */ - -.form-container { - display: grid; - grid-column-gap: 10px; - grid-template-columns: auto auto; - /* grid-template-rows: 90px 90px 90px; */ - grid-template-areas: "name name""number number""expiration security"; - /* max-width: 400px; - padding: 20px; */ - color: #707070; -} - -/* label { - padding-bottom: 5px; - font-size: 13px; -} - -input { - margin-top: 3px; - padding: 15px; - font-size: 16px; - width: 100%; - border-radius: 3px; - border: 1px solid #dcdcdc; -} */ - -.ccicon { - height: 38px; - position: absolute; - right: 6px; - top: calc(50% - 17px); - width: 60px; -} - -/* CREDIT CARD IMAGE STYLING */ -.preload * { - -webkit-transition: none !important; - -moz-transition: none !important; - -ms-transition: none !important; - -o-transition: none !important; -} - -.credit-container { - width: 100%; - max-width: 400px; - max-height: 261px; - height: 54vw; - padding: 20px; -} - -#ccsingle { - position: absolute; - right: 15px; - top: 20px; -} - -#ccsingle svg { - width: 100px; - max-height: 60px; -} - -.creditcard svg#cardfront, -.creditcard svg#cardback { - width: 100%; - -webkit-box-shadow: 1px 5px 6px 0px black; - box-shadow: 1px 5px 6px 0px black; - border-radius: 22px; -} - -#generatecard { - cursor: pointer; - float: right; - font-size: 12px; - color: #fff; - padding: 2px 4px; - background-color: #909090; - border-radius: 4px; - cursor: pointer; - float: right; -} - -/* CHANGEABLE CARD ELEMENTS */ -.creditcard .lightcolor, -.creditcard .darkcolor { - -webkit-transition: fill .5s; - transition: fill .5s; -} - -.creditcard .lightblue { - fill: #03A9F4; -} - -.creditcard .lightbluedark { - fill: #0288D1; -} - -.creditcard .red { - fill: #ef5350; -} - -.creditcard .reddark { - fill: #d32f2f; -} - -.creditcard .purple { - fill: #ab47bc; -} - -.creditcard .purpledark { - fill: #7b1fa2; -} - -.creditcard .cyan { - fill: #26c6da; -} - -.creditcard .cyandark { - fill: #0097a7; -} - -.creditcard .green { - fill: #66bb6a; -} - -.creditcard .greendark { - fill: #388e3c; -} - -.creditcard .lime { - fill: #d4e157; -} - -.creditcard .limedark { - fill: #afb42b; -} - -.creditcard .yellow { - fill: #ffeb3b; -} - -.creditcard .yellowdark { - fill: #f9a825; -} - -.creditcard .orange { - fill: #ff9800; -} - -.creditcard .orangedark { - fill: #ef6c00; -} - -.creditcard .grey { - fill: #bdbdbd; -} - -.creditcard .greydark { - fill: #616161; -} - -/* FRONT OF CARD */ -#svgname { - text-transform: uppercase; -} - -#cardfront .st2 { - fill: #FFFFFF; -} - -#cardfront .st3 { - font-family: 'Source Code Pro', monospace; - font-weight: 600; -} - -#cardfront .st4 { - font-size: 54.7817px; -} - -#cardfront .st5 { - font-family: 'Source Code Pro', monospace; - font-weight: 400; -} - -#cardfront .st6 { - font-size: 33.1112px; -} - -#cardfront .st7 { - opacity: 0.6; - fill: #FFFFFF; -} - -#cardfront .st8 { - font-size: 24px; -} - -#cardfront .st9 { - font-size: 36.5498px; -} - -#cardfront .st10 { - font-family: 'Source Code Pro', monospace; - font-weight: 300; -} - -#cardfront .st11 { - font-size: 16.1716px; -} - -#cardfront .st12 { - fill: #4C4C4C; -} - -/* BACK OF CARD */ -#cardback .st0 { - fill: none; - stroke: #0F0F0F; - stroke-miterlimit: 10; -} - -#cardback .st2 { - fill: #111111; -} - -#cardback .st3 { - fill: #F2F2F2; -} - -#cardback .st4 { - fill: #D8D2DB; -} - -#cardback .st5 { - fill: #C4C4C4; -} - -#cardback .st6 { - font-family: 'Source Code Pro', monospace; - font-weight: 400; -} - -#cardback .st7 { - font-size: 27px; -} - -#cardback .st8 { - opacity: 0.6; -} - -#cardback .st9 { - fill: #FFFFFF; -} - -#cardback .st10 { - font-size: 24px; -} - -#cardback .st11 { - fill: #EAEAEA; -} - -#cardback .st12 { - font-family: 'Rock Salt', cursive; -} - -#cardback .st13 { - font-size: 37.769px; -} - -/* FLIP ANIMATION */ -.container { - perspective: 1000px; -} - -.creditcard { - width: 100%; - max-width: 400px; - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; - transition: -webkit-transform 0.6s; - -webkit-transition: -webkit-transform 0.6s; - transition: transform 0.6s; - transition: transform 0.6s, -webkit-transform 0.6s; - cursor: pointer; -} - -.creditcard .front, -.creditcard .back { - position: absolute; - width: 100%; - max-width: 400px; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-font-smoothing: antialiased; - color: #47525d; -} - -.creditcard .back { - -webkit-transform: rotateY(180deg); - transform: rotateY(180deg); -} - -.creditcard.flipped { - -webkit-transform: rotateY(180deg); - transform: rotateY(180deg); +.cancel:hover, .cancel:focus { + box-shadow: 0 0 0 2px white, 0 0 0 3px #2098ce; } \ No newline at end of file diff --git a/public/styles/voucher.css b/public/styles/voucher.css new file mode 100644 index 00000000..a8a3b947 --- /dev/null +++ b/public/styles/voucher.css @@ -0,0 +1,190 @@ +.voucher-container { + position: relative; + perspective: 800px; + border-radius: 4px; + display: flex; + flex-direction: column; + transform-style: preserve-3d; + position :relative; + border-radius: .25rem; + padding: 0; +} + +.vouchers { + position: relative; + height : 170px; + display: flex; + flex-direction: column; + transform-style: preserve-3d; + transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); + position :relative; + perspective :800px; + border-radius: .25rem; + padding: 0; +} + +.vouchers .face { + position: absolute; + width : 100%; + height : 100%; + backface-visibility: hidden; +} + +.vouchers .face.back { + transform: rotateY(180deg); +} +.vouchers.flipped { + transform: rotateY(180deg); +} + +.voucher-body, +.voucher-footer { + display: flex; + position: relative; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + transition: box-shadow .3s ease; +} + +.voucher-body { + overflow: hidden; + flex-direction: column; + box-shadow: inset 0px 0px 0px 1px #e5e9ec; + border-top-left-radius: .25rem; + border-top-right-radius: .25rem; +} + +.voucher-footer { + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: .5rem; + box-shadow: inset 0px -1px 0px 1px #e5e9ec; + border-bottom-left-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +.voucher:hover .voucher-footer { + box-shadow: inset 0px -1px 0px 1px #e5e9ec, 0 0.125rem 0.25rem rgba(33, 37, 41, 0.075) !important; +} + +.voucher-text { + flex: 1 1 auto; + padding: 1.25rem 2rem; + min-height: 100px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} + +.voucher-img { + display: block; + -o-object-fit: cover; + object-fit: cover; + width: 100%; + height: 100px; + border-top-left-radius: .25rem; + border-top-right-radius: .25rem; +} + +.voucher-border-left, +.voucher-border-right { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; +} + +.voucher-border-right { + right: 0; +} + +.voucher-border-left:before, +.voucher-border-right:before { + content: ""; + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #e5e9ec; + border-radius: 50%; + background: #f8f9fa; + /* Change THIS when changing container background color*/ +} + +.voucher-border-left:before { + left: -15px; +} + +.voucher-border-right:before { + right: -15px; +} + +.voucher-details .details-icon, +.voucher-details .details-text { + display: inline-block; + vertical-align: middle; + margin-right: -4px; +} + +.voucher-details .details-icon { + margin-right: 8px; + width: 24px; +} + +.voucher-details .text-title { + font-size: 10px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: normal; + letter-spacing: normal; + color: rgba(0, 0, 0, 0.38); +} + +.voucher-details .text-description { + display: flex; + justify-content: flex-start; + color: rgba(0, 0, 0, 0.7); + font-size: 14px; + font-weight: 600; + font-style: normal; + font-stretch: normal; + line-height: normal; + letter-spacing: normal; +} + +.voucher-overlay { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1; + background: rgba(0, 0, 0, 0.6); + opacity: 0; + visibility: hidden; + transition: opacity .3s ease; + display: flex; + justify-content: center; + align-items: center; +} + +.voucher:hover .voucher-overlay { + opacity: 1; + visibility: visible; +} + +.text-primary { + color: #22c9f3 !important; +} + +.bg-blue-gradient { + background: #22c9f3; +} + + diff --git a/public/uploads/1/1-1656487084911.png b/public/uploads/1/1-1656487084911.png new file mode 100644 index 00000000..cd4557fe Binary files /dev/null and b/public/uploads/1/1-1656487084911.png differ diff --git a/public/uploads/1/1-1657785840362.jpg b/public/uploads/1/1-1657785840362.jpg new file mode 100644 index 00000000..9dcb2540 Binary files /dev/null and b/public/uploads/1/1-1657785840362.jpg differ diff --git a/public/uploads/1/1-1657785934410.jpg b/public/uploads/1/1-1657785934410.jpg new file mode 100644 index 00000000..fa3044c0 Binary files /dev/null and b/public/uploads/1/1-1657785934410.jpg differ diff --git a/public/uploads/1/1-1657786090725.png b/public/uploads/1/1-1657786090725.png new file mode 100644 index 00000000..f9c83626 Binary files /dev/null and b/public/uploads/1/1-1657786090725.png differ diff --git a/public/uploads/1/1-1657786273569.png b/public/uploads/1/1-1657786273569.png new file mode 100644 index 00000000..f9c83626 Binary files /dev/null and b/public/uploads/1/1-1657786273569.png differ diff --git a/public/uploads/1/1-1657786282582.png b/public/uploads/1/1-1657786282582.png new file mode 100644 index 00000000..f9c83626 Binary files /dev/null and b/public/uploads/1/1-1657786282582.png differ diff --git a/public/uploads/1/1-1658125772230.jpg b/public/uploads/1/1-1658125772230.jpg new file mode 100644 index 00000000..fbb74ee6 Binary files /dev/null and b/public/uploads/1/1-1658125772230.jpg differ diff --git a/public/uploads/1/1-1658126476249.jpg b/public/uploads/1/1-1658126476249.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658126476249.jpg differ diff --git a/public/uploads/1/1-1658126516760.jpg b/public/uploads/1/1-1658126516760.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658126516760.jpg differ diff --git a/public/uploads/1/1-1658126523547.jpg b/public/uploads/1/1-1658126523547.jpg new file mode 100644 index 00000000..fbb74ee6 Binary files /dev/null and b/public/uploads/1/1-1658126523547.jpg differ diff --git a/public/uploads/1/1-1658126554164.jpg b/public/uploads/1/1-1658126554164.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658126554164.jpg differ diff --git a/public/uploads/1/1-1658126564691.jpg b/public/uploads/1/1-1658126564691.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658126564691.jpg differ diff --git a/public/uploads/1/1-1658127397773.jpg b/public/uploads/1/1-1658127397773.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658127397773.jpg differ diff --git a/public/uploads/1/1-1658128594455.jpg b/public/uploads/1/1-1658128594455.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658128594455.jpg differ diff --git a/public/uploads/1/1-1658128635993.jpg b/public/uploads/1/1-1658128635993.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658128635993.jpg differ diff --git a/public/uploads/1/1-1658128715664.jpg b/public/uploads/1/1-1658128715664.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658128715664.jpg differ diff --git a/public/uploads/1/1-1658128846987.png b/public/uploads/1/1-1658128846987.png new file mode 100644 index 00000000..38ada872 Binary files /dev/null and b/public/uploads/1/1-1658128846987.png differ diff --git a/public/uploads/1/1-1658129503981.jpg b/public/uploads/1/1-1658129503981.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658129503981.jpg differ diff --git a/public/uploads/1/1-1658392157273.png b/public/uploads/1/1-1658392157273.png new file mode 100644 index 00000000..6086c98f Binary files /dev/null and b/public/uploads/1/1-1658392157273.png differ diff --git a/public/uploads/1/1-1658392184231.jpg b/public/uploads/1/1-1658392184231.jpg new file mode 100644 index 00000000..fbb74ee6 Binary files /dev/null and b/public/uploads/1/1-1658392184231.jpg differ diff --git a/public/uploads/1/1-1658392188247.png b/public/uploads/1/1-1658392188247.png new file mode 100644 index 00000000..6086c98f Binary files /dev/null and b/public/uploads/1/1-1658392188247.png differ diff --git a/public/uploads/1/1-1658392263108.png b/public/uploads/1/1-1658392263108.png new file mode 100644 index 00000000..6086c98f Binary files /dev/null and b/public/uploads/1/1-1658392263108.png differ diff --git a/public/uploads/1/1-1658941784850.jpg b/public/uploads/1/1-1658941784850.jpg new file mode 100644 index 00000000..e7e64857 Binary files /dev/null and b/public/uploads/1/1-1658941784850.jpg differ diff --git a/public/uploads/1/1-1660309962737.png b/public/uploads/1/1-1660309962737.png new file mode 100644 index 00000000..67dfbd45 Binary files /dev/null and b/public/uploads/1/1-1660309962737.png differ diff --git a/public/uploads/1/1-1660310079659.png b/public/uploads/1/1-1660310079659.png new file mode 100644 index 00000000..67dfbd45 Binary files /dev/null and b/public/uploads/1/1-1660310079659.png differ diff --git a/public/uploads/1/1-1660310141188.png b/public/uploads/1/1-1660310141188.png new file mode 100644 index 00000000..58687e8b Binary files /dev/null and b/public/uploads/1/1-1660310141188.png differ diff --git a/public/uploads/1/1-1660311494799.jpg b/public/uploads/1/1-1660311494799.jpg new file mode 100644 index 00000000..a5066f38 Binary files /dev/null and b/public/uploads/1/1-1660311494799.jpg differ diff --git a/public/uploads/15/hello.png b/public/uploads/15/hello.png new file mode 100644 index 00000000..32553a47 Binary files /dev/null and b/public/uploads/15/hello.png differ diff --git a/public/uploads/2/2-1660371030085.png b/public/uploads/2/2-1660371030085.png new file mode 100644 index 00000000..a6fa5b1b Binary files /dev/null and b/public/uploads/2/2-1660371030085.png differ diff --git a/public/uploads/3/3-1660299915456.jpg b/public/uploads/3/3-1660299915456.jpg new file mode 100644 index 00000000..4662ed95 Binary files /dev/null and b/public/uploads/3/3-1660299915456.jpg differ diff --git a/public/uploads/3/3-1660411606715.jpeg b/public/uploads/3/3-1660411606715.jpeg new file mode 100644 index 00000000..5f57a025 Binary files /dev/null and b/public/uploads/3/3-1660411606715.jpeg differ diff --git a/public/uploads/3/3-1660464875163.png b/public/uploads/3/3-1660464875163.png new file mode 100644 index 00000000..4cdc3bf4 Binary files /dev/null and b/public/uploads/3/3-1660464875163.png differ diff --git a/public/uploads/3/3-1660584837075.jpg b/public/uploads/3/3-1660584837075.jpg new file mode 100644 index 00000000..4662ed95 Binary files /dev/null and b/public/uploads/3/3-1660584837075.jpg differ diff --git a/public/product_uploads/12121212.jpg b/public/uploads/3/3-1660585068586.jpg similarity index 100% rename from public/product_uploads/12121212.jpg rename to public/uploads/3/3-1660585068586.jpg diff --git a/public/uploads/3/3-1660585195766.jpg b/public/uploads/3/3-1660585195766.jpg new file mode 100644 index 00000000..d534b721 Binary files /dev/null and b/public/uploads/3/3-1660585195766.jpg differ diff --git a/public/uploads/3/3-1660585255077.jpg b/public/uploads/3/3-1660585255077.jpg new file mode 100644 index 00000000..4662ed95 Binary files /dev/null and b/public/uploads/3/3-1660585255077.jpg differ diff --git a/public/uploads/3/3-1660585298983.jpg b/public/uploads/3/3-1660585298983.jpg new file mode 100644 index 00000000..f0654fa5 Binary files /dev/null and b/public/uploads/3/3-1660585298983.jpg differ diff --git a/public/uploads/3/3-1660585347002.jpg b/public/uploads/3/3-1660585347002.jpg new file mode 100644 index 00000000..7eec7d24 Binary files /dev/null and b/public/uploads/3/3-1660585347002.jpg differ diff --git a/public/uploads/3/3-1660585417910.jpg b/public/uploads/3/3-1660585417910.jpg new file mode 100644 index 00000000..cee3cd08 Binary files /dev/null and b/public/uploads/3/3-1660585417910.jpg differ diff --git a/public/uploads/3/3-1660585457709.jpg b/public/uploads/3/3-1660585457709.jpg new file mode 100644 index 00000000..8ee3ac4a Binary files /dev/null and b/public/uploads/3/3-1660585457709.jpg differ diff --git a/public/uploads/3/3-1660585492835.jpg b/public/uploads/3/3-1660585492835.jpg new file mode 100644 index 00000000..974212db Binary files /dev/null and b/public/uploads/3/3-1660585492835.jpg differ diff --git a/public/uploads/3/3-1660585529761.jpg b/public/uploads/3/3-1660585529761.jpg new file mode 100644 index 00000000..d685f0e1 Binary files /dev/null and b/public/uploads/3/3-1660585529761.jpg differ diff --git a/public/uploads/3/3-1660585578353.jpg b/public/uploads/3/3-1660585578353.jpg new file mode 100644 index 00000000..6765ee2a Binary files /dev/null and b/public/uploads/3/3-1660585578353.jpg differ diff --git a/public/product_uploads/54132463.jpg b/public/uploads/3/3-1660585619968.jpg similarity index 100% rename from public/product_uploads/54132463.jpg rename to public/uploads/3/3-1660585619968.jpg diff --git a/public/uploads/3/3-1660585638339.jpg b/public/uploads/3/3-1660585638339.jpg new file mode 100644 index 00000000..7553a70a Binary files /dev/null and b/public/uploads/3/3-1660585638339.jpg differ diff --git a/public/uploads/3/3-1660585677772.jpeg b/public/uploads/3/3-1660585677772.jpeg new file mode 100644 index 00000000..40462384 Binary files /dev/null and b/public/uploads/3/3-1660585677772.jpeg differ diff --git a/public/uploads/3/3-1660585719833.jpeg b/public/uploads/3/3-1660585719833.jpeg new file mode 100644 index 00000000..7d5f7d27 Binary files /dev/null and b/public/uploads/3/3-1660585719833.jpeg differ diff --git a/public/uploads/3/3-1660585750790.jpeg b/public/uploads/3/3-1660585750790.jpeg new file mode 100644 index 00000000..dc73e163 Binary files /dev/null and b/public/uploads/3/3-1660585750790.jpeg differ diff --git a/public/uploads/3/3-1660585786144.jpeg b/public/uploads/3/3-1660585786144.jpeg new file mode 100644 index 00000000..0576ad0a Binary files /dev/null and b/public/uploads/3/3-1660585786144.jpeg differ diff --git a/public/uploads/3/3-1660585831076.jpeg b/public/uploads/3/3-1660585831076.jpeg new file mode 100644 index 00000000..234b58ea Binary files /dev/null and b/public/uploads/3/3-1660585831076.jpeg differ diff --git a/public/uploads/3/3-1660585834925.jpeg b/public/uploads/3/3-1660585834925.jpeg new file mode 100644 index 00000000..8dc518f5 Binary files /dev/null and b/public/uploads/3/3-1660585834925.jpeg differ diff --git a/public/uploads/3/3-1660585874114.jpeg b/public/uploads/3/3-1660585874114.jpeg new file mode 100644 index 00000000..0274b8ed Binary files /dev/null and b/public/uploads/3/3-1660585874114.jpeg differ diff --git a/public/uploads/3/3-1660585935766.jpeg b/public/uploads/3/3-1660585935766.jpeg new file mode 100644 index 00000000..7a0d03db Binary files /dev/null and b/public/uploads/3/3-1660585935766.jpeg differ diff --git a/public/uploads/3/3-1660585981782.jpeg b/public/uploads/3/3-1660585981782.jpeg new file mode 100644 index 00000000..0e18e31c Binary files /dev/null and b/public/uploads/3/3-1660585981782.jpeg differ diff --git a/public/uploads/3/3-1660586016443.jpeg b/public/uploads/3/3-1660586016443.jpeg new file mode 100644 index 00000000..bb59133a Binary files /dev/null and b/public/uploads/3/3-1660586016443.jpeg differ diff --git a/public/uploads/3/3-1660586202477.jpg b/public/uploads/3/3-1660586202477.jpg new file mode 100644 index 00000000..9bbb90bf Binary files /dev/null and b/public/uploads/3/3-1660586202477.jpg differ diff --git a/public/uploads/3/3-1660586230090.jpg b/public/uploads/3/3-1660586230090.jpg new file mode 100644 index 00000000..d534b721 Binary files /dev/null and b/public/uploads/3/3-1660586230090.jpg differ diff --git a/public/uploads/3/3-1660642143643.jpeg b/public/uploads/3/3-1660642143643.jpeg new file mode 100644 index 00000000..41a77644 Binary files /dev/null and b/public/uploads/3/3-1660642143643.jpeg differ diff --git a/public/uploads/7/7-1658993712548.jpeg b/public/uploads/7/7-1658993712548.jpeg new file mode 100644 index 00000000..c868e412 Binary files /dev/null and b/public/uploads/7/7-1658993712548.jpeg differ diff --git a/public/uploads/7/7-1658993778567.jpg b/public/uploads/7/7-1658993778567.jpg new file mode 100644 index 00000000..a96937ed Binary files /dev/null and b/public/uploads/7/7-1658993778567.jpg differ diff --git a/public/uploads/7/7-1658993815380.jpg b/public/uploads/7/7-1658993815380.jpg new file mode 100644 index 00000000..a96937ed Binary files /dev/null and b/public/uploads/7/7-1658993815380.jpg differ diff --git a/public/uploads/7/7-1658993841063.jpg b/public/uploads/7/7-1658993841063.jpg new file mode 100644 index 00000000..ace683e5 Binary files /dev/null and b/public/uploads/7/7-1658993841063.jpg differ diff --git a/public/uploads/7/7-1658995799240.jpeg b/public/uploads/7/7-1658995799240.jpeg new file mode 100644 index 00000000..c868e412 Binary files /dev/null and b/public/uploads/7/7-1658995799240.jpeg differ diff --git a/public/uploads/8/8-1660643926897.jpg b/public/uploads/8/8-1660643926897.jpg new file mode 100644 index 00000000..fa3044c0 Binary files /dev/null and b/public/uploads/8/8-1660643926897.jpg differ diff --git a/public/uploads/8/8-1660643954722.jpg b/public/uploads/8/8-1660643954722.jpg new file mode 100644 index 00000000..1f57963f Binary files /dev/null and b/public/uploads/8/8-1660643954722.jpg differ diff --git a/routes/admin.js b/routes/admin.js index 8d346caf..1cb72ac4 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -1,8 +1,11 @@ const express = require('express'); +const moment = require('moment'); const router = express.Router(); const flashMessage = require('../views/helpers/messenger'); const sequelizeUser = require("../config/DBConfig"); const { serializeUser } = require('passport'); +const { Op, where } = require('sequelize'); +const XLSX = require("xlsx"); const User = require("../models/User"); const Ticket = require('../models/Ticket'); const Feedback = require('../models/Feedback'); @@ -23,7 +26,6 @@ const NewsLetterLog = require("../models/Logs/NewsLetterLogs") // const PDFDocument = require("pdfkit-table"); const fs = require('fs'); const path = require('path'); -const moment = require('moment'); const { NONE } = require('sequelize'); const QRCode = require('qrcode'); @@ -36,6 +38,17 @@ const nodemailer = require("nodemailer"); const Mail = require("../config/MailConfig"); const mail = require("../config/NewMailConfig"); const { cwd } = require('process'); +const Service = require('../models/Service'); +const Appointment = require('../models/Appointment'); +const serviceController = require("../controllers/serviceController") +const TempUser = require("../models/TempUser"); +const Notification = require("../models/Notification"); +const Order = require('../models/Orders'); +const OrderItems = require('../models/OrderItems'); +const Chat = require('../models/Chat'); +const ChatUser = require('../models/ChatUser'); +const Msg = require('../models/Msg'); +const Withdrawal = require('../models/Withdrawal'); router.all('/*', ensureAdminAuthenticated, function (req, res, next) { req.app.locals.layout = 'admin'; // set your layout here @@ -57,7 +70,7 @@ router.get('/', (req, res) => { res.render("admin/adminBase") }) -router.get('/profile', (req, res) => { +router.get('/profile', ensureAuthenticated, (req, res) => { res.render("admin/adminProfile") }) @@ -78,28 +91,146 @@ router.post('/admin/flash', (req, res) => { res.redirect('/'); }); -router.get('/requests', (req, res) => { - res.render("admin/requests") +router.get('/requests', async (req, res) => { + let x = await req.user.getTailor() + if (!x) { + res.redirect('tailor/register') + } else { + + let now = moment(`${res.locals.today} ${res.locals.time}`, 'YYYY-MM-DD HH:mm:ss') + let requests = await Request.findAll({ + include: [ + { model: User, as: 'user' }, + { + model: Appointment, + order: [['createdAt', 'DESC']], + limit: 1 + }, + { + model: User, + as: 'tailor', + }, + { + model: User, + as: 'tailorChange', + }, + ], + where: { + [Op.or]: [ + { userId: req.user.id }, + { "$tailor.id$": req.user.id } + ], + }, + order: [ + ['createdAt', 'DESC'], + ] + }) + // console.log(requests[0].toJSON()) + res.render('admin/requests', { requests }) + } }); -router.post('/requests/edit', async (req, res) => { - await Request.update({ status: req.body.status }, { - where: { - id: req.body.id - }, - }); +router.post('/request/status', serviceController.requestStatus, (req, res) => { + return res.json({}) +}); + +router.post('/request/tailorChange', async (req, res) => { + await Request.findByPk(req.body.id) + .then(async (request) => { + await Appointment.destroy({ where: { requestId: req.body.id, tailorId: request.tailorId, datetime: { [Op.gte]: moment() } } }) + await Request.update({ tailorChangeId: null, tailorId: request.tailorChangeId, statusCode: 1 }, { + where: { + id: req.body.id + }, + }); + }) + return res.json({}); +}); + +router.post('/appointment/status', async (req, res) => { + let x = await Request.findOne({ include: { model: Appointment, where: { id: req.body.id } } }) + x.appointments[0].confirmed = req.body.status + x.appointments[0].save() + if (req.body.status === 'Confirmed') { + x.status = "Appointment Confirmed" + x.adminstatus = "Appointment Confirmed" + x.adminColor = "green" + x.userColor = "green" + } else { + x.status = "Appointment Confirmed" + x.adminstatus = "Appointment Rejected! Please book again." + x.adminColor = "green" + x.userColor = "green" + } + x.save() return res.json({}); }); router.delete('/requests/delete', async (req, res) => { await Request.destroy({ where: { - id: req.body.id + id: req.body.id } }); return res.json({}) }); +router.get('/requests/chat', async (req, res) => { + let chatids = await ChatUser.findAll({ + where: { userId: req.user.id }, + include: { + model: Chat, + include: { + model: User, + where: { + id: { [Op.ne]: req.user.id } + } + } + } + }) + let chats = new Array() + + chatids.forEach(chatid => { + chats.push(chatid.chat) + }); + // console.log(JSON.stringify(chats)) + + res.render('services/chat', { chats }) +}); + +router.get('/requests/chat/:id', async (req, res) => { + let chatids = await ChatUser.findAll({ + where: { userId: req.user.id }, + include: { + model: Chat, + include: [ + { + model: User, + where: { + id: { [Op.ne]: req.user.id } + } + }, + { + model: Msg, + required: false + + } + ] + }, + order: [ + [Chat, Msg, 'createdAt', 'DESC'] + ] + }) + let chats = new Array() + + chatids.forEach(chatid => { + chats.push(chatid.chat) + }); + // let currentchat = await Chat.findByPk(req.params.id, { include: [{ model: Msg, required: false }, { model: User, where: { id: { [Op.ne]: req.user.id } } }] }) + // console.log(currentchat.users) + res.render('services/chat', { chats }) +}); + router.get('/TicketMangement', ensureAdminAuthenticated, async (req, res) => { tickets = (await Ticket.findAll()).map((x) => x.dataValues) res.render("admin/TicketMangement", { tickets }) @@ -235,6 +366,62 @@ router.get('/UserManagement', ensureAdminAuthenticated, async (req, res) => { res.render("admin/userManagement", { Users }) }) +router.get('/editUser/:id', (req, res) => { + User.findByPk(req.params.id) + .then((user) => { + res.render('admin/editUser', { user }); + }) + .catch(err => console.log(err)); +}); + +router.post('/editUser/:id', async (req, res) => { + x = 0; + y = 0 + userr = await User.findOne({ where: { id: req.params.id } }) + if ((await User.findOne({ where: { email: req.body.email } })) && userr.email != req.body.email) { + x = 1 + } + if ((await User.findOne({ where: { name: req.body.name } })) && userr.name != req.body.name) { + y = 1 + } + if (x == 1 && y != 1) { + flashMessage(res, 'error', 'This email has already been registered'); + return res.redirect("/admin/UserManagement"); + } + else if (x != 1 && y == 1) { + flashMessage(res, 'error', 'This name has already been registered'); + return res.redirect("/admin/UserManagement"); + } + else if (x == 1 && y == 1) { + flashMessage(res, 'error', 'Both name and email has already been registered'); + return res.redirect("/admin/UserManagement"); + } + let name = req.body.name; + let email = req.body.email; + let phoneNumber = req.body.phoneNumber; + let gender = req.body.gender; + let isban = req.body.isban; + let bankAccount = req.body.bankAccount; + await User.update({ name, email, phoneNumber, bankAccount, gender, isban }, { where: { id: req.params.id } }) + await TempUser.update({ email }, { where: { email: userr.email } }) + flashMessage(res, 'success', 'Account successfully edited'); + res.redirect('/admin/UserManagement') +}) + +router.post('/deleteUser/:id', async function + (req, res) { + try { + let user = await User.findByPk(req.params.id); + User.destroy({ where: { id: user.id } }); + TempUser.destroy({ where: { email: user.email } }); + flashMessage(res, 'success', 'Account successfully deleted.'); + res.redirect('/admin/UserManagement'); + } + catch (err) { + console.log(err); + } +}); + router.get("/NewsLetterSendMail", ensureAdminAuthenticated, async (req, res) => { res.render("admin/NewsLetterSendMail") @@ -878,10 +1065,10 @@ router.post('/addVouchers', ensureAdminAuthenticated, async (req, res) => { expiry_date: req.body.expiry_date }); flashMessage(res, "success", name + 'Voucher Added Successfully'); - res.redirect("/admin") + res.redirect("/admin/manageVouchers") } catch (e) { console.log(e) - res.redirect("/admin") + res.redirect("/admin/manageVouchers") } }) @@ -891,6 +1078,24 @@ router.get('/editVoucher/:id', ensureAuthenticated, async (req, res) => { res.render("rewards/editVouchers", { voucher }) }) +router.get('/revenue', ensureAuthenticated, async (req, res) => { + const orders = (await OrderItems.findAll({ + include: Order, order: [ + ['createdAt', 'DESC'], + ['product_name', 'ASC'], + ] + })) + const sales = (await Order.sum('orderTotal')).toFixed(2) + + var sellerRevenue = 0 + orders.forEach(element => { + let data = ((element.product_price * element.qtyPurchased) + element.shipping_rate) + sellerRevenue += data + }); + const revenue = (sales - ((sellerRevenue / 100) * 83)).toFixed(2) + res.render('admin/revenue.handlebars', { orders, revenue }); +}) + router.post('/editVoucher/:id', ensureAuthenticated, async (req, res) => { let { name, voucher_code, description, spools_needed, discount_amount, quantity, expiry_date } = req.body; @@ -906,7 +1111,7 @@ router.post('/editVoucher/:id', ensureAuthenticated, async (req, res) => { }, { where: { id: req.params.id } }) flashMessage(res, 'success', name + " Edited Successfully!"); - res.redirect("/admin") + res.redirect("/admin/manageVouchers") }) @@ -922,14 +1127,56 @@ router.get('/tailor/register', async (req, res) => { }); router.post('/tailor/register', async (req, res) => { - await Tailor.create({userId: req.user.id}) - flashMessage(res,"success", 'Registered as Tailor Successfully'); - res.redirect("/admin") -}); + await Tailor.findOrCreate({ where: { id: req.user.id }, defaults: { id: req.user.id, userId: req.user.id } }) + .then(([tailor, created]) => { + if (created) { + flashMessage(res, "success", 'Registered as Tailor Successfully'); + } else { + flashMessage(res, "error", 'Already registered as tailor'); + } + }) + res.redirect("/admin/requests") +}); +router.get('/livechat/:id', async (req, res) => { + res.render("admin/livechat") +}); +router.get('/withdrawal', async (req, res) => { + var withdrawals = await Withdrawal.findAll({ + include: User, order: [ + ['createdAt', 'DESC'], + ['withdrawal_amount', 'DESC'], + ] + }) + res.render("admin/withdrawals", { withdrawals }) +}); +router.post('/withdrawal', async (req, res) => { + var withdrawal = await Withdrawal.findOne({ where: { id: req.body.id } }) + var user = await User.findByPk(withdrawal.sellerID) + if (withdrawal.status == "Payout Received" && req.body.status != "Payout Received" || withdrawal.status == "Processing" && req.body.status == "Awaiting Authorization") { + res.send({ message: "Cannot change status of payout is being processed/after its been received", status: "error" }) + } else if (req.body.status == "Processing") { + await Withdrawal.update({ status: req.body.status, authorization_by: req.user.name, authorizee_id: req.user.id }, { + where: { + id: req.body.id + } + }) + await User.update({total_balance: user.total_balance - parseInt(withdrawal.withdrawal_amount), withdrawn_amount: user.withdrawn_amount + parseInt(withdrawal.withdrawal_amount)},{where : {id: withdrawal.sellerID}}) + } else if (req.body.status == "Payout Received") { + if (req.user.id == withdrawal.authorizee_id) { + await Withdrawal.update({ status: req.body.status, authorization_by: req.user.name, authorizee_id: req.user.id }, { + where: { + id: req.body.id + } + }) + } else { + res.send({ message: "Only the Admin that authorized the payout can complete it", status: "error" }) + } + } +}); module.exports = router; diff --git a/routes/api.js b/routes/api.js index 71dea92e..35dffc43 100644 --- a/routes/api.js +++ b/routes/api.js @@ -1,6 +1,6 @@ const express = require('express'); const router = express.Router(); - +const moment = require('moment') const User = require("../models/User"); const Ticket = require('../models/Ticket'); const Feedback = require('../models/Feedback'); @@ -9,10 +9,18 @@ const Reward = require('../models/Reward') const Request = require('../models/Request'); const Service = require('../models/Service'); const Appointment = require('../models/Appointment'); -const { Op } = require('sequelize'); +const { Op, where } = require('sequelize'); +const Tailor = require('../models/Tailor'); +const Notification = require('../models/Notification'); +const Chat = require('../models/Chat'); +const ChatUser = require('../models/ChatUser'); +const ensureAuthenticated = require('../views/helpers/auth'); +const NotificationCount = require('../models/NotificationCount'); +const UserNotifications = require('../models/UserNotifications'); +const Msg = require('../models/Msg'); +const RequestItem = require('../models/RequestItem'); router.get('/requests', async (req, res) => { - console.log("request receieved") // console.log( // await Request.findAll({ // where: { @@ -20,7 +28,7 @@ router.get('/requests', async (req, res) => { // { userId: req.user.id }, // { tailorID: req.user.id } // ] - + // }, // include: ['service', "user", 'appointments'], // }) @@ -28,29 +36,178 @@ router.get('/requests', async (req, res) => { return res.json({ total: await Request.count(), rows: await Request.findAll({ + include: { all: true, nested: true }, where: { [Op.or]: [ { userId: req.user.id }, - { tailorID: req.user.id } + { "$tailor.userId$": req.user.id } ] - }, - include: ['service', "user", 'appointments'], + } }) }) - + }); -router.get('/appointments/:date', async (req, res) => { - console.log("request receieved") +router.get('/request/count', async (req, res) => { return res.json({ - total: await Appointment.count(), - rows: await Appointment.findAll({ + total: await Request.count({ where: { userId: req.user.id } }) + }) + +}); + +router.get('/appointments', async (req, res) => { + if (req.query.date && req.query.id) { + let date = moment(`${req.query.date}`) + let date2 = moment(`${req.query.date}`).add(1, 'd') + return res.json({ + total: await Appointment.count(), + rows: await Appointment.findAll({ where: { datetime: { [Op.gte]: date, [Op.lt]: date2 }, tailorId: req.query.id, confirmed: { [Op.or]: ['Pending', 'Confirmed'] } } }) + }) + // console.log(await Appointment.findAll({ where: { datetime: { [Op.gte]: date, [Op.lt]: date2 }, tailorId: req.query.id, confirmed: { [Op.ne]: false } } })) + } + else { + return res.status(400).send("Invalid Query Params") + } + +}); + +router.get('/appointment/:id', async (req, res) => { + let confirmed + let appts = await Appointment.findAll({ + include: Request, where: { - date: req.params.date - } + [Op.or]: { + userId: req.user.id, + tailorId: req.user.id + }, + requestId: req.params.id + }, + order: [["createdAt", "DESC"]], }) + appts.forEach(appt => { + if (appt.confirmed == "Confirmed") { + confirmed++ + } + }); + return res.json({ + total: await Appointment.count(), + rows: appts, + confirmed: confirmed + }) }); +router.get("/getroles/:id", async (req, res) => { + let x = []; + let user = await User.findByPk(req.params.id) + if (!user) { + return res.json([]) + } + if (user.getTailor()) { + x.push("tailors") + x.push("admins") + } + if (user.role == 'A') { + x.includes('admins') ? null : x.push('admins') + } + let chats = await ChatUser.findAll({ where: { userId: req.params.id } }) + if (chats) { + chats.forEach(chat => { + x.push(`Chat ${chat.chatId}`) + }) + } + return res.json(x) +}) + +router.get("/getnotifications", async (req, res) => { + // console.log(req.query) + let user = await User.findByPk(req.query.id) + let notifications; + if (user) { + notifications = await user.getNotifications() + } + // console.log(notifications) + return res.json(notifications) +}) + +router.get('/livechats', async (req, res) => { + let chats = await Chat.findAll({where: {livechat: true, open: true}}) + res.json({chats}) +}) + +router.get("/create", async (req, res) => { + // let chat = await Chat.create({}) + let tailor = await User.findByPk(1) + let user = await User.findByPk(2) + + // chat.setUsers([tailor, user]) + + chats = await Chat.findAll({ include: ChatUser }) + let chat1 = {}; + chats.forEach(chat => { + console.log((chat.chatusers[0].userId == tailor.id || chat.chatusers[0].userId == user.id) && (chat.chatusers[1].userId == tailor.id || chat.chatusers[1].userId == user.id)) + if ((chat.chatusers[0].userId == tailor.id || chat.chatusers[0].userId == user.id) && (chat.chatusers[1].userId == tailor.id || chat.chatusers[1].userId == user.id)) { + chat1 = { chat } + } + }); + + return res.json({ chat1 }) +}) + +router.get("/checktailor", async (req, res) => { + let x = await Tailor.findByPk(req.user.id) + if (x) { + x = true + } else { + x = false + } + return res.json(x) +}) + +router.get("/getnotificationcount", async (req, res) => { + let [notificationcount] = await NotificationCount.findOrCreate({ where: { userId: req.user.id }, defaults: { userId: req.user.id } }) + let counter; + if (req.query.type == 'messages') { + counter = { count } = await Msg.findAndCountAll({ where: { seen: false, userId: { [Op.ne]: req.user.id } }, include: { model: Chat, include: { model: User, where: {id: req.user.id}, required: true} , required: true}, raw:true }) + notificationcount = notificationcount.msgCount + } else if (req.query.type == 'notification') { + counter = { count } = await Notification.findAndCountAll({ include: {model: User, through: { attributes:['seen'], where: {seen: false}}, required: true}, where: { '$Users.id$': req.user.id}}) + notificationcount = notificationcount.notificationCount + + } + return res.json(counter) +}) + +router.post("/updatenotificationcount", async (req, res) => { + let { id, operation, type } = req.body + let [notificationcount] = await NotificationCount.findOrCreate({ where: { userId: req.user.id }, defaults: { userId: req.user.id } }) + if (operation == "increment") { + if (type == "msg") { + notificationcount = await notificationcount.increment('msgCount') + } else if (type == "notification") { + notificationcount = await notificationcount.increment('notificationCount') + } + return res.json({ notificationcount }) + } else if (operation == "clear") { + if (type == "msg") { + notificationcount = await NotificationCount.update({ msgCount: 0 }) + } else if (type == "notification") { + notificationcount = await NotificationCount.update({ notificationcount: 0 }) + } + return res.json({ notificationcount }) + } +}) + +router.get("/requestitems", async (req, res) => { + let ReqItems = await RequestItem.findAll({where: {requestId: req.query.id}}) + res.json({ + total: ReqItems.length, + rows: ReqItems + }) +}) + +router.post("/seennotif", async (req, res) => { + await UserNotifications.update({seen: true}, {where: {userId: req.user.id, notificationId: req.body.id}}) +}) module.exports = router; \ No newline at end of file diff --git a/routes/datapipeline.js b/routes/datapipeline.js index b2af2add..9904cd53 100644 --- a/routes/datapipeline.js +++ b/routes/datapipeline.js @@ -17,9 +17,11 @@ const { sequelize, sum } = require('../models/User'); const moment = require('moment') // For Editing Data const dfd = require("danfojs-node"); - const Product = require('../models/Product'); const Survey = require('../models/Survey'); +const Order = require('../models/Orders'); +const OrderItems = require('../models/OrderItems'); +const Request = require('../models/Request'); const ChartJsImage = require('chartjs-to-image'); router.use((req, res, next) => { @@ -38,7 +40,6 @@ router.get('/NoOfUsersJoined', async (req, res) => { let dataYear = [] let cols = ["Dates","NoOfUsersJoined"]; - usersJoined.forEach(element => { let rawData = [element.date, element.noOfUsersJoined]; let rawDataMonth = [element.date, element.noOfUsersJoined]; @@ -169,11 +170,11 @@ router.get('/NoOfUsersJoinedMonth', async (req, res) => { let rawData = [element.date, element.noOfUsersJoined]; rawData[0] = moment(rawData[0]).format("MMMM") data.push(rawData) - - + + }); - df = new dfd.DataFrame(data,{columns:["Dates","NoOfUsersJoined"]}) + df = new dfd.DataFrame(data, { columns: ["Dates", "NoOfUsersJoined"] }) group_df = df.groupby(["Dates"]).sum() const df2 = dfd.toJSON(group_df,{format:"json"}) @@ -261,11 +262,11 @@ router.get('/NoOfUsersJoinedYear', async (req, res) => { router.get('/UserRoles', async (req, res) => { - const totalCustomers = await User.count({where: {role:"C"}}); - const totalAdmins = await User.count({where: {role:"A"}}); - const totalSellers = await User.count({where: {role:"S"}}); + const totalCustomers = await User.count({ where: { role: "C" } }); + const totalAdmins = await User.count({ where: { role: "A" } }); + const totalSellers = await User.count({ where: { role: "S" } }); - json_data = [{ Customers:totalCustomers , Admins: totalAdmins, Sellers:totalSellers }] + json_data = [{ Customers: totalCustomers, Admins: totalAdmins, Sellers: totalSellers }] df = new dfd.DataFrame(json_data) @@ -282,8 +283,8 @@ router.get('/UserRoles', async (req, res) => { router.get('/UserGenders', async (req, res) => { - const Males = await User.count({where: {gender:"Male"}}); - const Females = await User.count({where: {gender:"Female"}}); + const Males = await User.count({ where: { gender: "Male" } }); + const Females = await User.count({ where: { gender: "Female" } }); const myPieChart = new ChartJsImage(); myPieChart.setConfig({ @@ -300,7 +301,7 @@ router.get('/UserGenders', async (req, res) => { json_data = [{ Male:Males , Female: Females }] df = new dfd.DataFrame(json_data) - + res.status(200).json({ df }) }); @@ -423,27 +424,155 @@ router.get('/SurveyQuestionsOccupation', async (req, res) => { router.get('/InventoryReport', ensureAuthenticated, async (req, res) => { - const Inventory = await Product.findAll({where:{ownerID:req.user.id}}) + const Inventory = await Product.findAll({ where: { ownerID: req.user.id } }) let data = []; - let cols = ["Stocks","ProductName"]; + let cols = ["Stocks", "ProductName"]; Inventory.forEach(element => { let rawData = [element.quantity, element.name]; data.push(rawData) - - + + }); - df = new dfd.DataFrame(data,{columns:["Stocks","ProductName"]}) + df = new dfd.DataFrame(data, { columns: ["Stocks", "ProductName"] }) // group_df = df.groupby(["Dates"]).sum() // console.log(group_df) // const df2 = dfd.toJSON(df,{format:"json"}) - res.status(200).json({ 'data':df }) + res.status(200).json({ 'data': df }) +}); + +router.get('/requestsbytailor', ensureAuthenticated, async (req, res) => { + const requests = await Request.findAll({ + include: [ + { model: User, as: 'tailor', required: true } + ] + }) + + let data = []; + let cols = ["Tailor", "Count"]; + + + requests.forEach(element => { + // console.log(element.toJSON()) + let rawData = [element.tailor.name, element.id]; + data.push(rawData) + + + }); + + df = new dfd.DataFrame(data, { columns: ["Tailor", "Request"] }) + group_df = df.groupby(["Tailor"]).count() + // console.log(group_df) + const df2 = dfd.toJSON(group_df, { format: "json" }) + res.status(200).json({ 'data': df2 }) +}); + +router.get('/salesPerDay/:id', async (req, res) => { + const sales = await OrderItems.findAll({ where: { seller_id: req.params.id } , order : [ + ['createdAt', 'ASC'], + ['productSku', 'ASC'] + ]}); + + let data = []; + let cols = ["Dates", "Sales"]; + + sales.forEach(element => { + let rawData = [moment(element.createdAt).format("DD/MM/YYYY"), element.seller_cut]; + data.push(rawData) + }); + + df = new dfd.DataFrame(data, { columns: ["Dates", "Sales"] }) + group_df = df.groupby(["Dates"]).sum() + const df2 = dfd.toJSON(group_df, { format: "json" }) + res.status(200).json({ 'data': df2 }) }); +router.get('/totalSalesPerDay', async (req, res) => { + const sales = await Order.findAll({order : [ + ['createdAt', 'ASC'], + ['orderTotal', 'ASC']]}); + + let data = []; + let cols = ["Dates", "Sales"]; + + sales.forEach(element => { + let rawData = [moment(element.createdAt).format("DD/MM/YYYY"), element.orderTotal]; + data.push(rawData) + }); + + df = new dfd.DataFrame(data, { columns: ["Dates", "Sales"] }) + group_df = df.groupby(["Dates"]).sum() + const df2 = dfd.toJSON(group_df, { format: "json" }) + res.status(200).json({ 'data': df2 }) +}); + +router.get('/myProduct/:id', async (req, res) => { + const product = await Product.findAll({ where: { OwnerID: req.params.id } }); + + let data = []; + let cols = ["Name", "Sales", "Sold"]; + + product.forEach(element => { + let rawData = [element.name, element.sales, element.sold]; + data.push(rawData) + }); + + df = new dfd.DataFrame(data, { columns: ["Name", "Sales", "Sold"] }) + const df2 = dfd.toJSON(df, { format: "json" }) + res.status(200).json({ 'data': df }) +}); + +router.get('/myProductWishlist/:id', async (req, res) => { + const product = await Product.findAll({ where: { OwnerID: req.params.id } }); + + let data = []; + let cols = ["Name", "Wishlistcount"]; + + product.forEach(element => { + let rawData = [element.name, element.wishlistcount]; + data.push(rawData) + }); + + df = new dfd.DataFrame(data, { columns: ["Name", "Wishlistcount"] }) + const df2 = dfd.toJSON(df, { format: "json" }) + res.status(200).json({ 'data': df }) +}); + +router.post('/stats', async (req, res) => { + const sellers = await OrderItems.findAll() + const sales = (await Order.sum('orderTotal')).toFixed(2) + const customers = await Order.count('orderOwnerID') + const orders = await Order.count('id') + + var sellerRevenue = 0 + sellers.forEach(element => { + let data = ((element.product_price * element.qtyPurchased) + element.shipping_rate) + sellerRevenue += data + }); + const revenue = (sales - ((sellerRevenue / 100) * 83)).toFixed(2) + res.send({revenue : revenue, sales : sellerRevenue.toFixed(2), orders: orders, customers : customers}) +}); + +router.post('/storestats', async (req, res) => { + const sellers = await OrderItems.findAll({ where: { seller_id: req.body.id }}); + const customers = await OrderItems.count({where : {seller_id : req.body.id}}) + const orders = await OrderItems.count({where : {seller_id : req.body.id}, distinct: true}) + var user = await User.findByPk(req.user.id) + var balance = (user.total_balance).toFixed(2) + var bankacc = user.bankAccount + + var sellerRevenue = 0 + sellers.forEach(element => { + let data = element.seller_cut + sellerRevenue += data + }); + sellerRevenue = sellerRevenue.toFixed(2) + res.send({revenue : sellerRevenue, orders: orders, customers : customers, balance:balance,bank:bankacc}) +}); module.exports = router; diff --git a/routes/main.js b/routes/main.js index efeeb908..3ffc0604 100644 --- a/routes/main.js +++ b/routes/main.js @@ -3,6 +3,10 @@ const router = express.Router(); const flashMessage = require('../views/helpers/messenger'); const sequelizeUser = require("../config/DBConfig"); const { serializeUser } = require('passport'); +const bcrypt = require('bcryptjs'); +const sequelize = require('sequelize'); +const Nanoid = require('nanoid'); +const { Op } = require('sequelize') //Our Models const User = require("../models/User") const Ticket = require("../models/Ticket") @@ -13,7 +17,11 @@ const Reward = require('../models/Reward') const Wishlist = require('../models/Wishlist') const Message = require("../models/Messages") const CartProduct = require("../models/CartProduct") +const Review = require("../models/Reviews") +const Appointment = require("../models/Appointment") const FAQ = require("../models/FAQ") +const { v4: uuidv4 } = require('uuid'); +const TempUser = require("../models/TempUser"); const Survey = require("../models/Survey") const NewsLetterLog = require("../models/Logs/NewsLetterLogs") @@ -22,185 +30,179 @@ const CustomerSatisfactionLog = require("../models/Logs/CustomerSatisfactionLog" //Ensures User is autenticated before accessing //page const ensureAuthenticated = require("../views/helpers/auth"); - +const bodyParser = require('body-parser'); const moment = require("moment"); // Required for file upload const -fs = require('fs'); +fs = require('fs'); const upload = require('../views/helpers/imageUpload'); const console = require('console'); - +const stripeSecretKey = process.env.STRIPE_SECRET_KEY +const stripePublicKey = process.env.STRIPE_PUBLIC_KEY +const endpointSecret = process.env.WEBHOOK_SECRET; +const SERVER_URL = process.env.SERVER_URL +const stripe = require("stripe")(stripeSecretKey) // For mail const nodemailer = require("nodemailer"); // const { where } = require('sequelize/types'); const Mail = require("../config/MailConfig"); -const mail = require("../config/NewMailConfig"); - -router.use((req, res, next) => { - res.locals.path = req.baseUrl; - // console.log(req.baseUrl); - //Checks url for normal users and admin - next(); -}); - -router.get('/', async (req,res) =>{ +const Cart = require('../models/Cart'); +const Order = require('../models/Orders'); +const OrderItems = require('../models/OrderItems'); +const Notification = require('../models/Notification'); +const UserNotification = require('../models/UserNotifications'); +const Tailor = require('../models/Tailor'); +const Chat = require('../models/Chat'); +const mail = require('../config/NewMailConfig') + +// for forgetpassword +otp = 'placeholder' +otp2 = 'disallowpwchange' +emailvariable = 'placeholder' + +// router.use((req, res, next) => { +// res.locals.path = req.baseUrl; +// // console.log(req.baseUrl); +//Checks url for normal users and admin +// next(); +// }); + +router.get('/', async (req, res) => { let noProduct; - products = (await Product.findAll()).map((x)=> x.dataValues) - if(await Product.count() == 0){ + var products = await Product.findAll({ where: { quantity: { [Op.gte]: 1 } } }) + if (await Product.count() == 0) { noProduct = true; } - res.render("index",{products, noProduct}) + + var top10Products = await Product.findAll({ limit: 10, order: [['sold', 'DESC'], ['sales', 'DESC']], where: { quantity: { [Op.gte]: 1 } } }) + const io = req.app.get('io') + io.emit('test', 'from main') + res.render("index", { products, top10Products, noProduct }) }) -router.get('/searchedItem=:string', async (req,res) =>{ +router.get('/searchedItem=:string', async (req, res) => { let noProduct; let sort = req.params.sort; Allproducts = (await Product.findAll()) products = [] - for(let i = 0; i < Allproducts.length; i++){ - if(Allproducts[i].dataValues.name.includes(req.params.string)){ + for (let i = 0; i < Allproducts.length; i++) { + if (Allproducts[i].dataValues.name.includes(req.params.string)) { products.push(Allproducts[i].dataValues) } - } - - - - res.render("index",{products}) + } + + + + res.render("index", { products }) }) -router.get('/category=:string', async (req,res) =>{ - let products = (await Product.findAll({where:{category:req.params.string}})).map((x)=> x.dataValues) - - - res.render("index",{products}) +router.get('/category=:string', async (req, res) => { + let products = (await Product.findAll({ where: { category: req.params.string } })).map((x) => x.dataValues) + + + res.render("index", { products }) }) -router.get('/sort=:sort', async (req,res) =>{ +router.get('/sort=:sort', async (req, res) => { let sort = req.params.sort; - if(sort == "allTypes"){ - products = (await Product.findAll()).map((x)=> x.dataValues) - }else if(sort == "Alphabetically"){ - products = (await Product.findAll({order: [['name', 'ASC']]})).map((x)=> x.dataValues) - }else if(sort == "Price"){ - products = (await Product.findAll({order: [['price', 'ASC']]})).map((x)=> x.dataValues) - }else if(sort == "MostPopular"){ - products = (await Product.findAll({order: [['wishlistcount', 'DESC']]})).map((x)=> x.dataValues) + if (sort == "allTypes") { + products = (await Product.findAll()).map((x) => x.dataValues) + } else if (sort == "Alphabetically") { + products = (await Product.findAll({ order: [['name', 'ASC']] })).map((x) => x.dataValues) + } else if (sort == "Price") { + products = (await Product.findAll({ order: [['price', 'ASC']] })).map((x) => x.dataValues) + } else if (sort == "MostPopular") { + products = (await Product.findAll({ order: [['wishlistcount', 'DESC']] })).map((x) => x.dataValues) } - - res.render("index",{products}) + + res.render("index", { products }) }) -router.post('/search', async (req,res) =>{ - - +router.post('/search', async (req, res) => { + + let search = req.body.search; - - res.redirect("/searchedItem="+search) + + res.redirect("/searchedItem=" + search) }) -router.post('/addtoCart',ensureAuthenticated, async (req,res) =>{ +router.post('/addtoCart', ensureAuthenticated, async (req, res) => { var sku = req.body.sku; - // console.log(sku) - purchasedProduct = await Product.findOne({where:{sku:req.body.sku}}) - if(purchasedProduct.quantity>0){ - - let quantity = 1; - newPurchasedProductQTY = purchasedProduct.quantity - quantity - - checkProductinCart = await CartProduct.findOne({where:{id:req.user.id+sku}}) - - try{ - if(checkProductinCart){ - newCartProductQTY = parseInt(checkProductinCart.qtyPurchased) + parseInt(quantity) - newtotalCost = parseInt(newCartProductQTY) * parseInt(purchasedProduct.price) - // console.log(newtotalCost) - CartProduct.update({qtyPurchased: newCartProductQTY, totalCost: newtotalCost},{where:{id:req.user.id+sku}} ) - }else{ - - await CartProduct.create({ - id: req.user.id+sku, - sku: req.body.sku, - name: purchasedProduct.name, - description: purchasedProduct.description, - price: purchasedProduct.price, - category: purchasedProduct.category, - totalCost: quantity * purchasedProduct.price, - qtyPurchased: quantity, - cartOwner: req.user.name, - cartOwnerID: req.user.id - }); - } - // flashMessage(res,"success", req.body.name + ' Purchased Successfully'); - // res.redirect("/") - }catch(e){ - // console.log(e) + console.log(sku) + purchasedProduct = await Product.findOne({ where: { sku: req.body.sku } }) + if (purchasedProduct.quantity > 0) { + try { + let [cart, cartStatus] = await Cart.findOrCreate({ + where: { + userId: req.user.id + }, + defaults: { + id: req.user.id + } + }) + await CartProduct.findOrCreate({ + where: { + cartId: cart.id, + productSku: sku + }, + defaults: { + qtyPurchased: 0 + } + }) + await CartProduct.increment({ qtyPurchased: 1 }, { where: { cartId: cart.id, productSku: sku } }) + } catch (e) { + console.log(e) res.redirect("/") } - Product.update({quantity:newPurchasedProductQTY},{where:{sku:req.body.sku}}) - }else{ - flashMessage(res,"danger", req.body.name + ' is Out of Stock'); + } else { + flashMessage(res, "danger", req.body.name + ' is Out of Stock'); res.redirect("/") } }) -router.post('/updateCart',ensureAuthenticated, async (req,res) =>{ +router.post('/updateCart', ensureAuthenticated, async (req, res) => { var quantity = req.body.quantity var sku = req.body.sku - // console.log(quantity) - cartProduct = await CartProduct.findOne({where:{id:req.user.id+sku}}) - product = await Product.findOne({where:{sku:sku}}) + console.log(quantity) + cartProduct = await CartProduct.findOne({ where: { cartId: req.user.id, productSku: sku } }) + product = await Product.findOne({ where: { sku: sku } }) productQuantity = cartProduct.qtyPurchased console.log(productQuantity) if (parseInt(quantity) <= 0) { quantity = 1 - // console.log(quantity) - // // CartProduct.update({qtyPurchased: newqty},{where:{id:req.user.id+sku}} ) - // console.log(cartProduct.qtyPurchased + "hi") + console.log(quantity) } if (parseInt(product.quantity) == 0) { - CartProduct.destroy({where:{id:req.user.id+sku}}) + await CartProduct.destroy({ where: { cartId: req.user.id, productSku: sku } }) flashMessage(res, 'error', product.name + 'is out of stock!') } else { - CartProduct.update({qtyPurchased: quantity},{where:{id:req.user.id+sku}} ) + CartProduct.update({ qtyPurchased: quantity }, { where: { cartId: req.user.id, productSku: sku } }) } - -}) - -router.post('/deleteitem/:sku',ensureAuthenticated, async (req,res) =>{ - cartProduct = await CartProduct.findOne({where:{sku:req.params.sku}}) - // flashMessage(res, 'success', product.name + 'has been deleted from your cart!') - await CartProduct.destroy({where:{id:req.user.id+req.params.sku}}) - res.redirect('/shoppingCart') }) -router.post('/deletecart',ensureAuthenticated, async (req,res) =>{ - var ownerID = req.user.id - await CartProduct.destroy({where:{cartownerID: ownerID}}) - res.redirect('/shoppingCart') - +router.post('/deleteitem/:sku', ensureAuthenticated, async (req, res) => { + await CartProduct.destroy({ where: { cartId: req.user.id, productSku: req.params.sku } }) + res.redirect('/cart') }) -router.post('/deletecart',ensureAuthenticated, async (req,res) =>{ +router.post('/deletecart', ensureAuthenticated, async (req, res) => { var ownerID = req.user.id - await CartProduct.destroy({where:{cartownerID: ownerID}}) - + await Cart.destroy({ where: { id: ownerID } }) + res.redirect('/cart') }) -router.post('/discount',ensureAuthenticated, async (req,res) =>{ +router.post('/discount', ensureAuthenticated, async (req, res) => { let date_ob = new Date(); - var todaysdate = date_ob.getFullYear() + "-" + ("0" + (date_ob.getMonth() + 1)).slice(-2) + "-" + ("0" + date_ob.getDate()).slice(-2) + var todaysdate = date_ob.getFullYear() + "-" + ("0" + (date_ob.getMonth() + 1)).slice(-2) + "-" + ("0" + date_ob.getDate()).slice(-2) console.log(todaysdate) var ownerID = req.user.id var discountcodeused = req.body.code var status = req.body.status console.log(discountcodeused) - var discountcodeinDB = await Reward.findOne({where:{voucher_code: discountcodeused}}) - - // res.send({discount_amount:discount_amount, status:"success"}) - // res.send({discount_amount:discount_amount, status:"spools_shortage"}) - // res.send({discount_amount:discount_amount, status:"voucher_expired"}) - // res.send({discount_amount:discount_amount, status:"voucher_ran_out"}) + if (discountcodeused != "") { + var discountcodeinDB = await Reward.findOne({ where: { voucher_code: discountcodeused } }) + } try { if (discountcodeinDB) { var discount_amount = discountcodeinDB.discount_amount @@ -209,93 +211,433 @@ router.post('/discount',ensureAuthenticated, async (req,res) =>{ console.log(rewardexpirydate) if (discountcodeinDB.quantity > 0) { if (rewardexpirydate > todaysdate) { - if(discountcodeinDB.spools_needed <= req.user.spools) { + if (discountcodeinDB.spools_needed <= req.user.spools) { console.log(discount_amount) - res.send({discount_amount:discount_amount, status:"success"}) + res.send({ discount_amount: discount_amount, status: "success" }) } else { - res.send({discount_amount:discount_amount, status:"spools_shortage"}) + res.send({ discount_amount: discount_amount, status: "spools_shortage" }) } } else { - res.send({discount_amount:discount_amount, status:"voucher_expired"}) + res.send({ discount_amount: discount_amount, status: "voucher_expired" }) } } else { - res.send({discount_amount:discount_amount, status:"voucher_ran_out"}) + res.send({ discount_amount: discount_amount, status: "voucher_ran_out" }) } } else { - res.send({discount_amount:discount_amount, status:"no_such_voucher"}) + res.send({ discount_amount: discount_amount, status: "no_such_voucher" }) } - - }catch(e){ + + } catch (e) { console.log(e) res.redirect("/") } }) -router.post('/wishlist',ensureAuthenticated, async (req,res) => { +router.post('/wishlist', ensureAuthenticated, async (req, res) => { var sku = req.body.sku var status = req.body.status - checkProductinWishlist = await Wishlist.findOne({where:{id:req.user.id+sku}}) - product = await Product.findOne({where:{sku:sku}}) - + checkProductinWishlist = await Wishlist.findOne({ where: { id: req.user.id + sku } }) + product = await Product.findOne({ where: { sku: sku } }) + if (status == "check") { if (checkProductinWishlist) { - res.send({response: "add", status : "check"}) + res.send({ response: "add", status: "check" }) + console.log(sku, status, "add") } else { - res.send({response: "remove", status : "check"}) + res.send({ response: "remove", status: "check" }) + console.log(sku, status, "remove") } } else if (status == "add/remove") { - try{ - if(checkProductinWishlist){ - Wishlist.destroy({where:{id:req.user.id+sku}}) + try { + if (checkProductinWishlist) { + await Wishlist.destroy({ where: { id: req.user.id + sku } }) var newwishlistcount = product.wishlistcount - 1 - Product.update({wishlistcount:newwishlistcount}, {where:{sku:sku}}) + console.log(newwishlistcount) + console.log(product.wishlistcount) + await Product.update({ wishlistcount: newwishlistcount }, { where: { sku: sku } }) console.log('Item removed') - res.send({response: "remove", status : "add/remove"}) - }else{ - + res.send({ response: "remove", status: "add/remove" }) + } else { + await Wishlist.create({ - id: req.user.id+sku, - sku: sku, - name: product.name, - description: product.description, - price: product.price, - category: product.category, + id: req.user.id + sku, Owner: req.user.name, - OwnerID: req.user.id + OwnerID: req.user.id, + productSku: sku }); var newwishlistcount = product.wishlistcount + 1 - Product.update({wishlistcount:newwishlistcount}, {where:{sku:sku}}) + console.log(newwishlistcount) + console.log(product.wishlistcount) + await Product.update({ wishlistcount: newwishlistcount }, { where: { sku: sku } }) console.log('Item added') - res.send({response: "add", status : "add/remove"}) + res.send({ response: "add", status: "add/remove" }) } // flashMessage(res,"success", req.body.name + ' Purchased Successfully'); // res.redirect("/") - }catch(e){ + } catch (e) { console.log(e) res.redirect("/") } } }) +const fulfillOrder = async (session) => { + // let io = req.app.get("io") + var id = session.metadata.userId + var shipping_rate = parseInt(session.total_details.amount_shipping) + console.log(shipping_rate) + var shipping_type = "Free Shipping"; + + var cartproducts = await Cart.findOne({ where: { id: id }, include: { model: Product } }) + + var order = await Order.create({ + orderUUID: ("#" + uuidv4().slice(-12)).toUpperCase(), + orderOwnerID: id, + orderOwnerName: session.metadata.orderOwnerName, + orderTotal: session.amount_subtotal / 100, + discountcodeused: session.metadata.discountcodeused, + address: session.metadata.address, + unit_number: session.metadata.unit_number, + postal_code: session.metadata.postal_code, + email: session.metadata.email, + phone_number: session.metadata.phone_number, + userId: id + }) + + // console.log(JSON.stringify(cartproducts)) + cartproducts.products.forEach(async element => { + + if (shipping_rate != 0) { + shipping_type = "Express Shipping" + shipping_rate = 1.99 + } else { + shipping_rate = 0 + } + var seller = await User.findByPk(parseInt(element.OwnerID)) + var total_bal = seller.total_balance + var total_balance = ((((element.cartproduct.qtyPurchased * element.price)) * 0.83) + (shipping_rate)).toFixed(2) + console.log(total_bal) + console.log(total_balance) + console.log(shipping_rate) + await OrderItems.create({ + orderId: order.id, + productSku: element.sku, + qtyPurchased: element.cartproduct.qtyPurchased, + product_name: element.name, + product_price: element.price, + shipping_rate: shipping_rate, + shipping_type: shipping_type, + seller_cut: ((((element.cartproduct.qtyPurchased * element.price)) * 0.83) + (shipping_rate)).toFixed(2), + tit_cut: ((element.cartproduct.qtyPurchased * element.price) * 0.17).toFixed(2), + seller_name: element.Owner, + seller_id: element.OwnerID, + orderStatus: "Processing", + posterURL: element.posterURL, + review: false + }) + // shipping_rate = 0 + // var payload = {title : "New Order Placed",body: "body",url: "",senderId: "",recipient: `${element.OwnerID}`} + // let user = await User.findByPk(element.OwnerID) + // let notification = await Notification.create({ + // title: payload.title, + // body: payload.body, + // url: payload.url, + // senderId: payload.sender + // }) + // await notification.addUser(user) + // io.to(`User ${element.OwnerID}`).emit("default", notification) + // var sold = element.sold + element.cartproduct.qtyPurchased + // var sales = element.sales + (element.cartproduct.qtyPurchased*element.price) + // var qty = element.quantity - element.cartproduct.qtyPurchased + await User.increment({ total_balance: total_balance }, { where: { id: element.OwnerID } }) + await Product.update({ quantity: element.quantity - element.cartproduct.qtyPurchased, sold: element.sold + element.cartproduct.qtyPurchased, sales: element.sales + (element.cartproduct.qtyPurchased * element.price) }, { where: { sku: element.sku } }) + }); + var discountcode = await Reward.findOne({ where: { voucher_code: cartproducts.discountcodeused } }) + var user = await User.findByPk(id) + User.update({ spools: user.spools + order.orderTotal }, { where: { id: id } }) + if (discountcode) { + await User.update({ spools: user.spools - discountcode.spools_needed }, { where: { id: id } }) + await Reward.update({ quantity: discountcode.quantity - 1 }, { where: { voucher_code: cartproducts.discountcodeused } }) + } + await Cart.destroy({ where: { id: id } }) + console.log("Order created") + // console.log("Fulfilling order", session); +}; + + +router.post('/webhook', bodyParser.raw({ type: 'application/json' }), async (req, res) => { + const payload = req.body; + const sig = req.headers['stripe-signature']; + let event; + try { + event = stripe.webhooks.constructEvent(req.body, sig, endpointSecret); + } catch (err) { + return res.status(400).send(`Webhook Error: ${err.message}`); + } + + if (event.type === 'checkout.session.completed') { + const session = event.data.object; + if (session.metadata.request_type == "Checkout_Payment") { + fulfillOrder(session) + } + } + res.status(200); +}); + + +router.post('/checkout', ensureAuthenticated, async (req, res) => { + var cartproducts = await Cart.findOne({ where: { id: req.user.id }, include: { model: Product } }) + var couponused = await Reward.findOne({ where: { voucher_code: cartproducts.discountcodeused } }) + var shipping = cartproducts.products.length * 199 + var delimiter = 100 + if (couponused) { + delimiter = 100 - couponused.discount_amount + } + var cart = await Cart.findOne({ where: { id: req.user.id } }) + try { + const session = await stripe.checkout.sessions.create({ + payment_method_types: ["card"], + mode: "payment", + shipping_options: [ + { + shipping_rate_data: { + type: 'fixed_amount', + fixed_amount: { + amount: 0, + currency: 'sgd', + }, + display_name: 'Free shipping', + delivery_estimate: { + minimum: { + unit: 'business_day', + value: 7, + }, + maximum: { + unit: 'business_day', + value: 9, + }, + } + } + }, + { + shipping_rate_data: { + type: 'fixed_amount', + fixed_amount: { + amount: shipping, + currency: 'sgd', + }, + display_name: 'Express Shipping', + delivery_estimate: { + minimum: { + unit: 'business_day', + value: 2, + }, + maximum: { + unit: 'business_day', + value: 3, + }, + } + } + }, + ], + line_items: cartproducts.products.map(item => { + return { + price_data: { + currency: "sgd", + product_data: { + name: item.name, + }, + unit_amount: item.price * delimiter, + }, + quantity: item.cartproduct.qtyPurchased, + } + }), + metadata: { + userId: `${req.user.id}`, + orderOwnerName: `${req.body.fname}`, + discountcodeused: `${cart.discountcodeused}`, + address: `${req.body.address}`, + unit_number: `${req.body.unit_number}`, + postal_code: `${req.body.postal_code}`, + email: `${req.body.email}`, + phone_number: `${req.body.phone}`, + ship : "199", + request_type: "Checkout_Payment" + }, + success_url: `http://localhost:5000/checkout/success`, + cancel_url: `http://localhost:5000/checkout`, + }) + res.json({ url: session.url }) + } catch (e) { + console.log(e.message) + res.status(500).json({ error: e.message }) + } +}) + +router.post('/tailorCheckout', ensureAuthenticated, async (req, res) => { + let { reqId } = req.body + var request = await Request.findByPk(reqId, { include: [RequestItems, "user"] }) + // try { + // const session = await stripe.checkout.sessions.create({ + // payment_method_types: ["card"], + // mode: "payment", + // shipping_address_collection: { + // allowed_countries: ['SG'], + // }, + // shipping_options: [ + // { + // shipping_rate_data: { + // type: 'fixed_amount', + // fixed_amount: { + // amount: 0, + // currency: 'sgd', + // }, + // display_name: 'Free shipping', + // delivery_estimate: { + // minimum: { + // unit: 'business_day', + // value: 7, + // }, + // maximum: { + // unit: 'business_day', + // value: 9, + // }, + // } + // } + // }, + // { + // shipping_rate_data: { + // type: 'fixed_amount', + // fixed_amount: { + // amount: 1000, + // currency: 'sgd', + // }, + // display_name: 'Express Shipping', + // delivery_estimate: { + // minimum: { + // unit: 'business_day', + // value: 2, + // }, + // maximum: { + // unit: 'business_day', + // value: 3, + // }, + // } + // } + // }, + // ], + // line_items: cartproducts.products.map(item => { + // return { + // price_data: { + // currency: "sgd", + // product_data: { + // name: item.name, + // }, + // unit_amount: item.price * delimiter, + // }, + // quantity: item.cartproduct.qtyPurchased, + // } + // }), + // metadata: { + // userId: `${req.user.id}`, + // orderOwnerName: `${req.body.fname}`, + // email: `${req.body.email}`, + // phone_number: `${req.body.phone}`, + // request_type: "Tailoring_Payment" + // }, + // success_url: `http://localhost:5000/checkout/success`, + // cancel_url: `http://localhost:5000/checkout`, + // }) + // res.json({ url: session.url }) + // } catch (e) { + // console.log(e.message) + // res.status(500).json({ error: e.message }) + // } +}) + +router.post('/checkoutsave', ensureAuthenticated, async (req, res) => { + var subtotal = req.body.subtotal + var discountcode = req.body.discount_code + await Cart.update({ cartTotal: subtotal, discountcodeused: discountcode }, { where: { id: req.user.id } }) +}) -router.get('/RewardsPage', (req,res) => { +router.post("/confirmDelivery", ensureAuthenticated, async (req, res) => { + console.log(req.body.id) + await OrderItems.update({ orderStatus: "Delivery Confirmed" }, { + where: { + id: req.body.id + } + }) + var order = await OrderItems.findOne({ where: { id: req.body.id } }) + console.log(order.orderId) + res.redirect(`/orderdetails/${order.orderId}`) +}) + +router.post("/submitProductReview", ensureAuthenticated, async (req, res) => { + product = await Product.findByPk(req.body.sku) + + await Review.create({ + title: req.body.title, + description: req.body.review, + stars: req.body.star, + userId: req.user.id, + productSku: req.body.sku, + sellerId: product.OwnerID, + }) + + await Product.update({ stars_given: product.stars_given + parseInt(req.body.star), reviews_given: product.reviews_given + 1 }, { where: { sku: req.body.sku } }) + + await OrderItems.update({ review: true }, { where: { id: req.body.id } }) + + res.redirect(`/myOrders`) +}) + +router.post("/reviewUpdate", ensureAuthenticated, async (req, res) => { + var sku = req.body.sku + var product = await Product.findByPk(sku) + var starsAvg = product.stars_given / product.reviews_given + var roundedAvg = Math.round(starsAvg / 0.5) * 0.5 + var fivecount = await Review.count({ where: { stars: 5, productSku: sku } }) + var fourcount = await Review.count({ where: { stars: 4, productSku: sku } }) + var threecount = await Review.count({ where: { stars: 3, productSku: sku } }) + var twocount = await Review.count({ where: { stars: 2, productSku: sku } }) + var onecount = await Review.count({ where: { stars: 1, productSku: sku } }) + if (req.body.status == "details") { + res.send({ starAvg: starsAvg, roundedAvg: roundedAvg, one: onecount, two: twocount, three: threecount, four: fourcount, five: fivecount }) + } else if (req.body.status == "modal") { + res.send({ starAvg: starsAvg, roundedAvg: roundedAvg }) + } +}) + + +router.get('/reviews/:sku', ensureAuthenticated, async (req, res) => { + var sku = req.params.sku + var reviews = await Review.findAll({ where: { productSku: sku }, include: { model: User } }) + var product = await Product.findByPk(sku) + var starsAvg = product.stars_given / product.reviews_given + starsAvg = starsAvg.toFixed(2) + var roundedAvg = Math.round(starsAvg / 0.5) * 0.5 + res.render("reviews.handlebars", { reviews, product, starsAvg, roundedAvg }) +}) + +router.get('/RewardsPage', (req, res) => { res.render("rewards") }) -router.get('/CustomerService', (req,res) => { +router.get('/CustomerService', (req, res) => { res.render("customerservice") }) -router.get('/profile',ensureAuthenticated, (req,res) => { - +router.get('/profile', ensureAuthenticated, async (req, res) => { + res.render("profile") }) router.post('/flash', (req, res) => { - const message = 'This is an important message'; - const error = 'This is an error message'; - const error2 = 'This is the second error message'; + const message = 'This is an important message'; + const error = 'This is an error message'; + const error2 = 'This is the second error message'; // req.flash('message', message); // req.flash('error', error); @@ -306,106 +648,209 @@ router.post('/flash', (req, res) => { flashMessage(res, 'error', error); flashMessage(res, 'error', error2, 'fas fa-sign-in-alt', true); - res.redirect('/'); + res.redirect('/'); }); -router.get('/editProfile',ensureAuthenticated, (req,res) => { +router.get('/editProfile', ensureAuthenticated, (req, res) => { res.render("editProfile.handlebars") }) -router.get('/changePassword',ensureAuthenticated, (req,res) => { +router.post('/profile', ensureAuthenticated, (req, res) => { + User.destroy({ where: { id: req.user.id } }) + TempUser.destroy({ where: { email: req.user.email } }); + req.logout(); + flashMessage(res, 'success', 'Account successfully deleted. Bye bye...'); + return res.redirect("/"); + +}) +router.post('/changePassword', ensureAuthenticated, async (req, res) => { + userr1 = await User.findOne({ where: { id: req.user.id } }) + const validPassword = await bcrypt.compare(req.body.oldpassword, userr1.password); + if (!validPassword) { + flashMessage(res, 'error', 'Incorrect password'); + return res.redirect('/changePassword') + } + let { oldpassword, newpassword, newpassword2 } = req.body; + if (newpassword.length < 6) { + flashMessage(res, 'error', 'Password must be at least 6 characters'); + return res.redirect('/changePassword') + } + if (newpassword2 != newpassword) { + flashMessage(res, 'error', 'New passwords do not match'); + return res.redirect('/changePassword') + } + if (oldpassword == newpassword) { + flashMessage(res, 'error', 'New and old passwords are the same'); + return res.redirect('/changePassword') + } + User.update({ password: newpassword }, { where: { id: req.user.id } }) + flashMessage(res, 'success', 'Password updated successfully'); + return res.redirect('/profile') +}) + +router.post('/editProfile', ensureAuthenticated, async (req, res) => { + x = 0; + y = 0 + userr = await User.findOne({ where: { id: req.user.id } }) + if ((await User.findOne({ where: { email: req.body.email } })) && userr.email != req.body.email) { + x = 1 + } + if ((await User.findOne({ where: { name: req.body.name } })) && userr.name != req.body.name) { + y = 1 + } + if (x == 1 && y != 1) { + flashMessage(res, 'error', 'This email has already been registered'); + return res.redirect("/editProfile"); + } + else if (x != 1 && y == 1) { + flashMessage(res, 'error', 'This name has already been registered'); + return res.redirect("/editProfile"); + } + else if (x == 1 && y == 1) { + flashMessage(res, 'error', 'Both name and email has already been registered'); + return res.redirect("/editProfile"); + } + + let name = req.body.name; + let email = req.body.email; + let phoneNumber = req.body.phoneNumber; + let gender = req.body.gender; + User.update({ name, email, phoneNumber, gender }, { where: { id: req.user.id } }) + TempUser.update({ email }, { where: { email: userr.email } }) + flashMessage(res, 'success', 'Account successfully edited'); + res.redirect("/profile"); + +}) + +function checkAuthenticated(req, res, next) { + if (req.isAuthenticated()) { + + return next() + } + + res.redirect("/profile") +} + +router.get('/logout', ensureAuthenticated, (req, res) => { + const message = 'You Have Logged out'; + flashMessage(res, 'success', message); + req.logout(); + res.redirect('/'); +}); +router.get('/checkout/success', ensureAuthenticated, (req, res) => { + res.render("success.handlebars") +}); + +router.get('/changePassword', ensureAuthenticated, (req, res) => { res.render("userEditPassword.handlebars") }) -router.get('/myOrders',ensureAuthenticated, (req,res) => { - res.render("myOrders.handlebars") +router.get('/myOrders', ensureAuthenticated, async (req, res) => { + orders = (await Order.findAll({ + where: { orderOwnerID: req.user.id }, order: [ + ['createdAt', 'DESC'], + ['id', 'ASC'] + ] + })) + res.render("pastOrder.handlebars", { orders }) +}) + +router.get('/orderdetails/:id', ensureAuthenticated, async (req, res) => { + var id = req.params.id + orderitems = (await OrderItems.findAll({ where: { orderId: id } })) + order = (await Order.findOne({ where: { id: id } })) + res.render("pastOrderDetails.handlebars", { orderitems, order }) }) -router.get('/shoppingCart', ensureAuthenticated,async (req,res) => { - cartproducts = (await CartProduct.findAll({where: {cartOwnerID:req.user.id}})) - res.render("shoppingCart.handlebars",{cartproducts}) +router.get('/cart', ensureAuthenticated, async (req, res) => { + cartproducts = (await Cart.findOne({ where: { id: req.user.id }, include: Product, nested: true })) + res.render("shoppingCart.handlebars", { cartproducts }) }) -router.get('/wishlist', ensureAuthenticated,async (req,res) => { - wishlistproducts = (await Wishlist.findAll({where: {OwnerID:req.user.id}})) - // products = (await Product.findAll({where: {sku:wishlistproducts.sku}})) - res.render("wishlist.handlebars",{wishlistproducts}) +router.get('/wishlist', ensureAuthenticated, async (req, res) => { + wishlistproducts = (await Wishlist.findAll({ + where: { OwnerID: req.user.id }, include: Product, order: [ + ['createdAt', 'DESC'], + ['id', 'ASC'] + ] + })) + res.render("wishlist.handlebars", { wishlistproducts }) }) -router.get('/checkout', ensureAuthenticated,async (req,res) => { - cartproducts = (await CartProduct.findAll({where: {cartOwnerID:req.user.id}})) - res.render("checkout.handlebars",{cartproducts}) +router.get('/checkout', ensureAuthenticated, async (req, res) => { + cart = await Cart.findOne({ where: { id: req.user.id } }) + res.render("checkout.handlebars", { cart }) }) -router.get('/otherSupport', (req,res) => { +router.get('/otherSupport', (req, res) => { res.render("qnaPages/otherSupport.handlebars") }) -router.get('/gettingStarted', (req,res) => { +router.get('/gettingStarted', (req, res) => { res.render("qnaPages/gettingStarted.handlebars") }) -router.get('/myAccountQNA', (req,res) => { +router.get('/myAccountQNA', (req, res) => { res.render("qnaPages/myAccountQNA.handlebars") }) -router.get('/payment&shippingQNA', (req,res) => { +router.get('/payment&shippingQNA', (req, res) => { res.render("qnaPages/payment&shippingQNA.handlebars") }) -router.get('/troubleshootingQNA', (req,res) => { +router.get('/troubleshootingQNA', (req, res) => { res.render("qnaPages/troubleshootingQNA.handlebars") }) -router.get('/rewards&offersQNA', (req,res) => { +router.get('/rewards&offersQNA', (req, res) => { res.render("qnaPages/rewards&offersQNA.handlebars") }) -router.get('/multistep', (req,res) => { +router.get('/multistep', (req, res) => { res.render("multistep-form.handlebars") }) -router.get('/messages',ensureAuthenticated, async function (req,res){ - message = (await Message.findAll({where: {ownerID:req.user.id}})) - currentMessageCount = await Message.count({where: {ownerID:req.user.id}}) - User.update({MessagesCount:currentMessageCount}, {where:{id:req.user.id}}) +router.get('/messages', ensureAuthenticated, async function (req, res) { + message = (await Message.findAll({ where: { ownerID: req.user.id } })) + currentMessageCount = await Message.count({ where: { ownerID: req.user.id } }) + User.update({ MessagesCount: currentMessageCount }, { where: { id: req.user.id } }) console.log(currentMessageCount) - res.render("messages.handlebars",{message}) + res.render("messages.handlebars", { message }) }) -router.get('/deletemessages',ensureAuthenticated, async function (req,res){ - message = (await Message.findAll({where: {ownerID:req.user.id}})) - currentMessageCount = await Message.count({where: {ownerID:req.user.id}}) - User.update({MessagesCount:currentMessageCount}, {where:{id:req.user.id}}) +router.get('/deletemessages', ensureAuthenticated, async function (req, res) { + message = (await Message.findAll({ where: { ownerID: req.user.id } })) + currentMessageCount = await Message.count({ where: { ownerID: req.user.id } }) + User.update({ MessagesCount: currentMessageCount }, { where: { id: req.user.id } }) console.log(currentMessageCount) - res.render("deleteMessages.handlebars",{message}) + res.render("deleteMessages.handlebars", { message }) }) -router.post('/deletemessages',ensureAuthenticated, async function (req,res){ +router.post('/deletemessages', ensureAuthenticated, async function (req, res) { let { messageID } = req.body; - if (messageID!=null){ + if (messageID != null) { deletedMessage = req.body.messageID - Message.destroy({where: {id:messageID}}) + Message.destroy({ where: { id: messageID } }) flashMessage(res, 'success', "Message Deleted"); - currentMessageCount = await Message.count({where: {ownerID:req.user.id}}) + currentMessageCount = await Message.count({ where: { ownerID: req.user.id } }) console.log(currentMessageCount) console.log("Check deleted count here") - User.update({MessagesCount:currentMessageCount-1}, {where:{id:req.user.id}}) - }else{ + User.update({ MessagesCount: currentMessageCount - 1 }, { where: { id: req.user.id } }) + } else { flashMessage(res, 'danger', "Please Select a Message to Delete"); } - + res.redirect("/deletemessages") - + }) -router.get('/feedback',ensureAuthenticated, (req,res) => { +router.get('/feedback', ensureAuthenticated, (req, res) => { res.render("feedback.handlebars") }) -router.get('/tickets',ensureAuthenticated, (req,res) => { +router.get('/tickets', ensureAuthenticated, (req, res) => { res.render("ticket.handlebars") }) -router.post('/tickets',ensureAuthenticated, async function (req,res) { +router.post('/tickets', ensureAuthenticated, async function (req, res) { let date_ob = new Date(); // current date // adjust 0 before single digit date @@ -425,8 +870,8 @@ router.post('/tickets',ensureAuthenticated, async function (req,res) { // current seconds let seconds = date_ob.getSeconds(); - let { title, urgency, description, posterURL} = req.body; - try{ + let { title, urgency, description, posterURL } = req.body; + try { await Ticket.create({ title: req.body.title, urgency: req.body.urgency, @@ -436,27 +881,43 @@ router.post('/tickets',ensureAuthenticated, async function (req,res) { posterURL: req.body.posterURL, owner: req.user.name, ownerID: req.user.id - - }); - flashMessage(res,"success",'Ticket Sent Successfully'); - res.redirect("/tickets") - }catch(e){ - console.log(e) - res.redirect("/tickets") + + }); + flashMessage(res, "success", 'Ticket Sent Successfully'); + res.redirect("/tickets") + } catch (e) { + console.log(e) + res.redirect("/tickets") + } +}) + +router.get('/livechat', async (req, res) => { + res.render(`support/livechat`) +}) + +router.get('/livechat/generate', async (req, res) => { + let chatId; + while (true) { + chatId = Nanoid.nanoid() + let chat = await Chat.findOne({ where: { liveId: chatId, livechat: true } }) + if (chat === null) { + break + } } + res.json({ chatId }) }) -router.get('/CommunityFAQPage', async (req,res) => { - comments = (await FAQ.findAll()).map((x)=> x.dataValues) - res.render("qnaPages/communityFAQpage.handlebars",{comments}) +router.get('/CommunityFAQPage', async (req, res) => { + comments = (await FAQ.findAll()).map((x) => x.dataValues) + res.render("qnaPages/communityFAQpage.handlebars", { comments }) }) -router.get('/CommunityFAQPage/ViewComments',ensureAuthenticated ,async (req,res) => { - - comments = (await FAQ.findAll({where: {ownerID:req.user.id}})) - res.render("qnaPages/ViewComments.handlebars",{comments}) +router.get('/CommunityFAQPage/ViewComments', ensureAuthenticated, async (req, res) => { + + comments = (await FAQ.findAll({ where: { ownerID: req.user.id } })) + res.render("qnaPages/ViewComments.handlebars", { comments }) }) -router.post('/addComment',ensureAuthenticated, async function (req,res) { +router.post('/addComment', ensureAuthenticated, async function (req, res) { let date_ob = new Date(); // current date // adjust 0 before single digit date @@ -475,45 +936,45 @@ router.post('/addComment',ensureAuthenticated, async function (req,res) { // current seconds let seconds = date_ob.getSeconds(); - let{title,description} = req.body; - try{ + let { title, description } = req.body; + try { await FAQ.create({ title: req.body.title, description: req.body.description, - likes:0, + likes: 0, dateAdded: year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds, owner: req.user.name, ownerID: req.user.id - - }); - flashMessage(res,"success",'Comment Created Successfully'); - res.redirect("/CommunityFAQPage") - }catch(e){ - console.log(e) - res.redirect("/CommunityFAQPage") - } + + }); + flashMessage(res, "success", 'Comment Created Successfully'); + res.redirect("/CommunityFAQPage") + } catch (e) { + console.log(e) + res.redirect("/CommunityFAQPage") + } }) -router.get('/Survey',ensureAuthenticated ,async (req,res) => { +router.get('/Survey', ensureAuthenticated, async (req, res) => { res.render("Survey") }) -router.post('/Survey',ensureAuthenticated ,async (req,res) => { - let {age,occupation,recommend,features,design,customerSupport,userCustomisation} = req.body; - if(features==undefined){ +router.post('/Survey', ensureAuthenticated, async (req, res) => { + let { age, occupation, recommend, features, design, customerSupport, userCustomisation } = req.body; + if (features == undefined) { features = 0 } - if(design==undefined){ + if (design == undefined) { design = 0 } - if(customerSupport==undefined){ + if (customerSupport == undefined) { customerSupport = 0 } - if(userCustomisation==undefined){ + if (userCustomisation == undefined) { userCustomisation = 0 } - + await Survey.create({ age: age, @@ -524,25 +985,25 @@ router.post('/Survey',ensureAuthenticated ,async (req,res) => { customerSupport: customerSupport, userCustomisation: userCustomisation, }) - flashMessage(res,"success",'Survey Submitted Successfully. Thanks for your feedback.'); + flashMessage(res, "success", 'Survey Submitted Successfully. Thanks for your feedback.'); res.redirect("/Survey") }) -router.post('/deleteComment', async (req,res) => { - let{commentID} = req.body; - +router.post('/deleteComment', async (req, res) => { + let { commentID } = req.body; + deletedcomment = req.body.commentID - FAQ.destroy({where: {id:commentID}}) + FAQ.destroy({ where: { id: commentID } }) flashMessage(res, 'success', "Comment Deleted Successfully!"); res.redirect("/CommunityFAQPage/ViewComments") }) -router.post('/editComment', async (req,res) => { - let{title,description,commentID} = req.body; - - FAQ.update({title:title,description:description},{where: {id:commentID}}) - +router.post('/editComment', async (req, res) => { + let { title, description, commentID } = req.body; + + FAQ.update({ title: title, description: description }, { where: { id: commentID } }) + flashMessage(res, 'success', "Comment Edited Successfully!"); res.redirect("/CommunityFAQPage/ViewComments") }) @@ -551,7 +1012,7 @@ router.post('/upload', ensureAuthenticated, (req, res) => { if (!fs.existsSync('./public/uploads/' + req.user.id)) { fs.mkdirSync('./public/uploads/' + req.user.id, { recursive: true }); } - + upload(req, res, (err) => { if (err) { // e.g. File too large @@ -559,14 +1020,16 @@ router.post('/upload', ensureAuthenticated, (req, res) => { } else if (req.file == undefined) { res.json({ file: '/images/defaultImage.png', err: 'No file selected' }); - - }else{ + + } else { res.json({ file: `/uploads/${req.user.id}/${req.file.filename}` }); + img = "/uploads/" + req.user.id + "/" + req.file.filename + User.update({ profilepic: img }, { where: { id: req.user.id } }) } }); - }); +}); -router.post('/feedback',ensureAuthenticated, async function (req,res) { +router.post('/feedback', ensureAuthenticated, async function (req, res) { let date_ob = new Date(); // current date // adjust 0 before single digit date @@ -586,8 +1049,8 @@ router.post('/feedback',ensureAuthenticated, async function (req,res) { // current seconds let seconds = date_ob.getSeconds(); - let { title, favouriteThing,leastFavouriteThing,description,remarks,rating } = req.body; - try{ + let { title, favouriteThing, leastFavouriteThing, description, remarks, rating } = req.body; + try { await Feedback.create({ title: req.body.title, favouriteThing: req.body.favouriteThing, @@ -598,62 +1061,62 @@ router.post('/feedback',ensureAuthenticated, async function (req,res) { dateAdded: year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds, owner: req.user.name, ownerID: req.user.id - - }); - flashMessage(res,"success",'Feedback Sent Successfully'); - await CustomerSatisfactionLog.create({ + }); + flashMessage(res, "success", 'Feedback Sent Successfully'); + + await CustomerSatisfactionLog.create({ date: moment().format('L'), rating: req.body.rating, description: req.body.description, remarks: req.body.remarks, - }) - res.redirect("/feedback") - }catch(e){ - console.log(e) - res.redirect("/feedback") + }) + res.redirect("/feedback") + } catch (e) { + console.log(e) + res.redirect("/feedback") } }) -router.get('/ticketHistory',ensureAuthenticated, async function (req,res){ - tickets = (await Ticket.findAll({where: {ownerID:req.user.id}})) - res.render("TicketHistory",{tickets}) +router.get('/ticketHistory', ensureAuthenticated, async function (req, res) { + tickets = (await Ticket.findAll({ where: { ownerID: req.user.id } })) + res.render("TicketHistory", { tickets }) }) -router.post('/ticketHistory/deleteTicket', async (req,res) => { - let{ticketID} = req.body; - +router.post('/ticketHistory/deleteTicket', async (req, res) => { + let { ticketID } = req.body; + deletedTicket = req.body.ticketID - Ticket.destroy({where: {id:ticketID}}) + Ticket.destroy({ where: { id: ticketID } }) flashMessage(res, 'success', "Ticket Deleted Successfully! ID: " + ticketID); res.redirect("/ticketHistory") }) -router.post('/ticketHistory/editTicket', async (req,res) => { - let{ticketID,title,description,urgency,posterURL} = req.body; - - - Ticket.update({title:title,description:description,urgency:urgency,posterURL:posterURL},{where: {id:ticketID}}) +router.post('/ticketHistory/editTicket', async (req, res) => { + let { ticketID, title, description, urgency, posterURL } = req.body; + + + Ticket.update({ title: title, description: description, urgency: urgency, posterURL: posterURL }, { where: { id: ticketID } }) flashMessage(res, 'success', "Ticket Edited Successfully! ID: " + ticketID); res.redirect("/ticketHistory") }) router.get('/discover', async (req, res) => { - vouchers = (await Reward.findAll()).map((x) => x.dataValues) + vouchers = await Reward.findAll({ where: { expiry_date: { [Op.gte]: moment(new Date()).format("YYYY-MM-DD") } } }) res.render('rewards/discover', { vouchers }); }); router.get('/newsLetter', async (req, res) => { - - res.render("newsLetter.handlebars" ); + + res.render("newsLetter.handlebars"); }); -router.post('/newsLetter', ensureAuthenticated,async (req, res) => { +router.post('/newsLetter', ensureAuthenticated, async (req, res) => { email = req.user.email console.log(email) link = "http://localhost:5000/newsLetter" - + // Mail.send(res, { // to: email, // subject: "Threads in Times Subcription to News Letter", @@ -663,14 +1126,14 @@ router.post('/newsLetter', ensureAuthenticated,async (req, res) => { // html:`
    //
    // // //
    `, - - - + + + // }); mail.Send({ email_recipient: email, subject: "Threads in Times Subcription to News Letter", template_path: "../views/MailTemplates/NewsLetter.html", - context: {name: req.user.name }, + context: { name: req.user.name }, }); - console.log("Mail sent") - await NewsLetterLog.create({ + console.log("Mail sent") + await NewsLetterLog.create({ date: moment().format('L'), description: email + " subscribed to the newsletter", noOfUsersJoined: 1 }) - + flashMessage(res, 'success', "Thank you for subscribing to our newsletter! Check for an email from us soon!"); - User.update({newsLetter:true},{where: {id:req.user.id}}) - res.redirect("/newsLetter" ); + User.update({ newsLetter: true }, { where: { id: req.user.id } }) + res.redirect("/newsLetter"); }); -router.post('/newsLetterUnSubscribe', ensureAuthenticated,async (req, res) => { +router.post('/newsLetterUnSubscribe', ensureAuthenticated, async (req, res) => { email = req.user.email console.log(email) link = "http://localhost:5000/newsLetter" - + // Mail.send(res, { // to: email, // subject: "Threads in Times Unsubcription to News Letter", @@ -714,14 +1177,14 @@ router.post('/newsLetterUnSubscribe', ensureAuthenticated,async (req, res) => { // html:`
    //
    // // //
    `, - - - + + + // }); mail.Send({ email_recipient: email, subject: "Threads in Times UnSubcription to News Letter", template_path: "../views/MailTemplates/NewsLetterUnSub.html", - context: {name: req.user.name }, + context: { name: req.user.name }, }); - - - console.log("Mail sent") - + + + console.log("Mail sent") + flashMessage(res, 'success', "You have unsubscribed to our newsletter! Come checkback sometime soon!"); await NewsLetterLog.create({ date: moment().format('L'), description: email + " unsubscribed to the newsletter", noOfUsersJoined: -1 }) - User.update({newsLetter:false},{where: {id:req.user.id}}) - res.redirect("/newsLetter" ); + User.update({ newsLetter: false }, { where: { id: req.user.id } }) + res.redirect("/newsLetter"); }); -router.get('/ProductReview/:sku', async (req, res) => { - let product = await Product.findOne({where:{sku:req.params.sku}}) - console.log(product.OwnerID) - let review = await ProductReview.findOne({where:{sku:req.params.sku}}) - res.render('ProductReview.handlebars',{product,review}); -}); - -router.get('/ProductReview/:sku', async (req, res) => { - let product = await Product.findOne({where:{sku:req.params.sku}}) - console.log(product.OwnerID) - let review = await ProductReview.findOne({where:{sku:req.params.sku}}) - res.render('ProductReview.handlebars',{product,review}); -}); +router.post("/createnotification", async (req, res) => { + let { title, body, url, sender, recipient } = req.body; + let notification = await Notification.create({ + title: title, + body: body, + url: url, + senderId: sender + }) + if (!isNaN(recipient)) { + let user = await User.findByPk(recipient) + notification.addUser(user) + } else if (recipient == "tailors") { + let users = await User.findAll({ include: { model: Tailor, required: true } }) + users.forEach(async user => { + await notification.addUser(user) + }); + } + console.log(notification.id, "IDD"); + let resp = { + id: notification.id + } + res.json(resp) +}) module.exports = router; diff --git a/routes/messaging.js b/routes/messaging.js new file mode 100644 index 00000000..8990b2e6 --- /dev/null +++ b/routes/messaging.js @@ -0,0 +1,77 @@ +const express = require('express'); +const router = express.Router(); +const moment = require('moment') +const User = require("../models/User"); +const Ticket = require('../models/Ticket'); +const Feedback = require('../models/Feedback'); +const Message = require("../models/Messages") +const Reward = require('../models/Reward') +const Request = require('../models/Request'); +const Service = require('../models/Service'); +const Appointment = require('../models/Appointment'); +const { Op, where } = require('sequelize'); +const Tailor = require('../models/Tailor'); +const Notification = require('../models/Notification'); +const ensureAuthenticated = require('../views/helpers/auth'); +const Msg = require('../models/Msg'); +const Chat = require('../models/Chat'); + +router.post("/live", async (req, res) => { + const { content, liveId, userId } = req.body + let [chat, created] = await Chat.findOrCreate({ where: { liveId: liveId, livechat: true }, defaults: { liveId: liveId, livechat: true } }) + chat.createMsg({ + content: content, + userId: userId, + seen: true + }) + return res.json({}) +}) + +router.post("/closeroom", async (req, res) => { + const { chatId } = req.body + await Chat.update({ open: false }, { where: { liveId: chatId } }) + return res.json({}) +}) + +router.all("/*", ensureAuthenticated) + +router.post("/", async (req, res) => { + const { content, userId, chatId } = req.body + let msg = await Msg.create({ + content: content, + userId: userId, + chatId: chatId + }) + + return res.json(msg) +}) + +router.get("/", async (req, res) => { + const { id } = req.query + let messages = await Chat.findByPk( + id, + { + include: + [ + Msg, + { + model: User, + where: { + id: { [Op.ne]: req.user.id } + } + } + ], + order: [ + [Msg, 'createdAt'] + ] + }) + // console.log(messages.msgs) + return res.json(messages) +}) + +router.post('/markasseen', async (req, res) => { + let { chatId } = req.body + let chat = await Msg.update({ seen: true }, { where: { seen: false, userId: { [Op.ne]: req.user.id }, chatId: chatId }, include: { model: Chat, include: { model: User, where: { id: req.user.id }, required: true }, required: true }, raw: true }) + res.json({}) +}) +module.exports = router; \ No newline at end of file diff --git a/routes/seller.js b/routes/seller.js index 6abd5389..ea016dfc 100644 --- a/routes/seller.js +++ b/routes/seller.js @@ -3,6 +3,7 @@ const router = express.Router(); const flashMessage = require('../views/helpers/messenger'); const sequelizeUser = require("../config/DBConfig"); const { serializeUser } = require('passport'); +const uuid = require('uuid') //Our Models const User = require("../models/User") const Ticket = require("../models/Ticket") @@ -12,24 +13,51 @@ const Message = require("../models/Messages") const CartProduct = require("../models/CartProduct") const FAQ = require("../models/FAQ") const ensureAuthenticated = require("../views/helpers/auth"); +const ensureSellerAuthenticated = require("../views/helpers/sellerAuth"); const moment = require("moment"); +const Order = require('../models/Orders'); +const OrderItems = require('../models/OrderItems'); // Required for file upload const -fs = require('fs'); +fs = require('fs'); const upload = require('../views/helpers/imageUpload'); +const Review = require('../models/Reviews'); +const Withdrawal = require('../models/Withdrawal'); +const Notification = require('../models/Notification'); + +router.all('/*', ensureSellerAuthenticated, function (req, res, next) { + req.app.locals.layout = 'seller'; // set your layout here + next(); // pass control to the next handler +}); router.use((req, res, next) => { res.locals.path = req.baseUrl; console.log(req.baseUrl); //Checks url for normal users and admin next(); - }); +}); router.get('/', (req, res) => { - res.render('seller/sellerHomePage'); + res.render('seller/dashboard'); }); -router.get('/reports', (req, res) => { - res.render('seller/reports'); +router.get('/dashboard', (req, res) => { + res.render('seller/dashboard.handlebars'); +}); + +router.get('/revenue', async (req, res) => { + var orders = (await OrderItems.findAll({ + where: { seller_id: req.user.id }, include: Order, order: [ + ['createdAt', 'DESC'], + ['product_name', 'ASC'], + ] + })) + var sellerRevenue = 0 + orders.forEach(element => { + let data = (((element.product_price * element.qtyPurchased) + element.shipping_rate) * 0.83) + sellerRevenue += data + }); + sellerRevenue = (sellerRevenue).toFixed(2) + res.render('seller/revenue.handlebars', { orders, sellerRevenue }); }); router.get('/sellerProfile', (req, res) => { @@ -37,74 +65,172 @@ router.get('/sellerProfile', (req, res) => { }); router.get('/manageProducts', async (req, res) => { - - products = await Product.findAll({where:{ownerID:req.user.id}}) - res.render('seller/viewProducts',{products}); + + var products = await Product.findAll({ where: { ownerID: req.user.id } }) + res.render('seller/viewProducts', { products }); }); -router.get('/addProduct',ensureAuthenticated, (req,res) => { +router.get('/addProduct', (req, res) => { res.render("seller/addProduct") }) +router.get('/orders', ensureAuthenticated, async (req, res) => { + var orders = (await OrderItems.findAll({ + where: { seller_name: req.user.name }, include: Order, order: [ + ['createdAt', 'DESC'], + ['product_name', 'ASC'], + ], + })) + res.render("seller/orders", { orders }) +}) + +router.post("/changeOrderStatus", ensureAuthenticated, async (req, res) => { + var OrderItem = await OrderItems.findOne({ where: { id: req.body.id } }) + console.log(req.body.status) + console.log(req.body.id) + if (OrderItem.orderStatus == "Delivered" && req.body.status != "Delivered" || OrderItem.orderStatus == "Delivery Confirmed") { + res.send({ message: "Cannot change status of delivered product", status: "error" }) + } else { + await OrderItems.update({ orderStatus: req.body.status }, { + where: { + id: req.body.id + } + }) + } +}) + +router.get('/withdrawal', async (req, res) => { + var withdrawals = await Withdrawal.findAll({ + where: { sellerID: req.user.id }, + include: User, order: [ + ['createdAt', 'DESC'], + ['withdrawal_amount', 'DESC'], + ] + }) + res.render("seller/withdrawals", { withdrawals }) +}); -router.post('/addProduct',ensureAuthenticated, async function (req,res) { - let { sku,name,description,price,quantity,category } = req.body; - try{ +router.post('/addProduct', async function (req, res) { + let { name, description, price, quantity, category, posterURL } = req.body; + let Uuid = (Math.floor(Date.now() + Math.random())).toString() + Uuid = parseInt(Uuid.slice(1, 10)) + // let random = Math.floor(Math.random() * 9) + // let nums = ['0','1','2','3','4','5','6','7','8','9'] + // for (let i= 0; i++; i { - - product = await Product.findOne({where:{sku:req.params.sku}}) - res.render("seller/editProduct",{product}) +router.get('/editProduct/:sku', async (req, res) => { + + product = await Product.findOne({ where: { sku: req.params.sku } }) + res.render("seller/editProduct", { product }) +}) + +router.get('/reviews', async (req, res) => { + var reviews = await Review.findAll({ + where: { sellerId: req.user.id }, include: { model: User }, order: [ + ['createdAt', 'DESC'], + ['title', 'ASC'], + ] + }) + + res.render("seller/reviews", { reviews }) }) -router.post('/editProduct/:sku',ensureAuthenticated, async (req,res) => { - let{name,category,price,quantity,description} = req.body; - +router.post('/editProduct/:sku', ensureAuthenticated, async (req, res) => { + let { name, category, price, quantity, description } = req.body; + Product.update({ - name:name, - description:description, - price:price, - quantity:quantity, - category:category - },{where: {sku:req.params.sku}}) - - flashMessage(res, 'success', name+ " Edited Successfully!"); + name: name, + description: description, + price: price, + quantity: quantity, + category: category + }, { where: { sku: req.params.sku } }) + + flashMessage(res, 'success', name + " Edited Successfully!"); res.redirect("/seller/manageProducts") - + }) -router.post('/deleteProduct',ensureAuthenticated, (req,res) => { - let {sku, name} = req.body; - Product.destroy({where:{sku:sku}}) - flashMessage(res, 'success', name+ " Deleted successfully"); - // CartProduct.destroy({where:{sku:sku}}) +router.post('/deleteProduct', ensureAuthenticated, (req, res) => { + let { sku, name } = req.body; + Product.destroy({ where: { sku: sku } }) + flashMessage(res, 'success', name + " Deleted successfully"); + CartProduct.destroy({ where: { productSku: sku } }) res.redirect("/seller/manageProducts") }) +router.post('/restockProduct', ensureAuthenticated, async (req, res) => { + let { uuid, quantity } = req.body; + var product = await Product.findByPk(uuid) + console.log(uuid) + console.log(quantity) + await Product.update({ quantity: product.quantity + parseInt(quantity) }, { where: { sku: uuid } }) + flashMessage(res, 'success', product.name + " Restocked successfully"); + res.redirect("/seller/manageProducts") +}) + +router.post('/withdrawal', ensureAuthenticated, async (req, res) => { + var user = await User.findByPk(req.user.id) + console.log(req.body.bal) + await Withdrawal.create({ + sellerID: req.user.id, + withdrawal_amount: req.body.bal, + status: "Awaiting Authorization", + userId: req.user.id + }).then(async () => { + let io = req.app.get('io') + let payload = { + title: "New Withdrawal Request", + body: "You have a new request. Click here to see it", + url: "/admin/withdrawal", + senderId: req.user.id, + } + var admins = await User.findAll({where : { role: "A"}}) + await Notification.create({ + title: payload.title, + body: payload.body, + url: payload.url, + }) + .then(notification => { + notification.addUsers(admins) + io.to("admins").emit('notification', payload) + }) + }) + res.redirect("/seller/dashboard") +}) + module.exports = router; \ No newline at end of file diff --git a/routes/services.js b/routes/services.js index bf06e2cb..e52a4b3c 100644 --- a/routes/services.js +++ b/routes/services.js @@ -8,115 +8,452 @@ const Request = require('../models/Request'); const Service = require('../models/Service'); const flashMessage = require('../views/helpers/messenger'); const moment = require('moment'); - -router.use((req, res, next) => { - res.locals.path = req.baseUrl; - console.log(req.baseUrl); - //Checks url for normal users and admin - next(); -}); +const Tailor = require('../models/Tailor'); +const { Op, col } = require('sequelize'); +const Chat = require('../models/Chat'); +const ChatUser = require('../models/ChatUser'); +const Notification = require('../models/Notification'); +const RequestItem = require('../models/RequestItem'); router.get('/', (req, res) => { res.render('services/index') }); -router.get('/request', ensureAuthenticated, async (req, res) => { - let object = await Service.findAll(); - // console.log(object) - res.render('services/request', { object }) +router.use(ensureAuthenticated); + + +router.get('/tailoring/request', async (req, res) => { + let tailors = await User.findAll({ include: { model: Tailor, required: true } }) + let now = moment() + let min = now.add(7, 'd').format('YYYY-MM-DD') + let max = now.add(1, 'M').format('YYYY-MM-DD') + res.render('services/requestform', { min, max, tailors }) }); -router.post('/request', ensureAuthenticated, async (req, res) => { - let { fName, lName, email, title, service, tailorID, description } = req.body; - await Request.create({ +router.post('/tailoring/request', async (req, res) => { + let { title, date, time, tailorID, name, type, color, qty, description } = req.body; + console.log(req.body) + let datetime = moment(`${date} ${time}`) + let items = [] + for (let i = 0; i < 3; ++i) { + if (i == 0 && [name[i], color[i], qty[i], type[i], description[i]].length != 5) { + flashMessage(res, 'error', `Your request item has missing information`) + return res.redirect('/services/tailoring/request') + } else if (i != 0 && ([].length > 0 && [name[i], color[i], qty[i], type[i], description[i]].length < 5)) { + flashMessage(res, 'error', `Your request item has missing information`) + return res.redirect('/services/tailoring/request') + } else if ([name[i], color[i], qty[i], type[i], description[i]].length == 5) { + items.push({ + name: name[i], + color: color[i], + qty: qty[i], + type: type[i], + description: description[i] + }) + } + + } + if (!datetime.isBetween(moment().add(7, 'd'), moment().add(1, "M"), 'date', '[]')) { + flashMessage(res, 'error', `Appointment date out of range. Please pick a date between ${moment().add(7, 'd').format('DD-MM-YYYY')} and ${moment().add(1, "M").format('DD-MM-YYYY')}`) + return res.redirect('/services/tailoring/request') + } + + await Appointment.findOne({ + where: { + tailorId: tailorID, + datetime: datetime, + confirmed: { + [Op.or]: ['Pending', 'Confirmed'] + } + } + }) + .then(async (appointment) => { + if (appointment !== null) { + flashMessage(res, 'error', 'Appointment time is booked') + return res.redirect('/services/tailoring/request') + } else { + await Appointment.destroy({ + where: { + datetime: datetime, + tailorId: tailorID, + confirmed: 'Rejected' + } + }) + } + }) + + + let tailor = await User.findByPk(tailorID, { include: { model: Chat, include: { model: User, where: { id: req.user.id }, required: true } } }) + let request = await Request.create({ title: title, - fName: fName, - lName: lName, - email: email, - serviceId: service, - tailorID: tailorID, - description: description, - userId: req.user.id + status: 'Pending Appointment Confirmation', + adminstatus: 'Please confirm this Appointment', + userColor: 'blue', + adminColor: 'yellow', + userId: req.user.id, + tailorId: tailorID, }) - .then((request) => { - let reqId = request.id - res.redirect(`/services/book/${request.id}`); + .then(async (request) => { + if (tailor.chats.length == 1) { + await request.setChat(tailor.chats[0]) + } else { + await request.createChat({}) + let chat = await request.getChat() + await chat.addUser(tailor) + await chat.addUser(req.user) + } + + await Appointment.create({ + tailorId: tailorID, + datetime: datetime, + confirmed: 'Pending', + type: 'Measurement', + userId: req.user.id, + requestId: request.id, + }) + .catch(err => { + console.log(err); + flashMessage(res, 'error', 'Failed to Add to Create Appointment') + return res.redirect('/services/tailoring/request') + }) + return request }) .catch(err => { console.log(err); flashMessage(res, 'error', 'Failed to Add to Create Request') - res.redirect('/services/request') - }); + return res.redirect('/services/tailoring/request') + }) + + for (const item of items) { + console.log(items) + await RequestItem.create({ + name: item.name, + color: item.color, + qty: item.qty, + type: item.type, + description: item.description + }).then((requestitem) => { + request.addRequestitem(requestitem) + }) + } + + let io = req.app.get('io') + let payload = { + title: "New Request", + body: "You have a new request. Click here to see it", + url: "/admin/requests", + senderId: req.user.id, + } + await Notification.create({ + title: payload.title, + body: payload.body, + url: payload.url, + }) + .then(notification => { + notification.addUser(tailor) + io.to(`User ${tailorID}`).emit('notification', payload) + }) + + + return res.redirect('/user/requests') }); -router.post('/request/edit', ensureAuthenticated, async (req, res) => { - console.log(req.body) +router.post('/request/edit', async (req, res) => { await Request.update({ title: req.body.title, description: req.body.description, serviceId: req.body.service }, { where: { id: req.body.id } - }); - return res.json({}); + }).then(async count => { + let requested = await Request.findByPk(req.body.id, { include: ["tailor"] }) + let payload = {}; + if (count == 1) { + payload = { send: true, by: req.user.name, to: requested.tailor.id, id: requested.id } + } else { + payload = { send: false, by: null, to: null, id: null } + } + return res.json(payload); + }) }); -router.get('/book/:reqId', ensureAuthenticated, async (req, res) => { - let reqId = req.params.reqId; - let request = await Request.findByPk(reqId); - let now = moment() - let today = now.format('YYYY-MM-DD') - let max = now.add(1, 'M').format('YYYY-MM-DD') - // console.log(max) - if (request && req.user.id == request.userId) { - res.render('services/booking', { reqId, today, max }) - } - else { - flashMessage(res, 'error', 'You do not have permission to access this page'); - res.redirect("/login"); - } -}); +// router.get('/book/:reqId', async (req, res) => { +// let reqId = req.params.reqId; +// let request = await Request.findByPk(reqId); +// let now = moment() +// let min = now.add(7, 'd').format('YYYY-MM-DD') +// let max = now.add(1, 'M').format('YYYY-MM-DD') +// let tailorId = request.tailorId +// // console.log(max) +// if (request && req.user.id == request.userId) { +// res.render('services/booking', { reqId, min, max, tailorId }) +// } +// else { +// flashMessage(res, 'error', 'You do not have permission to access this page'); +// res.redirect("/login"); +// } +// }); -router.post('/book/:reqId', ensureAuthenticated, async (req, res) => { - let reqId = req.params.reqId; - let userId = req.user.id; - let { date, time, description } = req.body; +// router.post('/book/:reqId', async (req, res, next) => { +// let reqId = req.params.reqId; +// let userId = req.user.id +// let { date, time, description, tailorID } = req.body; +// req.body.status = 2 +// req.body.statusId = reqId +// let datetime = moment(`${date} ${time}`) - // console.log("time: "+time) - if (!moment(date).isBetween(moment(), moment().add(1, "M"))) { - flashMessage(res, 'error', 'Appointment date out of range') - res.redirect(`/services/book/${reqId}`) +// next() +// }, serviceController.requestStatus); + +router.post('/appointment/add', async (req, res, next) => { + let { tailorId, date, time, reqId } = req.body + let payload = {} + let datetime = moment(`${date} ${time}`) + if (!moment(datetime).isBetween(moment().add(7, 'd'), moment().add(1, "M"), 'date', '[]')) { + flashMessage(res, 'error', `Appointment date out of range. Please pick a date between ${moment().add(7, 'd').format('DD-MM-YYYY')} and ${moment().add(1, "M").format('DD-MM-YYYY')}`) + // return res.json({}) } else { + let request = await Request.findByPk(reqId, {include: Appointment}) + if (request.appointments[0].type == "Fitting") { + type = 'Fitting' + } else if (request.appointments[0].type == "Measurement" && request.appointments[0].confirmed == "Confirmed") { + type = 'Fitting' + } else { + type = 'Measurement' + } + await Appointment.findOrCreate({ where: { - date: date, - time: time, + tailorId: tailorId, + datetime: datetime, + confirmed: { + [Op.or]: ['Pending', 'Confirmed'] + } }, defaults: { - date: date, - time: time, - description: description, + tailorId: tailorId, + datetime: datetime, + confirmed: 'Pending', + type: 'Measurement', userId: req.user.id, requestId: reqId, - userId: userId } }) - .then(([appt, created]) => { - // console.log(created) - if (created) { - res.redirect('/user/requests'); + .then(async ([appt, created]) => { + if (created) { + await Appointment.destroy({ + where: { + datetime: datetime, + tailorId: tailorId, + confirmed: 'Rejected' + } + }) + + await Request.update({ + status: 'Pending Appointment Confirmation', + adminstatus: 'Please confirm this Appointment', + userColor: 'blue', + adminColor: 'yellow', + }, { + where: { + id: reqId + } + }) + flashMessage(res, 'success', 'Appointment Added sucessfully!') + payload.send = true + } else { + flashMessage(res, 'error', 'Time slot already taken!') + } + }) + .catch(err => { + console.log(err); + flashMessage(res, 'error', 'Failed to book Appointment') + }); + payload = { + datetime: datetime, + to: tailorId + }; + } + return res.json(payload) +}); + +router.post('/appointment/edit', async (req, res, next) => { + let { id, date, time, description } = req.body + let datetime = moment(`${date} ${time}`) + let send; + await Appointment.findByPk(id) + .then(async (appt) => { + if (!appt) { + flashMessage(res, 'error', 'No Appointment Found!') + // return res.json({}) + } else if (appt.date == date && appt.time == time && appt.description == description) { + flashMessage(res, 'error', 'No changes were made') + // return res.json({}) + } else if (!moment(datetime).isBetween(moment().add(7, 'd'), moment().add(1, "M"), 'date', '[]')) { + flashMessage(res, 'error', `Appointment date out of range. Please pick a date between ${moment().add(7, 'd').format('DD-MM-YYYY')} and ${moment().add(1, "M").format('DD-MM-YYYY')}`) + // return res.json({}) } else { - flashMessage(res, 'error', 'Appointment time is booked') - res.redirect(`/services/book/${reqId}`) + req.body.statusId = (await appt.getRequest()).id + req.body.status = (appt.date != date || appt.time != time ? 2 : 3) + await Appointment.update({ datetime: datetime, description: description, confirmed: 'Pending' }, { where: { id: id } }) + .then(async () => { + flashMessage(res, 'success', 'Appointment updated sucessfully!') + send = true + await Request.update({ + status: "Pending Appointment Confirmation", + adminstatus: 'Please confirm this Appointment', + userColor: 'blue', + adminColor: 'yellow', + }, { where: { id: req.body.statusId } }) + // return res.json({}) + }) + .catch(err => { + console.log(err); + flashMessage(res, 'error', 'Failed to book Appointment') + // return res.json({}) + }); } }) - .catch(err => { - console.log(err); - flashMessage(res, 'error', 'Failed to book Appointment') - res.redirect('/services/book') - }); + .catch((e) => { + console.log(e) + }) + let to = await Appointment.findByPk(id) + let payload = {}; + if (send) { + payload = { send: send, by: req.user.name, to: to.tailorId } + } else { + payload = { send: send, by: null, to: null } + } + return res.json(payload) +}); + +router.post('/request/tailorChange', async (req, res) => { + let { id, tailorId } = req.body; + let requested; + let send; + let request = await Request.findOne({ where: { id: id, tailorId: tailorId } }) + await Request.update({ tailorChangeId: tailorId }, { where: { id: id, tailorId: { [Op.not]: tailorId } } }) + .then(async count => { + if (count == 1) { + send = true + requested = await Request.findByPk(req.body.id, { include: ['tailor', 'tailorChange', 'user'] }) + flashMessage(res, 'success', 'Tailor change requested') + } else if (request) { + flashMessage(res, 'info', 'No changes made') + } else { + flashMessage(res, 'error', 'Failed to request tailor change') + } + }) + let payload = {}; + if (send) { + payload = { send: send, from: requested.tailor.id, to: requested.tailorChange.name, by: requested.user.name } + } else { + payload = { send: send, from: null, to: null, by: null } + } + return res.json(payload) +}); + +router.post('/item/updateqty', async (req, res) => { + let { id, qty } = req.body + console.log(qty); + await RequestItem.update({ + qty: qty + }, { where: { id: id } }) + .catch((e) => { + console.log(e); + }) + + res.json({}) + +}); + +router.post('/item/add', async (req, res) => { + let { id, name, type, color, description } = req.body + let request = await Request.findByPk(id) + let tailor = await request.getTailor() + let payload = { + recipient: tailor.id, + } + await RequestItem.create({ + name: name, + type: type, + color: color, + description: description, + requestId: id + }) + .then((item) => { + if (item !== null) { + payload.send = true + } else { + payload.send = false + } + }) + .catch((e) => { + console.log(e); + payload.send = false + }) + + res.json(payload) + +}); + +router.post('/item/edit', async (req, res) => { + let { id, name, type, color, description } = req.body + let item = await RequestItem.findByPk(req.body.id, { include: Request }) + let tailor = await item.request.getTailor() + let payload = { + recipient: tailor.id, } + await RequestItem.update({ name: name, type: type, color: color, description: description }, { where: { id: id } }) + .then((count) => { + if (count == 1) { + payload.send = true + } else { + payload.send = false + } + }) + .catch((e) => { + console.log(e); + payload.send = false + }) + res.json(payload) }); +router.delete('/item/remove', async (req, res) => { + let item = await RequestItem.findByPk(req.body.id, { include: Request }) + let tailor = await item.request.getTailor() + console.log(tailor); + let payload = { + send: true, + title: 'Request Item Deleted', + body: `The request item ${item.name} in request ${item.request.id} was deleted. Click here to see changes`, + by: req.user.name, + to: tailor.id, + url: `/admin/requests`, + } + await RequestItem.destroy({ where: { id: req.body.id } }) + res.json(payload) + +}); + +router.post('/deliver', async (req, res) => { + let { method, id } = req.body + let time = moment().add(7, 'd') + if (method == 'Pick Up') { + await Request.update({ status: `You may pick up from us from ${time.toDate()}`, adminstatus: `Set to pick up from ${time.toDate()}`, userColor: 'green', adminColor: 'green' }, { where: { id: id } }) + } else { + + } + res.json({}) + +}); + +router.delete('/appointment/cancel', serviceController.appointmentDelete); +router.delete('/tailorChange/cancel', serviceController.tailorChangeDelete); +router.delete('/request/cancel', serviceController.requestDelete); + + + + module.exports = router \ No newline at end of file diff --git a/routes/text.txt b/routes/text.txt new file mode 100644 index 00000000..51079cb5 --- /dev/null +++ b/routes/text.txt @@ -0,0 +1,82 @@ +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 2, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-29 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-29 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-29 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-29 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-30 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-30 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-30 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-30 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-30 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-30 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 5, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-31 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-31 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-07-31 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-1 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-1 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-1 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-1 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-3 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-3 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 3, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-7 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-3 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-3 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-3 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-4 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-4 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-5 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-6 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-7 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 7, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-5 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-6 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-7 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-9 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-10 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-11 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-12 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 1, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-13 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 2, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-13 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 2, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-14 16:22:30","2022-07-28 16:22:30",9); +INSERT into orderitems (productSku, qtyPurchased, product_name, product_price, seller_name, seller_id, posterURL, review,seller_cut,tit_cut, orderStatus, createdAt, updatedAt, orderId) VALUES (660585572, 2, "White Blouse", 123, "Classy Jack", 3,"/uploads/3/3-1660585529761.jpg",0,100,23, "Processing", "2022-08-15 16:22:30","2022-07-28 16:22:30",9); +@app.route('/my-requests/cart/checkout') +@login_required +def redirect_to_checkout(): + return render_template('customer/checkout.html') + +@app.route('/my-requests/cart/checkout/new') +@login_required +def create_checkout_session(): + domain_url = "https://127.0.0.1:5000/my-requests/cart/checkout/" + stripe.api_key = stripe_keys["secret_key"] + try: + checkout_session = stripe.checkout.Session.create( + success_url=domain_url + "success?session_id={CHECKOUT_SESSION_ID}", + cancel_url=domain_url + "cancelled", + payment_method_types=["card"], + mode="payment", + line_items=[ + { + "name": "Flat Fee", + "quantity": 1, + "currency": "sgd", + "amount": "30000", + } + ] + ) + return jsonify({"sessionId": checkout_session["id"]}) + except Exception as e: + return jsonify(error=str(e)), 403 + +@app.route('/my-requests/cart/checkout/success') +@login_required +def checkout_success(): + flash(f"Your payment is successful!", "success") + return redirect(url_for('customerRequest')) + +@app.route('/my-requests/cart/checkout/cancelled') +@login_required +def checkout_cancelled(): + request = Request.query.filter_by(owner=current_user).order_by(Request.creation_datetime.desc()).first() + db.session.delete(request) + db.session.commit() + flash(f"Your payment has been cancelled!", "danger") + return redirect(url_for('customerCart')) \ No newline at end of file diff --git a/routes/user.js b/routes/user.js index 519187ed..3963b542 100644 --- a/routes/user.js +++ b/routes/user.js @@ -10,9 +10,17 @@ const ensureAuthenticated = require("../views/helpers/auth"); const moment = require('moment') const Request = require('../models/Request') const { Op } = require('sequelize'); - - -const userController = require('../controllers/userController') +const Mail = require("../config/MailConfig"); +const TempUser = require("../models/TempUser"); +const mail = require("../config/NewMailConfig"); +const PDFDocument = require('pdfkit'); +const path = require('path'); + +const userController = require('../controllers/userController'); +const Service = require('../models/Service'); +const Appointment = require('../models/Appointment'); +const Tailor = require('../models/Tailor'); +const RequestItem = require('../models/RequestItem'); router.use((req, res, next) => { res.locals.path = req.baseUrl; @@ -63,7 +71,7 @@ router.post('/register', async function (req, res) { if (password != password2) { flashMessage(res, 'error', 'Passwords do not match'); isValid = false; - + return res.redirect("/register"); @@ -88,6 +96,16 @@ router.post('/register', async function (req, res) { gender: req.body.gender, phoneNumber: req.body.phoneNumber + }); + code1 = Math.random().toString(36).substring(2, 15) + code2 = Math.random().toString(36).substring(2, 15) + await TempUser.create({ + email: req.body.email, + backupcode1: code1, + backupcode2: code2, + backupcode1check: 'not used', + backupcode2check: 'not used' + }); await UsersJoinedLog.create({ @@ -138,16 +156,23 @@ router.get('/sellerRegister', (req, res) => { router.post('/sellerRegister', async function (req, res) { - let { name, email, password, password2 } = req.body; + let { name, bankName, email, password, password2 } = req.body; let isValid = true; + if (bankName == 'nothing'){ + flashMessage(res, 'error', 'Please choose a bank'); + isValid = false; + return res.redirect('/sellerRegister') + } if (password.length < 6) { - flashMessage(res, 'error', 'Password must be at least 6 char-acters'); + flashMessage(res, 'error', 'Password must be at least 6 characters'); isValid = false; + return res.redirect('/sellerRegister') } if (password != password2) { flashMessage(res, 'error', 'Passwords do not match'); isValid = false; + return res.redirect('/sellerRegister') } try { @@ -168,6 +193,8 @@ router.post('/sellerRegister', async function (req, res) { password: req.body.password, gender: req.body.gender, phoneNumber: req.body.phoneNumber, + bankAccount: req.body.bankAccount, + bankName: req.body.bankName, role: "S" }); @@ -187,18 +214,242 @@ router.post('/sellerRegister', async function (req, res) { router.get('/user/requests', ensureAuthenticated, async (req, res) => { + let now = moment() + let min = now.add(7, 'd').format('YYYY-MM-DD') + let max = now.add(1, 'M').format('YYYY-MM-DD') + let tailors = await User.findAll({ include: { model: Tailor, required: true } }) let requests = await Request.findAll({ - include: { all: true, nested: true }, + include: [ + { model: User, as: 'user' }, + { + model: Appointment, + order: [['createdAt', 'DESC']], + limit: 1 + }, + { + model: User, + as: 'tailor', + }, + { + model: User, + as: 'tailorChange', + }, + { + model: RequestItem, + }, + ], where: { [Op.or]: [ { userId: req.user.id }, - { "$tailor.userId$": req.user.id } - ] + { "$tailor.id$": req.user.id } + ], + }, + order: [ + ["createdAt", 'DESC'] + ] + }) + // requests.forEach(element => { + // console.log(element.toJSON()) + // }); + res.render('services/requests', { requests, min, max, tailors }) +}) + +router.get('/forgetpassword', (req, res) => { + res.render('forgetPassword'); +}); +router.post('/forgetpassword', async (req, res) => { + let { email } = req.body; + emailvariable = email; + console.log(emailvariable) + + + // if (await TempUser.findOne({ where: { email: email } })){ + // return res.redirect('/forgetpassword_otp') + // } + if (await User.findOne({ where: { email: email } })) { + otp = Math.floor(100000 + Math.random() * 900000) + console.log(otp, 'HLEOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO HERE') + userr1 = await User.findOne({ where: { email: email } }) + mail.Send({ + email_recipient: email, + subject: `Your Threads in Times OTP is ready`, + template_path: "../views/MailTemplates/ForgetPassword.html", + context: { name: userr1.name, otp: otp }, + }); + + // Mail.send(res, { + // to: email, + // subject: "Your OTP is ready " + otp, + // text: "Thank you for subscribing to our news letter", + // template: "../views/MailTemplates/NewsLetter", + // html: `
    + //
    + // + // + // + //
    + //
    ` + // }) + + // await TempUser.create({ + // email: req.body.email, + // }) + flashMessage(res, 'success', 'An OTP has been sent out. Please check your email!'); + return res.redirect('/forgetpassword_otp') + } + flashMessage(res, 'error', 'Email does not exist!'); + return res.redirect('/forgetpassword') +}) + +router.get('/forgetpassword_otp', (req, res) => { + if (otp == "placeholder") { + flashMessage(res, 'error', 'You do not have permission for that page'); + return res.redirect("/") + } + // otp = "placeholder" + res.render('otpPage'); + +}); + +router.post('/forgetpassword_otp', async (req, res) => { + console.log(otp) + if (otp == req.body.otp) { + console.log('hello111111') + otp = "placeholder" + otp2 = 'allowpwchange' + flashMessage(res, 'success', 'Valid OTP entered. Please change your password!'); + return res.redirect('/forgetpasswordchange') + } + flashMessage(res, 'error', 'Incorrect OTP!'); + return res.redirect('/forgetpassword_otp') +}) +router.get("/forgetpasswordchange", (req, res) => { + console.log(otp2) + if (otp2 == 'disallowpwchange') { + flashMessage(res, 'error', 'You do not have permission for that page'); + res.redirect('/') + } + res.render('forgetpasswordchange') +}) + +router.post('/forgetpasswordchange', async (req, res) => { + let { newpassword, newpassword2 } = req.body + if (newpassword.length < 6) { + flashMessage(res, 'error', 'Password must be at least 6 characters'); + return res.redirect('/forgetpasswordchange') + } + if (newpassword2 != newpassword) { + flashMessage(res, 'error', 'New passwords do not match'); + return res.redirect('/forgetpasswordchange') + } + // user1 = await TempUser.findOne({ where: { email: emailvariable } }) + + User.update({ password: newpassword }, { where: { email: emailvariable } }) + // TempUser.destroy({ where: { email: user1.email } }) + otp = "placeholder" + otp2 = "disallowpwchange" + emailvariable = 'placeholder' + flashMessage(res, 'success', 'Password updated successfully'); + return res.redirect('/login') +}) +router.get("/backupcodes", async (req, res) => { + temp = (await TempUser.findAll({ where: { email: req.user.email } })).map((x) => x.dataValues) + res.render('backupcodes', { temp }) +}) + +router.post('/backupcodes', async (req, res) => { + console.log('hleloefe') + code1 = Math.random().toString(36).substring(2, 15); + code2 = Math.random().toString(36).substring(2, 15) + await TempUser.update({ + backupcode1: code1, backupcode2: code2, backupcode1check: 'not used', backupcode2check: 'not used' + }, { where: { email: req.user.email } }); + return res.redirect('/backupcodes') + +}) + +router.get("/forgetpwbackupcodes", (req, res) => { + if (otp == "placeholder") { + flashMessage(res, 'error', 'You do not have permission for that page'); + return res.redirect("/") + } + res.render('forgetpwbackupcodes') +}) +router.post('/forgetpwbackupcodes', async (req, res) => { + let { backupcode } = req.body + tempuser = await TempUser.findOne({ where: { email: emailvariable } }) + if (backupcode == tempuser.backupcode1) { + if (tempuser.backupcode1check == "not used") { + otp = "placeholder" + otp2 = 'allowpwchange' + await TempUser.update({ backupcode1check: 'used' }, { where: { email: tempuser.email } }); + flashMessage(res, 'success', 'Valid backup code entered. Please change your password!'); + return res.redirect('/forgetpasswordchange') } - }) - // console.log(requests) - res.render('services/requests', { requests }) + + } + if (backupcode == tempuser.backupcode2) { + if (tempuser.backupcode2check == "not used") { + otp = "placeholder" + otp2 = 'allowpwchange' + await TempUser.update({ backupcode2check: 'used' }, { where: { email: tempuser.email } }); + flashMessage(res, 'success', 'Valid backup code entered. Please change your password!'); + return res.redirect('/forgetpasswordchange') + } + + } + console.log(backupcode) + flashMessage(res, 'error', 'Invalid backup code!'); + return res.redirect('/forgetpwbackupcodes') + + // if(backupcode){ + + // } + +}) + +router.get("/downloadbackupcodes", ensureAuthenticated, async (req, res) => { + const content = 'Some content!' + var pdfDoc = new PDFDocument({ bufferPages: true, font: 'Courier' }); + let WavePath = path.join(__dirname, '../public/images/Letterhead.png') + bc = await TempUser.findOne({ where: { email: req.user.email } }) + back1 = bc.backupcode1 + back2 = bc.backupcode2 + + + const stream = res.writeHead(200, { + 'Content-Type': 'application/pdf', + 'Content-Disposition': `attachment;filename=backupcodes.pdf`, + }); + pdfDoc.on('data', (chunk) => stream.write(chunk)); + + pdfDoc.on('end', () => stream.end()); + pdfDoc.image(WavePath, 0, 0, { align: 'center', valign: 'center', width: 600 }) + pdfDoc + .fillColor('#444444') + .font('Courier-Bold') + .fontSize(35) + .text('Threads In Times', { align: 'left' }) + + pdfDoc + .fillColor('red') + .fontSize(13) + .text(`Backup Code 1: ${back1}`) + .text(`Backup Code 2: ${back2}`) + pdfDoc.end(); }) module.exports = router; diff --git a/server.js b/server.js index 31d0ac36..c3f804bc 100644 --- a/server.js +++ b/server.js @@ -13,30 +13,73 @@ const seller = require("./routes/seller") const services = require("./routes/services") const datapipeline = require("./routes/datapipeline") const api = require("./routes/api") +const msg = require("./routes/messaging") const bodypassword = require('body-parser') const GoogleAuth = require("./config/passportGoogleAuth") -const Dialogflow = require("./config/DialogFlow") const DBConnection = require('./config/DBConnection'); const Request = require('./models/Request') - -app.use(bodypassword.json()) -app.use(bodypassword.urlencoded({extended: false})) +const Service = require('./models/Service') +const User = require('./models/User') +const moment = require("moment") +const serviceController = require("./controllers/serviceController") +const { createServer } = require("http"); +const { Server } = require("socket.io"); + +app.use('/webhook', express.raw({ type: "*/*" })); +app.use(express.json()); +app.use(bodypassword.urlencoded({ extended: false })) // To send forms and shit +// socket implementation +const httpServer = createServer(app); +const io = new Server(httpServer, { cors: { origin: "*" } }); + +const testHandler = require("./sockets/test") +const bookingHandler = require("./sockets/booking") +const messagingHandler = require("./sockets/messaging") + +const onConnection = (socket) => { + socket.onAny((eventName, ...args) => { + console.log(eventName, "was just fired", args) + }); + socket.userid = socket.handshake.auth.id + socket.join(`User ${socket.userid}`) + console.log(`User ${socket.handshake.auth.id} has connected with socket id of ${socket.id}`) + // io.of("/").adapter.on("join-room", (room, id) => { + // console.log(`socket ${id} has joined room ${room}`); + // console.log(socket.rooms) + // }); + bookingHandler(io, socket) + messagingHandler(io, socket) + testHandler(io, socket) + console.log(socket.rooms) + + socket.on('disconnecting', (reason) => { + socket.rooms.forEach(room => { + console.log(room) + io.to(room).emit('livechat:disconnect', room) + }); + }) +} + +io.on("connection", onConnection); +app.set('io', io) + + // Library to use MySQL to store session objects -const MySQLStore = require('express-mysql-session'); - -var options = { - host: process.env.DB_HOST, - port: process.env.DB_PORT, - user: process.env.DB_USER, - password: process.env.DB_PWD, - database: process.env.DB_NAME, +const MySQLStore = require('express-mysql-session'); + +var options = { + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PWD, + database: process.env.DB_NAME, clearExpired: true, // The maximum age of a valid session; milliseconds: expiration: 3600000, // 1 hour = 60x60x1000 milliseconds - // How frequently expired sessions will be cleared; milliseconds: - checkExpirationInterval: 1800000 // 30 min - } + // How frequently expired sessions will be cleared; milliseconds: + checkExpirationInterval: 1800000 // 30 min +} // To sstore: new MySQLStore(options),tore session information. By default it is stored as a cookie on browser app.use(session({ @@ -62,9 +105,6 @@ app.use(passport.session()) GoogleAuth() -// Dialogflow -Dialogflow() - // Initilize Passport middleware @@ -72,19 +112,20 @@ Dialogflow() const flash = require('connect-flash'); app.use(flash()); const flashMessenger = require('flash-messenger'); +const Tailor = require("./models/Tailor"); app.use(flashMessenger.middleware); // Place to define global variables -app.use(function (req, res, next) { +app.use(async function (req, res, next) { res.locals.messages = req.flash('message'); res.locals.errors = req.flash('error'); res.locals.user = req.user; res.locals.authenticated = req.isAuthenticated(); - - + res.locals.today = moment().format('YYYY-MM-DD') + res.locals.time = moment().format('HH:mm:ss') next(); }); @@ -100,7 +141,7 @@ app.engine( equals(arg1, arg2, options) { return arg1 == arg2 ? options.fn(this) : options.inverse(this); }, - identifystring(s1,s2){ + identifystring(s1, s2) { return s1 == s2; }, @@ -108,6 +149,21 @@ app.engine( options.data.root[name] = value; }, + gt(a, b) { + var next = arguments[arguments.length - 1]; + return (a > b) ? next.fn(this) : next.inverse(this); + }, + + ge(a, b) { + var next = arguments[arguments.length - 1]; + return (a >= b) ? next.fn(this) : next.inverse(this); + }, + + ne(a, b) { + var next = arguments[arguments.length - 1]; + return (a !== b) ? next.fn(this) : next.inverse(this); + }, + async options() { return res.json({ total: await Request.count(), @@ -117,15 +173,51 @@ app.engine( { userId: req.user.id }, { tailorID: req.user.id } ] - + }, include: ['service', "user"], }) }) + }, + identifygender(v1, v2) { + if (String(v1) == v2) { + return true; + + } + return false; + }, + phonenumbercheck(number) { + if (number) { + return true; + } + return false; + }, + isbanTrue(boo) { + if (boo == "T") { + return true; + } + return false; + }, + radioCheck(value, radioValue) { + return (value == radioValue) ? 'checked' : ''; + }, + backupcodechecker(n) { + if (n == "not used") { + return true; + } + return false; + }, + tempuserchecker(i, n) { + console.log(i, n) + if (String(i) == String(n)) { + return true; + } + return false; } - }, + + }, }) - ); +); app.set('view engine', 'handlebars'); @@ -136,45 +228,52 @@ app.use(express.static(path.join(__dirname, 'public'))); // Creates static folder for publicly accessible HTML, CSS and Javascript files -app.use("/*", (req, res, next) => { +app.all("/*", (req, res, next) => { req.app.locals.layout = 'main'; next() }); +// app.all('/*', serviceController.checkAppointment) + //Set layout for all routes app.use("/", main) app.use("/", user) -app.use("/admin",admin) -app.use("/services",services) -app.use("/seller",seller) -app.use("/datapipeline",datapipeline) -app.use("/api",api) - - -// catch 404 and forward to error handler -app.use(function(req, res, next) { - var err = new Error('Not Found'); - err.status = 404; - next(err); - }); - - // error handler - app.use(function(err, req, res, next) { +app.use("/admin", admin) +app.use("/services", services) +app.use("/seller", seller) +app.use("/datapipeline", datapipeline) +app.use("/api", api) +app.use("/msg", msg) + +// error handler +app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // render the error page - res.status(err.status || 500); - res.render('error404'); - }); -const port = 5000; + // catch 404 and forward to error handler + app.use(function (req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); + }); + // error handler + app.use(function (err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + // render the error page + res.status(err.status || 500); + res.render('error404'); + }); + +}) +const port = 5000; // Starts the server and listen to port -app.listen(port, () => { +httpServer.listen(port, () => { console.log(`Server started on port ${port}`); -}); \ No newline at end of file +}) \ No newline at end of file diff --git a/sockets/booking.js b/sockets/booking.js new file mode 100644 index 00000000..e74d6db6 --- /dev/null +++ b/sockets/booking.js @@ -0,0 +1,28 @@ +module.exports = (io, socket) => { + const test = (payload) => { + socket.to(`User ${payload.recipient}`).emit('notification', payload) + } + + const requests = (payload) => { + socket.to(`User ${payload.recipient}`).emit('request:notif', payload) + } + + + const removeLivechat = (payload) => { + socket.to(`admins`).emit('livechat:remove', payload) + } + + const sendLivechat = (payload) => { + socket.to(payload.recipient ? payload.recipient : `admins`).emit('livechat:request', payload) + } + + const getLivechat = (payload) => { + socket.to(`livechat`).emit('livechat:get', payload.adminId) + } + + socket.on("default", test); + socket.on("request:notif", requests); + socket.on("livechat:request", sendLivechat); + socket.on("livechat:get", getLivechat); + socket.on("livechat:remove", removeLivechat); +} \ No newline at end of file diff --git a/sockets/messaging.js b/sockets/messaging.js new file mode 100644 index 00000000..242f52c2 --- /dev/null +++ b/sockets/messaging.js @@ -0,0 +1,27 @@ +module.exports = (io, socket) => { + const messageSent = ({ msg }) => { + console.log("msg sent.. sending to users in ", msg) + io.in(`Chat ${msg.chatId}`).emit('message:receive', msg) + io.in(`Chat ${msg.chatId}`).emit('request:message', msg) + } + + const livechat = ({ msg, id, owner }) => { + console.log("msg sent.. sending to users in ", id) + io.in(`User ${id}`).emit('livechat:receive', { msg, id, owner }) + } + + const enterChat = ({target, name, id}) => { + console.log(name) + io.in(`User ${target}`).emit('livechat:inside', {name, id}); + }; + + const acknowledgement = ({id, x}) => { + console.log(id) + io.in(`User ${id}`).emit('livechat:acknowledgement', {x}); + }; + + socket.on("message:sent", messageSent); + socket.on("livechat:sent", livechat); + socket.on("livechat:enter", enterChat); + socket.on("livechat:acknowledgement", acknowledgement); +} \ No newline at end of file diff --git a/sockets/test.js b/sockets/test.js new file mode 100644 index 00000000..333f33dd --- /dev/null +++ b/sockets/test.js @@ -0,0 +1,19 @@ +module.exports = (io, socket) => { + const ping = (callback) => { + console.log("Client has pinged server") + callback({ + status: "ok" + }) + } + + const rooms = (data) => { + data.forEach(room => { + socket.join(room) + }); + console.log(`User ${socket.userid} has joined the rooms [${data.join(', ')}]`) + } + + + socket.on("server:ping", ping); + socket.on("rooms", rooms) +} \ No newline at end of file diff --git a/stripe/stripe-cli-1.11.0.tar.gz b/stripe/stripe-cli-1.11.0.tar.gz new file mode 100644 index 00000000..54999d5d Binary files /dev/null and b/stripe/stripe-cli-1.11.0.tar.gz differ diff --git a/stripe/stripe.txt b/stripe/stripe.txt new file mode 100644 index 00000000..6237c5e9 --- /dev/null +++ b/stripe/stripe.txt @@ -0,0 +1,2 @@ +4242 4242 4242 4242 +stripe listen --forward-to http://localhost:5000/webhook \ No newline at end of file diff --git a/stripe/stripe_1.11.0_windows_x86_64/stripe.exe b/stripe/stripe_1.11.0_windows_x86_64/stripe.exe new file mode 100644 index 00000000..b58b9db4 Binary files /dev/null and b/stripe/stripe_1.11.0_windows_x86_64/stripe.exe differ diff --git a/views/MailTemplates/ForgetPassword.html b/views/MailTemplates/ForgetPassword.html new file mode 100644 index 00000000..d84837e6 --- /dev/null +++ b/views/MailTemplates/ForgetPassword.html @@ -0,0 +1,159 @@ + + + + + + + + + + + + Document + + +
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/views/MailTemplates/forgetpassword.html b/views/MailTemplates/forgetpassword.html index 5036b1ea..d84837e6 100644 --- a/views/MailTemplates/forgetpassword.html +++ b/views/MailTemplates/forgetpassword.html @@ -1,594 +1,159 @@ - - - + + + + + + + - - - - Reset Your MBO Partners Password - - - - + + Document - - -
    - - - - -
    - - - - - - - - - - - - - - - -
    - - - - - - -
    - - - - - - -
    - - MBO Partners makes it safer and easier for independent consultants and their clients to do business together. - -
    -
    -
    - - - - - - -
    - - - - - - -
    - - - Forgot your password? - - -
    -
    -
    - - - - - - -
    - - - - - - -
    - -

    Forgot

    - - -

    your password?

    - -
    -
    - - - - - - -
    - - - - - - -
    Not to worry, we got you! Let’s get you a new password. -

    -
    -
    - - - - - - -
    - - - - - - -
    - - - - - - -
    - Reset password -
    -
    -
    - - - - - - -
    - - - - - - -
    -
    -
    - - - - - - -
    - - - - -
    - -

    Who is MBO Partners?

    - -

    MBO Partners makes it safer and easier for independent consultants and their clients to do business together. -

    - -
    - - - - - - - -
    -
    Made with - - - - - - by - MBO Partners, Inc.in Herndon, VA 20171
    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - -
    -
    + +
    +
    + + + + +
    +
    - - + \ No newline at end of file diff --git a/views/admin/AdminDashboard.handlebars b/views/admin/AdminDashboard.handlebars index c57b8017..75597685 100644 --- a/views/admin/AdminDashboard.handlebars +++ b/views/admin/AdminDashboard.handlebars @@ -1,241 +1,307 @@ - +
    +
    - - -
    -

    Admin Dashboard

    - View Reports -
    - - -
    - -
    -
    -
    -
    -
    -
    - Our Registered Users (Total)
    -
    {{totalUsers}}
    -
    - - + +

    Admin Dashboard

    + - - -
    -
    -
    -
    -
    -
    - Subscribed to our newsLetter (Total)
    -
    {{totalSubs}}
    -
    - +
    - - -
    -
    -
    -
    -
    -
    Reports(Total) -
    -
    -
    - -
    {{totalReports}}
    -
    -
    -
    + + {{!--
    + +
    +
    +
    +
    +
    +
    + Our Registered Users (Total)
    +
    {{totalUsers}}

    - - - - - - - - - + +
    +
    +
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - Current Pending Tickets
    -
    -
    {{totalTickets}}
    -
    - - - + +
    +
    +
    +
    +
    +
    Reports(Total) +
    +
    +
    + +
    {{totalReports}}
    +
    +
    +
    +
    + -
    - -
    -
    -
    User Activity
    -
    -
    -
    - -
    -
    -
    -
    No. of Users Joined By Day
    - {{!-- Last 7 days --}} -
    - - - + + + + + + + +
    +
    +
    + +
    +
    +
    - -
    - - - -
    -
    -
    User Subscription Activity(NewsLetter)
    -
    -
    -
    - -
    -
    -
    -
    No. of Users Subscribed By Day
    - {{!-- Last 7 days --}} -
    - - - - + +
    +
    +
    +
    +
    +
    + Current Pending Tickets
    +
    +
    {{totalTickets}}
    +
    + +
    +
    + +
    +
    +
    -
    +
    --}} - - -
    - - -
    -
    - -
    -
    User Roles
    +
    +
    + +
    +
    +
    User Activity
    +
    +
    +
    + +
    +
    +
    +
    No. of Users Joined By Day
    + {{!-- Last 7 days --}} +
    + + + +
    - -
    -
    - -
    -
    -
    -
    User Roles
    - List Of Our Users + +
    +
    +
    User Subscription Activity(NewsLetter)
    +
    +
    +
    + +
    +
    +
    +
    No. of Users Subscribed By Day +
    + {{!-- Last 7 days --}} +
    + + + +
    -
    - -
    - -
    - -
    -
    User Genders
    +
    +
    +
    Sales
    +
    +
    +
    + +
    +
    +
    +
    Threads In Time Sales
    +

    +
    +
    + +
    + + + + +
    +
    - -
    -
    - -
    -
    -
    -
    User Genders
    - List Of Our Users Genders +
    +
    +
    Customer Statisfaction
    +
    +
    +
    + +
    +
    +
    +
    Customer Satisfaction Entries
    +

    Customer Ratings (1-5)

    +
    +
    - -
    - -
    -
    -
    -
    -
    Customer Statisfaction
    + +
    +
    + +
    +
    User Roles
    +
    + +
    +
    + +
    +
    +
    +
    User Roles
    + List Of Our Users +
    +
    -
    -
    - -
    -
    -
    -
    Customer Satisfaction Entries
    -

    Customer Ratings (1-5)

    - + +
    + +
    +
    User Genders
    +
    + +
    +
    + +
    +
    +
    +
    User Genders
    + List Of Our Users Genders +
    +
    -
    +
    +
    +
    +
    @@ -243,227 +309,202 @@ {{!-- Newsletter Subscribers Log --}} {{!-- Reports Log --}} {{!-- Pending Tickets Log --}} + + + - - - - + \ No newline at end of file diff --git a/views/admin/TicketMangement.handlebars b/views/admin/TicketMangement.handlebars index 9d16cfb9..d888c3b7 100644 --- a/views/admin/TicketMangement.handlebars +++ b/views/admin/TicketMangement.handlebars @@ -41,7 +41,7 @@
    - @@ -70,8 +70,8 @@ - - + +
    diff --git a/views/admin/editUser.handlebars b/views/admin/editUser.handlebars new file mode 100644 index 00000000..d537dc97 --- /dev/null +++ b/views/admin/editUser.handlebars @@ -0,0 +1,128 @@ + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    Edit Profile
    + + + + +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + {{#if user.bankAccount}} +
    +
    + + +
    +
    + {{/if}} +
    +
    + + +
    +
    +
    +
    +
    + + + + + + + {{!-- --}} +
    +
    + +
    +
    + +
    +
    + + +
    + + + + +
    + + + + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/views/admin/livechat.handlebars b/views/admin/livechat.handlebars new file mode 100644 index 00000000..d84a2cb5 --- /dev/null +++ b/views/admin/livechat.handlebars @@ -0,0 +1,104 @@ +
    +
    +
    +

    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + \ No newline at end of file diff --git a/views/admin/requests.handlebars b/views/admin/requests.handlebars index 88496b7f..a445c32d 100644 --- a/views/admin/requests.handlebars +++ b/views/admin/requests.handlebars @@ -1,37 +1,201 @@ {{setVar "scriptsPath" "_serviceScripts"}} -
    -

    My Requests

    - - +{{!--
    +
    +
    +
    + +
    +
    - - +
    Request_ID Request TitleCustomer Name Service Tailor Description StatusAppointments +
    +
    --}} +
    +
    +
    Requests per Tailor
    +
    +
    +
    + +
    +
    +
    -