From 151c99d02e37e9fc438aa4a613408dc2a67ad765 Mon Sep 17 00:00:00 2001 From: rayhanalmim Date: Wed, 12 Jun 2024 15:24:28 +0600 Subject: [PATCH] html pdf functionality --- .gitignore | 1 - dist/app.js | 31 + dist/app/config/cloudinary.js | 13 + dist/app/config/index.js | 18 + .../pdftoemail/pdftomail.controller.js | 111 + .../app/modules/pdftoemail/pdftomail.model.js | 6 + .../app/modules/pdftoemail/pdftomail.route.js | 11 + .../modules/pdftoemail/pdftomailservices.js | 1 + dist/server.js | 31 + package-lock.json | 1969 ++++++++++++++++- package.json | 10 +- src/app.ts | 4 +- src/app/config/index.ts | 3 + .../pdftoemail/pdftomail.controller.ts | 109 + src/app/modules/pdftoemail/pdftomail.route.ts | 5 +- src/app/modules/pdftoemail/temp.pdf | Bin 0 -> 42097 bytes src/app/modules/pdftoemail/template.hbs | 10 + temp.pdf | Bin 0 -> 16476 bytes vercel.json | 12 +- 19 files changed, 2261 insertions(+), 84 deletions(-) create mode 100644 dist/app.js create mode 100644 dist/app/config/cloudinary.js create mode 100644 dist/app/config/index.js create mode 100644 dist/app/modules/pdftoemail/pdftomail.controller.js create mode 100644 dist/app/modules/pdftoemail/pdftomail.model.js create mode 100644 dist/app/modules/pdftoemail/pdftomail.route.js create mode 100644 dist/app/modules/pdftoemail/pdftomailservices.js create mode 100644 dist/server.js create mode 100644 src/app/modules/pdftoemail/temp.pdf create mode 100644 src/app/modules/pdftoemail/template.hbs create mode 100644 temp.pdf diff --git a/.gitignore b/.gitignore index bb041a0..c3b885c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ node_modules -dist .env .vercel \ No newline at end of file diff --git a/dist/app.js b/dist/app.js new file mode 100644 index 0000000..15d5c29 --- /dev/null +++ b/dist/app.js @@ -0,0 +1,31 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = __importDefault(require("express")); +const cors_1 = __importDefault(require("cors")); +const pdftomail_route_1 = require("./app/modules/pdftoemail/pdftomail.route"); +const app = (0, express_1.default)(); +app.use(express_1.default.json()); +app.use((0, cors_1.default)()); +//applications route +app.use("/api", pdftomail_route_1.pdftomail); +app.get("/", (req, res) => { + res.send("Hello World!"); +}); +// Not Found Route Handler +app.use((req, res) => { + res.status(404).json({ + success: false, + message: "Route not found", + }); +}); +app.use((err, req, res) => { + console.error(err.stack); + res.status(500).json({ + success: false, + message: "An unexpected error occurred", + }); +}); +exports.default = app; diff --git a/dist/app/config/cloudinary.js b/dist/app/config/cloudinary.js new file mode 100644 index 0000000..8d8d014 --- /dev/null +++ b/dist/app/config/cloudinary.js @@ -0,0 +1,13 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cloudinary_1 = require("cloudinary"); +const index_1 = __importDefault(require("./index")); +cloudinary_1.v2.config({ + cloud_name: index_1.default.cloudinary_cloud_name, + api_key: index_1.default.cloudinary_api_key, + api_secret: index_1.default.cloudinary_api_secret, +}); +exports.default = cloudinary_1.v2; diff --git a/dist/app/config/index.js b/dist/app/config/index.js new file mode 100644 index 0000000..0cb16e8 --- /dev/null +++ b/dist/app/config/index.js @@ -0,0 +1,18 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const dotenv_1 = __importDefault(require("dotenv")); +const path_1 = __importDefault(require("path")); +dotenv_1.default.config({ path: path_1.default.join((process.cwd(), ".env")) }); +exports.default = { + port: process.env.PORT, + database_url: process.env.DATABASE_URL, + cloudinary_cloud_name: process.env.CLOUDINARY_CLOUD_NAME, + cloudinary_api_key: process.env.CLOUDINARY_API_KEY, + cloudinary_api_secret: process.env.CLOUDINARY_API_SECRET, + aws_access_key_id: process.env.AWS_ACCESS_KEY_ID, + aws_secret_access_key: process.env.AWS_SECRET_ACCESS_KEY, + aws_region: process.env.AWS_REGION, +}; diff --git a/dist/app/modules/pdftoemail/pdftomail.controller.js b/dist/app/modules/pdftoemail/pdftomail.controller.js new file mode 100644 index 0000000..7a4b0f8 --- /dev/null +++ b/dist/app/modules/pdftoemail/pdftomail.controller.js @@ -0,0 +1,111 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PdfController = void 0; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const handlebars_1 = __importDefault(require("handlebars")); +const aws_sdk_1 = __importDefault(require("aws-sdk")); +const html_pdf_1 = __importDefault(require("html-pdf")); +const config_1 = __importDefault(require("../../config")); +// Configure AWS +aws_sdk_1.default.config.update({ + accessKeyId: config_1.default.aws_access_key_id, + secretAccessKey: config_1.default.aws_secret_access_key, + region: config_1.default.aws_region, + signatureVersion: "v4", +}); +const s3 = new aws_sdk_1.default.S3(); +const generateAndUploadPdf = (req, res) => __awaiter(void 0, void 0, void 0, function* () { + try { + const pdfData = req.body; + // Validate input data + if (!pdfData.title || !pdfData.content) { + return res.status(400).json({ + success: false, + message: "Title and content are required.", + }); + } + // HTML template as a string + const templateContent = ` + + + + Document + + +

