├── .DS_Store ├── .gitignore ├── LICENSE ├── README.md ├── app.js ├── config ├── config.json └── passport.js ├── migrations └── 20250718102426-create-user.js ├── models ├── index.js └── user.js ├── oauthModel.js ├── package-lock.json ├── package.json ├── routes └── auth.js └── utils └── auth.js /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/didinj/secure-node-express-postgresql-passport/de8ab5a743830e11997b274fd263af46311ea8ad/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .git/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Didin Jamaludin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Secure Node.js, Express, and PostgreSQL REST API with JWT and Optional OAuth2 (2025 Edition) 2 | 3 | Read the full tutorial [here](https://www.djamware.com/post/5bf94d9a80aca747f4b9ce9f/secure-nodejs-express-and-postgresql-rest-api-with-jwt-and-optional-oauth2-2025-edition). 4 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import passport from "./config/passport.js"; 3 | import authRoutes from "./routes/auth.js"; 4 | import dotenv from "dotenv"; 5 | import OAuthServer from "express-oauth-server"; 6 | import oauthModel from "./oauthModel.js"; 7 | dotenv.config(); 8 | 9 | const app = express(); 10 | app.use(express.json()); 11 | app.use(passport.initialize()); 12 | app.use("/api/auth", authRoutes); 13 | 14 | const port = process.env.PORT || 3000; 15 | app.listen(port, () => 16 | console.log(`Server running on http://localhost:${port}`) 17 | ); 18 | app.oauth = new OAuthServer({ model: oauthModel }); 19 | 20 | app.post("/oauth/token", app.oauth.token()); 21 | app.get("/secure", app.oauth.authenticate(), (req, res) => 22 | res.send("Secure Data") 23 | ); 24 | -------------------------------------------------------------------------------- /config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "development": { 3 | "username": "djamware", 4 | "password": "dj@mw@r3", 5 | "database": "secure_api_db", 6 | "host": "127.0.0.1", 7 | "dialect": "postgres" 8 | } 9 | } -------------------------------------------------------------------------------- /config/passport.js: -------------------------------------------------------------------------------- 1 | import passport from "passport"; 2 | import { Strategy as JwtStrategy, ExtractJwt } from "passport-jwt"; 3 | import db from "../models/index.js"; 4 | const { User } = db; 5 | import dotenv from "dotenv"; 6 | dotenv.config(); 7 | 8 | passport.use( 9 | new JwtStrategy( 10 | { 11 | jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), 12 | secretOrKey: process.env.JWT_SECRET 13 | }, 14 | async (payload, done) => { 15 | try { 16 | const user = await User.findByPk(payload.id); 17 | return done(null, user || false); 18 | } catch (err) { 19 | return done(err, false); 20 | } 21 | } 22 | ) 23 | ); 24 | 25 | export default passport; 26 | -------------------------------------------------------------------------------- /migrations/20250718102426-create-user.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /** @type {import('sequelize-cli').Migration} */ 3 | module.exports = { 4 | async up(queryInterface, Sequelize) { 5 | await queryInterface.createTable('Users', { 6 | id: { 7 | allowNull: false, 8 | autoIncrement: true, 9 | primaryKey: true, 10 | type: Sequelize.INTEGER 11 | }, 12 | username: { 13 | type: Sequelize.STRING 14 | }, 15 | password: { 16 | type: Sequelize.STRING 17 | }, 18 | createdAt: { 19 | allowNull: false, 20 | type: Sequelize.DATE 21 | }, 22 | updatedAt: { 23 | allowNull: false, 24 | type: Sequelize.DATE 25 | } 26 | }); 27 | }, 28 | async down(queryInterface, Sequelize) { 29 | await queryInterface.dropTable('Users'); 30 | } 31 | }; -------------------------------------------------------------------------------- /models/index.js: -------------------------------------------------------------------------------- 1 | import { Sequelize } from 'sequelize'; 2 | import fs from 'fs'; 3 | import path from 'path'; 4 | import { fileURLToPath } from 'url'; 5 | import dotenv from 'dotenv'; 6 | dotenv.config(); 7 | 8 | const __filename = fileURLToPath(import.meta.url); 9 | const __dirname = path.dirname(__filename); 10 | 11 | const basename = path.basename(__filename); 12 | const env = process.env.NODE_ENV || 'development'; 13 | const config = JSON.parse(fs.readFileSync(path.join(__dirname, '../config/config.json')))[env]; 14 | 15 | const sequelize = new Sequelize(config.database, config.username, config.password, config); 16 | 17 | const db = {}; 18 | 19 | const modelFiles = fs 20 | .readdirSync(__dirname) 21 | .filter( 22 | file => file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js' 23 | ); 24 | 25 | for (const file of modelFiles) { 26 | const model = await import(path.join(__dirname, file)); 27 | const definedModel = model.default(sequelize, Sequelize.DataTypes); 28 | db[definedModel.name] = definedModel; 29 | } 30 | 31 | Object.keys(db).forEach(modelName => { 32 | if (db[modelName].associate) { 33 | db[modelName].associate(db); 34 | } 35 | }); 36 | 37 | db.sequelize = sequelize; 38 | db.Sequelize = Sequelize; 39 | 40 | export default db; -------------------------------------------------------------------------------- /models/user.js: -------------------------------------------------------------------------------- 1 | export default (sequelize, DataTypes) => { 2 | const User = sequelize.define("User", { 3 | username: DataTypes.STRING, 4 | password: DataTypes.STRING 5 | }); 6 | 7 | User.associate = function(models) { 8 | // associations can be defined here 9 | }; 10 | 11 | return User; 12 | }; 13 | -------------------------------------------------------------------------------- /oauthModel.js: -------------------------------------------------------------------------------- 1 | export default { 2 | getAccessToken: async function(token) { 3 | // Implement token retrieval logic 4 | return { 5 | accessToken: token, 6 | client: {}, 7 | user: {}, 8 | accessTokenExpiresAt: new Date(Date.now() + 3600 * 1000) 9 | }; 10 | }, 11 | 12 | getClient: async function(clientId, clientSecret) { 13 | return { id: clientId, grants: ["password"] }; 14 | }, 15 | 16 | saveToken: async function(token, client, user) { 17 | return { ...token, client, user }; 18 | }, 19 | 20 | getUser: async function(username, password) { 21 | // Validate and return a user 22 | return { id: 1, username }; 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secure-node-api", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "secure-node-api", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "bcrypt": "^6.0.0", 13 | "dotenv": "^17.2.0", 14 | "express": "^5.1.0", 15 | "express-oauth-server": "^2.0.0", 16 | "jsonwebtoken": "^9.0.2", 17 | "passport": "^0.7.0", 18 | "passport-jwt": "^4.0.1", 19 | "pg": "^8.16.3", 20 | "pg-hstore": "^2.3.4", 21 | "sequelize": "^6.37.7" 22 | }, 23 | "devDependencies": { 24 | "nodemon": "^3.1.10", 25 | "sequelize-cli": "^6.6.3" 26 | } 27 | }, 28 | "node_modules/@isaacs/cliui": { 29 | "version": "8.0.2", 30 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 31 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 32 | "dev": true, 33 | "license": "ISC", 34 | "dependencies": { 35 | "string-width": "^5.1.2", 36 | "string-width-cjs": "npm:string-width@^4.2.0", 37 | "strip-ansi": "^7.0.1", 38 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 39 | "wrap-ansi": "^8.1.0", 40 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 41 | }, 42 | "engines": { 43 | "node": ">=12" 44 | } 45 | }, 46 | "node_modules/@one-ini/wasm": { 47 | "version": "0.1.1", 48 | "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", 49 | "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", 50 | "dev": true, 51 | "license": "MIT" 52 | }, 53 | "node_modules/@pkgjs/parseargs": { 54 | "version": "0.11.0", 55 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 56 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 57 | "dev": true, 58 | "license": "MIT", 59 | "optional": true, 60 | "engines": { 61 | "node": ">=14" 62 | } 63 | }, 64 | "node_modules/@types/debug": { 65 | "version": "4.1.12", 66 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", 67 | "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", 68 | "license": "MIT", 69 | "dependencies": { 70 | "@types/ms": "*" 71 | } 72 | }, 73 | "node_modules/@types/ms": { 74 | "version": "2.1.0", 75 | "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", 76 | "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", 77 | "license": "MIT" 78 | }, 79 | "node_modules/@types/node": { 80 | "version": "24.0.14", 81 | "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz", 82 | "integrity": "sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==", 83 | "license": "MIT", 84 | "dependencies": { 85 | "undici-types": "~7.8.0" 86 | } 87 | }, 88 | "node_modules/@types/validator": { 89 | "version": "13.15.2", 90 | "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", 91 | "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", 92 | "license": "MIT" 93 | }, 94 | "node_modules/abbrev": { 95 | "version": "2.0.0", 96 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", 97 | "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", 98 | "dev": true, 99 | "license": "ISC", 100 | "engines": { 101 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 102 | } 103 | }, 104 | "node_modules/accepts": { 105 | "version": "2.0.0", 106 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", 107 | "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 108 | "license": "MIT", 109 | "dependencies": { 110 | "mime-types": "^3.0.0", 111 | "negotiator": "^1.0.0" 112 | }, 113 | "engines": { 114 | "node": ">= 0.6" 115 | } 116 | }, 117 | "node_modules/ansi-regex": { 118 | "version": "6.1.0", 119 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 120 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 121 | "dev": true, 122 | "license": "MIT", 123 | "engines": { 124 | "node": ">=12" 125 | }, 126 | "funding": { 127 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 128 | } 129 | }, 130 | "node_modules/ansi-styles": { 131 | "version": "6.2.1", 132 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 133 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 134 | "dev": true, 135 | "license": "MIT", 136 | "engines": { 137 | "node": ">=12" 138 | }, 139 | "funding": { 140 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 141 | } 142 | }, 143 | "node_modules/anymatch": { 144 | "version": "3.1.3", 145 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 146 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 147 | "dev": true, 148 | "license": "ISC", 149 | "dependencies": { 150 | "normalize-path": "^3.0.0", 151 | "picomatch": "^2.0.4" 152 | }, 153 | "engines": { 154 | "node": ">= 8" 155 | } 156 | }, 157 | "node_modules/array-flatten": { 158 | "version": "1.1.1", 159 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 160 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", 161 | "license": "MIT" 162 | }, 163 | "node_modules/at-least-node": { 164 | "version": "1.0.0", 165 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 166 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", 167 | "dev": true, 168 | "license": "ISC", 169 | "engines": { 170 | "node": ">= 4.0.0" 171 | } 172 | }, 173 | "node_modules/balanced-match": { 174 | "version": "1.0.2", 175 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 176 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 177 | "dev": true, 178 | "license": "MIT" 179 | }, 180 | "node_modules/basic-auth": { 181 | "version": "1.1.0", 182 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", 183 | "integrity": "sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA==", 184 | "license": "MIT", 185 | "engines": { 186 | "node": ">= 0.6" 187 | } 188 | }, 189 | "node_modules/bcrypt": { 190 | "version": "6.0.0", 191 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", 192 | "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", 193 | "hasInstallScript": true, 194 | "license": "MIT", 195 | "dependencies": { 196 | "node-addon-api": "^8.3.0", 197 | "node-gyp-build": "^4.8.4" 198 | }, 199 | "engines": { 200 | "node": ">= 18" 201 | } 202 | }, 203 | "node_modules/binary-extensions": { 204 | "version": "2.3.0", 205 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 206 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 207 | "dev": true, 208 | "license": "MIT", 209 | "engines": { 210 | "node": ">=8" 211 | }, 212 | "funding": { 213 | "url": "https://github.com/sponsors/sindresorhus" 214 | } 215 | }, 216 | "node_modules/bluebird": { 217 | "version": "3.7.2", 218 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 219 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 220 | "license": "MIT" 221 | }, 222 | "node_modules/body-parser": { 223 | "version": "2.2.0", 224 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", 225 | "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", 226 | "license": "MIT", 227 | "dependencies": { 228 | "bytes": "^3.1.2", 229 | "content-type": "^1.0.5", 230 | "debug": "^4.4.0", 231 | "http-errors": "^2.0.0", 232 | "iconv-lite": "^0.6.3", 233 | "on-finished": "^2.4.1", 234 | "qs": "^6.14.0", 235 | "raw-body": "^3.0.0", 236 | "type-is": "^2.0.0" 237 | }, 238 | "engines": { 239 | "node": ">=18" 240 | } 241 | }, 242 | "node_modules/brace-expansion": { 243 | "version": "1.1.12", 244 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 245 | "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 246 | "dev": true, 247 | "license": "MIT", 248 | "dependencies": { 249 | "balanced-match": "^1.0.0", 250 | "concat-map": "0.0.1" 251 | } 252 | }, 253 | "node_modules/braces": { 254 | "version": "3.0.3", 255 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 256 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 257 | "dev": true, 258 | "license": "MIT", 259 | "dependencies": { 260 | "fill-range": "^7.1.1" 261 | }, 262 | "engines": { 263 | "node": ">=8" 264 | } 265 | }, 266 | "node_modules/buffer-equal-constant-time": { 267 | "version": "1.0.1", 268 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 269 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", 270 | "license": "BSD-3-Clause" 271 | }, 272 | "node_modules/bytes": { 273 | "version": "3.1.2", 274 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 275 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 276 | "license": "MIT", 277 | "engines": { 278 | "node": ">= 0.8" 279 | } 280 | }, 281 | "node_modules/call-bind-apply-helpers": { 282 | "version": "1.0.2", 283 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 284 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 285 | "license": "MIT", 286 | "dependencies": { 287 | "es-errors": "^1.3.0", 288 | "function-bind": "^1.1.2" 289 | }, 290 | "engines": { 291 | "node": ">= 0.4" 292 | } 293 | }, 294 | "node_modules/call-bound": { 295 | "version": "1.0.4", 296 | "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 297 | "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 298 | "license": "MIT", 299 | "dependencies": { 300 | "call-bind-apply-helpers": "^1.0.2", 301 | "get-intrinsic": "^1.3.0" 302 | }, 303 | "engines": { 304 | "node": ">= 0.4" 305 | }, 306 | "funding": { 307 | "url": "https://github.com/sponsors/ljharb" 308 | } 309 | }, 310 | "node_modules/chokidar": { 311 | "version": "3.6.0", 312 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 313 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 314 | "dev": true, 315 | "license": "MIT", 316 | "dependencies": { 317 | "anymatch": "~3.1.2", 318 | "braces": "~3.0.2", 319 | "glob-parent": "~5.1.2", 320 | "is-binary-path": "~2.1.0", 321 | "is-glob": "~4.0.1", 322 | "normalize-path": "~3.0.0", 323 | "readdirp": "~3.6.0" 324 | }, 325 | "engines": { 326 | "node": ">= 8.10.0" 327 | }, 328 | "funding": { 329 | "url": "https://paulmillr.com/funding/" 330 | }, 331 | "optionalDependencies": { 332 | "fsevents": "~2.3.2" 333 | } 334 | }, 335 | "node_modules/cliui": { 336 | "version": "7.0.4", 337 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 338 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 339 | "dev": true, 340 | "license": "ISC", 341 | "dependencies": { 342 | "string-width": "^4.2.0", 343 | "strip-ansi": "^6.0.0", 344 | "wrap-ansi": "^7.0.0" 345 | } 346 | }, 347 | "node_modules/cliui/node_modules/ansi-regex": { 348 | "version": "5.0.1", 349 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 350 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 351 | "dev": true, 352 | "license": "MIT", 353 | "engines": { 354 | "node": ">=8" 355 | } 356 | }, 357 | "node_modules/cliui/node_modules/ansi-styles": { 358 | "version": "4.3.0", 359 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 360 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 361 | "dev": true, 362 | "license": "MIT", 363 | "dependencies": { 364 | "color-convert": "^2.0.1" 365 | }, 366 | "engines": { 367 | "node": ">=8" 368 | }, 369 | "funding": { 370 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 371 | } 372 | }, 373 | "node_modules/cliui/node_modules/emoji-regex": { 374 | "version": "8.0.0", 375 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 376 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 377 | "dev": true, 378 | "license": "MIT" 379 | }, 380 | "node_modules/cliui/node_modules/string-width": { 381 | "version": "4.2.3", 382 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 383 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 384 | "dev": true, 385 | "license": "MIT", 386 | "dependencies": { 387 | "emoji-regex": "^8.0.0", 388 | "is-fullwidth-code-point": "^3.0.0", 389 | "strip-ansi": "^6.0.1" 390 | }, 391 | "engines": { 392 | "node": ">=8" 393 | } 394 | }, 395 | "node_modules/cliui/node_modules/strip-ansi": { 396 | "version": "6.0.1", 397 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 398 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 399 | "dev": true, 400 | "license": "MIT", 401 | "dependencies": { 402 | "ansi-regex": "^5.0.1" 403 | }, 404 | "engines": { 405 | "node": ">=8" 406 | } 407 | }, 408 | "node_modules/cliui/node_modules/wrap-ansi": { 409 | "version": "7.0.0", 410 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 411 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 412 | "dev": true, 413 | "license": "MIT", 414 | "dependencies": { 415 | "ansi-styles": "^4.0.0", 416 | "string-width": "^4.1.0", 417 | "strip-ansi": "^6.0.0" 418 | }, 419 | "engines": { 420 | "node": ">=10" 421 | }, 422 | "funding": { 423 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 424 | } 425 | }, 426 | "node_modules/co-bluebird": { 427 | "version": "1.1.0", 428 | "resolved": "https://registry.npmjs.org/co-bluebird/-/co-bluebird-1.1.0.tgz", 429 | "integrity": "sha512-JuoemMXxQjYAxbfRrNpOsLyiwDiY8mXvGqJyYLM7jMySDJtnMklW3V2o8uyubpc1eN2YoRsAdfZ1lfKCd3lsrA==", 430 | "dependencies": { 431 | "bluebird": "^2.10.0", 432 | "co-use": "^1.1.0" 433 | }, 434 | "engines": { 435 | "node": ">=0.12.0" 436 | } 437 | }, 438 | "node_modules/co-bluebird/node_modules/bluebird": { 439 | "version": "2.11.0", 440 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", 441 | "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==", 442 | "license": "MIT" 443 | }, 444 | "node_modules/co-use": { 445 | "version": "1.1.0", 446 | "resolved": "https://registry.npmjs.org/co-use/-/co-use-1.1.0.tgz", 447 | "integrity": "sha512-1lVRtdywv41zQO/xvI2wU8w6oFcUYT6T84YKSxN25KN4N4Kld3scLovt8FjDmD63Cm7HtyRWHjezt+IanXmkyA==", 448 | "engines": { 449 | "node": ">=0.12.0" 450 | } 451 | }, 452 | "node_modules/color-convert": { 453 | "version": "2.0.1", 454 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 455 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 456 | "dev": true, 457 | "license": "MIT", 458 | "dependencies": { 459 | "color-name": "~1.1.4" 460 | }, 461 | "engines": { 462 | "node": ">=7.0.0" 463 | } 464 | }, 465 | "node_modules/color-name": { 466 | "version": "1.1.4", 467 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 468 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 469 | "dev": true, 470 | "license": "MIT" 471 | }, 472 | "node_modules/commander": { 473 | "version": "10.0.1", 474 | "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", 475 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 476 | "dev": true, 477 | "license": "MIT", 478 | "engines": { 479 | "node": ">=14" 480 | } 481 | }, 482 | "node_modules/concat-map": { 483 | "version": "0.0.1", 484 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 485 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 486 | "dev": true, 487 | "license": "MIT" 488 | }, 489 | "node_modules/config-chain": { 490 | "version": "1.1.13", 491 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", 492 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 493 | "dev": true, 494 | "license": "MIT", 495 | "dependencies": { 496 | "ini": "^1.3.4", 497 | "proto-list": "~1.2.1" 498 | } 499 | }, 500 | "node_modules/content-disposition": { 501 | "version": "1.0.0", 502 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", 503 | "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", 504 | "license": "MIT", 505 | "dependencies": { 506 | "safe-buffer": "5.2.1" 507 | }, 508 | "engines": { 509 | "node": ">= 0.6" 510 | } 511 | }, 512 | "node_modules/content-type": { 513 | "version": "1.0.5", 514 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 515 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 516 | "license": "MIT", 517 | "engines": { 518 | "node": ">= 0.6" 519 | } 520 | }, 521 | "node_modules/cookie": { 522 | "version": "0.7.2", 523 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", 524 | "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", 525 | "license": "MIT", 526 | "engines": { 527 | "node": ">= 0.6" 528 | } 529 | }, 530 | "node_modules/cookie-signature": { 531 | "version": "1.2.2", 532 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 533 | "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 534 | "license": "MIT", 535 | "engines": { 536 | "node": ">=6.6.0" 537 | } 538 | }, 539 | "node_modules/cross-spawn": { 540 | "version": "7.0.6", 541 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 542 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 543 | "dev": true, 544 | "license": "MIT", 545 | "dependencies": { 546 | "path-key": "^3.1.0", 547 | "shebang-command": "^2.0.0", 548 | "which": "^2.0.1" 549 | }, 550 | "engines": { 551 | "node": ">= 8" 552 | } 553 | }, 554 | "node_modules/debug": { 555 | "version": "4.4.1", 556 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 557 | "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 558 | "license": "MIT", 559 | "dependencies": { 560 | "ms": "^2.1.3" 561 | }, 562 | "engines": { 563 | "node": ">=6.0" 564 | }, 565 | "peerDependenciesMeta": { 566 | "supports-color": { 567 | "optional": true 568 | } 569 | } 570 | }, 571 | "node_modules/depd": { 572 | "version": "2.0.0", 573 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 574 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 575 | "license": "MIT", 576 | "engines": { 577 | "node": ">= 0.8" 578 | } 579 | }, 580 | "node_modules/destroy": { 581 | "version": "1.2.0", 582 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 583 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 584 | "license": "MIT", 585 | "engines": { 586 | "node": ">= 0.8", 587 | "npm": "1.2.8000 || >= 1.4.16" 588 | } 589 | }, 590 | "node_modules/dotenv": { 591 | "version": "17.2.0", 592 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.0.tgz", 593 | "integrity": "sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ==", 594 | "license": "BSD-2-Clause", 595 | "engines": { 596 | "node": ">=12" 597 | }, 598 | "funding": { 599 | "url": "https://dotenvx.com" 600 | } 601 | }, 602 | "node_modules/dottie": { 603 | "version": "2.0.6", 604 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", 605 | "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==", 606 | "license": "MIT" 607 | }, 608 | "node_modules/dunder-proto": { 609 | "version": "1.0.1", 610 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 611 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 612 | "license": "MIT", 613 | "dependencies": { 614 | "call-bind-apply-helpers": "^1.0.1", 615 | "es-errors": "^1.3.0", 616 | "gopd": "^1.2.0" 617 | }, 618 | "engines": { 619 | "node": ">= 0.4" 620 | } 621 | }, 622 | "node_modules/eastasianwidth": { 623 | "version": "0.2.0", 624 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 625 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 626 | "dev": true, 627 | "license": "MIT" 628 | }, 629 | "node_modules/ecdsa-sig-formatter": { 630 | "version": "1.0.11", 631 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 632 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 633 | "license": "Apache-2.0", 634 | "dependencies": { 635 | "safe-buffer": "^5.0.1" 636 | } 637 | }, 638 | "node_modules/editorconfig": { 639 | "version": "1.0.4", 640 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", 641 | "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", 642 | "dev": true, 643 | "license": "MIT", 644 | "dependencies": { 645 | "@one-ini/wasm": "0.1.1", 646 | "commander": "^10.0.0", 647 | "minimatch": "9.0.1", 648 | "semver": "^7.5.3" 649 | }, 650 | "bin": { 651 | "editorconfig": "bin/editorconfig" 652 | }, 653 | "engines": { 654 | "node": ">=14" 655 | } 656 | }, 657 | "node_modules/editorconfig/node_modules/brace-expansion": { 658 | "version": "2.0.2", 659 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 660 | "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 661 | "dev": true, 662 | "license": "MIT", 663 | "dependencies": { 664 | "balanced-match": "^1.0.0" 665 | } 666 | }, 667 | "node_modules/editorconfig/node_modules/minimatch": { 668 | "version": "9.0.1", 669 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", 670 | "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", 671 | "dev": true, 672 | "license": "ISC", 673 | "dependencies": { 674 | "brace-expansion": "^2.0.1" 675 | }, 676 | "engines": { 677 | "node": ">=16 || 14 >=14.17" 678 | }, 679 | "funding": { 680 | "url": "https://github.com/sponsors/isaacs" 681 | } 682 | }, 683 | "node_modules/ee-first": { 684 | "version": "1.1.1", 685 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 686 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 687 | "license": "MIT" 688 | }, 689 | "node_modules/emoji-regex": { 690 | "version": "9.2.2", 691 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 692 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 693 | "dev": true, 694 | "license": "MIT" 695 | }, 696 | "node_modules/encodeurl": { 697 | "version": "2.0.0", 698 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 699 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 700 | "license": "MIT", 701 | "engines": { 702 | "node": ">= 0.8" 703 | } 704 | }, 705 | "node_modules/es-define-property": { 706 | "version": "1.0.1", 707 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 708 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 709 | "license": "MIT", 710 | "engines": { 711 | "node": ">= 0.4" 712 | } 713 | }, 714 | "node_modules/es-errors": { 715 | "version": "1.3.0", 716 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 717 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 718 | "license": "MIT", 719 | "engines": { 720 | "node": ">= 0.4" 721 | } 722 | }, 723 | "node_modules/es-object-atoms": { 724 | "version": "1.1.1", 725 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 726 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 727 | "license": "MIT", 728 | "dependencies": { 729 | "es-errors": "^1.3.0" 730 | }, 731 | "engines": { 732 | "node": ">= 0.4" 733 | } 734 | }, 735 | "node_modules/escalade": { 736 | "version": "3.2.0", 737 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 738 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 739 | "dev": true, 740 | "license": "MIT", 741 | "engines": { 742 | "node": ">=6" 743 | } 744 | }, 745 | "node_modules/escape-html": { 746 | "version": "1.0.3", 747 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 748 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 749 | "license": "MIT" 750 | }, 751 | "node_modules/etag": { 752 | "version": "1.8.1", 753 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 754 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 755 | "license": "MIT", 756 | "engines": { 757 | "node": ">= 0.6" 758 | } 759 | }, 760 | "node_modules/express": { 761 | "version": "5.1.0", 762 | "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", 763 | "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", 764 | "license": "MIT", 765 | "dependencies": { 766 | "accepts": "^2.0.0", 767 | "body-parser": "^2.2.0", 768 | "content-disposition": "^1.0.0", 769 | "content-type": "^1.0.5", 770 | "cookie": "^0.7.1", 771 | "cookie-signature": "^1.2.1", 772 | "debug": "^4.4.0", 773 | "encodeurl": "^2.0.0", 774 | "escape-html": "^1.0.3", 775 | "etag": "^1.8.1", 776 | "finalhandler": "^2.1.0", 777 | "fresh": "^2.0.0", 778 | "http-errors": "^2.0.0", 779 | "merge-descriptors": "^2.0.0", 780 | "mime-types": "^3.0.0", 781 | "on-finished": "^2.4.1", 782 | "once": "^1.4.0", 783 | "parseurl": "^1.3.3", 784 | "proxy-addr": "^2.0.7", 785 | "qs": "^6.14.0", 786 | "range-parser": "^1.2.1", 787 | "router": "^2.2.0", 788 | "send": "^1.1.0", 789 | "serve-static": "^2.2.0", 790 | "statuses": "^2.0.1", 791 | "type-is": "^2.0.1", 792 | "vary": "^1.1.2" 793 | }, 794 | "engines": { 795 | "node": ">= 18" 796 | }, 797 | "funding": { 798 | "type": "opencollective", 799 | "url": "https://opencollective.com/express" 800 | } 801 | }, 802 | "node_modules/express-oauth-server": { 803 | "version": "2.0.0", 804 | "resolved": "https://registry.npmjs.org/express-oauth-server/-/express-oauth-server-2.0.0.tgz", 805 | "integrity": "sha512-+UrTbvU7u3LVnoUavzO7QJgSqiEZREKprCZYrDEVoSszrO4t8f/BBPbY3hQOuuatoS0PgDFLaDKQsGNtAgPm5w==", 806 | "license": "SEE LICENSE IN LICENSE", 807 | "dependencies": { 808 | "bluebird": "^3.0.5", 809 | "express": "^4.13.3", 810 | "oauth2-server": "3.0.0" 811 | }, 812 | "engines": { 813 | "node": ">=0.11" 814 | } 815 | }, 816 | "node_modules/express-oauth-server/node_modules/accepts": { 817 | "version": "1.3.8", 818 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 819 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 820 | "license": "MIT", 821 | "dependencies": { 822 | "mime-types": "~2.1.34", 823 | "negotiator": "0.6.3" 824 | }, 825 | "engines": { 826 | "node": ">= 0.6" 827 | } 828 | }, 829 | "node_modules/express-oauth-server/node_modules/body-parser": { 830 | "version": "1.20.3", 831 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", 832 | "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", 833 | "license": "MIT", 834 | "dependencies": { 835 | "bytes": "3.1.2", 836 | "content-type": "~1.0.5", 837 | "debug": "2.6.9", 838 | "depd": "2.0.0", 839 | "destroy": "1.2.0", 840 | "http-errors": "2.0.0", 841 | "iconv-lite": "0.4.24", 842 | "on-finished": "2.4.1", 843 | "qs": "6.13.0", 844 | "raw-body": "2.5.2", 845 | "type-is": "~1.6.18", 846 | "unpipe": "1.0.0" 847 | }, 848 | "engines": { 849 | "node": ">= 0.8", 850 | "npm": "1.2.8000 || >= 1.4.16" 851 | } 852 | }, 853 | "node_modules/express-oauth-server/node_modules/content-disposition": { 854 | "version": "0.5.4", 855 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 856 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 857 | "license": "MIT", 858 | "dependencies": { 859 | "safe-buffer": "5.2.1" 860 | }, 861 | "engines": { 862 | "node": ">= 0.6" 863 | } 864 | }, 865 | "node_modules/express-oauth-server/node_modules/cookie": { 866 | "version": "0.7.1", 867 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", 868 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", 869 | "license": "MIT", 870 | "engines": { 871 | "node": ">= 0.6" 872 | } 873 | }, 874 | "node_modules/express-oauth-server/node_modules/cookie-signature": { 875 | "version": "1.0.6", 876 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 877 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", 878 | "license": "MIT" 879 | }, 880 | "node_modules/express-oauth-server/node_modules/debug": { 881 | "version": "2.6.9", 882 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 883 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 884 | "license": "MIT", 885 | "dependencies": { 886 | "ms": "2.0.0" 887 | } 888 | }, 889 | "node_modules/express-oauth-server/node_modules/debug/node_modules/ms": { 890 | "version": "2.0.0", 891 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 892 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 893 | "license": "MIT" 894 | }, 895 | "node_modules/express-oauth-server/node_modules/express": { 896 | "version": "4.21.2", 897 | "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", 898 | "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", 899 | "license": "MIT", 900 | "dependencies": { 901 | "accepts": "~1.3.8", 902 | "array-flatten": "1.1.1", 903 | "body-parser": "1.20.3", 904 | "content-disposition": "0.5.4", 905 | "content-type": "~1.0.4", 906 | "cookie": "0.7.1", 907 | "cookie-signature": "1.0.6", 908 | "debug": "2.6.9", 909 | "depd": "2.0.0", 910 | "encodeurl": "~2.0.0", 911 | "escape-html": "~1.0.3", 912 | "etag": "~1.8.1", 913 | "finalhandler": "1.3.1", 914 | "fresh": "0.5.2", 915 | "http-errors": "2.0.0", 916 | "merge-descriptors": "1.0.3", 917 | "methods": "~1.1.2", 918 | "on-finished": "2.4.1", 919 | "parseurl": "~1.3.3", 920 | "path-to-regexp": "0.1.12", 921 | "proxy-addr": "~2.0.7", 922 | "qs": "6.13.0", 923 | "range-parser": "~1.2.1", 924 | "safe-buffer": "5.2.1", 925 | "send": "0.19.0", 926 | "serve-static": "1.16.2", 927 | "setprototypeof": "1.2.0", 928 | "statuses": "2.0.1", 929 | "type-is": "~1.6.18", 930 | "utils-merge": "1.0.1", 931 | "vary": "~1.1.2" 932 | }, 933 | "engines": { 934 | "node": ">= 0.10.0" 935 | }, 936 | "funding": { 937 | "type": "opencollective", 938 | "url": "https://opencollective.com/express" 939 | } 940 | }, 941 | "node_modules/express-oauth-server/node_modules/finalhandler": { 942 | "version": "1.3.1", 943 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", 944 | "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", 945 | "license": "MIT", 946 | "dependencies": { 947 | "debug": "2.6.9", 948 | "encodeurl": "~2.0.0", 949 | "escape-html": "~1.0.3", 950 | "on-finished": "2.4.1", 951 | "parseurl": "~1.3.3", 952 | "statuses": "2.0.1", 953 | "unpipe": "~1.0.0" 954 | }, 955 | "engines": { 956 | "node": ">= 0.8" 957 | } 958 | }, 959 | "node_modules/express-oauth-server/node_modules/fresh": { 960 | "version": "0.5.2", 961 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 962 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 963 | "license": "MIT", 964 | "engines": { 965 | "node": ">= 0.6" 966 | } 967 | }, 968 | "node_modules/express-oauth-server/node_modules/iconv-lite": { 969 | "version": "0.4.24", 970 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 971 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 972 | "license": "MIT", 973 | "dependencies": { 974 | "safer-buffer": ">= 2.1.2 < 3" 975 | }, 976 | "engines": { 977 | "node": ">=0.10.0" 978 | } 979 | }, 980 | "node_modules/express-oauth-server/node_modules/media-typer": { 981 | "version": "0.3.0", 982 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 983 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 984 | "license": "MIT", 985 | "engines": { 986 | "node": ">= 0.6" 987 | } 988 | }, 989 | "node_modules/express-oauth-server/node_modules/merge-descriptors": { 990 | "version": "1.0.3", 991 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", 992 | "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", 993 | "license": "MIT", 994 | "funding": { 995 | "url": "https://github.com/sponsors/sindresorhus" 996 | } 997 | }, 998 | "node_modules/express-oauth-server/node_modules/mime-db": { 999 | "version": "1.52.0", 1000 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1001 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1002 | "license": "MIT", 1003 | "engines": { 1004 | "node": ">= 0.6" 1005 | } 1006 | }, 1007 | "node_modules/express-oauth-server/node_modules/mime-types": { 1008 | "version": "2.1.35", 1009 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1010 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1011 | "license": "MIT", 1012 | "dependencies": { 1013 | "mime-db": "1.52.0" 1014 | }, 1015 | "engines": { 1016 | "node": ">= 0.6" 1017 | } 1018 | }, 1019 | "node_modules/express-oauth-server/node_modules/negotiator": { 1020 | "version": "0.6.3", 1021 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1022 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1023 | "license": "MIT", 1024 | "engines": { 1025 | "node": ">= 0.6" 1026 | } 1027 | }, 1028 | "node_modules/express-oauth-server/node_modules/path-to-regexp": { 1029 | "version": "0.1.12", 1030 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", 1031 | "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", 1032 | "license": "MIT" 1033 | }, 1034 | "node_modules/express-oauth-server/node_modules/qs": { 1035 | "version": "6.13.0", 1036 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 1037 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 1038 | "license": "BSD-3-Clause", 1039 | "dependencies": { 1040 | "side-channel": "^1.0.6" 1041 | }, 1042 | "engines": { 1043 | "node": ">=0.6" 1044 | }, 1045 | "funding": { 1046 | "url": "https://github.com/sponsors/ljharb" 1047 | } 1048 | }, 1049 | "node_modules/express-oauth-server/node_modules/raw-body": { 1050 | "version": "2.5.2", 1051 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 1052 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 1053 | "license": "MIT", 1054 | "dependencies": { 1055 | "bytes": "3.1.2", 1056 | "http-errors": "2.0.0", 1057 | "iconv-lite": "0.4.24", 1058 | "unpipe": "1.0.0" 1059 | }, 1060 | "engines": { 1061 | "node": ">= 0.8" 1062 | } 1063 | }, 1064 | "node_modules/express-oauth-server/node_modules/send": { 1065 | "version": "0.19.0", 1066 | "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", 1067 | "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", 1068 | "license": "MIT", 1069 | "dependencies": { 1070 | "debug": "2.6.9", 1071 | "depd": "2.0.0", 1072 | "destroy": "1.2.0", 1073 | "encodeurl": "~1.0.2", 1074 | "escape-html": "~1.0.3", 1075 | "etag": "~1.8.1", 1076 | "fresh": "0.5.2", 1077 | "http-errors": "2.0.0", 1078 | "mime": "1.6.0", 1079 | "ms": "2.1.3", 1080 | "on-finished": "2.4.1", 1081 | "range-parser": "~1.2.1", 1082 | "statuses": "2.0.1" 1083 | }, 1084 | "engines": { 1085 | "node": ">= 0.8.0" 1086 | } 1087 | }, 1088 | "node_modules/express-oauth-server/node_modules/send/node_modules/encodeurl": { 1089 | "version": "1.0.2", 1090 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1091 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 1092 | "license": "MIT", 1093 | "engines": { 1094 | "node": ">= 0.8" 1095 | } 1096 | }, 1097 | "node_modules/express-oauth-server/node_modules/serve-static": { 1098 | "version": "1.16.2", 1099 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", 1100 | "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", 1101 | "license": "MIT", 1102 | "dependencies": { 1103 | "encodeurl": "~2.0.0", 1104 | "escape-html": "~1.0.3", 1105 | "parseurl": "~1.3.3", 1106 | "send": "0.19.0" 1107 | }, 1108 | "engines": { 1109 | "node": ">= 0.8.0" 1110 | } 1111 | }, 1112 | "node_modules/express-oauth-server/node_modules/statuses": { 1113 | "version": "2.0.1", 1114 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1115 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1116 | "license": "MIT", 1117 | "engines": { 1118 | "node": ">= 0.8" 1119 | } 1120 | }, 1121 | "node_modules/express-oauth-server/node_modules/type-is": { 1122 | "version": "1.6.18", 1123 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1124 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1125 | "license": "MIT", 1126 | "dependencies": { 1127 | "media-typer": "0.3.0", 1128 | "mime-types": "~2.1.24" 1129 | }, 1130 | "engines": { 1131 | "node": ">= 0.6" 1132 | } 1133 | }, 1134 | "node_modules/fill-range": { 1135 | "version": "7.1.1", 1136 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1137 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1138 | "dev": true, 1139 | "license": "MIT", 1140 | "dependencies": { 1141 | "to-regex-range": "^5.0.1" 1142 | }, 1143 | "engines": { 1144 | "node": ">=8" 1145 | } 1146 | }, 1147 | "node_modules/finalhandler": { 1148 | "version": "2.1.0", 1149 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", 1150 | "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", 1151 | "license": "MIT", 1152 | "dependencies": { 1153 | "debug": "^4.4.0", 1154 | "encodeurl": "^2.0.0", 1155 | "escape-html": "^1.0.3", 1156 | "on-finished": "^2.4.1", 1157 | "parseurl": "^1.3.3", 1158 | "statuses": "^2.0.1" 1159 | }, 1160 | "engines": { 1161 | "node": ">= 0.8" 1162 | } 1163 | }, 1164 | "node_modules/foreground-child": { 1165 | "version": "3.3.1", 1166 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", 1167 | "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", 1168 | "dev": true, 1169 | "license": "ISC", 1170 | "dependencies": { 1171 | "cross-spawn": "^7.0.6", 1172 | "signal-exit": "^4.0.1" 1173 | }, 1174 | "engines": { 1175 | "node": ">=14" 1176 | }, 1177 | "funding": { 1178 | "url": "https://github.com/sponsors/isaacs" 1179 | } 1180 | }, 1181 | "node_modules/forwarded": { 1182 | "version": "0.2.0", 1183 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1184 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1185 | "license": "MIT", 1186 | "engines": { 1187 | "node": ">= 0.6" 1188 | } 1189 | }, 1190 | "node_modules/fresh": { 1191 | "version": "2.0.0", 1192 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 1193 | "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 1194 | "license": "MIT", 1195 | "engines": { 1196 | "node": ">= 0.8" 1197 | } 1198 | }, 1199 | "node_modules/fs-extra": { 1200 | "version": "9.1.0", 1201 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 1202 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 1203 | "dev": true, 1204 | "license": "MIT", 1205 | "dependencies": { 1206 | "at-least-node": "^1.0.0", 1207 | "graceful-fs": "^4.2.0", 1208 | "jsonfile": "^6.0.1", 1209 | "universalify": "^2.0.0" 1210 | }, 1211 | "engines": { 1212 | "node": ">=10" 1213 | } 1214 | }, 1215 | "node_modules/fsevents": { 1216 | "version": "2.3.3", 1217 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1218 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1219 | "dev": true, 1220 | "hasInstallScript": true, 1221 | "license": "MIT", 1222 | "optional": true, 1223 | "os": [ 1224 | "darwin" 1225 | ], 1226 | "engines": { 1227 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1228 | } 1229 | }, 1230 | "node_modules/function-bind": { 1231 | "version": "1.1.2", 1232 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1233 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1234 | "license": "MIT", 1235 | "funding": { 1236 | "url": "https://github.com/sponsors/ljharb" 1237 | } 1238 | }, 1239 | "node_modules/get-caller-file": { 1240 | "version": "2.0.5", 1241 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1242 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1243 | "dev": true, 1244 | "license": "ISC", 1245 | "engines": { 1246 | "node": "6.* || 8.* || >= 10.*" 1247 | } 1248 | }, 1249 | "node_modules/get-intrinsic": { 1250 | "version": "1.3.0", 1251 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 1252 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 1253 | "license": "MIT", 1254 | "dependencies": { 1255 | "call-bind-apply-helpers": "^1.0.2", 1256 | "es-define-property": "^1.0.1", 1257 | "es-errors": "^1.3.0", 1258 | "es-object-atoms": "^1.1.1", 1259 | "function-bind": "^1.1.2", 1260 | "get-proto": "^1.0.1", 1261 | "gopd": "^1.2.0", 1262 | "has-symbols": "^1.1.0", 1263 | "hasown": "^2.0.2", 1264 | "math-intrinsics": "^1.1.0" 1265 | }, 1266 | "engines": { 1267 | "node": ">= 0.4" 1268 | }, 1269 | "funding": { 1270 | "url": "https://github.com/sponsors/ljharb" 1271 | } 1272 | }, 1273 | "node_modules/get-proto": { 1274 | "version": "1.0.1", 1275 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 1276 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 1277 | "license": "MIT", 1278 | "dependencies": { 1279 | "dunder-proto": "^1.0.1", 1280 | "es-object-atoms": "^1.0.0" 1281 | }, 1282 | "engines": { 1283 | "node": ">= 0.4" 1284 | } 1285 | }, 1286 | "node_modules/glob": { 1287 | "version": "10.4.5", 1288 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 1289 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1290 | "dev": true, 1291 | "license": "ISC", 1292 | "dependencies": { 1293 | "foreground-child": "^3.1.0", 1294 | "jackspeak": "^3.1.2", 1295 | "minimatch": "^9.0.4", 1296 | "minipass": "^7.1.2", 1297 | "package-json-from-dist": "^1.0.0", 1298 | "path-scurry": "^1.11.1" 1299 | }, 1300 | "bin": { 1301 | "glob": "dist/esm/bin.mjs" 1302 | }, 1303 | "funding": { 1304 | "url": "https://github.com/sponsors/isaacs" 1305 | } 1306 | }, 1307 | "node_modules/glob-parent": { 1308 | "version": "5.1.2", 1309 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1310 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1311 | "dev": true, 1312 | "license": "ISC", 1313 | "dependencies": { 1314 | "is-glob": "^4.0.1" 1315 | }, 1316 | "engines": { 1317 | "node": ">= 6" 1318 | } 1319 | }, 1320 | "node_modules/glob/node_modules/brace-expansion": { 1321 | "version": "2.0.2", 1322 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 1323 | "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 1324 | "dev": true, 1325 | "license": "MIT", 1326 | "dependencies": { 1327 | "balanced-match": "^1.0.0" 1328 | } 1329 | }, 1330 | "node_modules/glob/node_modules/minimatch": { 1331 | "version": "9.0.5", 1332 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1333 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1334 | "dev": true, 1335 | "license": "ISC", 1336 | "dependencies": { 1337 | "brace-expansion": "^2.0.1" 1338 | }, 1339 | "engines": { 1340 | "node": ">=16 || 14 >=14.17" 1341 | }, 1342 | "funding": { 1343 | "url": "https://github.com/sponsors/isaacs" 1344 | } 1345 | }, 1346 | "node_modules/gopd": { 1347 | "version": "1.2.0", 1348 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 1349 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 1350 | "license": "MIT", 1351 | "engines": { 1352 | "node": ">= 0.4" 1353 | }, 1354 | "funding": { 1355 | "url": "https://github.com/sponsors/ljharb" 1356 | } 1357 | }, 1358 | "node_modules/graceful-fs": { 1359 | "version": "4.2.11", 1360 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1361 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1362 | "dev": true, 1363 | "license": "ISC" 1364 | }, 1365 | "node_modules/has-flag": { 1366 | "version": "3.0.0", 1367 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1368 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1369 | "dev": true, 1370 | "license": "MIT", 1371 | "engines": { 1372 | "node": ">=4" 1373 | } 1374 | }, 1375 | "node_modules/has-symbols": { 1376 | "version": "1.1.0", 1377 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 1378 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 1379 | "license": "MIT", 1380 | "engines": { 1381 | "node": ">= 0.4" 1382 | }, 1383 | "funding": { 1384 | "url": "https://github.com/sponsors/ljharb" 1385 | } 1386 | }, 1387 | "node_modules/hasown": { 1388 | "version": "2.0.2", 1389 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1390 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1391 | "license": "MIT", 1392 | "dependencies": { 1393 | "function-bind": "^1.1.2" 1394 | }, 1395 | "engines": { 1396 | "node": ">= 0.4" 1397 | } 1398 | }, 1399 | "node_modules/http-errors": { 1400 | "version": "2.0.0", 1401 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1402 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1403 | "license": "MIT", 1404 | "dependencies": { 1405 | "depd": "2.0.0", 1406 | "inherits": "2.0.4", 1407 | "setprototypeof": "1.2.0", 1408 | "statuses": "2.0.1", 1409 | "toidentifier": "1.0.1" 1410 | }, 1411 | "engines": { 1412 | "node": ">= 0.8" 1413 | } 1414 | }, 1415 | "node_modules/http-errors/node_modules/statuses": { 1416 | "version": "2.0.1", 1417 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1418 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1419 | "license": "MIT", 1420 | "engines": { 1421 | "node": ">= 0.8" 1422 | } 1423 | }, 1424 | "node_modules/iconv-lite": { 1425 | "version": "0.6.3", 1426 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 1427 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 1428 | "license": "MIT", 1429 | "dependencies": { 1430 | "safer-buffer": ">= 2.1.2 < 3.0.0" 1431 | }, 1432 | "engines": { 1433 | "node": ">=0.10.0" 1434 | } 1435 | }, 1436 | "node_modules/ignore-by-default": { 1437 | "version": "1.0.1", 1438 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 1439 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 1440 | "dev": true, 1441 | "license": "ISC" 1442 | }, 1443 | "node_modules/inflection": { 1444 | "version": "1.13.4", 1445 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", 1446 | "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", 1447 | "engines": [ 1448 | "node >= 0.4.0" 1449 | ], 1450 | "license": "MIT" 1451 | }, 1452 | "node_modules/inherits": { 1453 | "version": "2.0.4", 1454 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1455 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1456 | "license": "ISC" 1457 | }, 1458 | "node_modules/ini": { 1459 | "version": "1.3.8", 1460 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1461 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1462 | "dev": true, 1463 | "license": "ISC" 1464 | }, 1465 | "node_modules/ipaddr.js": { 1466 | "version": "1.9.1", 1467 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1468 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1469 | "license": "MIT", 1470 | "engines": { 1471 | "node": ">= 0.10" 1472 | } 1473 | }, 1474 | "node_modules/is-binary-path": { 1475 | "version": "2.1.0", 1476 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1477 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1478 | "dev": true, 1479 | "license": "MIT", 1480 | "dependencies": { 1481 | "binary-extensions": "^2.0.0" 1482 | }, 1483 | "engines": { 1484 | "node": ">=8" 1485 | } 1486 | }, 1487 | "node_modules/is-core-module": { 1488 | "version": "2.16.1", 1489 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 1490 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 1491 | "dev": true, 1492 | "license": "MIT", 1493 | "dependencies": { 1494 | "hasown": "^2.0.2" 1495 | }, 1496 | "engines": { 1497 | "node": ">= 0.4" 1498 | }, 1499 | "funding": { 1500 | "url": "https://github.com/sponsors/ljharb" 1501 | } 1502 | }, 1503 | "node_modules/is-extglob": { 1504 | "version": "2.1.1", 1505 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1506 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1507 | "dev": true, 1508 | "license": "MIT", 1509 | "engines": { 1510 | "node": ">=0.10.0" 1511 | } 1512 | }, 1513 | "node_modules/is-fullwidth-code-point": { 1514 | "version": "3.0.0", 1515 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1516 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1517 | "dev": true, 1518 | "license": "MIT", 1519 | "engines": { 1520 | "node": ">=8" 1521 | } 1522 | }, 1523 | "node_modules/is-generator": { 1524 | "version": "1.0.3", 1525 | "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", 1526 | "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", 1527 | "license": "MIT" 1528 | }, 1529 | "node_modules/is-glob": { 1530 | "version": "4.0.3", 1531 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1532 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1533 | "dev": true, 1534 | "license": "MIT", 1535 | "dependencies": { 1536 | "is-extglob": "^2.1.1" 1537 | }, 1538 | "engines": { 1539 | "node": ">=0.10.0" 1540 | } 1541 | }, 1542 | "node_modules/is-number": { 1543 | "version": "7.0.0", 1544 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1545 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1546 | "dev": true, 1547 | "license": "MIT", 1548 | "engines": { 1549 | "node": ">=0.12.0" 1550 | } 1551 | }, 1552 | "node_modules/is-promise": { 1553 | "version": "4.0.0", 1554 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 1555 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 1556 | "license": "MIT" 1557 | }, 1558 | "node_modules/isexe": { 1559 | "version": "2.0.0", 1560 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1561 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1562 | "dev": true, 1563 | "license": "ISC" 1564 | }, 1565 | "node_modules/jackspeak": { 1566 | "version": "3.4.3", 1567 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1568 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1569 | "dev": true, 1570 | "license": "BlueOak-1.0.0", 1571 | "dependencies": { 1572 | "@isaacs/cliui": "^8.0.2" 1573 | }, 1574 | "funding": { 1575 | "url": "https://github.com/sponsors/isaacs" 1576 | }, 1577 | "optionalDependencies": { 1578 | "@pkgjs/parseargs": "^0.11.0" 1579 | } 1580 | }, 1581 | "node_modules/js-beautify": { 1582 | "version": "1.15.4", 1583 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", 1584 | "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", 1585 | "dev": true, 1586 | "license": "MIT", 1587 | "dependencies": { 1588 | "config-chain": "^1.1.13", 1589 | "editorconfig": "^1.0.4", 1590 | "glob": "^10.4.2", 1591 | "js-cookie": "^3.0.5", 1592 | "nopt": "^7.2.1" 1593 | }, 1594 | "bin": { 1595 | "css-beautify": "js/bin/css-beautify.js", 1596 | "html-beautify": "js/bin/html-beautify.js", 1597 | "js-beautify": "js/bin/js-beautify.js" 1598 | }, 1599 | "engines": { 1600 | "node": ">=14" 1601 | } 1602 | }, 1603 | "node_modules/js-cookie": { 1604 | "version": "3.0.5", 1605 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", 1606 | "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", 1607 | "dev": true, 1608 | "license": "MIT", 1609 | "engines": { 1610 | "node": ">=14" 1611 | } 1612 | }, 1613 | "node_modules/jsonfile": { 1614 | "version": "6.1.0", 1615 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 1616 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 1617 | "dev": true, 1618 | "license": "MIT", 1619 | "dependencies": { 1620 | "universalify": "^2.0.0" 1621 | }, 1622 | "optionalDependencies": { 1623 | "graceful-fs": "^4.1.6" 1624 | } 1625 | }, 1626 | "node_modules/jsonwebtoken": { 1627 | "version": "9.0.2", 1628 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", 1629 | "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", 1630 | "license": "MIT", 1631 | "dependencies": { 1632 | "jws": "^3.2.2", 1633 | "lodash.includes": "^4.3.0", 1634 | "lodash.isboolean": "^3.0.3", 1635 | "lodash.isinteger": "^4.0.4", 1636 | "lodash.isnumber": "^3.0.3", 1637 | "lodash.isplainobject": "^4.0.6", 1638 | "lodash.isstring": "^4.0.1", 1639 | "lodash.once": "^4.0.0", 1640 | "ms": "^2.1.1", 1641 | "semver": "^7.5.4" 1642 | }, 1643 | "engines": { 1644 | "node": ">=12", 1645 | "npm": ">=6" 1646 | } 1647 | }, 1648 | "node_modules/jwa": { 1649 | "version": "1.4.2", 1650 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", 1651 | "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", 1652 | "license": "MIT", 1653 | "dependencies": { 1654 | "buffer-equal-constant-time": "^1.0.1", 1655 | "ecdsa-sig-formatter": "1.0.11", 1656 | "safe-buffer": "^5.0.1" 1657 | } 1658 | }, 1659 | "node_modules/jws": { 1660 | "version": "3.2.2", 1661 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 1662 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 1663 | "license": "MIT", 1664 | "dependencies": { 1665 | "jwa": "^1.4.1", 1666 | "safe-buffer": "^5.0.1" 1667 | } 1668 | }, 1669 | "node_modules/lodash": { 1670 | "version": "4.17.21", 1671 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1672 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1673 | "license": "MIT" 1674 | }, 1675 | "node_modules/lodash.includes": { 1676 | "version": "4.3.0", 1677 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 1678 | "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", 1679 | "license": "MIT" 1680 | }, 1681 | "node_modules/lodash.isboolean": { 1682 | "version": "3.0.3", 1683 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 1684 | "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", 1685 | "license": "MIT" 1686 | }, 1687 | "node_modules/lodash.isinteger": { 1688 | "version": "4.0.4", 1689 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 1690 | "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", 1691 | "license": "MIT" 1692 | }, 1693 | "node_modules/lodash.isnumber": { 1694 | "version": "3.0.3", 1695 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 1696 | "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", 1697 | "license": "MIT" 1698 | }, 1699 | "node_modules/lodash.isplainobject": { 1700 | "version": "4.0.6", 1701 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1702 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", 1703 | "license": "MIT" 1704 | }, 1705 | "node_modules/lodash.isstring": { 1706 | "version": "4.0.1", 1707 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1708 | "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", 1709 | "license": "MIT" 1710 | }, 1711 | "node_modules/lodash.once": { 1712 | "version": "4.1.1", 1713 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 1714 | "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", 1715 | "license": "MIT" 1716 | }, 1717 | "node_modules/lru-cache": { 1718 | "version": "10.4.3", 1719 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1720 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1721 | "dev": true, 1722 | "license": "ISC" 1723 | }, 1724 | "node_modules/math-intrinsics": { 1725 | "version": "1.1.0", 1726 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 1727 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 1728 | "license": "MIT", 1729 | "engines": { 1730 | "node": ">= 0.4" 1731 | } 1732 | }, 1733 | "node_modules/media-typer": { 1734 | "version": "1.1.0", 1735 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 1736 | "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 1737 | "license": "MIT", 1738 | "engines": { 1739 | "node": ">= 0.8" 1740 | } 1741 | }, 1742 | "node_modules/merge-descriptors": { 1743 | "version": "2.0.0", 1744 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", 1745 | "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", 1746 | "license": "MIT", 1747 | "engines": { 1748 | "node": ">=18" 1749 | }, 1750 | "funding": { 1751 | "url": "https://github.com/sponsors/sindresorhus" 1752 | } 1753 | }, 1754 | "node_modules/methods": { 1755 | "version": "1.1.2", 1756 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1757 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1758 | "license": "MIT", 1759 | "engines": { 1760 | "node": ">= 0.6" 1761 | } 1762 | }, 1763 | "node_modules/mime": { 1764 | "version": "1.6.0", 1765 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1766 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1767 | "license": "MIT", 1768 | "bin": { 1769 | "mime": "cli.js" 1770 | }, 1771 | "engines": { 1772 | "node": ">=4" 1773 | } 1774 | }, 1775 | "node_modules/mime-db": { 1776 | "version": "1.54.0", 1777 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 1778 | "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 1779 | "license": "MIT", 1780 | "engines": { 1781 | "node": ">= 0.6" 1782 | } 1783 | }, 1784 | "node_modules/mime-types": { 1785 | "version": "3.0.1", 1786 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", 1787 | "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", 1788 | "license": "MIT", 1789 | "dependencies": { 1790 | "mime-db": "^1.54.0" 1791 | }, 1792 | "engines": { 1793 | "node": ">= 0.6" 1794 | } 1795 | }, 1796 | "node_modules/minimatch": { 1797 | "version": "3.1.2", 1798 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1799 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1800 | "dev": true, 1801 | "license": "ISC", 1802 | "dependencies": { 1803 | "brace-expansion": "^1.1.7" 1804 | }, 1805 | "engines": { 1806 | "node": "*" 1807 | } 1808 | }, 1809 | "node_modules/minipass": { 1810 | "version": "7.1.2", 1811 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1812 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1813 | "dev": true, 1814 | "license": "ISC", 1815 | "engines": { 1816 | "node": ">=16 || 14 >=14.17" 1817 | } 1818 | }, 1819 | "node_modules/moment": { 1820 | "version": "2.30.1", 1821 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", 1822 | "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", 1823 | "license": "MIT", 1824 | "engines": { 1825 | "node": "*" 1826 | } 1827 | }, 1828 | "node_modules/moment-timezone": { 1829 | "version": "0.5.48", 1830 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", 1831 | "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", 1832 | "license": "MIT", 1833 | "dependencies": { 1834 | "moment": "^2.29.4" 1835 | }, 1836 | "engines": { 1837 | "node": "*" 1838 | } 1839 | }, 1840 | "node_modules/ms": { 1841 | "version": "2.1.3", 1842 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1843 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1844 | "license": "MIT" 1845 | }, 1846 | "node_modules/negotiator": { 1847 | "version": "1.0.0", 1848 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", 1849 | "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", 1850 | "license": "MIT", 1851 | "engines": { 1852 | "node": ">= 0.6" 1853 | } 1854 | }, 1855 | "node_modules/node-addon-api": { 1856 | "version": "8.5.0", 1857 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", 1858 | "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", 1859 | "license": "MIT", 1860 | "engines": { 1861 | "node": "^18 || ^20 || >= 21" 1862 | } 1863 | }, 1864 | "node_modules/node-gyp-build": { 1865 | "version": "4.8.4", 1866 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", 1867 | "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", 1868 | "license": "MIT", 1869 | "bin": { 1870 | "node-gyp-build": "bin.js", 1871 | "node-gyp-build-optional": "optional.js", 1872 | "node-gyp-build-test": "build-test.js" 1873 | } 1874 | }, 1875 | "node_modules/nodemon": { 1876 | "version": "3.1.10", 1877 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", 1878 | "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", 1879 | "dev": true, 1880 | "license": "MIT", 1881 | "dependencies": { 1882 | "chokidar": "^3.5.2", 1883 | "debug": "^4", 1884 | "ignore-by-default": "^1.0.1", 1885 | "minimatch": "^3.1.2", 1886 | "pstree.remy": "^1.1.8", 1887 | "semver": "^7.5.3", 1888 | "simple-update-notifier": "^2.0.0", 1889 | "supports-color": "^5.5.0", 1890 | "touch": "^3.1.0", 1891 | "undefsafe": "^2.0.5" 1892 | }, 1893 | "bin": { 1894 | "nodemon": "bin/nodemon.js" 1895 | }, 1896 | "engines": { 1897 | "node": ">=10" 1898 | }, 1899 | "funding": { 1900 | "type": "opencollective", 1901 | "url": "https://opencollective.com/nodemon" 1902 | } 1903 | }, 1904 | "node_modules/nopt": { 1905 | "version": "7.2.1", 1906 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", 1907 | "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", 1908 | "dev": true, 1909 | "license": "ISC", 1910 | "dependencies": { 1911 | "abbrev": "^2.0.0" 1912 | }, 1913 | "bin": { 1914 | "nopt": "bin/nopt.js" 1915 | }, 1916 | "engines": { 1917 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1918 | } 1919 | }, 1920 | "node_modules/normalize-path": { 1921 | "version": "3.0.0", 1922 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1923 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1924 | "dev": true, 1925 | "license": "MIT", 1926 | "engines": { 1927 | "node": ">=0.10.0" 1928 | } 1929 | }, 1930 | "node_modules/oauth2-server": { 1931 | "version": "3.0.0", 1932 | "resolved": "https://registry.npmjs.org/oauth2-server/-/oauth2-server-3.0.0.tgz", 1933 | "integrity": "sha512-TlDDkKECOTjQQ9pQobw/EESLbd7YVY1i0Ebos996Au88FqiLUbQ+X/cRBCq6gvpkoA0ByrDsF8c97SyRygfE6Q==", 1934 | "license": "MIT", 1935 | "dependencies": { 1936 | "basic-auth": "1.1.0", 1937 | "bluebird": "3.5.0", 1938 | "lodash": "4.17.4", 1939 | "promisify-any": "2.0.1", 1940 | "statuses": "1.3.1", 1941 | "type-is": "1.6.15" 1942 | }, 1943 | "engines": { 1944 | "node": ">=4.0" 1945 | } 1946 | }, 1947 | "node_modules/oauth2-server/node_modules/bluebird": { 1948 | "version": "3.5.0", 1949 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 1950 | "integrity": "sha512-3LE8m8bqjGdoxfvf71yhFNrUcwy3NLy00SAo+b6MfJ8l+Bc2DzQ7mUHwX6pjK2AxfgV+YfsjCeVW3T5HLQTBsQ==", 1951 | "license": "MIT" 1952 | }, 1953 | "node_modules/oauth2-server/node_modules/lodash": { 1954 | "version": "4.17.4", 1955 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 1956 | "integrity": "sha512-6X37Sq9KCpLSXEh8uM12AKYlviHPNNk4RxiGBn4cmKGJinbXBneWIV7iE/nXkM928O7ytHcHb6+X6Svl0f4hXg==", 1957 | "license": "MIT" 1958 | }, 1959 | "node_modules/oauth2-server/node_modules/media-typer": { 1960 | "version": "0.3.0", 1961 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1962 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1963 | "license": "MIT", 1964 | "engines": { 1965 | "node": ">= 0.6" 1966 | } 1967 | }, 1968 | "node_modules/oauth2-server/node_modules/mime-db": { 1969 | "version": "1.52.0", 1970 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1971 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1972 | "license": "MIT", 1973 | "engines": { 1974 | "node": ">= 0.6" 1975 | } 1976 | }, 1977 | "node_modules/oauth2-server/node_modules/mime-types": { 1978 | "version": "2.1.35", 1979 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1980 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1981 | "license": "MIT", 1982 | "dependencies": { 1983 | "mime-db": "1.52.0" 1984 | }, 1985 | "engines": { 1986 | "node": ">= 0.6" 1987 | } 1988 | }, 1989 | "node_modules/oauth2-server/node_modules/statuses": { 1990 | "version": "1.3.1", 1991 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 1992 | "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", 1993 | "license": "MIT", 1994 | "engines": { 1995 | "node": ">= 0.6" 1996 | } 1997 | }, 1998 | "node_modules/oauth2-server/node_modules/type-is": { 1999 | "version": "1.6.15", 2000 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 2001 | "integrity": "sha512-0uqZYZDiBICTVXEsNcDLueZLPgZ8FgGe8lmVDQ0FcVFUeaxsPbFWiz60ZChVw8VELIt7iGuCehOrZSYjYteWKQ==", 2002 | "license": "MIT", 2003 | "dependencies": { 2004 | "media-typer": "0.3.0", 2005 | "mime-types": "~2.1.15" 2006 | }, 2007 | "engines": { 2008 | "node": ">= 0.6" 2009 | } 2010 | }, 2011 | "node_modules/object-inspect": { 2012 | "version": "1.13.4", 2013 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 2014 | "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 2015 | "license": "MIT", 2016 | "engines": { 2017 | "node": ">= 0.4" 2018 | }, 2019 | "funding": { 2020 | "url": "https://github.com/sponsors/ljharb" 2021 | } 2022 | }, 2023 | "node_modules/on-finished": { 2024 | "version": "2.4.1", 2025 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2026 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2027 | "license": "MIT", 2028 | "dependencies": { 2029 | "ee-first": "1.1.1" 2030 | }, 2031 | "engines": { 2032 | "node": ">= 0.8" 2033 | } 2034 | }, 2035 | "node_modules/once": { 2036 | "version": "1.4.0", 2037 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2038 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2039 | "license": "ISC", 2040 | "dependencies": { 2041 | "wrappy": "1" 2042 | } 2043 | }, 2044 | "node_modules/package-json-from-dist": { 2045 | "version": "1.0.1", 2046 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 2047 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 2048 | "dev": true, 2049 | "license": "BlueOak-1.0.0" 2050 | }, 2051 | "node_modules/parseurl": { 2052 | "version": "1.3.3", 2053 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2054 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 2055 | "license": "MIT", 2056 | "engines": { 2057 | "node": ">= 0.8" 2058 | } 2059 | }, 2060 | "node_modules/passport": { 2061 | "version": "0.7.0", 2062 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", 2063 | "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", 2064 | "license": "MIT", 2065 | "dependencies": { 2066 | "passport-strategy": "1.x.x", 2067 | "pause": "0.0.1", 2068 | "utils-merge": "^1.0.1" 2069 | }, 2070 | "engines": { 2071 | "node": ">= 0.4.0" 2072 | }, 2073 | "funding": { 2074 | "type": "github", 2075 | "url": "https://github.com/sponsors/jaredhanson" 2076 | } 2077 | }, 2078 | "node_modules/passport-jwt": { 2079 | "version": "4.0.1", 2080 | "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", 2081 | "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", 2082 | "license": "MIT", 2083 | "dependencies": { 2084 | "jsonwebtoken": "^9.0.0", 2085 | "passport-strategy": "^1.0.0" 2086 | } 2087 | }, 2088 | "node_modules/passport-strategy": { 2089 | "version": "1.0.0", 2090 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 2091 | "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", 2092 | "engines": { 2093 | "node": ">= 0.4.0" 2094 | } 2095 | }, 2096 | "node_modules/path-key": { 2097 | "version": "3.1.1", 2098 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2099 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2100 | "dev": true, 2101 | "license": "MIT", 2102 | "engines": { 2103 | "node": ">=8" 2104 | } 2105 | }, 2106 | "node_modules/path-parse": { 2107 | "version": "1.0.7", 2108 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2109 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2110 | "dev": true, 2111 | "license": "MIT" 2112 | }, 2113 | "node_modules/path-scurry": { 2114 | "version": "1.11.1", 2115 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 2116 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 2117 | "dev": true, 2118 | "license": "BlueOak-1.0.0", 2119 | "dependencies": { 2120 | "lru-cache": "^10.2.0", 2121 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 2122 | }, 2123 | "engines": { 2124 | "node": ">=16 || 14 >=14.18" 2125 | }, 2126 | "funding": { 2127 | "url": "https://github.com/sponsors/isaacs" 2128 | } 2129 | }, 2130 | "node_modules/path-to-regexp": { 2131 | "version": "8.2.0", 2132 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", 2133 | "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", 2134 | "license": "MIT", 2135 | "engines": { 2136 | "node": ">=16" 2137 | } 2138 | }, 2139 | "node_modules/pause": { 2140 | "version": "0.0.1", 2141 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", 2142 | "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" 2143 | }, 2144 | "node_modules/pg": { 2145 | "version": "8.16.3", 2146 | "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", 2147 | "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", 2148 | "license": "MIT", 2149 | "dependencies": { 2150 | "pg-connection-string": "^2.9.1", 2151 | "pg-pool": "^3.10.1", 2152 | "pg-protocol": "^1.10.3", 2153 | "pg-types": "2.2.0", 2154 | "pgpass": "1.0.5" 2155 | }, 2156 | "engines": { 2157 | "node": ">= 16.0.0" 2158 | }, 2159 | "optionalDependencies": { 2160 | "pg-cloudflare": "^1.2.7" 2161 | }, 2162 | "peerDependencies": { 2163 | "pg-native": ">=3.0.1" 2164 | }, 2165 | "peerDependenciesMeta": { 2166 | "pg-native": { 2167 | "optional": true 2168 | } 2169 | } 2170 | }, 2171 | "node_modules/pg-cloudflare": { 2172 | "version": "1.2.7", 2173 | "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", 2174 | "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", 2175 | "license": "MIT", 2176 | "optional": true 2177 | }, 2178 | "node_modules/pg-connection-string": { 2179 | "version": "2.9.1", 2180 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", 2181 | "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", 2182 | "license": "MIT" 2183 | }, 2184 | "node_modules/pg-hstore": { 2185 | "version": "2.3.4", 2186 | "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", 2187 | "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", 2188 | "license": "MIT", 2189 | "dependencies": { 2190 | "underscore": "^1.13.1" 2191 | }, 2192 | "engines": { 2193 | "node": ">= 0.8.x" 2194 | } 2195 | }, 2196 | "node_modules/pg-int8": { 2197 | "version": "1.0.1", 2198 | "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", 2199 | "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", 2200 | "license": "ISC", 2201 | "engines": { 2202 | "node": ">=4.0.0" 2203 | } 2204 | }, 2205 | "node_modules/pg-pool": { 2206 | "version": "3.10.1", 2207 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", 2208 | "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", 2209 | "license": "MIT", 2210 | "peerDependencies": { 2211 | "pg": ">=8.0" 2212 | } 2213 | }, 2214 | "node_modules/pg-protocol": { 2215 | "version": "1.10.3", 2216 | "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", 2217 | "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", 2218 | "license": "MIT" 2219 | }, 2220 | "node_modules/pg-types": { 2221 | "version": "2.2.0", 2222 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", 2223 | "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", 2224 | "license": "MIT", 2225 | "dependencies": { 2226 | "pg-int8": "1.0.1", 2227 | "postgres-array": "~2.0.0", 2228 | "postgres-bytea": "~1.0.0", 2229 | "postgres-date": "~1.0.4", 2230 | "postgres-interval": "^1.1.0" 2231 | }, 2232 | "engines": { 2233 | "node": ">=4" 2234 | } 2235 | }, 2236 | "node_modules/pgpass": { 2237 | "version": "1.0.5", 2238 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", 2239 | "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", 2240 | "license": "MIT", 2241 | "dependencies": { 2242 | "split2": "^4.1.0" 2243 | } 2244 | }, 2245 | "node_modules/picocolors": { 2246 | "version": "1.1.1", 2247 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2248 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2249 | "dev": true, 2250 | "license": "ISC" 2251 | }, 2252 | "node_modules/picomatch": { 2253 | "version": "2.3.1", 2254 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2255 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2256 | "dev": true, 2257 | "license": "MIT", 2258 | "engines": { 2259 | "node": ">=8.6" 2260 | }, 2261 | "funding": { 2262 | "url": "https://github.com/sponsors/jonschlinkert" 2263 | } 2264 | }, 2265 | "node_modules/postgres-array": { 2266 | "version": "2.0.0", 2267 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", 2268 | "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", 2269 | "license": "MIT", 2270 | "engines": { 2271 | "node": ">=4" 2272 | } 2273 | }, 2274 | "node_modules/postgres-bytea": { 2275 | "version": "1.0.0", 2276 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", 2277 | "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", 2278 | "license": "MIT", 2279 | "engines": { 2280 | "node": ">=0.10.0" 2281 | } 2282 | }, 2283 | "node_modules/postgres-date": { 2284 | "version": "1.0.7", 2285 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", 2286 | "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", 2287 | "license": "MIT", 2288 | "engines": { 2289 | "node": ">=0.10.0" 2290 | } 2291 | }, 2292 | "node_modules/postgres-interval": { 2293 | "version": "1.2.0", 2294 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", 2295 | "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", 2296 | "license": "MIT", 2297 | "dependencies": { 2298 | "xtend": "^4.0.0" 2299 | }, 2300 | "engines": { 2301 | "node": ">=0.10.0" 2302 | } 2303 | }, 2304 | "node_modules/promisify-any": { 2305 | "version": "2.0.1", 2306 | "resolved": "https://registry.npmjs.org/promisify-any/-/promisify-any-2.0.1.tgz", 2307 | "integrity": "sha512-pVaGouFbTVxqpVJ+T5A15olNJDASAZHYq5cXz6mWdr6/X34mVWiG9MSdzHTcVBCv4aqBP7wGspi7BUSRbEmhsw==", 2308 | "dependencies": { 2309 | "bluebird": "^2.10.0", 2310 | "co-bluebird": "^1.1.0", 2311 | "is-generator": "^1.0.2" 2312 | }, 2313 | "engines": { 2314 | "node": ">=0.10.0" 2315 | } 2316 | }, 2317 | "node_modules/promisify-any/node_modules/bluebird": { 2318 | "version": "2.11.0", 2319 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", 2320 | "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==", 2321 | "license": "MIT" 2322 | }, 2323 | "node_modules/proto-list": { 2324 | "version": "1.2.4", 2325 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 2326 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", 2327 | "dev": true, 2328 | "license": "ISC" 2329 | }, 2330 | "node_modules/proxy-addr": { 2331 | "version": "2.0.7", 2332 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2333 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2334 | "license": "MIT", 2335 | "dependencies": { 2336 | "forwarded": "0.2.0", 2337 | "ipaddr.js": "1.9.1" 2338 | }, 2339 | "engines": { 2340 | "node": ">= 0.10" 2341 | } 2342 | }, 2343 | "node_modules/pstree.remy": { 2344 | "version": "1.1.8", 2345 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 2346 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 2347 | "dev": true, 2348 | "license": "MIT" 2349 | }, 2350 | "node_modules/qs": { 2351 | "version": "6.14.0", 2352 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", 2353 | "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 2354 | "license": "BSD-3-Clause", 2355 | "dependencies": { 2356 | "side-channel": "^1.1.0" 2357 | }, 2358 | "engines": { 2359 | "node": ">=0.6" 2360 | }, 2361 | "funding": { 2362 | "url": "https://github.com/sponsors/ljharb" 2363 | } 2364 | }, 2365 | "node_modules/range-parser": { 2366 | "version": "1.2.1", 2367 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2368 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 2369 | "license": "MIT", 2370 | "engines": { 2371 | "node": ">= 0.6" 2372 | } 2373 | }, 2374 | "node_modules/raw-body": { 2375 | "version": "3.0.0", 2376 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", 2377 | "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", 2378 | "license": "MIT", 2379 | "dependencies": { 2380 | "bytes": "3.1.2", 2381 | "http-errors": "2.0.0", 2382 | "iconv-lite": "0.6.3", 2383 | "unpipe": "1.0.0" 2384 | }, 2385 | "engines": { 2386 | "node": ">= 0.8" 2387 | } 2388 | }, 2389 | "node_modules/readdirp": { 2390 | "version": "3.6.0", 2391 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2392 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2393 | "dev": true, 2394 | "license": "MIT", 2395 | "dependencies": { 2396 | "picomatch": "^2.2.1" 2397 | }, 2398 | "engines": { 2399 | "node": ">=8.10.0" 2400 | } 2401 | }, 2402 | "node_modules/require-directory": { 2403 | "version": "2.1.1", 2404 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2405 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2406 | "dev": true, 2407 | "license": "MIT", 2408 | "engines": { 2409 | "node": ">=0.10.0" 2410 | } 2411 | }, 2412 | "node_modules/resolve": { 2413 | "version": "1.22.10", 2414 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 2415 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 2416 | "dev": true, 2417 | "license": "MIT", 2418 | "dependencies": { 2419 | "is-core-module": "^2.16.0", 2420 | "path-parse": "^1.0.7", 2421 | "supports-preserve-symlinks-flag": "^1.0.0" 2422 | }, 2423 | "bin": { 2424 | "resolve": "bin/resolve" 2425 | }, 2426 | "engines": { 2427 | "node": ">= 0.4" 2428 | }, 2429 | "funding": { 2430 | "url": "https://github.com/sponsors/ljharb" 2431 | } 2432 | }, 2433 | "node_modules/retry-as-promised": { 2434 | "version": "7.1.1", 2435 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.1.1.tgz", 2436 | "integrity": "sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw==", 2437 | "license": "MIT" 2438 | }, 2439 | "node_modules/router": { 2440 | "version": "2.2.0", 2441 | "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", 2442 | "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", 2443 | "license": "MIT", 2444 | "dependencies": { 2445 | "debug": "^4.4.0", 2446 | "depd": "^2.0.0", 2447 | "is-promise": "^4.0.0", 2448 | "parseurl": "^1.3.3", 2449 | "path-to-regexp": "^8.0.0" 2450 | }, 2451 | "engines": { 2452 | "node": ">= 18" 2453 | } 2454 | }, 2455 | "node_modules/safe-buffer": { 2456 | "version": "5.2.1", 2457 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2458 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2459 | "funding": [ 2460 | { 2461 | "type": "github", 2462 | "url": "https://github.com/sponsors/feross" 2463 | }, 2464 | { 2465 | "type": "patreon", 2466 | "url": "https://www.patreon.com/feross" 2467 | }, 2468 | { 2469 | "type": "consulting", 2470 | "url": "https://feross.org/support" 2471 | } 2472 | ], 2473 | "license": "MIT" 2474 | }, 2475 | "node_modules/safer-buffer": { 2476 | "version": "2.1.2", 2477 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2478 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2479 | "license": "MIT" 2480 | }, 2481 | "node_modules/semver": { 2482 | "version": "7.7.2", 2483 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", 2484 | "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", 2485 | "license": "ISC", 2486 | "bin": { 2487 | "semver": "bin/semver.js" 2488 | }, 2489 | "engines": { 2490 | "node": ">=10" 2491 | } 2492 | }, 2493 | "node_modules/send": { 2494 | "version": "1.2.0", 2495 | "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", 2496 | "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", 2497 | "license": "MIT", 2498 | "dependencies": { 2499 | "debug": "^4.3.5", 2500 | "encodeurl": "^2.0.0", 2501 | "escape-html": "^1.0.3", 2502 | "etag": "^1.8.1", 2503 | "fresh": "^2.0.0", 2504 | "http-errors": "^2.0.0", 2505 | "mime-types": "^3.0.1", 2506 | "ms": "^2.1.3", 2507 | "on-finished": "^2.4.1", 2508 | "range-parser": "^1.2.1", 2509 | "statuses": "^2.0.1" 2510 | }, 2511 | "engines": { 2512 | "node": ">= 18" 2513 | } 2514 | }, 2515 | "node_modules/sequelize": { 2516 | "version": "6.37.7", 2517 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.7.tgz", 2518 | "integrity": "sha512-mCnh83zuz7kQxxJirtFD7q6Huy6liPanI67BSlbzSYgVNl5eXVdE2CN1FuAeZwG1SNpGsNRCV+bJAVVnykZAFA==", 2519 | "funding": [ 2520 | { 2521 | "type": "opencollective", 2522 | "url": "https://opencollective.com/sequelize" 2523 | } 2524 | ], 2525 | "license": "MIT", 2526 | "dependencies": { 2527 | "@types/debug": "^4.1.8", 2528 | "@types/validator": "^13.7.17", 2529 | "debug": "^4.3.4", 2530 | "dottie": "^2.0.6", 2531 | "inflection": "^1.13.4", 2532 | "lodash": "^4.17.21", 2533 | "moment": "^2.29.4", 2534 | "moment-timezone": "^0.5.43", 2535 | "pg-connection-string": "^2.6.1", 2536 | "retry-as-promised": "^7.0.4", 2537 | "semver": "^7.5.4", 2538 | "sequelize-pool": "^7.1.0", 2539 | "toposort-class": "^1.0.1", 2540 | "uuid": "^8.3.2", 2541 | "validator": "^13.9.0", 2542 | "wkx": "^0.5.0" 2543 | }, 2544 | "engines": { 2545 | "node": ">=10.0.0" 2546 | }, 2547 | "peerDependenciesMeta": { 2548 | "ibm_db": { 2549 | "optional": true 2550 | }, 2551 | "mariadb": { 2552 | "optional": true 2553 | }, 2554 | "mysql2": { 2555 | "optional": true 2556 | }, 2557 | "oracledb": { 2558 | "optional": true 2559 | }, 2560 | "pg": { 2561 | "optional": true 2562 | }, 2563 | "pg-hstore": { 2564 | "optional": true 2565 | }, 2566 | "snowflake-sdk": { 2567 | "optional": true 2568 | }, 2569 | "sqlite3": { 2570 | "optional": true 2571 | }, 2572 | "tedious": { 2573 | "optional": true 2574 | } 2575 | } 2576 | }, 2577 | "node_modules/sequelize-cli": { 2578 | "version": "6.6.3", 2579 | "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-6.6.3.tgz", 2580 | "integrity": "sha512-1YYPrcSRt/bpMDDSKM5ubY1mnJ2TEwIaGZcqITw4hLtGtE64nIqaBnLtMvH8VKHg6FbWpXTiFNc2mS/BtQCXZw==", 2581 | "dev": true, 2582 | "license": "MIT", 2583 | "dependencies": { 2584 | "fs-extra": "^9.1.0", 2585 | "js-beautify": "1.15.4", 2586 | "lodash": "^4.17.21", 2587 | "picocolors": "^1.1.1", 2588 | "resolve": "^1.22.1", 2589 | "umzug": "^2.3.0", 2590 | "yargs": "^16.2.0" 2591 | }, 2592 | "bin": { 2593 | "sequelize": "lib/sequelize", 2594 | "sequelize-cli": "lib/sequelize" 2595 | }, 2596 | "engines": { 2597 | "node": ">=10.0.0" 2598 | } 2599 | }, 2600 | "node_modules/sequelize-pool": { 2601 | "version": "7.1.0", 2602 | "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", 2603 | "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", 2604 | "license": "MIT", 2605 | "engines": { 2606 | "node": ">= 10.0.0" 2607 | } 2608 | }, 2609 | "node_modules/serve-static": { 2610 | "version": "2.2.0", 2611 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", 2612 | "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", 2613 | "license": "MIT", 2614 | "dependencies": { 2615 | "encodeurl": "^2.0.0", 2616 | "escape-html": "^1.0.3", 2617 | "parseurl": "^1.3.3", 2618 | "send": "^1.2.0" 2619 | }, 2620 | "engines": { 2621 | "node": ">= 18" 2622 | } 2623 | }, 2624 | "node_modules/setprototypeof": { 2625 | "version": "1.2.0", 2626 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 2627 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 2628 | "license": "ISC" 2629 | }, 2630 | "node_modules/shebang-command": { 2631 | "version": "2.0.0", 2632 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2633 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2634 | "dev": true, 2635 | "license": "MIT", 2636 | "dependencies": { 2637 | "shebang-regex": "^3.0.0" 2638 | }, 2639 | "engines": { 2640 | "node": ">=8" 2641 | } 2642 | }, 2643 | "node_modules/shebang-regex": { 2644 | "version": "3.0.0", 2645 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2646 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2647 | "dev": true, 2648 | "license": "MIT", 2649 | "engines": { 2650 | "node": ">=8" 2651 | } 2652 | }, 2653 | "node_modules/side-channel": { 2654 | "version": "1.1.0", 2655 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 2656 | "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 2657 | "license": "MIT", 2658 | "dependencies": { 2659 | "es-errors": "^1.3.0", 2660 | "object-inspect": "^1.13.3", 2661 | "side-channel-list": "^1.0.0", 2662 | "side-channel-map": "^1.0.1", 2663 | "side-channel-weakmap": "^1.0.2" 2664 | }, 2665 | "engines": { 2666 | "node": ">= 0.4" 2667 | }, 2668 | "funding": { 2669 | "url": "https://github.com/sponsors/ljharb" 2670 | } 2671 | }, 2672 | "node_modules/side-channel-list": { 2673 | "version": "1.0.0", 2674 | "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 2675 | "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 2676 | "license": "MIT", 2677 | "dependencies": { 2678 | "es-errors": "^1.3.0", 2679 | "object-inspect": "^1.13.3" 2680 | }, 2681 | "engines": { 2682 | "node": ">= 0.4" 2683 | }, 2684 | "funding": { 2685 | "url": "https://github.com/sponsors/ljharb" 2686 | } 2687 | }, 2688 | "node_modules/side-channel-map": { 2689 | "version": "1.0.1", 2690 | "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 2691 | "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 2692 | "license": "MIT", 2693 | "dependencies": { 2694 | "call-bound": "^1.0.2", 2695 | "es-errors": "^1.3.0", 2696 | "get-intrinsic": "^1.2.5", 2697 | "object-inspect": "^1.13.3" 2698 | }, 2699 | "engines": { 2700 | "node": ">= 0.4" 2701 | }, 2702 | "funding": { 2703 | "url": "https://github.com/sponsors/ljharb" 2704 | } 2705 | }, 2706 | "node_modules/side-channel-weakmap": { 2707 | "version": "1.0.2", 2708 | "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 2709 | "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 2710 | "license": "MIT", 2711 | "dependencies": { 2712 | "call-bound": "^1.0.2", 2713 | "es-errors": "^1.3.0", 2714 | "get-intrinsic": "^1.2.5", 2715 | "object-inspect": "^1.13.3", 2716 | "side-channel-map": "^1.0.1" 2717 | }, 2718 | "engines": { 2719 | "node": ">= 0.4" 2720 | }, 2721 | "funding": { 2722 | "url": "https://github.com/sponsors/ljharb" 2723 | } 2724 | }, 2725 | "node_modules/signal-exit": { 2726 | "version": "4.1.0", 2727 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2728 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2729 | "dev": true, 2730 | "license": "ISC", 2731 | "engines": { 2732 | "node": ">=14" 2733 | }, 2734 | "funding": { 2735 | "url": "https://github.com/sponsors/isaacs" 2736 | } 2737 | }, 2738 | "node_modules/simple-update-notifier": { 2739 | "version": "2.0.0", 2740 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", 2741 | "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", 2742 | "dev": true, 2743 | "license": "MIT", 2744 | "dependencies": { 2745 | "semver": "^7.5.3" 2746 | }, 2747 | "engines": { 2748 | "node": ">=10" 2749 | } 2750 | }, 2751 | "node_modules/split2": { 2752 | "version": "4.2.0", 2753 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 2754 | "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 2755 | "license": "ISC", 2756 | "engines": { 2757 | "node": ">= 10.x" 2758 | } 2759 | }, 2760 | "node_modules/statuses": { 2761 | "version": "2.0.2", 2762 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", 2763 | "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", 2764 | "license": "MIT", 2765 | "engines": { 2766 | "node": ">= 0.8" 2767 | } 2768 | }, 2769 | "node_modules/string-width": { 2770 | "version": "5.1.2", 2771 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2772 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2773 | "dev": true, 2774 | "license": "MIT", 2775 | "dependencies": { 2776 | "eastasianwidth": "^0.2.0", 2777 | "emoji-regex": "^9.2.2", 2778 | "strip-ansi": "^7.0.1" 2779 | }, 2780 | "engines": { 2781 | "node": ">=12" 2782 | }, 2783 | "funding": { 2784 | "url": "https://github.com/sponsors/sindresorhus" 2785 | } 2786 | }, 2787 | "node_modules/string-width-cjs": { 2788 | "name": "string-width", 2789 | "version": "4.2.3", 2790 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2791 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2792 | "dev": true, 2793 | "license": "MIT", 2794 | "dependencies": { 2795 | "emoji-regex": "^8.0.0", 2796 | "is-fullwidth-code-point": "^3.0.0", 2797 | "strip-ansi": "^6.0.1" 2798 | }, 2799 | "engines": { 2800 | "node": ">=8" 2801 | } 2802 | }, 2803 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 2804 | "version": "5.0.1", 2805 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2806 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2807 | "dev": true, 2808 | "license": "MIT", 2809 | "engines": { 2810 | "node": ">=8" 2811 | } 2812 | }, 2813 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 2814 | "version": "8.0.0", 2815 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2816 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2817 | "dev": true, 2818 | "license": "MIT" 2819 | }, 2820 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 2821 | "version": "6.0.1", 2822 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2823 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2824 | "dev": true, 2825 | "license": "MIT", 2826 | "dependencies": { 2827 | "ansi-regex": "^5.0.1" 2828 | }, 2829 | "engines": { 2830 | "node": ">=8" 2831 | } 2832 | }, 2833 | "node_modules/strip-ansi": { 2834 | "version": "7.1.0", 2835 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2836 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2837 | "dev": true, 2838 | "license": "MIT", 2839 | "dependencies": { 2840 | "ansi-regex": "^6.0.1" 2841 | }, 2842 | "engines": { 2843 | "node": ">=12" 2844 | }, 2845 | "funding": { 2846 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2847 | } 2848 | }, 2849 | "node_modules/strip-ansi-cjs": { 2850 | "name": "strip-ansi", 2851 | "version": "6.0.1", 2852 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2853 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2854 | "dev": true, 2855 | "license": "MIT", 2856 | "dependencies": { 2857 | "ansi-regex": "^5.0.1" 2858 | }, 2859 | "engines": { 2860 | "node": ">=8" 2861 | } 2862 | }, 2863 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 2864 | "version": "5.0.1", 2865 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2866 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2867 | "dev": true, 2868 | "license": "MIT", 2869 | "engines": { 2870 | "node": ">=8" 2871 | } 2872 | }, 2873 | "node_modules/supports-color": { 2874 | "version": "5.5.0", 2875 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2876 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2877 | "dev": true, 2878 | "license": "MIT", 2879 | "dependencies": { 2880 | "has-flag": "^3.0.0" 2881 | }, 2882 | "engines": { 2883 | "node": ">=4" 2884 | } 2885 | }, 2886 | "node_modules/supports-preserve-symlinks-flag": { 2887 | "version": "1.0.0", 2888 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2889 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2890 | "dev": true, 2891 | "license": "MIT", 2892 | "engines": { 2893 | "node": ">= 0.4" 2894 | }, 2895 | "funding": { 2896 | "url": "https://github.com/sponsors/ljharb" 2897 | } 2898 | }, 2899 | "node_modules/to-regex-range": { 2900 | "version": "5.0.1", 2901 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2902 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2903 | "dev": true, 2904 | "license": "MIT", 2905 | "dependencies": { 2906 | "is-number": "^7.0.0" 2907 | }, 2908 | "engines": { 2909 | "node": ">=8.0" 2910 | } 2911 | }, 2912 | "node_modules/toidentifier": { 2913 | "version": "1.0.1", 2914 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2915 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2916 | "license": "MIT", 2917 | "engines": { 2918 | "node": ">=0.6" 2919 | } 2920 | }, 2921 | "node_modules/toposort-class": { 2922 | "version": "1.0.1", 2923 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 2924 | "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==", 2925 | "license": "MIT" 2926 | }, 2927 | "node_modules/touch": { 2928 | "version": "3.1.1", 2929 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", 2930 | "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", 2931 | "dev": true, 2932 | "license": "ISC", 2933 | "bin": { 2934 | "nodetouch": "bin/nodetouch.js" 2935 | } 2936 | }, 2937 | "node_modules/type-is": { 2938 | "version": "2.0.1", 2939 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", 2940 | "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", 2941 | "license": "MIT", 2942 | "dependencies": { 2943 | "content-type": "^1.0.5", 2944 | "media-typer": "^1.1.0", 2945 | "mime-types": "^3.0.0" 2946 | }, 2947 | "engines": { 2948 | "node": ">= 0.6" 2949 | } 2950 | }, 2951 | "node_modules/umzug": { 2952 | "version": "2.3.0", 2953 | "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", 2954 | "integrity": "sha512-Z274K+e8goZK8QJxmbRPhl89HPO1K+ORFtm6rySPhFKfKc5GHhqdzD0SGhSWHkzoXasqJuItdhorSvY7/Cgflw==", 2955 | "dev": true, 2956 | "license": "MIT", 2957 | "dependencies": { 2958 | "bluebird": "^3.7.2" 2959 | }, 2960 | "engines": { 2961 | "node": ">=6.0.0" 2962 | } 2963 | }, 2964 | "node_modules/undefsafe": { 2965 | "version": "2.0.5", 2966 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 2967 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 2968 | "dev": true, 2969 | "license": "MIT" 2970 | }, 2971 | "node_modules/underscore": { 2972 | "version": "1.13.7", 2973 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", 2974 | "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", 2975 | "license": "MIT" 2976 | }, 2977 | "node_modules/undici-types": { 2978 | "version": "7.8.0", 2979 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", 2980 | "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", 2981 | "license": "MIT" 2982 | }, 2983 | "node_modules/universalify": { 2984 | "version": "2.0.1", 2985 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 2986 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 2987 | "dev": true, 2988 | "license": "MIT", 2989 | "engines": { 2990 | "node": ">= 10.0.0" 2991 | } 2992 | }, 2993 | "node_modules/unpipe": { 2994 | "version": "1.0.0", 2995 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2996 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 2997 | "license": "MIT", 2998 | "engines": { 2999 | "node": ">= 0.8" 3000 | } 3001 | }, 3002 | "node_modules/utils-merge": { 3003 | "version": "1.0.1", 3004 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3005 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 3006 | "license": "MIT", 3007 | "engines": { 3008 | "node": ">= 0.4.0" 3009 | } 3010 | }, 3011 | "node_modules/uuid": { 3012 | "version": "8.3.2", 3013 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 3014 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 3015 | "license": "MIT", 3016 | "bin": { 3017 | "uuid": "dist/bin/uuid" 3018 | } 3019 | }, 3020 | "node_modules/validator": { 3021 | "version": "13.15.15", 3022 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", 3023 | "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", 3024 | "license": "MIT", 3025 | "engines": { 3026 | "node": ">= 0.10" 3027 | } 3028 | }, 3029 | "node_modules/vary": { 3030 | "version": "1.1.2", 3031 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3032 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3033 | "license": "MIT", 3034 | "engines": { 3035 | "node": ">= 0.8" 3036 | } 3037 | }, 3038 | "node_modules/which": { 3039 | "version": "2.0.2", 3040 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3041 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3042 | "dev": true, 3043 | "license": "ISC", 3044 | "dependencies": { 3045 | "isexe": "^2.0.0" 3046 | }, 3047 | "bin": { 3048 | "node-which": "bin/node-which" 3049 | }, 3050 | "engines": { 3051 | "node": ">= 8" 3052 | } 3053 | }, 3054 | "node_modules/wkx": { 3055 | "version": "0.5.0", 3056 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", 3057 | "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", 3058 | "license": "MIT", 3059 | "dependencies": { 3060 | "@types/node": "*" 3061 | } 3062 | }, 3063 | "node_modules/wrap-ansi": { 3064 | "version": "8.1.0", 3065 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3066 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3067 | "dev": true, 3068 | "license": "MIT", 3069 | "dependencies": { 3070 | "ansi-styles": "^6.1.0", 3071 | "string-width": "^5.0.1", 3072 | "strip-ansi": "^7.0.1" 3073 | }, 3074 | "engines": { 3075 | "node": ">=12" 3076 | }, 3077 | "funding": { 3078 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3079 | } 3080 | }, 3081 | "node_modules/wrap-ansi-cjs": { 3082 | "name": "wrap-ansi", 3083 | "version": "7.0.0", 3084 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3085 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3086 | "dev": true, 3087 | "license": "MIT", 3088 | "dependencies": { 3089 | "ansi-styles": "^4.0.0", 3090 | "string-width": "^4.1.0", 3091 | "strip-ansi": "^6.0.0" 3092 | }, 3093 | "engines": { 3094 | "node": ">=10" 3095 | }, 3096 | "funding": { 3097 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3098 | } 3099 | }, 3100 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 3101 | "version": "5.0.1", 3102 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 3103 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 3104 | "dev": true, 3105 | "license": "MIT", 3106 | "engines": { 3107 | "node": ">=8" 3108 | } 3109 | }, 3110 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 3111 | "version": "4.3.0", 3112 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3113 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3114 | "dev": true, 3115 | "license": "MIT", 3116 | "dependencies": { 3117 | "color-convert": "^2.0.1" 3118 | }, 3119 | "engines": { 3120 | "node": ">=8" 3121 | }, 3122 | "funding": { 3123 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3124 | } 3125 | }, 3126 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 3127 | "version": "8.0.0", 3128 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3129 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3130 | "dev": true, 3131 | "license": "MIT" 3132 | }, 3133 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 3134 | "version": "4.2.3", 3135 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3136 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3137 | "dev": true, 3138 | "license": "MIT", 3139 | "dependencies": { 3140 | "emoji-regex": "^8.0.0", 3141 | "is-fullwidth-code-point": "^3.0.0", 3142 | "strip-ansi": "^6.0.1" 3143 | }, 3144 | "engines": { 3145 | "node": ">=8" 3146 | } 3147 | }, 3148 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 3149 | "version": "6.0.1", 3150 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3151 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3152 | "dev": true, 3153 | "license": "MIT", 3154 | "dependencies": { 3155 | "ansi-regex": "^5.0.1" 3156 | }, 3157 | "engines": { 3158 | "node": ">=8" 3159 | } 3160 | }, 3161 | "node_modules/wrappy": { 3162 | "version": "1.0.2", 3163 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3164 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3165 | "license": "ISC" 3166 | }, 3167 | "node_modules/xtend": { 3168 | "version": "4.0.2", 3169 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 3170 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 3171 | "license": "MIT", 3172 | "engines": { 3173 | "node": ">=0.4" 3174 | } 3175 | }, 3176 | "node_modules/y18n": { 3177 | "version": "5.0.8", 3178 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3179 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3180 | "dev": true, 3181 | "license": "ISC", 3182 | "engines": { 3183 | "node": ">=10" 3184 | } 3185 | }, 3186 | "node_modules/yargs": { 3187 | "version": "16.2.0", 3188 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 3189 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 3190 | "dev": true, 3191 | "license": "MIT", 3192 | "dependencies": { 3193 | "cliui": "^7.0.2", 3194 | "escalade": "^3.1.1", 3195 | "get-caller-file": "^2.0.5", 3196 | "require-directory": "^2.1.1", 3197 | "string-width": "^4.2.0", 3198 | "y18n": "^5.0.5", 3199 | "yargs-parser": "^20.2.2" 3200 | }, 3201 | "engines": { 3202 | "node": ">=10" 3203 | } 3204 | }, 3205 | "node_modules/yargs-parser": { 3206 | "version": "20.2.9", 3207 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 3208 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 3209 | "dev": true, 3210 | "license": "ISC", 3211 | "engines": { 3212 | "node": ">=10" 3213 | } 3214 | }, 3215 | "node_modules/yargs/node_modules/ansi-regex": { 3216 | "version": "5.0.1", 3217 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 3218 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 3219 | "dev": true, 3220 | "license": "MIT", 3221 | "engines": { 3222 | "node": ">=8" 3223 | } 3224 | }, 3225 | "node_modules/yargs/node_modules/emoji-regex": { 3226 | "version": "8.0.0", 3227 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3228 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3229 | "dev": true, 3230 | "license": "MIT" 3231 | }, 3232 | "node_modules/yargs/node_modules/string-width": { 3233 | "version": "4.2.3", 3234 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3235 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3236 | "dev": true, 3237 | "license": "MIT", 3238 | "dependencies": { 3239 | "emoji-regex": "^8.0.0", 3240 | "is-fullwidth-code-point": "^3.0.0", 3241 | "strip-ansi": "^6.0.1" 3242 | }, 3243 | "engines": { 3244 | "node": ">=8" 3245 | } 3246 | }, 3247 | "node_modules/yargs/node_modules/strip-ansi": { 3248 | "version": "6.0.1", 3249 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3250 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3251 | "dev": true, 3252 | "license": "MIT", 3253 | "dependencies": { 3254 | "ansi-regex": "^5.0.1" 3255 | }, 3256 | "engines": { 3257 | "node": ">=8" 3258 | } 3259 | } 3260 | } 3261 | } 3262 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secure-node-api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "type": "module", 13 | "dependencies": { 14 | "bcrypt": "^6.0.0", 15 | "dotenv": "^17.2.0", 16 | "express": "^5.1.0", 17 | "express-oauth-server": "^2.0.0", 18 | "jsonwebtoken": "^9.0.2", 19 | "passport": "^0.7.0", 20 | "passport-jwt": "^4.0.1", 21 | "pg": "^8.16.3", 22 | "pg-hstore": "^2.3.4", 23 | "sequelize": "^6.37.7" 24 | }, 25 | "devDependencies": { 26 | "nodemon": "^3.1.10", 27 | "sequelize-cli": "^6.6.3" 28 | } 29 | } -------------------------------------------------------------------------------- /routes/auth.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import jwt from "jsonwebtoken"; 3 | import passport from "../config/passport.js"; 4 | import db from "../models/index.js"; 5 | const { User } = db; 6 | import { hashPassword, comparePassword } from "../utils/auth.js"; 7 | import dotenv from "dotenv"; 8 | dotenv.config(); 9 | 10 | const router = express.Router(); 11 | 12 | router.post("/signup", async (req, res) => { 13 | const { username, password } = req.body; 14 | const hashed = await hashPassword(password); 15 | const user = await User.create({ username, password: hashed }); 16 | res.json({ id: user.id, username: user.username }); 17 | }); 18 | 19 | router.post("/signin", async (req, res) => { 20 | const { username, password } = req.body; 21 | const user = await User.findOne({ where: { username } }); 22 | if (!user || !await comparePassword(password, user.password)) { 23 | return res.status(401).json({ message: "Invalid credentials" }); 24 | } 25 | const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { 26 | expiresIn: "1h" 27 | }); 28 | res.json({ token }); 29 | }); 30 | 31 | router.get( 32 | "/profile", 33 | passport.authenticate("jwt", { session: false }), 34 | (req, res) => { 35 | res.json({ id: req.user.id, username: req.user.username }); 36 | } 37 | ); 38 | 39 | export default router; 40 | -------------------------------------------------------------------------------- /utils/auth.js: -------------------------------------------------------------------------------- 1 | import bcrypt from "bcrypt"; 2 | const SALT_ROUNDS = 10; 3 | export const hashPassword = pw => bcrypt.hash(pw, SALT_ROUNDS); 4 | export const comparePassword = (pw, hash) => bcrypt.compare(pw, hash); 5 | --------------------------------------------------------------------------------