0% found this document useful (0 votes)
12 views24 pages

All Code

The document contains configuration files for a Node.js application, including environment variables, a .gitignore file, and JavaScript files for application logic. It outlines the setup for JWT authentication, database connections, and middleware usage. Additionally, it includes package dependencies and server setup details for running the application.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views24 pages

All Code

The document contains configuration files for a Node.js application, including environment variables, a .gitignore file, and JavaScript files for application logic. It outlines the setup for JWT authentication, database connections, and middleware usage. Additionally, it includes package dependencies and server setup details for running the application.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

.

env
JWT_SECRET=your-super-secret-string # Server PORT=8080 # MySQL DB_NAME=postloop
DB_USER=root DB_PASS=123 DB_HOST=localhost # Mongo (activity logger) MONGO_URI= # Redis
REDIS_HOST=[Link] REDIS_PORT=6379 # Cloudinary (uploads) CLOUDINARY_CLOUD_NAME=
CLOUDINARY_API_KEY= CLOUDINARY_API_SECRET= # Optional: UI-only development (lets server
boot without MySQL) ALLOW_NO_DB=false
.[Link]
## PostLoop environment variables ## Copy to `.env` and fill values. # Required for JWT auth (API + frontend
pages) JWT_SECRET=your-super-secret-string # Server PORT=8080 # MySQL DB_NAME=postloop
DB_USER=root DB_PASS=123 DB_HOST=localhost # Mongo (activity logger)
MONGO_URI=mongodb://localhost:27017/postloop # Redis REDIS_HOST=[Link] REDIS_PORT=6379
# Cloudinary (uploads) CLOUDINARY_CLOUD_NAME= CLOUDINARY_API_KEY=
CLOUDINARY_API_SECRET= # Optional: UI-only development (lets server boot without MySQL)
ALLOW_NO_DB=false
.gitignore
# Logs logs *.log [Link]* [Link]* [Link]* [Link]* # Diagnostic reports
([Link] report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids *.pid *.seed
*.[Link] # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory
used by tools like istanbul coverage *.lcov # nyc test coverage .nyc_output # Grunt intermediate storage
([Link] .grunt # Bower dependency directory
([Link] bower_components # node-waf configuration .lock-wscript # Compiled binary addons
([Link] build/Release # Dependency directories node_modules/ jspm_packages/ #
Snowpack dependency directory ([Link] web_modules/ # TypeScript cache *.tsbuildinfo #
Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional stylelint
cache .stylelintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn
Integrity file .yarn-integrity # dotenv environment variable files .env .env.* !.[Link] # parcel-bundler
cache ([Link] .cache .parcel-cache # [Link] build output .next out uploads/ # [Link] build /
generate output .nuxt dist .output # Gatsby files .cache/ # Comment in the public line in if your project uses
Gatsby and not [Link] # [Link] # public # vuepress build
output .vuepress/dist # vuepress v2.x temp and cache directory .temp .cache # Sveltekit cache directory .svelte-
kit/ # vitepress build output **/.vitepress/dist # vitepress cache directory **/.vitepress/cache # Docusaurus
cache and generated files .docusaurus # Serverless directories .serverless/ # FuseBox cache .fusebox/ #
DynamoDB Local files .dynamodb/ # Firebase cache directory .firebase/ # TernJS port file .tern-port # Stores
VSCode versions used for testing VSCode extensions .vscode-test # pnpm .pnpm-store # yarn
v3 .pnp.* .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/sdks !.yarn/versions # Vite files
[Link]-* [Link]-* .vite/
[Link]
const fs = require("fs").promises; const path = require("path"); const { Document, Packer, Paragraph, TextRun }
= require("docx"); (async () => { try { const dir = __dirname; const files = await [Link](dir);
const doc = new Document({ creator: "Your Name", title: "All Code Files", sections: [],
}); for (const name of files) { const filePath = [Link](dir, name); const stat = await
[Link](filePath); if (![Link]()) continue; const code = await [Link](filePath, "utf8");
[Link]({ children: [ new Paragraph({ text: name,
heading: "Heading1", }), new Paragraph({ children: [new
TextRun(code)], }), new Paragraph({ text: "" }), ], }); }
const buffer = await [Link](doc); await [Link]([Link](dir, "[Link]"), buffer);
[Link]("Saved [Link]"); } catch (err) { [Link](err); } })();
[Link]
const path = require("path"); const express = require("express"); const cookieParser = require("cookie-parser");
const expressLayouts = require("express-ejs-layouts"); const passport = require("passport");
require("dotenv").config(); const swaggerUi = require("swagger-ui-express"); require("./src/config/passport");
const indexRoute = require("./src/routes/[Link]"); const webRoute = require("./src/routes/[Link]");
const { globalErrorHandler } = require("./src/middlewares/globalErrorHandeler"); const { connectDB } =
require("./src/config/db"); const connectMongo = require("./src/config/mongo"); const activityLogger =
require("./src/middlewares/[Link]"); const app = express(); connectDB();
connectMongo(); [Link]( "/api-docs", [Link], [Link](require("./src/config/swagger-
[Link]"), { explorer: true, customCss: ".swagger-ui .topbar { display: none }", }), );
[Link]([Link]()); [Link]([Link]({ extended: true })); [Link](cookieParser()); // Static
assets [Link]("/public", [Link]([Link](__dirname, "public"))); [Link]("/uploads",
[Link]([Link](__dirname, "src/public/uploads"))); // EJS views (frontend) [Link]("view engine",
"ejs"); [Link]("views", [Link](__dirname, "views")); [Link](expressLayouts); [Link]("layout",
"layouts/layout"); [Link]([Link]()); [Link](activityLogger); // Web pages [Link]("/",
webRoute); [Link]("/api", indexRoute); [Link]((req, res) => { // If it's an API request, keep JSON
responses. if ([Link]("/api")) { return [Link](404).json({ success: false, message:
"Resource not found", }); } return [Link](404).render("pages/error", { title: "Not found", message:
"That page doesn’t exist.", }); }); [Link](globalErrorHandler); [Link] = app;
[Link]
const http = require("http"); const app = require("./app"); const PORT = [Link] || 8080; const
server = [Link](app); [Link](PORT, () => [Link](`Server is running at [Link]
{PORT}`), );
[Link]
{ "name": "postloop", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "":
{ "name": "postloop", "version": "1.0.0", "license": "ISC", "dependencies": { "bcrypt":
"^6.0.0", "cloudinary": "^2.10.0", "cookie-parser": "^1.4.7", "docx": "^9.6.1", "dotenv":
"^17.3.1", "ejs": "^3.1.10", "express": "^5.2.1", "express-ejs-layouts": "^2.5.1", "express-
validation": "^4.1.1", "ioredis": "^5.10.1", "jsonwebtoken": "^9.0.3", "mongoose": "^9.4.1",
"multer": "^2.1.1", "mysql2": "^3.21.1", "passport": "^0.7.0", "passport-jwt": "^4.0.1",
"sequelize": "^6.37.8", "streamifier": "^0.1.1", "swagger-autogen": "^2.23.7", "swagger-ui-
express": "^5.0.1" } }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved":
"[Link] "integrity":
"sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS
53LIgAe6KQ==", "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0",
"resolved": "[Link] "integrity": "sha512-
foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzm
cAnAg==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } },
"node_modules/@ioredis/commands": { "version": "1.5.1", "resolved":
"[Link] "integrity":
"sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46
571OnPTT0Zcw==", "license": "MIT" }, "node_modules/@mongodb-js/saslprep": { "version":
"1.4.6", "resolved": "[Link] "integrity":
"sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBW
MbZGBdal3Z1g==", "license": "MIT", "dependencies": { "sparse-bitfield": "^3.0.3" } },
"node_modules/@scarf/scarf": { "version": "1.4.0", "resolved":
"[Link] "integrity": "sha512-
xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3C
lO5/qQ==", "hasInstallScript": true, "license": "Apache-2.0" },
"node_modules/@sideway/address": { "version": "4.1.5", "resolved":
"[Link] "integrity":
"sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjh
eD4+/sKFK4Q==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek":
"^9.0.0" } }, "node_modules/@sideway/formula": { "version": "3.0.1", "resolved":
"[Link] "integrity":
"sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I
80LeS3MIg==", "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version":
"2.0.0", "resolved": "[Link] "integrity":
"sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtT
fG2WWZBmMejQ==", "license": "BSD-3-Clause" }, "node_modules/@types/body-parser":
{ "version": "1.19.6", "resolved": "[Link]
[Link]", "integrity": "sha512-
HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/
tfLRJpJ6iQxnVw4OnB7MoM9g==", "license": "MIT", "dependencies": { "@types/connect": "*",
"@types/node": "*" } }, "node_modules/@types/connect": { "version": "3.4.38", "resolved":
"[Link] "integrity": "sha512-
K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqG
Ubaug==", "license": "MIT", "dependencies": { "@types/node": "*" } },
"node_modules/@types/debug": { "version": "4.1.13", "resolved":
"[Link] "integrity": "sha512-
KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbf
yS2fWw==", "license": "MIT", "dependencies": { "@types/ms": "*" } },
"node_modules/@types/express": { "version": "4.17.25", "resolved":
"[Link] "integrity": "sha512-
dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6N
R+eKhw==", "license": "MIT", "dependencies": { "@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "^1" }
}, "node_modules/@types/express-serve-static-core": { "version": "4.19.8", "resolved":
"[Link]
"integrity":
"sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/
vNrj7cpgbhjie6m/1tCA==", "license": "MIT", "dependencies": { "@types/node": "*",
"@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } },
"node_modules/@types/hapi__joi": { "version": "16.0.12", "resolved":
"[Link] "integrity": "sha512-
xJYifuz59jXdWY5JMS15uvA3ycS3nQYOGqoIIE0+fwQ0qI3/4CxBc6RHsOTp6wk9M0NWEdpcTl02lOQOK
MifbQ==", "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.5",
"resolved": "[Link] "integrity": "sha512-
r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u7
1/qg==", "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", "resolved":
"[Link] "integrity":
"sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/
PSDYohKIlnP/w==", "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0",
"resolved": "[Link] "integrity":
"sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxW
UGhp5KXQb2VA==", "license": "MIT" }, "node_modules/@types/node": { "version": "25.5.0",
"resolved": "[Link] "integrity": "sha512-
jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2
dpp7XIxw==", "license": "MIT", "dependencies": { "undici-types": "~7.18.0" } },
"node_modules/@types/qs": { "version": "6.15.0", "resolved":
"[Link] "integrity": "sha512-
JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1b
XaMqP/9ow==", "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7",
"resolved": "[Link] "integrity": "sha512-
hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/
LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, "node_modules/@types/send": { "version":
"1.2.1", "resolved": "[Link] "integrity": "sha512-
arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZI
Q==", "license": "MIT", "dependencies": { "@types/node": "*" } },
"node_modules/@types/serve-static": { "version": "1.15.10", "resolved":
"[Link] "integrity": "sha512-
tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/
JJSGBlUaYGAOP73qBw==", "license": "MIT", "dependencies": { "@types/http-errors": "*",
"@types/node": "*", "@types/send": "<1" } },
"node_modules/@types/serve-static/node_modules/@types/send": { "version": "0.17.6", "resolved":
"[Link] "integrity": "sha512-
Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/
Og==", "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" }
}, "node_modules/@types/validator": { "version": "13.15.10", "resolved":
"[Link] "integrity": "sha512-
T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA
==", "license": "MIT" }, "node_modules/@types/webidl-conversions": { "version": "7.0.3",
"resolved": "[Link]
"integrity": "sha512-
CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/
Ixgw/LAlA==", "license": "MIT" }, "node_modules/@types/whatwg-url": { "version": "13.0.0",
"resolved": "[Link] "integrity": "sha512-
N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/
SaM2QQJCzMPDEXE058s+Q==", "license": "MIT", "dependencies": { "@types/webidl-
conversions": "*" } }, "node_modules/accepts": { "version": "2.0.0", "resolved":
"[Link] "integrity": "sha512-
5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImj
NKng==", "license": "MIT", "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0"
}, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { "version": "7.4.1",
"resolved": "[Link] "integrity":
"sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCo
Qy6SxMebQVh8A==", "license": "MIT", "bin": { "acorn": "bin/acorn" }, "engines":
{ "node": ">=0.4.0" } }, "node_modules/append-field": { "version": "1.0.0", "resolved":
"[Link] "integrity": "sha512-
klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX5
52hsw==", "license": "MIT" }, "node_modules/async": { "version": "3.2.6", "resolved":
"[Link] "integrity": "sha512-
htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0
Ti6C2AA==", "license": "MIT" }, "node_modules/aws-ssl-profiles": { "version": "1.1.2",
"resolved": "[Link] "integrity": "sha512-
NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/
nsfqqiZmF6g==", "license": "MIT", "engines": { "node": ">= 6.0.0" } },
"node_modules/balanced-match": { "version": "1.0.2", "resolved": "[Link]
match/-/[Link]", "integrity": "sha512-
3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJ
hYU5Pw==", "license": "MIT" }, "node_modules/bcrypt": { "version": "6.0.0", "resolved":
"[Link] "integrity":
"sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2Lb
T6efhRg==", "hasInstallScript": true, "license": "MIT", "dependencies": { "node-addon-api":
"^8.3.0", "node-gyp-build": "^4.8.4" }, "engines": { "node": ">= 18" } },
"node_modules/body-parser": { "version": "2.2.2", "resolved": "[Link]
parser/-/[Link]", "integrity":
"sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV
+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type":
"^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished":
"^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" }, "engines":
{ "node": ">=18" }, "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/brace-expansion": { "version": "1.1.13",
"resolved": "[Link] "integrity": "sha512-
9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwH
DQiG/w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map":
"0.0.1" } }, "node_modules/bson": { "version": "7.2.0", "resolved":
"[Link] "integrity": "sha512-
YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9
QcZNSnQ==", "license": "Apache-2.0", "engines": { "node": ">=20.19.0" } },
"node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved":
"[Link] "integrity":
"sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1i
JKfsfTVxE6NA==", "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version":
"1.1.2", "resolved": "[Link] "integrity":
"sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3
HmxgyPGnJfQ==", "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0",
"resolved": "[Link] "integrity":
"sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi
5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, "engines": { "node":
">=10.16.0" } }, "node_modules/bytes": { "version": "3.1.2", "resolved":
"[Link] "integrity":
"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6
F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" } },
"node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved":
"[Link] "integrity": "sha512-
Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/
wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-
bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/call-bound":
{ "version": "1.0.4", "resolved": "[Link]
"integrity":
"sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQn
U/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url":
"[Link] } }, "node_modules/cloudinary": { "version": "2.10.0",
"resolved": "[Link] "integrity": "sha512-
sY09kYg7wprkndAOjZBAYqFZqwL+SxnEGcAvksOvFA+5upnFn949UjkEkHKNSwkBtW/
xRDd0p6NgbSXZcxkI3w==", "license": "MIT", "dependencies": { "lodash": "^4.17.23" },
"engines": { "node": ">=9" } }, "node_modules/cluster-key-slot": { "version": "1.1.2",
"resolved": "[Link] "integrity": "sha512-
RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/
90gAA==", "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } },
"node_modules/concat-map": { "version": "0.0.1", "resolved":
"[Link] "integrity":
"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHd
odFvbkhKmqg==", "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0",
"resolved": "[Link] "integrity": "sha512-
MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7
A==", "engines": [ "node >= 6.0" ], "license": "MIT", "dependencies": { "buffer-from":
"^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } },
"node_modules/content-disposition": { "version": "1.0.1", "resolved":
"[Link] "integrity": "sha512-
oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMt
vEJ08Q==", "license": "MIT", "engines": { "node": ">=18" }, "funding": { "type":
"opencollective", "url": "[Link] } }, "node_modules/content-type": {
"version": "1.0.5", "resolved": "[Link]
"integrity":
"sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFad
D6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/cookie": { "version": "0.7.2", "resolved": "[Link]
[Link]", "integrity": "sha512-
yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6E
w/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-
parser": { "version": "1.4.7", "resolved": "[Link]
[Link]", "integrity": "sha512-
nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSw
NQGw==", "license": "MIT", "dependencies": { "cookie": "0.7.2", "cookie-signature": "1.0.6"
}, "engines": { "node": ">= 0.8.0" } }, "node_modules/cookie-parser/node_modules/cookie-
signature": { "version": "1.0.6", "resolved": "[Link]
[Link]", "integrity": "sha512-
QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3
orQ==", "license": "MIT" }, "node_modules/cookie-signature": { "version": "1.2.2", "resolved":
"[Link] "integrity": "sha512-
D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBj
PZMbhg==", "license": "MIT", "engines": { "node": ">=6.6.0" } }, "node_modules/core-
util-is": { "version": "1.0.3", "resolved": "[Link]
"integrity": "sha512-
ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DW
NJ9FYQ==", "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", "resolved":
"[Link] "integrity": "sha512-
RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjN
bcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" }, "engines": { "node":
">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } },
"node_modules/deepmerge": { "version": "4.3.1", "resolved":
"[Link] "integrity": "sha512-
3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/
1PYpapqYn0Me2knFn+A==", "license": "MIT", "engines": { "node": ">=0.10.0" } },
"node_modules/denque": { "version": "2.1.0", "resolved": "[Link]
[Link]", "integrity":
"sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj
8v5oBhekw==", "license": "Apache-2.0", "engines": { "node": ">=0.10" } },
"node_modules/depd": { "version": "2.0.0", "resolved": "[Link]
[Link]", "integrity":
"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/
OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" } },
"node_modules/docx": { "version": "9.6.1", "resolved": "[Link]
[Link]", "integrity":
"sha512-ZJja9/KBUuFC109sCMzovoq2GR2wCG/AuxivjA+OHj/q0TEgJIm3S7yrlUxIy3B+bV8YDj/
BiHfWyrRFmyWpDQ==", "license": "MIT", "dependencies": { "@types/node": "^25.2.3",
"[Link]": "^1.1.7", "jszip": "^3.10.1", "nanoid": "^5.1.3", "xml": "^1.0.1", "xml-js": "^1.6.8"
}, "engines": { "node": ">=10" } }, "node_modules/dotenv": { "version": "17.3.1",
"resolved": "[Link] "integrity":
"sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyv
yi4CsnY9GA==", "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": {
"url": "[Link] } }, "node_modules/dottie": { "version": "2.0.7", "resolved":
"[Link] "integrity": "sha512-
7lAK2A0b3zZr3UC5aE69CPdCFR4RHW1o2Dr74TqFykxkUCBXSRJum/yPc7g8zRHJqWKomPLHwFLLoU
nn8PXXRg==", "deprecated": "Package no longer supported. Contact Support at
[Link] for more info.", "license": "MIT" }, "node_modules/dunder-proto": {
"version": "1.0.1", "resolved": "[Link]
"integrity":
"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0
zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0", "gopd": "^1.2.0" }, "engines": { "node": ">= 0.4" } },
"node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved":
"[Link] "integrity": "sha512-
nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVc
Q==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } },
"node_modules/ee-first": { "version": "1.1.1", "resolved": "[Link]
[Link]", "integrity":
"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8K
Kfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10",
"resolved": "[Link] "integrity": "sha512-
UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+Ai
zQBA==", "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, "bin":
{ "ejs": "bin/[Link]" }, "engines": { "node": ">=0.10.0" } },
"node_modules/encodeurl": { "version": "2.0.0", "resolved":
"[Link] "integrity": "sha512-
Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmx
nOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/es-
define-property": { "version": "1.0.1", "resolved": "[Link]
[Link]", "integrity": "sha512-
e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYN
rCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-
errors": { "version": "1.3.0", "resolved": "[Link]
"integrity": "sha512-
Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNUL
S6csw==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-object-
atoms": { "version": "1.1.1", "resolved": "[Link]
[Link]", "integrity": "sha512-
FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldX
A==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, "engines": { "node":
">= 0.4" } }, "node_modules/escape-html": { "version": "1.0.3", "resolved":
"[Link] "integrity": "sha512-
NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/
6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/etag": { "version": "1.8.1", "resolved":
"[Link] "integrity": "sha512-
aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/
KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/express": { "version": "5.2.1", "resolved": "[Link]
[Link]", "integrity": "sha512-
hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0y
Xw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1",
"content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature":
"^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html":
"^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0",
"merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0",
"parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1",
"router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is":
"^2.0.1", "vary": "^1.1.2" }, "engines": { "node": ">= 18" }, "funding": { "type":
"opencollective", "url": "[Link] } }, "node_modules/express-ejs-
layouts": { "version": "2.5.1", "resolved": "[Link]
[Link]", "integrity": "sha512-
IXROv9n3xKga7FowT06n1Qn927JR8ZWDn5Dc9CJQoiiaaDqbhW5PDmWShzbpAa2wjWT1vJqaIM1S6vJw
wX11gA==" }, "node_modules/express-validation": { "version": "4.1.1", "resolved":
"[Link] "integrity": "sha512-
g4DDvEIFizhPMqauhUE4oepfkoz6oU0YE/CGCsYJaHLWsHnZSnLwVMMY15oF/
oGaepvc7b6EoBtQ0c4ism4Qag==", "license": "MIT", "dependencies": { "@types/express":
"^4.17.13", "@types/hapi__joi": "16.x.x", "joi": "^17.6.0" } }, "node_modules/filelist":
{ "version": "1.0.6", "resolved": "[Link] "integrity":
"sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/
tvhCFIJ5uXo0OrM2DxA==", "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1"
} }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.1.0", "resolved":
"[Link] "integrity": "sha512-
TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMA
MgGfve85w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } },
"node_modules/filelist/node_modules/minimatch": { "version": "5.1.9", "resolved":
"[Link] "integrity": "sha512-
7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN
7u1c2Fw==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines":
{ "node": ">=10" } }, "node_modules/finalhandler": { "version": "2.1.1", "resolved":
"[Link] "integrity": "sha512-
S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv
8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0",
"escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" },
"engines": { "node": ">= 18.0.0" }, "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/forwarded": { "version": "0.2.0",
"resolved": "[Link] "integrity": "sha512-
buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/
Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/fresh": { "version": "2.0.0", "resolved": "[Link]
[Link]", "integrity":
"sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKk
aTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" } },
"node_modules/[Link]": { "version": "1.0.0", "resolved":
"[Link] "integrity": "sha512-
OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+f
GMDw==", "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", "resolved":
"[Link] "integrity": "sha512-
7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82n
JMfG2SA==", "license": "MIT", "funding": { "url": "[Link] } },
"node_modules/generate-function": { "version": "2.3.1", "resolved": "[Link]
function/-/[Link]", "integrity":
"sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs
+Y2oVuTFuVwKQ==", "license": "MIT", "dependencies": { "is-property": "^1.0.2" } },
"node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "[Link]
intrinsic/-/[Link]", "integrity":
"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfj
b98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-
define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind":
"^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown":
"^2.0.2", "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": {
"url": "[Link] } }, "node_modules/get-proto": { "version": "1.0.1",
"resolved": "[Link] "integrity": "sha512-
sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0
g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms":
"^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/glob": { "version":
"7.2.3", "resolved": "[Link] "integrity": "sha512-
nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+i
QK9Q==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security
vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be
purchased (at exorbitant rates) by contacting i@[Link]", "license": "ISC", "dependencies":
{ "[Link]": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1",
"once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding":
{ "url": "[Link] } }, "node_modules/gopd": { "version": "1.2.0",
"resolved": "[Link] "integrity":
"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6
Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url":
"[Link] } }, "node_modules/has-symbols": { "version": "1.1.0",
"resolved": "[Link] "integrity": "sha512-
1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjU
oKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url":
"[Link] } }, "node_modules/[Link]": { "version": "1.1.7",
"resolved": "[Link] "integrity": "sha512-
taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBe
XA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert":
"^1.0.1" } }, "node_modules/hasown": { "version": "2.0.2", "resolved":
"[Link] "integrity": "sha512-
0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7b
fgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, "engines":
{ "node": ">= 0.4" } }, "node_modules/http-errors": { "version": "2.0.1", "resolved":
"[Link] "integrity": "sha512-
4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8p
LmQ==", "license": "MIT", "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4",
"setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" }, "engines":
{ "node": ">= 0.8" }, "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/iconv-lite": { "version": "0.7.2",
"resolved": "[Link] "integrity": "sha512-
im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqR
b0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" },
"engines": { "node": ">=0.10.0" }, "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/immediate": { "version": "3.0.6",
"resolved": "[Link] "integrity": "sha512-
XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSX
RGQ==", "license": "MIT" }, "node_modules/inflection": { "version": "1.13.4", "resolved":
"[Link] "integrity":
"sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5D
SkIZTcwIktuDw==", "engines": [ "node >= 0.4.0" ], "license": "MIT" },
"node_modules/inflight": { "version": "1.0.6", "resolved": "[Link]
[Link]", "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.", "license": "ISC", "dependencies": { "once":
"^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved":
"[Link] "integrity":
"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpX
Kxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ioredis": { "version": "5.10.1",
"resolved": "[Link] "integrity": "sha512-
HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/
vjBYCA==", "license": "MIT", "dependencies": { "@ioredis/commands": "1.5.1", "cluster-
key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "[Link]": "^4.2.0",
"[Link]": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-
callback": "^2.1.0" }, "engines": { "node": ">=12.22.0" }, "funding": { "type":
"opencollective", "url": "[Link] } }, "node_modules/[Link]":
{ "version": "1.9.1", "resolved": "[Link]
"integrity":
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/
w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" } },
"node_modules/is-promise": { "version": "4.0.0", "resolved": "[Link]
[Link]", "integrity": "sha512-
hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3Wly
H3AQ==", "license": "MIT" }, "node_modules/is-property": { "version": "1.0.2", "resolved":
"[Link] "integrity":
"sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/
dOZtGRiAjDhj92g==", "license": "MIT" }, "node_modules/isarray": { "version": "1.0.0",
"resolved": "[Link] "integrity": "sha512-
VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//
ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/jake": { "version": "10.9.4",
"resolved": "[Link] "integrity": "sha512-
wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MB
GkDA==", "license": "Apache-2.0", "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4",
"picocolors": "^1.1.1" }, "bin": { "jake": "bin/[Link]" }, "engines": { "node":
">=10" } }, "node_modules/joi": { "version": "17.13.3", "resolved":
"[Link] "integrity": "sha512-
otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oD
v1fA==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0",
"@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1",
"@sideway/pinpoint": "^2.0.0" } }, "node_modules/json5": { "version": "2.2.3", "resolved":
"[Link] "integrity": "sha512-
XmOWe7eyHYH14cLdVPoyg+GOH3rYX+
+KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT",
"bin": { "json5": "lib/[Link]" }, "engines": { "node": ">=6" } },
"node_modules/jsonwebtoken": { "version": "9.0.3", "resolved":
"[Link] "integrity":
"sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//
EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { "jws": "^4.0.1",
"[Link]": "^4.3.0", "[Link]": "^3.0.3", "[Link]": "^4.0.4",
"[Link]": "^3.0.3", "[Link]": "^4.0.6", "[Link]": "^4.0.1",
"[Link]": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" }, "engines": { "node":
">=12", "npm": ">=6" } }, "node_modules/jszip": { "version": "3.10.1", "resolved":
"[Link] "integrity": "sha512-
xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/
oK+bQMbqK2qmtk3pN4g==", "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie":
"~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } },
"node_modules/jszip/node_modules/readable-stream": { "version": "2.3.8", "resolved":
"[Link] "integrity": "sha512-
8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum4
5RTtdA==", "license": "MIT", "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/jszip/node_modules/safe-buffer":
{ "version": "5.1.2", "resolved": "[Link]
"integrity":
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/
wPtojys4G6+g==", "license": "MIT" }, "node_modules/jszip/node_modules/string_decoder":
{ "version": "1.1.1", "resolved": "[Link]
"integrity":
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPy
TP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } },
"node_modules/jwa": { "version": "2.0.1", "resolved": "[Link]
"integrity": "sha512-
hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5h
wqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1",
"ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "node_modules/jws": { "version":
"4.0.1", "resolved": "[Link] "integrity":
"sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+Y
mAdyRduA==", "license": "MIT", "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1"
} }, "node_modules/kareem": { "version": "3.2.0", "resolved":
"[Link] "integrity":
"sha512-VS8MWZz/cT+SqBCpVfNN4zoVz5VskR3N4+sTmUXme55e9avQHntpwpNq0yjnosISXqwJ3AQVjl
bI4Dyzv//JtA==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } },
"node_modules/lie": { "version": "3.3.0", "resolved": "[Link]
"integrity":
"sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/
NA52vRSN4N39dxHAIwQ==", "license": "MIT", "dependencies": { "immediate": "~3.0.5" }
}, "node_modules/lodash": { "version": "4.18.1", "resolved":
"[Link] "integrity": "sha512-
dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/
AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/[Link]":
{ "version": "4.2.0", "resolved": "[Link]
"integrity":
"sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/
ae2leYYQ==", "license": "MIT" }, "node_modules/[Link]": { "version": "4.3.0",
"resolved": "[Link] "integrity": "sha512-
W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt
5b0w==", "license": "MIT" }, "node_modules/[Link]": { "version": "3.1.0",
"resolved": "[Link] "integrity":
"sha512-
chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9Ss
ggPpg==", "license": "MIT" }, "node_modules/[Link]": { "version": "3.0.3",
"resolved": "[Link] "integrity": "sha512-
Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/
hbIXq980/1QJg==", "license": "MIT" }, "node_modules/[Link]": { "version": "4.0.4",
"resolved": "[Link] "integrity": "sha512-
DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/
dia0jrte4tjYwVBaZUA==", "license": "MIT" }, "node_modules/[Link]": { "version":
"3.0.3", "resolved": "[Link] "integrity":
"sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBc
c97zw9t1FQrw==", "license": "MIT" }, "node_modules/[Link]": { "version": "4.0.6",
"resolved": "[Link] "integrity":
"sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsS
YgdsW/F+MFOBA==", "license": "MIT" }, "node_modules/[Link]": { "version": "4.0.1",
"resolved": "[Link] "integrity": "sha512-
0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+
wUGgw==", "license": "MIT" }, "node_modules/[Link]": { "version": "4.1.1", "resolved":
"[Link] "integrity": "sha512-
Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yw
w3Mg==", "license": "MIT" }, "node_modules/long": { "version": "5.3.2", "resolved":
"[Link] "integrity":
"sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/
lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, "node_modules/[Link]": { "version":
"1.1.4", "resolved": "[Link] "integrity": "sha512-
DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/
TOPysCdIA==", "license": "MIT", "engines": { "bun": ">=1.0.0", "deno": ">=1.30.0",
"node": ">=8.0.0" }, "funding": { "type": "github", "url":
"[Link] } }, "node_modules/math-intrinsics": { "version":
"1.1.0", "resolved": "[Link] "integrity":
"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6
F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" } },
"node_modules/media-typer": { "version": "1.1.0", "resolved": "[Link]
typer/-/[Link]", "integrity": "sha512-
aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw
2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" } },
"node_modules/memory-pager": { "version": "1.5.0", "resolved": "[Link]
pager/-/[Link]", "integrity":
"sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxg
EZN8eBYKg==", "license": "MIT" }, "node_modules/merge-descriptors": { "version": "2.0.0",
"resolved": "[Link] "integrity":
"sha512-
Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww2
2l9Q3g==", "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url":
"[Link] } }, "node_modules/mime-db": { "version": "1.54.0",
"resolved": "[Link] "integrity": "sha512-
aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/
iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/mime-types": { "version": "3.0.2", "resolved": "[Link]
types/-/[Link]", "integrity": "sha512-
Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=
=", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { "node":
">=18" }, "funding": { "type": "opencollective", "url": "[Link]
} }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved":
"[Link] "integrity": "sha512-
UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd
00/A==", "license": "ISC" }, "node_modules/minimatch": { "version": "3.1.5", "resolved":
"[Link] "integrity": "sha512-
VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94s
sEEl4w==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, "engines": {
"node": "*" } }, "node_modules/moment": { "version": "2.30.1", "resolved":
"[Link] "integrity": "sha512-
uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/
bhC1zA3c2UQ5NzH6how==", "license": "MIT", "engines": { "node": "*" } },
"node_modules/moment-timezone": { "version": "0.5.48", "resolved":
"[Link] "integrity": "sha512-
f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthx
BHw==", "license": "MIT", "dependencies": { "moment": "^2.29.4" }, "engines":
{ "node": "*" } }, "node_modules/mongodb": { "version": "7.1.1", "resolved":
"[Link] "integrity": "sha512-
067DXiMjcpYQl6bGjWQoTUEE9UoRViTtKFcoqX7z08I+iDZv/emH1g8XEFiO3qiDfXAheT5ozl1VffDTKhI
W/w==", "license": "Apache-2.0", "dependencies": { "@mongodb-js/saslprep": "^1.3.0",
"bson": "^7.1.1", "mongodb-connection-string-url": "^7.0.0" }, "engines": { "node":
">=20.19.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0",
"@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-
encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", "socks": "^2.8.6" },
"peerDependenciesMeta": { "@aws-sdk/credential-providers": { "optional": true },
"@mongodb-js/zstd": { "optional": true }, "gcp-metadata": { "optional": true },
"kerberos": { "optional": true }, "mongodb-client-encryption": { "optional": true },
"snappy": { "optional": true }, "socks": { "optional": true } } },
"node_modules/mongodb-connection-string-url": { "version": "7.0.1", "resolved":
"[Link]
"integrity": "sha512-
h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/
SNRQ==", "license": "Apache-2.0", "dependencies": { "@types/whatwg-url": "^13.0.0",
"whatwg-url": "^14.1.0" }, "engines": { "node": ">=20.19.0" } },
"node_modules/mongoose": { "version": "9.4.1", "resolved":
"[Link] "integrity":
"sha512-4rFBWa+/wdBQSfvnOPJBpiSG6UCEbhSQh865dEdaH9Y8WfHBUC+I2XT28dp0IBIGrEwmh+gzrg
Zgea5PbmrHWA==", "license": "MIT", "dependencies": { "kareem": "3.2.0", "mongodb":
"~7.1", "mpath": "0.9.0", "mquery": "6.0.0", "ms": "2.1.3", "sift": "17.1.3" },
"engines": { "node": ">=20.19.0" }, "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/mpath": { "version": "0.9.0",
"resolved": "[Link] "integrity": "sha512-
ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/
ICIbgJydT2GOc15RnNy5mHmzfSew==", "license": "MIT", "engines": { "node": ">=4.0.0" }
}, "node_modules/mquery": { "version": "6.0.0", "resolved":
"[Link] "integrity": "sha512-
b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/
Z1yp0MagqsZStPWJjw==", "license": "MIT", "engines": { "node": ">=20.19.0" } },
"node_modules/ms": { "version": "2.1.3", "resolved": "[Link]
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/
XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/multer":
{ "version": "2.1.1", "resolved": "[Link] "integrity":
"sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/
XYU6UuJ3VZnODIrak5ZrPiPyB6A==", "license": "MIT", "dependencies": { "append-field":
"^1.0.0", "busboy": "^1.6.0", "concat-stream": "^2.0.0", "type-is": "^1.6.18" }, "engines":
{ "node": ">= 10.16.0" }, "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/multer/node_modules/media-typer":
{ "version": "0.3.0", "resolved": "[Link]
"integrity":
"sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOg
b5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/multer/node_modules/mime-db": { "version": "1.52.0", "resolved":
"[Link] "integrity": "sha512-
sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1
UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/multer/node_modules/mime-types": { "version": "2.1.35", "resolved":
"[Link] "integrity": "sha512-
ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s+
+TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies":
{ "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } },
"node_modules/multer/node_modules/type-is": { "version": "1.6.18", "resolved":
"[Link] "integrity": "sha512-
TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06X
QBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types":
"~2.1.24" }, "engines": { "node": ">= 0.6" } }, "node_modules/mysql2": { "version":
"3.21.1", "resolved": "[Link] "integrity": "sha512-
vywGTUeqMwPQHJCWTWmmdIpcLfhU0UWIhOYbSWehqL+0Y/NTPGViM0wDtIgLuzqm5RqSygXKLJnx
FGhQkhM1wg==", "license": "MIT", "dependencies": { "aws-ssl-profiles": "^1.1.2",
"denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.7.2", "long": "^5.3.2",
"[Link]": "^1.1.4", "named-placeholders": "^1.1.6", "sql-escaper": "^1.3.3" }, "engines": {
"node": ">= 8.0" }, "peerDependencies": { "@types/node": ">= 8" } },
"node_modules/named-placeholders": { "version": "1.1.6", "resolved":
"[Link] "integrity": "sha512-
Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/
kmRh9TfLEObFtkVxmY0w==", "license": "MIT", "dependencies": { "[Link]": "^1.1.0" },
"engines": { "node": ">=8.0.0" } }, "node_modules/nanoid": { "version": "5.1.11",
"resolved": "[Link] "integrity": "sha512-
v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/
8eKg==", "funding": [ { "type": "github", "url": "[Link] }
], "license": "MIT", "bin": { "nanoid": "bin/[Link]" }, "engines": { "node": "^18 ||
>=20" } }, "node_modules/negotiator": { "version": "1.0.0", "resolved":
"[Link] "integrity":
"sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/
3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/node-addon-api": { "version": "8.7.0", "resolved": "[Link]
addon-api/-/[Link]", "integrity": "sha512-
9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//
Ktx8ivZr8xo1Qmtqub+GA==", "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" }
}, "node_modules/node-gyp-build": { "version": "4.8.4", "resolved": "[Link]
gyp-build/-/[Link]", "integrity":
"sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/
q4jQ4UzPyid+CQ==", "license": "MIT", "bin": { "node-gyp-build": "[Link]", "node-gyp-build-
optional": "[Link]", "node-gyp-build-test": "[Link]" } }, "node_modules/object-inspect":
{ "version": "1.13.4", "resolved": "[Link]
"integrity": "sha512-
W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2
Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url":
"[Link] } }, "node_modules/on-finished": { "version": "2.4.1",
"resolved": "[Link] "integrity": "sha512-
oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/
ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, "engines": {
"node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", "resolved":
"[Link] "integrity": "sha512-
lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/
GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" } },
"node_modules/pako": { "version": "1.0.11", "resolved": "[Link]
[Link]", "integrity":
"sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVP
XCIO0z4taYw==", "license": "(MIT AND Zlib)" }, "node_modules/parseurl": { "version": "1.3.3",
"resolved": "[Link] "integrity":
"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NY
O4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" } },
"node_modules/passport": { "version": "0.7.0", "resolved":
"[Link] "integrity": "sha512-
cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y6
1MYQ==", "license": "MIT", "dependencies": { "passport-strategy": "1.x.x", "pause": "0.0.1",
"utils-merge": "^1.0.1" }, "engines": { "node": ">= 0.4.0" }, "funding": { "type":
"github", "url": "[Link] } }, "node_modules/passport-jwt": {
"version": "4.0.1", "resolved": "[Link]
"integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/
HZHcJ7lCdOyDxHdDoxoSvdQ==", "license": "MIT", "dependencies": { "jsonwebtoken":
"^9.0.0", "passport-strategy": "^1.0.0" } }, "node_modules/passport-strategy": { "version":
"1.0.0", "resolved": "[Link]
"integrity": "sha512-
CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/
n16NI7oA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/path-is-absolute":
{ "version": "1.0.1", "resolved": "[Link]
"integrity": "sha512-
AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7U
CQg==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-to-
regexp": { "version": "8.4.0", "resolved": "[Link]
[Link]", "integrity": "sha512-
PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYyp
g==", "license": "MIT", "funding": { "type": "opencollective", "url":
"[Link] } }, "node_modules/pause": { "version": "0.0.1",
"resolved": "[Link] "integrity": "sha512-
KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhK
qi4nfg==" }, "node_modules/pg-connection-string": { "version": "2.12.0", "resolved":
"[Link] "integrity": "sha512-
U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHk
CkQ==", "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", "resolved":
"[Link] "integrity": "sha512-
xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/
Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/process-nextick-args":
{ "version": "2.0.1", "resolved": "[Link]
[Link]", "integrity":
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKi
KJFFn1ag==", "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7",
"resolved": "[Link] "integrity": "sha512-
llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/
gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0",
"[Link]": "1.9.1" }, "engines": { "node": ">= 0.10" } }, "node_modules/punycode": {
"version": "2.3.1", "resolved": "[Link] "integrity":
"sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7
nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs":
{ "version": "6.15.0", "resolved": "[Link] "integrity": "sha512-
mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC+
+CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" },
"engines": { "node": ">=0.6" }, "funding": { "url": "[Link] }
}, "node_modules/range-parser": { "version": "1.2.1", "resolved": "[Link]
parser/-/[Link]", "integrity": "sha512-
Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/
GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" } },
"node_modules/raw-body": { "version": "3.0.2", "resolved": "[Link]
[Link]", "integrity":
"sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5
zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors":
"~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" }, "engines": { "node": ">=
0.10" } }, "node_modules/readable-stream": { "version": "3.6.2", "resolved":
"[Link] "integrity":
"sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1J
dGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3",
"string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } },
"node_modules/redis-errors": { "version": "1.2.0", "resolved":
"[Link] "integrity":
"sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbp
kGZWy8cBpn9w==", "license": "MIT", "engines": { "node": ">=4" } },
"node_modules/redis-parser": { "version": "3.0.0", "resolved":
"[Link] "integrity": "sha512-
DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1
zQFugFml66A==", "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" },
"engines": { "node": ">=4" } }, "node_modules/retry-as-promised": { "version": "7.1.1",
"resolved": "[Link] "integrity":
"sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSag
mtXHaJYJw==", "license": "MIT" }, "node_modules/router": { "version": "2.2.0", "resolved":
"[Link] "integrity":
"sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1
nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0",
"is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" }, "engines":
{ "node": ">= 18" } }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved":
"[Link] "integrity": "sha512-
rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmp
uYvmCXQ==", "funding": [ { "type": "github", "url": "[Link]
}, { "type": "patreon", "url": "[Link] }, { "type":
"consulting", "url": "[Link] } ], "license": "MIT" },
"node_modules/safer-buffer": { "version": "2.1.2", "resolved":
"[Link] "integrity": "sha512-
YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQri
Utg==", "license": "MIT" }, "node_modules/sax": { "version": "1.6.0", "resolved":
"[Link] "integrity": "sha512-
6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//
477BKLBzA==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" } },
"node_modules/semver": { "version": "7.7.4", "resolved": "[Link]
[Link]", "integrity": "sha512-
vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2Q
M2di4lA==", "license": "ISC", "bin": { "semver": "bin/[Link]" }, "engines":
{ "node": ">=10" } }, "node_modules/send": { "version": "1.2.1", "resolved":
"[Link] "integrity": "sha512-
1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mY
cZNQ==", "license": "MIT", "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0",
"escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-
types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1",
"statuses": "^2.0.2" }, "engines": { "node": ">= 18" }, "funding": { "type":
"opencollective", "url": "[Link] } }, "node_modules/sequelize": {
"version": "6.37.8", "resolved": "[Link] "integrity":
"sha512-
HJ0IQFqcTsTiqbEgiuioYFMSD00TP6Cz7zoTti+zVVBwVe9fEhev9cH6WnM3XU31+ABS356durAb99ZuOth
nKw==", "funding": [ { "type": "opencollective", "url":
"[Link] } ], "license": "MIT", "dependencies": {
"@types/debug": "^4.1.8", "@types/validator": "^13.7.17", "debug": "^4.3.4", "dottie": "^2.0.6",
"inflection": "^1.13.4", "lodash": "^4.17.21", "moment": "^2.29.4", "moment-timezone":
"^0.5.43", "pg-connection-string": "^2.6.1", "retry-as-promised": "^7.0.4", "semver": "^7.5.4",
"sequelize-pool": "^7.1.0", "toposort-class": "^1.0.1", "uuid": "^8.3.2", "validator": "^13.9.0",
"wkx": "^0.5.0" }, "engines": { "node": ">=10.0.0" }, "peerDependenciesMeta":
{ "ibm_db": { "optional": true }, "mariadb": { "optional": true }, "mysql2":
{ "optional": true }, "oracledb": { "optional": true }, "pg": { "optional":
true }, "pg-hstore": { "optional": true }, "snowflake-sdk": { "optional": true
}, "sqlite3": { "optional": true }, "tedious": { "optional": true } } },
"node_modules/sequelize-pool": { "version": "7.1.0", "resolved": "[Link]
pool/-/[Link]", "integrity":
"sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz
+fjDpRlJg==", "license": "MIT", "engines": { "node": ">= 10.0.0" } },
"node_modules/serve-static": { "version": "2.2.1", "resolved":
"[Link] "integrity": "sha512-
xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPG
waaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", "escape-html":
"^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" }, "engines": { "node": ">= 18" },
"funding": { "type": "opencollective", "url": "[Link] } },
"node_modules/setimmediate": { "version": "1.0.5", "resolved":
"[Link] "integrity":
"sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/
8h3BqVFnCqQ/gd+reiIXA==", "license": "MIT" }, "node_modules/setprototypeof": { "version":
"1.2.0", "resolved": "[Link] "integrity":
"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/
XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/side-channel": { "version":
"1.1.0", "resolved": "[Link] "integrity":
"sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/
xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0",
"object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-
channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url":
"[Link] } }, "node_modules/side-channel-list": { "version": "1.0.0",
"resolved": "[Link] "integrity": "sha512-
FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KC
rMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect":
"^1.13.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url":
"[Link] } }, "node_modules/side-channel-map": { "version": "1.0.1",
"resolved": "[Link] "integrity":
"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/
iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors":
"^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" }, "engines": { "node": ">=
0.4" }, "funding": { "url": "[Link] } }, "node_modules/side-
channel-weakmap": { "version": "1.0.2", "resolved": "[Link]
weakmap/-/[Link]", "integrity":
"sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br
2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" },
"engines": { "node": ">= 0.4" }, "funding": { "url": "[Link] }
}, "node_modules/sift": { "version": "17.1.3", "resolved": "[Link]
[Link]", "integrity":
"sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/
bjHWC3CIIvCQ==", "license": "MIT" }, "node_modules/sparse-bitfield": { "version": "3.0.3",
"resolved": "[Link] "integrity": "sha512-
kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7
VsQ==", "license": "MIT", "dependencies": { "memory-pager": "^1.0.2" } },
"node_modules/sql-escaper": { "version": "1.3.3", "resolved":
"[Link] "integrity": "sha512-
BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S
8JJw==", "license": "MIT", "engines": { "bun": ">=1.0.0", "deno": ">=2.0.0", "node":
">=12.0.0" }, "funding": { "type": "github", "url": "[Link]
sponsor=1" } }, "node_modules/standard-as-callback": { "version": "2.1.0", "resolved":
"[Link] "integrity": "sha512-
qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxA
L48A==", "license": "MIT" }, "node_modules/statuses": { "version": "2.0.2", "resolved":
"[Link] "integrity": "sha512-
DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQ
HGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" } },
"node_modules/streamifier": { "version": "0.1.1", "resolved":
"[Link] "integrity": "sha512-
zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqX
pdg==", "license": "MIT", "engines": { "node": ">=0.10" } },
"node_modules/streamsearch": { "version": "1.1.0", "resolved":
"[Link] "integrity": "sha512-
Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL+
+LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } },
"node_modules/string_decoder": { "version": "1.3.0", "resolved":
"[Link] "integrity": "sha512-
hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/
wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } },
"node_modules/swagger-autogen": { "version": "2.23.7", "resolved":
"[Link] "integrity": "sha512-
vr7uRmuV0DCxWc0wokLJAwX3GwQFJ0jwN+AWk0hKxre2EZwusnkGSGdVFd82u7fQLgwSTnbWkxUL7
HXuz5LTZQ==", "license": "MIT", "dependencies": { "acorn": "^7.4.1", "deepmerge":
"^4.2.2", "glob": "^7.1.7", "json5": "^2.2.3" } }, "node_modules/swagger-ui-dist":
{ "version": "5.32.1", "resolved": "[Link]
[Link]", "integrity":
"sha512-6HQoo7+j8PA2QqP5kgAb9dl1uxUjvR0SAoL/WUp1sTEvm0F6D5npgU2OGCLwl+
+bIInqGlEUQ2mpuZRZYtyCzQ==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf":
"=1.4.0" } }, "node_modules/swagger-ui-express": { "version": "5.0.1", "resolved":
"[Link] "integrity": "sha512-
SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/
1rACXCgLZqO6ZfrA==", "license": "MIT", "dependencies": { "swagger-ui-dist": ">=5.0.0" },
"engines": { "node": ">= v0.10.32" }, "peerDependencies": { "express": ">=4.0.0 || >=5.0.0-
beta" } }, "node_modules/toidentifier": { "version": "1.0.1", "resolved":
"[Link] "integrity":
"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/
BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" } },
"node_modules/toposort-class": { "version": "1.0.1", "resolved": "[Link]
class/-/[Link]", "integrity": "sha512-
OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/
M77ihI09+Sdfk1AXvfhCEeUmC7mg==", "license": "MIT" }, "node_modules/tr46": { "version":
"5.1.1", "resolved": "[Link] "integrity": "sha512-
hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3G
aSPw==", "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, "engines":
{ "node": ">=18" } }, "node_modules/type-is": { "version": "2.0.1", "resolved":
"[Link] "integrity": "sha512-
OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7ca
v+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", "media-typer":
"^1.1.0", "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } },
"node_modules/typedarray": { "version": "0.0.6", "resolved":
"[Link] "integrity":
"sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/
mweUjSoblS5In0cWhqpfs/5PQA==", "license": "MIT" }, "node_modules/undici-types":
{ "version": "7.18.2", "resolved": "[Link]
"integrity": "sha512-
AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2Qr
LY/w==", "license": "MIT" }, "node_modules/unpipe": { "version": "1.0.0", "resolved":
"[Link] "integrity": "sha512-
pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztK
Q==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/util-deprecate":
{ "version": "1.0.2", "resolved": "[Link]
"integrity": "sha512-
EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//
LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1",
"resolved": "[Link] "integrity": "sha512-
pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/
VoYTYyShUn81hA==", "license": "MIT", "engines": { "node": ">= 0.4.0" } },
"node_modules/uuid": { "version": "8.3.2", "resolved": "[Link]
"integrity": "sha512-
+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/
fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } },
"node_modules/validator": { "version": "13.15.35", "resolved":
"[Link] "integrity": "sha512-
TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqg
kar0iw==", "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/vary": {
"version": "1.1.2", "resolved": "[Link] "integrity": "sha512-
BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ
/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/webidl-
conversions": { "version": "7.0.0", "resolved": "[Link]
[Link]", "integrity": "sha512-
VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/
B87NGVZ/fu6g==", "license": "BSD-2-Clause", "engines": { "node": ">=12" } },
"node_modules/whatwg-url": { "version": "14.2.0", "resolved": "[Link]
url/-/[Link]", "integrity":
"sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj+
+ihpKwKyYewn/XNUbKw==", "license": "MIT", "dependencies": { "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0" }, "engines": { "node": ">=18" } }, "node_modules/wkx":
{ "version": "0.5.0", "resolved": "[Link] "integrity":
"sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQ
wN4eN+2YJJUg==", "license": "MIT", "dependencies": { "@types/node": "*" } },
"node_modules/wrappy": { "version": "1.0.2", "resolved": "[Link]
[Link]", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/
IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/xml": { "version":
"1.0.1", "resolved": "[Link] "integrity": "sha512-
huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTji
nQMw==", "license": "MIT" }, "node_modules/xml-js": { "version": "1.6.11", "resolved":
"[Link] "integrity": "sha512-
7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfA
mdjw7lC1g==", "license": "MIT", "dependencies": { "sax": "^1.2.4" }, "bin": { "xml-
js": "bin/[Link]" } } }}
[Link]
{ "name": "postloop", "version": "1.0.0", "description": "", "main": "[Link]", "scripts": { "start": "node
[Link]", "dev": "nodemon [Link]", "swagger": "node ./src/config/[Link]" }, "keywords": [],
"author": "", "license": "ISC", "type": "commonjs", "dependencies": { "bcrypt": "^6.0.0", "cloudinary":
"^2.10.0", "cookie-parser": "^1.4.7", "docx": "^9.6.1", "dotenv": "^17.3.1", "ejs": "^3.1.10",
"express": "^5.2.1", "express-ejs-layouts": "^2.5.1", "express-validation": "^4.1.1", "ioredis": "^5.10.1",
"jsonwebtoken": "^9.0.3", "mongoose": "^9.4.1", "multer": "^2.1.1", "mysql2": "^3.21.1", "passport":
"^0.7.0", "passport-jwt": "^4.0.1", "sequelize": "^6.37.8", "streamifier": "^0.1.1", "swagger-autogen":
"^2.23.7", "swagger-ui-express": "^5.0.1" } }
[Link]
# PostLoop API 🚀 A scalable backend system for a social media–style platform built with **[Link], Express,
Sequelize (MySQL), MongoDB, Redis, JWT authentication, and activity logging**. It supports: -
Authentication (JWT + Redis token blacklist) - Users, Posts, Comments system - Likes system - Role-based
access control (USER / ADMIN) - Activity logging (MongoDB) - Redis caching layer - Request validation (Joi
+ express-validation) - File uploads (Multer) - Swagger API docs --- ## 📦 Tech Stack - [Link] + Express -
MySQL (Sequelize ORM) - MongoDB (Activity logs) - Redis (Caching + Auth token store) - JWT
Authentication - [Link] (JWT strategy) - Joi validation - Multer (file upload) - Swagger UI --- ## 🚀
Installation ```bash git clone <repo-url> cd postloop npm install ``` --- ## ▶️Run the Server ### Development
```bash npm run dev ``` ### Production ```bash npm start ``` --- ## 🧪 Seed Database ### Create Admin
```bash node src/seeds/[Link] ``` ### Generate Dummy Data ```bash node
src/seeds/[Link] ``` --- ## 📘 API Documentation Swagger available at: ```
[Link] ``` --- ## Frontend (EJS + Bootstrap) This repo now also serves a beginner-
friendly frontend using **EJS + Bootstrap 5 + vanilla JS**. ### Pages - `/` Landing (login/signup) - `/feed`
Feed (protected) - `/post/:id` Post page (protected) - `/user/:id` User profile (protected) - `/user/:id/followers`
Followers list (protected) - `/user/:id/following` Following list (protected) - `/create` Create post (protected) -
`/settings` Settings (protected) ### Notes - Auth for web pages is stored in a cookie named `postloop_token`
(JWT). - API still uses `Authorization: Bearer <token>` headers; the frontend JS automatically attaches this
header using the cookie. - For UI-only styling work (without a running MySQL instance), you can start the
server with: ```bash # PowerShell example $env:JWT_SECRET="dev-secret"; $env:ALLOW_NO_DB="true";
npm run dev ``` In that mode, pages still render and the UI falls back to **dummy data** (with clear “Demo
mode” toasts). ## 🔐 Authentication Flow - JWT token issued on login - Token stored in Redis (`auth:token:*`)
- Passport JWT middleware validates token - Logout removes token from Redis (invalidates session) --- ## 🧠
Core Features ### 👤 Users - Register / Login / Logout - Admin can: - delete users - activate/deactivate users
- promote users to admin ### 📝 Posts - Create / update / delete posts - Upload image (Multer) - Like / Unlike
posts - View posts with pagination ### 💬 Comments - Create / update / delete comments - Nested access via
posts/users ### Likes - Toggle like/unlike system - Optimized with PostLike table --- ## ⚡ Performance
Layer ### Redis Caching - GET requests cached using `cache:` prefix - TTL: 5 minutes - Pattern invalidation
on mutations ### Cache Invalidation Triggered automatically on: - POST / PUT / DELETE routes - Uses
pattern-based deletion (`deleteByPattern`) --- ## 📊 Activity Logging (MongoDB) Every mutation request
logs: - userId - route + method - IP address - response status - response time - entity changes (old/new data) ---
## 🔐 Roles & Permissions | Role | Permissions | | ----- | --------------------------------- | | USER |
Create posts/comments, like, view | | ADMIN | Full access + user management | --- ## 📤 File Uploads -
Stored in: ``` src/public/uploads ``` - Access via: ``` /uploads/<filename> ``` --- ## 🧾 Validation All inputs
validated using Joi schemas: - [Link] - [Link] - [Link] - [Link]
--- ## 🧱 Database Models - User (Sequelize) - Post (Sequelize) - Comment (Sequelize) - PostLike (Sequelize)
- Activity (MongoDB) --- ## 🧠 Key Design Decisions - Soft delete (`isDeleted`) - Centralized pagination
utility - DB helper layer for safe entity access - Activity logging decoupled via middleware - Redis used for both
cache + auth session store - Role-based middleware enforcement --- ## 🧪 Testing Checklist Recommended
test cases: - Auth flow (signup/login/logout) - Token invalidation after logout - Cache hit vs miss behavior -
Role restrictions (USER vs ADMIN) - Soft delete propagation (posts/comments/users) - Activity logs creation -
Like toggle correctness --- ## 📌 Notes - Ensure Redis + MongoDB + MySQL are running - Seeder must be
run before testing APIs - JWT_SECRET must be strong in production - Activity logs auto-expire after 90 days
---

You might also like