{{title}}

+

{{content}}

+ + + `; + // Compile the template + const template = handlebars_1.default.compile(templateContent); + // Generate HTML from the template and data + const html = template({ title: pdfData.title, content: pdfData.content }); + // Use html-pdf to generate the PDF + html_pdf_1.default.create(html).toFile((err, fileInfo) => { + if (err) { + console.error("Error generating PDF:", err); + return res.status(500).json({ + success: false, + message: "Failed to generate PDF", + error: err, + }); + } + // Upload the PDF to AWS S3 + const fileContent = fs_1.default.readFileSync(fileInfo.filename); + const uploadParams = { + Bucket: "loamic-media", + Key: `pdfs/${Date.now()}-${path_1.default.basename(fileInfo.filename)}`, + Body: fileContent, + ContentType: "application/pdf", + }; + s3.upload(uploadParams, (uploadErr, data) => __awaiter(void 0, void 0, void 0, function* () { + if (uploadErr) { + console.error("Error uploading to S3:", uploadErr); + fs_1.default.unlinkSync(fileInfo.filename); // Ensure temporary file is deleted even on upload failure + return res.status(500).json({ + success: false, + message: "Failed to upload PDF to S3", + error: uploadErr, + }); + } + // Generate a pre-signed URL for the uploaded PDF + const signedUrl = yield s3.getSignedUrlPromise("getObject", { + Bucket: "loamic-media", + Key: uploadParams.Key, + Expires: 60 * 5, // Link expires in 5 minutes + }); + // Delete temporary file + fs_1.default.unlinkSync(fileInfo.filename); + res.json({ + downloadUrl: signedUrl, + message: "Email sent successfully", + }); + })); + }); + } + catch (error) { + console.error("Unexpected error:", error); + res.status(500).json({ + success: false, + message: "Something went wrong!", + error: error, + }); + } +}); +exports.PdfController = { + generateAndUploadPdf, +}; diff --git a/dist/app/modules/pdftoemail/pdftomail.model.js b/dist/app/modules/pdftoemail/pdftomail.model.js new file mode 100644 index 0000000..79c3aff --- /dev/null +++ b/dist/app/modules/pdftoemail/pdftomail.model.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DemoDataModel = void 0; +const mongoose_1 = require("mongoose"); +// DemoData model without a schema +exports.DemoDataModel = (0, mongoose_1.model)("DemoData", new mongoose_1.Schema({}, { strict: false })); diff --git a/dist/app/modules/pdftoemail/pdftomail.route.js b/dist/app/modules/pdftoemail/pdftomail.route.js new file mode 100644 index 0000000..cdcaaa1 --- /dev/null +++ b/dist/app/modules/pdftoemail/pdftomail.route.js @@ -0,0 +1,11 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pdftomail = void 0; +const express_1 = __importDefault(require("express")); +const pdftomail_controller_1 = require("./pdftomail.controller"); +const router = express_1.default.Router(); +router.post("/generate-pdf", pdftomail_controller_1.PdfController.generateAndUploadPdf); +exports.pdftomail = router; diff --git a/dist/app/modules/pdftoemail/pdftomailservices.js b/dist/app/modules/pdftoemail/pdftomailservices.js new file mode 100644 index 0000000..3918c74 --- /dev/null +++ b/dist/app/modules/pdftoemail/pdftomailservices.js @@ -0,0 +1 @@ +"use strict"; diff --git a/dist/server.js b/dist/server.js new file mode 100644 index 0000000..5efb234 --- /dev/null +++ b/dist/server.js @@ -0,0 +1,31 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const app_1 = __importDefault(require("./app")); +const mongoose_1 = __importDefault(require("mongoose")); +const config_1 = __importDefault(require("./app/config")); +function main() { + return __awaiter(this, void 0, void 0, function* () { + try { + yield mongoose_1.default.connect(config_1.default.database_url); + app_1.default.listen(config_1.default.port, () => { + console.log(`pdf to email server listening on port ${config_1.default.port}`); + }); + } + catch (error) { + console.log(error); + } + }); +} +main(); diff --git a/package-lock.json b/package-lock.json index f0a79a1..fbe522c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,23 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "aws-sdk": "^2.1638.0", + "chrome-aws-lambda": "^10.1.0", "cloudinary": "^2.2.0", "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", - "mongoose": "^8.4.1" + "handlebars": "^4.7.8", + "html-pdf": "^3.0.1", + "http-status": "^1.7.4", + "mongoose": "^8.4.1", + "phantomjs-prebuilt": "^2.1.16", + "puppeteer-core": "^10.4.0" }, "devDependencies": { "@types/cors": "^2.8.17", "@types/express": "^4.17.21", + "@types/html-pdf": "^3.0.3", "typescript": "^5.4.5" } }, @@ -81,6 +89,15 @@ "@types/send": "*" } }, + "node_modules/@types/html-pdf": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/html-pdf/-/html-pdf-3.0.3.tgz", + "integrity": "sha512-Cw6EpCU5OdSG/yytol7hFNLHxwNoYqOeYL+1GqjhA3YBMJTC8mvT5tFmpLpjrj4WKqe7QoerX4pDwQcXsTotIA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -97,7 +114,7 @@ "version": "20.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", - "dev": true, + "devOptional": true, "dependencies": { "undici-types": "~5.26.4" } @@ -148,6 +165,15 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -160,11 +186,205 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "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", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1638.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1638.0.tgz", + "integrity": "sha512-/Li+eOMvJOLuYXimt3YPd6ec9Xvzh6L5KLfU5bjuJrltQqBcW7paL+PnFqSjm7zef+fPJT7h+8sqEcuRaGUmRA==", + "hasInstallScript": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz", + "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -188,6 +408,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/bson": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", @@ -196,6 +425,42 @@ "node": ">=16.20.1" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -222,6 +487,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chrome-aws-lambda": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/chrome-aws-lambda/-/chrome-aws-lambda-10.1.0.tgz", + "integrity": "sha512-NZQVf+J4kqG4sVhRm3WNmOfzY0OtTSm+S8rg77pwePa9RCYHzhnzRs8YvNI6L9tALIW6RpmefWiPURt3vURXcw==", + "dependencies": { + "lambdafs": "^2.0.3" + }, + "engines": { + "node": ">= 10.16" + }, + "peerDependencies": { + "puppeteer-core": "^10.1.0" + } + }, "node_modules/cloudinary": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-2.2.0.tgz", @@ -234,6 +523,36 @@ "node": ">=9" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -266,6 +585,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -278,6 +602,17 @@ "node": ">= 0.10" } }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -302,6 +637,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -319,6 +662,11 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/devtools-protocol": { + "version": "0.0.901419", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", + "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==" + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -330,6 +678,20 @@ "url": "https://dotenvx.com" } }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -343,6 +705,14 @@ "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==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -362,6 +732,11 @@ "node": ">= 0.4" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -375,6 +750,14 @@ "node": ">= 0.6" } }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", @@ -416,6 +799,77 @@ "node": ">= 0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/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/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -433,6 +887,47 @@ "node": ">= 0.8" } }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -449,6 +944,16 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -475,41 +980,129 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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": { - "get-intrinsic": "^1.1.3" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "assert-plus": "^1.0.0" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { @@ -519,6 +1112,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha512-jZ38TU/EBiGKrmyTNNZgnvCZHNowiRI4+w/I9noMlekHTZH3KyGgvJLmhSgykeAQ9j2SYPDosM0Bg3wHfzibAQ==", + "dependencies": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -530,6 +1149,21 @@ "node": ">= 0.4" } }, + "node_modules/html-pdf": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-pdf/-/html-pdf-3.0.1.tgz", + "integrity": "sha512-CKNSacmQn+CKJ2GNfT4UYKaPy/T3Ndj82yJ2aju/UPmnvWNjIpyumqRqkFU0mwT6BTHBFhFGTnXN8dBn4Bdj0Q==", + "deprecated": "Please migrate your projects to a newer library like puppeteer", + "bin": { + "html-pdf": "bin/index.js" + }, + "engines": { + "node": ">=4.0.0" + }, + "optionalDependencies": { + "phantomjs-prebuilt": "^2.1.16" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -545,6 +1179,61 @@ "node": ">= 0.8" } }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http-status": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.7.4.tgz", + "integrity": "sha512-c2qSwNtTlHVYAhMj9JpGdyo0No/+DiKXCJ9pHtZ2Yf3QmPnBIytKSRT7BuyIiQ7icXLynavGmxUqkOjSrAuMuA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "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", @@ -556,11 +1245,54 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "peer": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -569,6 +1301,132 @@ "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "optional": true, + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/kareem": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", @@ -577,6 +1435,238 @@ "node": ">=12.0.0" } }, + "node_modules/kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha512-IG6nm0+QtAMdXt9KvbgbGdvY50RSrw+U4sGZg+KlrSKPJEwVE5JVoI3d7RWfSMdBQneRheeAOj3lIjX5VL/9RQ==" + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/lambdafs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lambdafs/-/lambdafs-2.1.1.tgz", + "integrity": "sha512-x5k8JcoJWkWLvCVBzrl4pzvkEHSgSBqFjg3Dpsc4AcTMq7oUMym4cL/gRTZ6VM4mUMY+M0dIbQ+V1c1tsqqanQ==", + "bundleDependencies": [ + "tar-fs" + ], + "dependencies": { + "tar-fs": "*" + }, + "bin": { + "lambdafs": "bin/brotli.js" + }, + "engines": { + "node": ">= 10.16" + } + }, + "node_modules/lambdafs/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/lambdafs/node_modules/bl": { + "version": "4.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/lambdafs/node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/lambdafs/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/lambdafs/node_modules/chownr": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/lambdafs/node_modules/end-of-stream": { + "version": "1.4.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/lambdafs/node_modules/fs-constants": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/lambdafs/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/lambdafs/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/lambdafs/node_modules/mkdirp-classic": { + "version": "0.5.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/lambdafs/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/lambdafs/node_modules/pump": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/lambdafs/node_modules/string_decoder": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lambdafs/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/lambdafs/node_modules/tar-fs": { + "version": "2.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/lambdafs/node_modules/tar-stream": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lambdafs/node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/lambdafs/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/lambdafs/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -638,6 +1728,36 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", @@ -733,83 +1853,283 @@ "dependencies": { "debug": "4.x" }, - "engines": { - "node": ">=14.0.0" + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/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/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", + "deprecated": "this package is now deprecated", + "hasInstallScript": true, + "dependencies": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "bin": { + "phantomjs": "bin/phantomjs" } }, - "node_modules/mquery/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "node_modules/phantomjs-prebuilt/node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "dependencies": { - "ms": "2.1.2" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "bin": { + "extract-zip": "cli.js" } }, - "node_modules/mquery/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/phantomjs-prebuilt/node_modules/fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/phantomjs-prebuilt/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/phantomjs-prebuilt/node_modules/progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", "engines": { - "node": ">= 0.6" + "node": ">=0.4.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { - "ee-first": "1.1.1" + "find-up": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "engines": { + "node": ">=0.4.0" + } }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -823,6 +2143,25 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/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.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -831,6 +2170,49 @@ "node": ">=6" } }, + "node_modules/puppeteer-core": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.4.0.tgz", + "integrity": "sha512-KU8zyb7AIOqNjLCN3wkrFXxh+EVaG+zrs2P03ATNjc3iwSxHsu5/EvZiREpQ/IJiT9xfQbDVgKcsvRuzLCxglQ==", + "dependencies": { + "debug": "4.3.1", + "devtools-protocol": "0.0.901419", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "node-fetch": "2.6.1", + "pkg-dir": "4.2.0", + "progress": "2.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.0.0", + "unbzip2-stream": "1.3.3", + "ws": "7.4.6" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/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/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -854,6 +2236,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -876,6 +2267,87 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "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/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/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha512-dxdraeZVUNEn9AvLrxkgB2k6buTlym71dJk1fk4v8j3Ou3RKNm07BcgbHdj2lLgYGfqX71F+awb1MR+tWPFJzA==", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -900,6 +2372,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -985,6 +2462,40 @@ "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "optional": true, + "peer": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -993,6 +2504,42 @@ "memory-pager": "^1.0.2" } }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "optional": true, + "peer": true + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1001,6 +2548,71 @@ "node": ">= 0.8" } }, + "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/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/tar-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", + "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1009,6 +2621,18 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tr46": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", @@ -1020,6 +2644,22 @@ "node": ">=14" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1032,6 +2672,11 @@ "node": ">= 0.6" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -1045,11 +2690,32 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "devOptional": true }, "node_modules/unpipe": { "version": "1.0.0", @@ -1059,6 +2725,45 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1067,6 +2772,15 @@ "node": ">= 0.4.0" } }, + "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/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1075,6 +2789,19 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -1094,6 +2821,94 @@ "engines": { "node": ">=16" } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "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/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index b1bf6b2..aa55275 100644 --- a/package.json +++ b/package.json @@ -13,15 +13,23 @@ "author": "", "license": "ISC", "dependencies": { + "aws-sdk": "^2.1638.0", + "chrome-aws-lambda": "^10.1.0", "cloudinary": "^2.2.0", "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", - "mongoose": "^8.4.1" + "handlebars": "^4.7.8", + "html-pdf": "^3.0.1", + "http-status": "^1.7.4", + "mongoose": "^8.4.1", + "phantomjs-prebuilt": "^2.1.16", + "puppeteer-core": "^10.4.0" }, "devDependencies": { "@types/cors": "^2.8.17", "@types/express": "^4.17.21", + "@types/html-pdf": "^3.0.3", "typescript": "^5.4.5" } } diff --git a/src/app.ts b/src/app.ts index 7c1431e..3e6b903 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,5 +1,6 @@ import express, { Application, Request, Response } from "express"; import cors from "cors"; +import { pdftomail } from "./app/modules/pdftoemail/pdftomail.route"; const app: Application = express(); app.use(express.json()); @@ -7,8 +8,7 @@ app.use(cors()); //applications route -// app.use("/api", ProductRoute); -// app.use("/api", OrderRoute); +app.use("/api", pdftomail); app.get("/", (req: Request, res: Response) => { res.send("Hello World!"); diff --git a/src/app/config/index.ts b/src/app/config/index.ts index 831d3ec..bc42f6b 100644 --- a/src/app/config/index.ts +++ b/src/app/config/index.ts @@ -9,4 +9,7 @@ export default { cloudinary_cloud_name: process.env.CLOUDINARY_CLOUD_NAME, cloudinary_api_key: process.env.CLOUDINARY_API_KEY, cloudinary_api_secret: process.env.CLOUDINARY_API_SECRET, + aws_access_key_id: process.env.AWS_ACCESS_KEY_ID, + aws_secret_access_key: process.env.AWS_SECRET_ACCESS_KEY, + aws_region: process.env.AWS_REGION, }; diff --git a/src/app/modules/pdftoemail/pdftomail.controller.ts b/src/app/modules/pdftoemail/pdftomail.controller.ts index e69de29..d0ba4de 100644 --- a/src/app/modules/pdftoemail/pdftomail.controller.ts +++ b/src/app/modules/pdftoemail/pdftomail.controller.ts @@ -0,0 +1,109 @@ +import { Request, Response } from "express"; +import fs from "fs"; +import path from "path"; +import handlebars from "handlebars"; +import AWS from "aws-sdk"; +import pdf from "html-pdf"; +import config from "../../config"; + +// Configure AWS +AWS.config.update({ + accessKeyId: config.aws_access_key_id, + secretAccessKey: config.aws_secret_access_key, + region: config.aws_region, + signatureVersion: "v4", +}); +const s3 = new AWS.S3(); + +const generateAndUploadPdf = async (req: Request, res: Response) => { + try { + const pdfData = req.body; + + // Validate input data + if (!pdfData.title || !pdfData.content) { + return res.status(400).json({ + success: false, + message: "Title and content are required.", + }); + } + + // HTML template as a string + const templateContent = ` + + + + Document + + +

{{title}}

+

{{content}}

+ + + `; + + // Compile the template + const template = handlebars.compile(templateContent); + + // Generate HTML from the template and data + const html = template({ title: pdfData.title, content: pdfData.content }); + + // Use html-pdf to generate the PDF + pdf.create(html).toFile((err, fileInfo) => { + if (err) { + console.error("Error generating PDF:", err); + return res.status(500).json({ + success: false, + message: "Failed to generate PDF", + error: err, + }); + } + + // Upload the PDF to AWS S3 + const fileContent = fs.readFileSync(fileInfo.filename); + const uploadParams = { + Bucket: "loamic-media", + Key: `pdfs/${Date.now()}-${path.basename(fileInfo.filename)}`, + Body: fileContent, + ContentType: "application/pdf", + }; + + s3.upload(uploadParams, async (uploadErr: any, data: any) => { + if (uploadErr) { + console.error("Error uploading to S3:", uploadErr); + fs.unlinkSync(fileInfo.filename); // Ensure temporary file is deleted even on upload failure + return res.status(500).json({ + success: false, + message: "Failed to upload PDF to S3", + error: uploadErr, + }); + } + + // Generate a pre-signed URL for the uploaded PDF + const signedUrl = await s3.getSignedUrlPromise("getObject", { + Bucket: "loamic-media", + Key: uploadParams.Key, + Expires: 60 * 5, // Link expires in 5 minutes + }); + + // Delete temporary file + fs.unlinkSync(fileInfo.filename); + + res.json({ + downloadUrl: signedUrl, + message: "Email sent successfully", + }); + }); + }); + } catch (error) { + console.error("Unexpected error:", error); + res.status(500).json({ + success: false, + message: "Something went wrong!", + error: error, + }); + } +}; + +export const PdfController = { + generateAndUploadPdf, +}; diff --git a/src/app/modules/pdftoemail/pdftomail.route.ts b/src/app/modules/pdftoemail/pdftomail.route.ts index 6cda9cb..d8b9f6d 100644 --- a/src/app/modules/pdftoemail/pdftomail.route.ts +++ b/src/app/modules/pdftoemail/pdftomail.route.ts @@ -1,6 +1,7 @@ import express from "express"; +import { PdfController } from "./pdftomail.controller"; const router = express.Router(); -router.post("/orders"); +router.post("/generate-pdf", PdfController.generateAndUploadPdf); -export const OrderRoute = router; +export const pdftomail = router; diff --git a/src/app/modules/pdftoemail/temp.pdf b/src/app/modules/pdftoemail/temp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a95c7531a681d4141732fbdaa1a8c81b49e51b74 GIT binary patch literal 42097 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%0Aab)qs*$PJ^cQzwsiDGNhk?h`n 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 Iq9owI013^c + + + Document + + +

{{title}}

+

{{content}}

+ + \ No newline at end of file diff --git a/temp.pdf b/temp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..21d20ab8c1350667f1946c2f58b61176a85985bc GIT binary patch literal 16476 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 literal 0 HcmV?d00001 diff --git a/vercel.json b/vercel.json index 9d263f1..410b569 100644 --- a/vercel.json +++ b/vercel.json @@ -3,7 +3,17 @@ "builds": [ { "src": "dist/server.js", - "use": "@vercel/node" + "use": "@vercel/node", + "config": { + "includeFiles": ["dist/**"] + } + }, + { + "src": "install_dependencies.sh", + "use": "@vercel/static-build", + "config": { + "distDir": "node_modules" + } } ], "routes": [