├── express
├── .gitignore
├── package.json
├── src
│ └── index.ts
├── tsconfig.json
└── package-lock.json
└── next
├── .eslintrc.json
├── src
├── app
│ ├── not-found.tsx
│ ├── favicon.ico
│ ├── page.tsx
│ ├── api
│ │ ├── logout
│ │ │ └── route.ts
│ │ └── login
│ │ │ └── route.ts
│ ├── layout.tsx
│ ├── dashboard
│ │ └── page.tsx
│ ├── globals.css
│ └── login
│ │ └── page.tsx
└── middleware.ts
├── next.config.js
├── postcss.config.js
├── .gitignore
├── tailwind.config.ts
├── public
├── vercel.svg
└── next.svg
├── tsconfig.json
├── package.json
└── README.md
/express/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/next/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/next/src/app/not-found.tsx:
--------------------------------------------------------------------------------
1 | export default function Custom404() {
2 | return
404 - Page Not Found
3 | }
--------------------------------------------------------------------------------
/next/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {}
3 |
4 | module.exports = nextConfig
5 |
--------------------------------------------------------------------------------
/next/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/next/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hidayahapriliansyah/handle-cookie-http-only-next-express/HEAD/next/src/app/favicon.ico
--------------------------------------------------------------------------------
/next/src/app/page.tsx:
--------------------------------------------------------------------------------
1 | import Image from 'next/image'
2 | import BearCounter from './bearCounter'
3 | import Controls from './controls'
4 |
5 | export default function Home() {
6 | return (
7 |
8 |
9 |
10 |
11 | )
12 | }
13 |
--------------------------------------------------------------------------------
/next/src/app/api/logout/route.ts:
--------------------------------------------------------------------------------
1 | import { NextRequest, NextResponse } from "next/server";
2 |
3 | export async function GET(req: NextRequest) {
4 | const responseApi = await fetch('http://localhost:3003/sign-out');
5 | const resApiJson = responseApi.json();
6 |
7 | const response = NextResponse.json(resApiJson);
8 | response.cookies.delete('accessToken');
9 | response.cookies.delete('refreshToken');
10 | return response;
11 | };
12 |
--------------------------------------------------------------------------------
/next/.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 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
--------------------------------------------------------------------------------
/next/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import './globals.css'
2 | import type { Metadata } from 'next'
3 | import { Inter } from 'next/font/google'
4 |
5 | const inter = Inter({ subsets: ['latin'] })
6 |
7 | export const metadata: Metadata = {
8 | title: 'Create Next App',
9 | description: 'Generated by create next app',
10 | }
11 |
12 | export default function RootLayout({
13 | children,
14 | }: {
15 | children: React.ReactNode
16 | }) {
17 | return (
18 |
19 | {children}
20 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/next/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss'
2 |
3 | const config: Config = {
4 | content: [
5 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
6 | './src/components/**/*.{js,ts,jsx,tsx,mdx}',
7 | './src/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 |
--------------------------------------------------------------------------------
/next/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/next/src/app/dashboard/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { useRouter } from 'next/navigation';
4 | import React from 'react'
5 |
6 | const Dashboard = () => {
7 | const router = useRouter();
8 |
9 | const handleLogout = async () => {
10 | const response = await fetch('/api/logout');
11 | const resJson = await response.json();
12 | console.log(resJson);
13 | router.push('/login');
14 | }
15 |
16 | return (
17 | <>
18 | Dashboard
19 |
20 |
21 |
22 | >
23 | )
24 | }
25 |
26 | export default Dashboard
--------------------------------------------------------------------------------
/next/src/app/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 |
--------------------------------------------------------------------------------
/next/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 | "plugins": [
17 | {
18 | "name": "next"
19 | }
20 | ],
21 | "paths": {
22 | "@/*": ["./src/*"]
23 | }
24 | },
25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26 | "exclude": ["node_modules"]
27 | }
28 |
--------------------------------------------------------------------------------
/express/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example-auth-be",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "nodemon ./src/index.ts"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "cookie-parser": "^1.4.6",
14 | "cors": "^2.8.5",
15 | "express": "^4.18.2",
16 | "jsonwebtoken": "^9.0.2"
17 | },
18 | "devDependencies": {
19 | "@types/cookie-parser": "^1.4.4",
20 | "@types/cors": "^2.8.14",
21 | "@types/express": "^4.17.18",
22 | "@types/jsonwebtoken": "^9.0.3",
23 | "@types/node": "^20.8.0",
24 | "nodemon": "^3.0.1",
25 | "ts-node": "^10.9.1",
26 | "typescript": "^5.2.2"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/next/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
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 | "jose": "^4.14.6",
13 | "jsonwebtoken": "^9.0.2",
14 | "next": "latest",
15 | "react": "latest",
16 | "react-dom": "latest"
17 | },
18 | "devDependencies": {
19 | "@types/jsonwebtoken": "^9.0.3",
20 | "@types/node": "latest",
21 | "@types/react": "latest",
22 | "@types/react-dom": "latest",
23 | "autoprefixer": "latest",
24 | "eslint": "latest",
25 | "eslint-config-next": "latest",
26 | "postcss": "latest",
27 | "tailwindcss": "latest",
28 | "typescript": "latest"
29 | }
30 | }
--------------------------------------------------------------------------------
/next/src/app/api/login/route.ts:
--------------------------------------------------------------------------------
1 | import { cookies } from "next/headers";
2 | import { NextRequest, NextResponse } from "next/server";
3 |
4 | export async function POST(req: NextRequest) {
5 | const body = await req.json();
6 |
7 | const response = await fetch('http://localhost:3003/login', {
8 | method: 'POST',
9 | headers: {
10 | 'Content-Type': 'application/json',
11 | },
12 | body: JSON.stringify({
13 | email: body.email,
14 | password: body.password,
15 | })
16 | });
17 | const resJson = await response.json();
18 |
19 | if (resJson.success === true) {
20 | cookies().set('accessToken', resJson.accessToken, {
21 | httpOnly: true,
22 | maxAge: 24 * 60 * 60,
23 | });
24 | cookies().set('refreshToken', resJson.refreshToken, {
25 | httpOnly: true,
26 | maxAge: 24 * 60 * 60,
27 | });
28 |
29 | delete resJson.accessToken;
30 | delete resJson.refreshToken;
31 | return NextResponse.json(resJson);
32 | }
33 |
34 | return NextResponse.json({
35 | success: false,
36 | message: 'Credential Error',
37 | })
38 | }
--------------------------------------------------------------------------------
/next/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/next/src/app/login/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import React from 'react';
4 | import { useState } from 'react';
5 | import { useRouter } from 'next/navigation';
6 |
7 | const LogIn = () => {
8 | const router = useRouter();
9 | const [email, setEmail] = useState('');
10 | const [password, setPassword] = useState('');
11 |
12 | const handleSubmit = async (e: React.FormEvent) => {
13 | e.preventDefault();
14 |
15 | const response = await fetch('/api/login', {
16 | method: 'POST',
17 | headers: {
18 | 'Content-Type': 'application/json',
19 | },
20 | body: JSON.stringify({ email, password }),
21 | });
22 | const resJson = await response.json();
23 | console.log(resJson);
24 | router.push('/dashboard');
25 | }
26 |
27 | return (
28 |
29 |
30 |
Log In
31 |
36 |
37 |
38 | );
39 | };
40 |
41 | export default LogIn;
--------------------------------------------------------------------------------
/next/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 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | # or
14 | bun dev
15 | ```
16 |
17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18 |
19 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20 |
21 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
22 |
23 | ## Learn More
24 |
25 | To learn more about Next.js, take a look at the following resources:
26 |
27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29 |
30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
31 |
32 | ## Deploy on Vercel
33 |
34 | 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.
35 |
36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
37 |
--------------------------------------------------------------------------------
/express/src/index.ts:
--------------------------------------------------------------------------------
1 | import express, { Request, Response } from 'express';
2 | import jwt from 'jsonwebtoken';
3 | import cors from 'cors';
4 | import cookieParser from 'cookie-parser';
5 |
6 | const app = express();
7 | app.use(cors())
8 | app.use(express.json());
9 | app.use(cookieParser());
10 |
11 | const jwtSecret = 'someJwtSecret';
12 |
13 | app.post('/login', (req: Request, res: Response) => {
14 | const email = 'test@email.com';
15 | const password = '123';
16 | const { body }: { body: { email: string, password: string } } = req;
17 |
18 | if (body.email !== email || body.password !== password) {
19 | return res.status(401).json({
20 | success: false,
21 | message: 'Credential error',
22 | });
23 | }
24 |
25 | const payload = {
26 | email,
27 | };
28 | const accessToken = jwt.sign(payload, jwtSecret, {
29 | expiresIn: 60,
30 | });
31 |
32 | res
33 | .status(200)
34 | .json({
35 | success: true,
36 | message: 'Signup success fully',
37 | accessToken: accessToken,
38 | refreshToken: 'someRefreshToken',
39 | });
40 | });
41 |
42 | app.get('/refresh-token', (req: Request, res: Response) => {
43 | const refreshToken = req.cookies['refreshToken'];
44 | if (!refreshToken) {
45 | return res.status(404).json({ message: 'gak ada refresh tokennya' });
46 | }
47 |
48 | const payload = {
49 | email: 'some user email',
50 | };
51 | const newAccessToken = jwt.sign(payload, jwtSecret, {
52 | expiresIn: 60,
53 | });
54 |
55 | res
56 | .status(200)
57 | .json({
58 | success: true,
59 | message: 'Signup success fully',
60 | accessToken: newAccessToken,
61 | });
62 | });
63 |
64 | const port = 3003;
65 | app.listen(port, () => {
66 | console.log(`Server running on http://localhost:${port}`);
67 | });
68 |
--------------------------------------------------------------------------------
/next/src/middleware.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from 'next/server';
2 | import { NextRequest } from 'next/server';
3 | import { jwtVerify } from 'jose';
4 |
5 |
6 | const jwtSecret = new TextEncoder().encode(
7 | 'someJwtSecret',
8 | );
9 |
10 | export async function middleware(request: NextRequest) {
11 | if (request.nextUrl.pathname.startsWith('/dashboard')) {
12 | const accessToken = request.cookies.get('accessToken');
13 |
14 | if (!accessToken) {
15 | const response = NextResponse.redirect(new URL('/login', request.url));
16 | response.cookies.delete('refreshToken');
17 | return response;
18 | }
19 |
20 | try {
21 | await jwtVerify(accessToken.value, jwtSecret);
22 | return NextResponse.next();
23 | } catch (error: any) {
24 | if (error.name === 'JWTExpired') {
25 | const refreshToken = request.cookies.get('refreshToken');
26 | if (!refreshToken) {
27 | const response = NextResponse.redirect(new URL('/login', request.url));
28 | response.cookies.delete('accessToken');
29 | response.cookies.delete('refreshToken');
30 | return response;
31 | }
32 | const headers = new Headers({
33 | 'Cookie': `${refreshToken.name}=${refreshToken.value}; `,
34 | })
35 | const responseAccessToken = await fetch('http://localhost:3003/refresh-token', {
36 | headers,
37 | });
38 | const resJson = await responseAccessToken.json();
39 | if (resJson.success) {
40 | const response = NextResponse.next();
41 | response.cookies.set({
42 | name: 'accessToken',
43 | value: resJson.accessToken,
44 | maxAge: 24 * 60 * 60,
45 | httpOnly: true,
46 | });
47 | return response;
48 | }
49 | return NextResponse.redirect(new URL('/login', request.url));
50 | }
51 | return NextResponse.redirect(new URL('/login', request.url));
52 | }
53 | }
54 |
55 | if (request.nextUrl.pathname.startsWith('/login')) {
56 | const accessToken = request.cookies.get('accessToken');
57 |
58 | const response = NextResponse.next();
59 | response.cookies.delete('accessToken');
60 | response.cookies.delete('refreshToken');
61 |
62 | if (accessToken) {
63 | if (await jwtVerify(accessToken.value, jwtSecret)) {
64 | return NextResponse.redirect(new URL('/dashboard', request.url));
65 | }
66 | }
67 |
68 | return response;
69 | }
70 | }
71 |
72 | export const config = {
73 | matcher: [
74 | '/dashboard/:path*',
75 | '/login/:path*',
76 | ],
77 | }
--------------------------------------------------------------------------------
/express/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig to read more about this file */
4 | /* Projects */
5 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
6 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
7 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
8 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
9 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
10 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
11 | /* Language and Environment */
12 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
13 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
14 | // "jsx": "preserve", /* Specify what JSX code is generated. */
15 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
16 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
17 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
18 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
19 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
20 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
21 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
22 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
23 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
24 | /* Modules */
25 | "module": "commonjs", /* Specify what module code is generated. */
26 | // "rootDir": "./", /* Specify the root folder within your source files. */
27 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
28 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
29 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
30 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
31 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
32 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */
33 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
34 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
35 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
36 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
37 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
38 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
39 | // "resolveJsonModule": true, /* Enable importing .json files. */
40 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
41 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
42 | /* JavaScript Support */
43 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
44 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
45 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
46 | /* Emit */
47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */
49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
51 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
52 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
53 | // "outDir": "./", /* Specify an output folder for all emitted files. */
54 | // "removeComments": true, /* Disable emitting comments. */
55 | // "noEmit": true, /* Disable emitting files from a compilation. */
56 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
57 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
63 | // "newLine": "crlf", /* Set the newline character for emitting files. */
64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
70 | /* Interop Constraints */
71 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
72 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
77 | /* Type Checking */
78 | "strict": true, /* Enable all strict type-checking options. */
79 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
80 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
81 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
82 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
83 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
84 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
85 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
86 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
87 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
88 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
89 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
90 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
91 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
92 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
93 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
94 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
95 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
96 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
97 | /* Completeness */
98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */
100 | }
101 | }
--------------------------------------------------------------------------------
/express/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example-auth-be",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "example-auth-be",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "cookie-parser": "^1.4.6",
13 | "cors": "^2.8.5",
14 | "express": "^4.18.2",
15 | "jsonwebtoken": "^9.0.2"
16 | },
17 | "devDependencies": {
18 | "@types/cookie-parser": "^1.4.4",
19 | "@types/cors": "^2.8.14",
20 | "@types/express": "^4.17.18",
21 | "@types/jsonwebtoken": "^9.0.3",
22 | "@types/node": "^20.8.0",
23 | "nodemon": "^3.0.1",
24 | "ts-node": "^10.9.1",
25 | "typescript": "^5.2.2"
26 | }
27 | },
28 | "node_modules/@cspotcode/source-map-support": {
29 | "version": "0.8.1",
30 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
31 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
32 | "dev": true,
33 | "dependencies": {
34 | "@jridgewell/trace-mapping": "0.3.9"
35 | },
36 | "engines": {
37 | "node": ">=12"
38 | }
39 | },
40 | "node_modules/@jridgewell/resolve-uri": {
41 | "version": "3.1.1",
42 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
43 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
44 | "dev": true,
45 | "engines": {
46 | "node": ">=6.0.0"
47 | }
48 | },
49 | "node_modules/@jridgewell/sourcemap-codec": {
50 | "version": "1.4.15",
51 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
52 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
53 | "dev": true
54 | },
55 | "node_modules/@jridgewell/trace-mapping": {
56 | "version": "0.3.9",
57 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
58 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
59 | "dev": true,
60 | "dependencies": {
61 | "@jridgewell/resolve-uri": "^3.0.3",
62 | "@jridgewell/sourcemap-codec": "^1.4.10"
63 | }
64 | },
65 | "node_modules/@tsconfig/node10": {
66 | "version": "1.0.9",
67 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
68 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
69 | "dev": true
70 | },
71 | "node_modules/@tsconfig/node12": {
72 | "version": "1.0.11",
73 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
74 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
75 | "dev": true
76 | },
77 | "node_modules/@tsconfig/node14": {
78 | "version": "1.0.3",
79 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
80 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
81 | "dev": true
82 | },
83 | "node_modules/@tsconfig/node16": {
84 | "version": "1.0.4",
85 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
86 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
87 | "dev": true
88 | },
89 | "node_modules/@types/body-parser": {
90 | "version": "1.19.3",
91 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz",
92 | "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==",
93 | "dev": true,
94 | "dependencies": {
95 | "@types/connect": "*",
96 | "@types/node": "*"
97 | }
98 | },
99 | "node_modules/@types/connect": {
100 | "version": "3.4.36",
101 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz",
102 | "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==",
103 | "dev": true,
104 | "dependencies": {
105 | "@types/node": "*"
106 | }
107 | },
108 | "node_modules/@types/cookie-parser": {
109 | "version": "1.4.4",
110 | "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.4.tgz",
111 | "integrity": "sha512-Var+aj5I6ZgIqsQ05N2V8q5OBrFfZXtIGWWDSrEYLIbMw758obagSwdGcLCjwh1Ga7M7+wj0SDIAaAC/WT7aaA==",
112 | "dev": true,
113 | "dependencies": {
114 | "@types/express": "*"
115 | }
116 | },
117 | "node_modules/@types/cors": {
118 | "version": "2.8.14",
119 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz",
120 | "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==",
121 | "dev": true,
122 | "dependencies": {
123 | "@types/node": "*"
124 | }
125 | },
126 | "node_modules/@types/express": {
127 | "version": "4.17.18",
128 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz",
129 | "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==",
130 | "dev": true,
131 | "dependencies": {
132 | "@types/body-parser": "*",
133 | "@types/express-serve-static-core": "^4.17.33",
134 | "@types/qs": "*",
135 | "@types/serve-static": "*"
136 | }
137 | },
138 | "node_modules/@types/express-serve-static-core": {
139 | "version": "4.17.37",
140 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz",
141 | "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==",
142 | "dev": true,
143 | "dependencies": {
144 | "@types/node": "*",
145 | "@types/qs": "*",
146 | "@types/range-parser": "*",
147 | "@types/send": "*"
148 | }
149 | },
150 | "node_modules/@types/http-errors": {
151 | "version": "2.0.2",
152 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz",
153 | "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==",
154 | "dev": true
155 | },
156 | "node_modules/@types/jsonwebtoken": {
157 | "version": "9.0.3",
158 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
159 | "integrity": "sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA==",
160 | "dev": true,
161 | "dependencies": {
162 | "@types/node": "*"
163 | }
164 | },
165 | "node_modules/@types/mime": {
166 | "version": "1.3.3",
167 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz",
168 | "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==",
169 | "dev": true
170 | },
171 | "node_modules/@types/node": {
172 | "version": "20.8.0",
173 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.0.tgz",
174 | "integrity": "sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==",
175 | "dev": true
176 | },
177 | "node_modules/@types/qs": {
178 | "version": "6.9.8",
179 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
180 | "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==",
181 | "dev": true
182 | },
183 | "node_modules/@types/range-parser": {
184 | "version": "1.2.5",
185 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz",
186 | "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==",
187 | "dev": true
188 | },
189 | "node_modules/@types/send": {
190 | "version": "0.17.2",
191 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz",
192 | "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==",
193 | "dev": true,
194 | "dependencies": {
195 | "@types/mime": "^1",
196 | "@types/node": "*"
197 | }
198 | },
199 | "node_modules/@types/serve-static": {
200 | "version": "1.15.3",
201 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz",
202 | "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==",
203 | "dev": true,
204 | "dependencies": {
205 | "@types/http-errors": "*",
206 | "@types/mime": "*",
207 | "@types/node": "*"
208 | }
209 | },
210 | "node_modules/abbrev": {
211 | "version": "1.1.1",
212 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
213 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
214 | "dev": true
215 | },
216 | "node_modules/accepts": {
217 | "version": "1.3.8",
218 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
219 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
220 | "dependencies": {
221 | "mime-types": "~2.1.34",
222 | "negotiator": "0.6.3"
223 | },
224 | "engines": {
225 | "node": ">= 0.6"
226 | }
227 | },
228 | "node_modules/acorn": {
229 | "version": "8.10.0",
230 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
231 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
232 | "dev": true,
233 | "bin": {
234 | "acorn": "bin/acorn"
235 | },
236 | "engines": {
237 | "node": ">=0.4.0"
238 | }
239 | },
240 | "node_modules/acorn-walk": {
241 | "version": "8.2.0",
242 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
243 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
244 | "dev": true,
245 | "engines": {
246 | "node": ">=0.4.0"
247 | }
248 | },
249 | "node_modules/anymatch": {
250 | "version": "3.1.3",
251 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
252 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
253 | "dev": true,
254 | "dependencies": {
255 | "normalize-path": "^3.0.0",
256 | "picomatch": "^2.0.4"
257 | },
258 | "engines": {
259 | "node": ">= 8"
260 | }
261 | },
262 | "node_modules/arg": {
263 | "version": "4.1.3",
264 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
265 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
266 | "dev": true
267 | },
268 | "node_modules/array-flatten": {
269 | "version": "1.1.1",
270 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
271 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
272 | },
273 | "node_modules/balanced-match": {
274 | "version": "1.0.2",
275 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
276 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
277 | "dev": true
278 | },
279 | "node_modules/binary-extensions": {
280 | "version": "2.2.0",
281 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
282 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
283 | "dev": true,
284 | "engines": {
285 | "node": ">=8"
286 | }
287 | },
288 | "node_modules/body-parser": {
289 | "version": "1.20.1",
290 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
291 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
292 | "dependencies": {
293 | "bytes": "3.1.2",
294 | "content-type": "~1.0.4",
295 | "debug": "2.6.9",
296 | "depd": "2.0.0",
297 | "destroy": "1.2.0",
298 | "http-errors": "2.0.0",
299 | "iconv-lite": "0.4.24",
300 | "on-finished": "2.4.1",
301 | "qs": "6.11.0",
302 | "raw-body": "2.5.1",
303 | "type-is": "~1.6.18",
304 | "unpipe": "1.0.0"
305 | },
306 | "engines": {
307 | "node": ">= 0.8",
308 | "npm": "1.2.8000 || >= 1.4.16"
309 | }
310 | },
311 | "node_modules/brace-expansion": {
312 | "version": "1.1.11",
313 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
314 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
315 | "dev": true,
316 | "dependencies": {
317 | "balanced-match": "^1.0.0",
318 | "concat-map": "0.0.1"
319 | }
320 | },
321 | "node_modules/braces": {
322 | "version": "3.0.2",
323 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
324 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
325 | "dev": true,
326 | "dependencies": {
327 | "fill-range": "^7.0.1"
328 | },
329 | "engines": {
330 | "node": ">=8"
331 | }
332 | },
333 | "node_modules/buffer-equal-constant-time": {
334 | "version": "1.0.1",
335 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
336 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
337 | },
338 | "node_modules/bytes": {
339 | "version": "3.1.2",
340 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
341 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
342 | "engines": {
343 | "node": ">= 0.8"
344 | }
345 | },
346 | "node_modules/call-bind": {
347 | "version": "1.0.2",
348 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
349 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
350 | "dependencies": {
351 | "function-bind": "^1.1.1",
352 | "get-intrinsic": "^1.0.2"
353 | },
354 | "funding": {
355 | "url": "https://github.com/sponsors/ljharb"
356 | }
357 | },
358 | "node_modules/chokidar": {
359 | "version": "3.5.3",
360 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
361 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
362 | "dev": true,
363 | "funding": [
364 | {
365 | "type": "individual",
366 | "url": "https://paulmillr.com/funding/"
367 | }
368 | ],
369 | "dependencies": {
370 | "anymatch": "~3.1.2",
371 | "braces": "~3.0.2",
372 | "glob-parent": "~5.1.2",
373 | "is-binary-path": "~2.1.0",
374 | "is-glob": "~4.0.1",
375 | "normalize-path": "~3.0.0",
376 | "readdirp": "~3.6.0"
377 | },
378 | "engines": {
379 | "node": ">= 8.10.0"
380 | },
381 | "optionalDependencies": {
382 | "fsevents": "~2.3.2"
383 | }
384 | },
385 | "node_modules/concat-map": {
386 | "version": "0.0.1",
387 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
388 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
389 | "dev": true
390 | },
391 | "node_modules/content-disposition": {
392 | "version": "0.5.4",
393 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
394 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
395 | "dependencies": {
396 | "safe-buffer": "5.2.1"
397 | },
398 | "engines": {
399 | "node": ">= 0.6"
400 | }
401 | },
402 | "node_modules/content-type": {
403 | "version": "1.0.5",
404 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
405 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
406 | "engines": {
407 | "node": ">= 0.6"
408 | }
409 | },
410 | "node_modules/cookie": {
411 | "version": "0.5.0",
412 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
413 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
414 | "engines": {
415 | "node": ">= 0.6"
416 | }
417 | },
418 | "node_modules/cookie-parser": {
419 | "version": "1.4.6",
420 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
421 | "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
422 | "dependencies": {
423 | "cookie": "0.4.1",
424 | "cookie-signature": "1.0.6"
425 | },
426 | "engines": {
427 | "node": ">= 0.8.0"
428 | }
429 | },
430 | "node_modules/cookie-parser/node_modules/cookie": {
431 | "version": "0.4.1",
432 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
433 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
434 | "engines": {
435 | "node": ">= 0.6"
436 | }
437 | },
438 | "node_modules/cookie-signature": {
439 | "version": "1.0.6",
440 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
441 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
442 | },
443 | "node_modules/cors": {
444 | "version": "2.8.5",
445 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
446 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
447 | "dependencies": {
448 | "object-assign": "^4",
449 | "vary": "^1"
450 | },
451 | "engines": {
452 | "node": ">= 0.10"
453 | }
454 | },
455 | "node_modules/create-require": {
456 | "version": "1.1.1",
457 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
458 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
459 | "dev": true
460 | },
461 | "node_modules/debug": {
462 | "version": "2.6.9",
463 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
464 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
465 | "dependencies": {
466 | "ms": "2.0.0"
467 | }
468 | },
469 | "node_modules/depd": {
470 | "version": "2.0.0",
471 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
472 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
473 | "engines": {
474 | "node": ">= 0.8"
475 | }
476 | },
477 | "node_modules/destroy": {
478 | "version": "1.2.0",
479 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
480 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
481 | "engines": {
482 | "node": ">= 0.8",
483 | "npm": "1.2.8000 || >= 1.4.16"
484 | }
485 | },
486 | "node_modules/diff": {
487 | "version": "4.0.2",
488 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
489 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
490 | "dev": true,
491 | "engines": {
492 | "node": ">=0.3.1"
493 | }
494 | },
495 | "node_modules/ecdsa-sig-formatter": {
496 | "version": "1.0.11",
497 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
498 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
499 | "dependencies": {
500 | "safe-buffer": "^5.0.1"
501 | }
502 | },
503 | "node_modules/ee-first": {
504 | "version": "1.1.1",
505 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
506 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
507 | },
508 | "node_modules/encodeurl": {
509 | "version": "1.0.2",
510 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
511 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
512 | "engines": {
513 | "node": ">= 0.8"
514 | }
515 | },
516 | "node_modules/escape-html": {
517 | "version": "1.0.3",
518 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
519 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
520 | },
521 | "node_modules/etag": {
522 | "version": "1.8.1",
523 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
524 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
525 | "engines": {
526 | "node": ">= 0.6"
527 | }
528 | },
529 | "node_modules/express": {
530 | "version": "4.18.2",
531 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
532 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
533 | "dependencies": {
534 | "accepts": "~1.3.8",
535 | "array-flatten": "1.1.1",
536 | "body-parser": "1.20.1",
537 | "content-disposition": "0.5.4",
538 | "content-type": "~1.0.4",
539 | "cookie": "0.5.0",
540 | "cookie-signature": "1.0.6",
541 | "debug": "2.6.9",
542 | "depd": "2.0.0",
543 | "encodeurl": "~1.0.2",
544 | "escape-html": "~1.0.3",
545 | "etag": "~1.8.1",
546 | "finalhandler": "1.2.0",
547 | "fresh": "0.5.2",
548 | "http-errors": "2.0.0",
549 | "merge-descriptors": "1.0.1",
550 | "methods": "~1.1.2",
551 | "on-finished": "2.4.1",
552 | "parseurl": "~1.3.3",
553 | "path-to-regexp": "0.1.7",
554 | "proxy-addr": "~2.0.7",
555 | "qs": "6.11.0",
556 | "range-parser": "~1.2.1",
557 | "safe-buffer": "5.2.1",
558 | "send": "0.18.0",
559 | "serve-static": "1.15.0",
560 | "setprototypeof": "1.2.0",
561 | "statuses": "2.0.1",
562 | "type-is": "~1.6.18",
563 | "utils-merge": "1.0.1",
564 | "vary": "~1.1.2"
565 | },
566 | "engines": {
567 | "node": ">= 0.10.0"
568 | }
569 | },
570 | "node_modules/fill-range": {
571 | "version": "7.0.1",
572 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
573 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
574 | "dev": true,
575 | "dependencies": {
576 | "to-regex-range": "^5.0.1"
577 | },
578 | "engines": {
579 | "node": ">=8"
580 | }
581 | },
582 | "node_modules/finalhandler": {
583 | "version": "1.2.0",
584 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
585 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
586 | "dependencies": {
587 | "debug": "2.6.9",
588 | "encodeurl": "~1.0.2",
589 | "escape-html": "~1.0.3",
590 | "on-finished": "2.4.1",
591 | "parseurl": "~1.3.3",
592 | "statuses": "2.0.1",
593 | "unpipe": "~1.0.0"
594 | },
595 | "engines": {
596 | "node": ">= 0.8"
597 | }
598 | },
599 | "node_modules/forwarded": {
600 | "version": "0.2.0",
601 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
602 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
603 | "engines": {
604 | "node": ">= 0.6"
605 | }
606 | },
607 | "node_modules/fresh": {
608 | "version": "0.5.2",
609 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
610 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
611 | "engines": {
612 | "node": ">= 0.6"
613 | }
614 | },
615 | "node_modules/fsevents": {
616 | "version": "2.3.3",
617 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
618 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
619 | "dev": true,
620 | "hasInstallScript": true,
621 | "optional": true,
622 | "os": [
623 | "darwin"
624 | ],
625 | "engines": {
626 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
627 | }
628 | },
629 | "node_modules/function-bind": {
630 | "version": "1.1.1",
631 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
632 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
633 | },
634 | "node_modules/get-intrinsic": {
635 | "version": "1.2.1",
636 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
637 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
638 | "dependencies": {
639 | "function-bind": "^1.1.1",
640 | "has": "^1.0.3",
641 | "has-proto": "^1.0.1",
642 | "has-symbols": "^1.0.3"
643 | },
644 | "funding": {
645 | "url": "https://github.com/sponsors/ljharb"
646 | }
647 | },
648 | "node_modules/glob-parent": {
649 | "version": "5.1.2",
650 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
651 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
652 | "dev": true,
653 | "dependencies": {
654 | "is-glob": "^4.0.1"
655 | },
656 | "engines": {
657 | "node": ">= 6"
658 | }
659 | },
660 | "node_modules/has": {
661 | "version": "1.0.3",
662 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
663 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
664 | "dependencies": {
665 | "function-bind": "^1.1.1"
666 | },
667 | "engines": {
668 | "node": ">= 0.4.0"
669 | }
670 | },
671 | "node_modules/has-flag": {
672 | "version": "3.0.0",
673 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
674 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
675 | "dev": true,
676 | "engines": {
677 | "node": ">=4"
678 | }
679 | },
680 | "node_modules/has-proto": {
681 | "version": "1.0.1",
682 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
683 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
684 | "engines": {
685 | "node": ">= 0.4"
686 | },
687 | "funding": {
688 | "url": "https://github.com/sponsors/ljharb"
689 | }
690 | },
691 | "node_modules/has-symbols": {
692 | "version": "1.0.3",
693 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
694 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
695 | "engines": {
696 | "node": ">= 0.4"
697 | },
698 | "funding": {
699 | "url": "https://github.com/sponsors/ljharb"
700 | }
701 | },
702 | "node_modules/http-errors": {
703 | "version": "2.0.0",
704 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
705 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
706 | "dependencies": {
707 | "depd": "2.0.0",
708 | "inherits": "2.0.4",
709 | "setprototypeof": "1.2.0",
710 | "statuses": "2.0.1",
711 | "toidentifier": "1.0.1"
712 | },
713 | "engines": {
714 | "node": ">= 0.8"
715 | }
716 | },
717 | "node_modules/iconv-lite": {
718 | "version": "0.4.24",
719 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
720 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
721 | "dependencies": {
722 | "safer-buffer": ">= 2.1.2 < 3"
723 | },
724 | "engines": {
725 | "node": ">=0.10.0"
726 | }
727 | },
728 | "node_modules/ignore-by-default": {
729 | "version": "1.0.1",
730 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
731 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
732 | "dev": true
733 | },
734 | "node_modules/inherits": {
735 | "version": "2.0.4",
736 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
737 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
738 | },
739 | "node_modules/ipaddr.js": {
740 | "version": "1.9.1",
741 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
742 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
743 | "engines": {
744 | "node": ">= 0.10"
745 | }
746 | },
747 | "node_modules/is-binary-path": {
748 | "version": "2.1.0",
749 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
750 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
751 | "dev": true,
752 | "dependencies": {
753 | "binary-extensions": "^2.0.0"
754 | },
755 | "engines": {
756 | "node": ">=8"
757 | }
758 | },
759 | "node_modules/is-extglob": {
760 | "version": "2.1.1",
761 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
762 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
763 | "dev": true,
764 | "engines": {
765 | "node": ">=0.10.0"
766 | }
767 | },
768 | "node_modules/is-glob": {
769 | "version": "4.0.3",
770 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
771 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
772 | "dev": true,
773 | "dependencies": {
774 | "is-extglob": "^2.1.1"
775 | },
776 | "engines": {
777 | "node": ">=0.10.0"
778 | }
779 | },
780 | "node_modules/is-number": {
781 | "version": "7.0.0",
782 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
783 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
784 | "dev": true,
785 | "engines": {
786 | "node": ">=0.12.0"
787 | }
788 | },
789 | "node_modules/jsonwebtoken": {
790 | "version": "9.0.2",
791 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
792 | "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
793 | "dependencies": {
794 | "jws": "^3.2.2",
795 | "lodash.includes": "^4.3.0",
796 | "lodash.isboolean": "^3.0.3",
797 | "lodash.isinteger": "^4.0.4",
798 | "lodash.isnumber": "^3.0.3",
799 | "lodash.isplainobject": "^4.0.6",
800 | "lodash.isstring": "^4.0.1",
801 | "lodash.once": "^4.0.0",
802 | "ms": "^2.1.1",
803 | "semver": "^7.5.4"
804 | },
805 | "engines": {
806 | "node": ">=12",
807 | "npm": ">=6"
808 | }
809 | },
810 | "node_modules/jsonwebtoken/node_modules/ms": {
811 | "version": "2.1.3",
812 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
813 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
814 | },
815 | "node_modules/jwa": {
816 | "version": "1.4.1",
817 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
818 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
819 | "dependencies": {
820 | "buffer-equal-constant-time": "1.0.1",
821 | "ecdsa-sig-formatter": "1.0.11",
822 | "safe-buffer": "^5.0.1"
823 | }
824 | },
825 | "node_modules/jws": {
826 | "version": "3.2.2",
827 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
828 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
829 | "dependencies": {
830 | "jwa": "^1.4.1",
831 | "safe-buffer": "^5.0.1"
832 | }
833 | },
834 | "node_modules/lodash.includes": {
835 | "version": "4.3.0",
836 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
837 | "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
838 | },
839 | "node_modules/lodash.isboolean": {
840 | "version": "3.0.3",
841 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
842 | "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
843 | },
844 | "node_modules/lodash.isinteger": {
845 | "version": "4.0.4",
846 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
847 | "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
848 | },
849 | "node_modules/lodash.isnumber": {
850 | "version": "3.0.3",
851 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
852 | "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
853 | },
854 | "node_modules/lodash.isplainobject": {
855 | "version": "4.0.6",
856 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
857 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
858 | },
859 | "node_modules/lodash.isstring": {
860 | "version": "4.0.1",
861 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
862 | "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
863 | },
864 | "node_modules/lodash.once": {
865 | "version": "4.1.1",
866 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
867 | "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
868 | },
869 | "node_modules/lru-cache": {
870 | "version": "6.0.0",
871 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
872 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
873 | "dependencies": {
874 | "yallist": "^4.0.0"
875 | },
876 | "engines": {
877 | "node": ">=10"
878 | }
879 | },
880 | "node_modules/make-error": {
881 | "version": "1.3.6",
882 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
883 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
884 | "dev": true
885 | },
886 | "node_modules/media-typer": {
887 | "version": "0.3.0",
888 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
889 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
890 | "engines": {
891 | "node": ">= 0.6"
892 | }
893 | },
894 | "node_modules/merge-descriptors": {
895 | "version": "1.0.1",
896 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
897 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
898 | },
899 | "node_modules/methods": {
900 | "version": "1.1.2",
901 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
902 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
903 | "engines": {
904 | "node": ">= 0.6"
905 | }
906 | },
907 | "node_modules/mime": {
908 | "version": "1.6.0",
909 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
910 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
911 | "bin": {
912 | "mime": "cli.js"
913 | },
914 | "engines": {
915 | "node": ">=4"
916 | }
917 | },
918 | "node_modules/mime-db": {
919 | "version": "1.52.0",
920 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
921 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
922 | "engines": {
923 | "node": ">= 0.6"
924 | }
925 | },
926 | "node_modules/mime-types": {
927 | "version": "2.1.35",
928 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
929 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
930 | "dependencies": {
931 | "mime-db": "1.52.0"
932 | },
933 | "engines": {
934 | "node": ">= 0.6"
935 | }
936 | },
937 | "node_modules/minimatch": {
938 | "version": "3.1.2",
939 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
940 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
941 | "dev": true,
942 | "dependencies": {
943 | "brace-expansion": "^1.1.7"
944 | },
945 | "engines": {
946 | "node": "*"
947 | }
948 | },
949 | "node_modules/ms": {
950 | "version": "2.0.0",
951 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
952 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
953 | },
954 | "node_modules/negotiator": {
955 | "version": "0.6.3",
956 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
957 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
958 | "engines": {
959 | "node": ">= 0.6"
960 | }
961 | },
962 | "node_modules/nodemon": {
963 | "version": "3.0.1",
964 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
965 | "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==",
966 | "dev": true,
967 | "dependencies": {
968 | "chokidar": "^3.5.2",
969 | "debug": "^3.2.7",
970 | "ignore-by-default": "^1.0.1",
971 | "minimatch": "^3.1.2",
972 | "pstree.remy": "^1.1.8",
973 | "semver": "^7.5.3",
974 | "simple-update-notifier": "^2.0.0",
975 | "supports-color": "^5.5.0",
976 | "touch": "^3.1.0",
977 | "undefsafe": "^2.0.5"
978 | },
979 | "bin": {
980 | "nodemon": "bin/nodemon.js"
981 | },
982 | "engines": {
983 | "node": ">=10"
984 | },
985 | "funding": {
986 | "type": "opencollective",
987 | "url": "https://opencollective.com/nodemon"
988 | }
989 | },
990 | "node_modules/nodemon/node_modules/debug": {
991 | "version": "3.2.7",
992 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
993 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
994 | "dev": true,
995 | "dependencies": {
996 | "ms": "^2.1.1"
997 | }
998 | },
999 | "node_modules/nodemon/node_modules/ms": {
1000 | "version": "2.1.3",
1001 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1002 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1003 | "dev": true
1004 | },
1005 | "node_modules/nopt": {
1006 | "version": "1.0.10",
1007 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1008 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
1009 | "dev": true,
1010 | "dependencies": {
1011 | "abbrev": "1"
1012 | },
1013 | "bin": {
1014 | "nopt": "bin/nopt.js"
1015 | },
1016 | "engines": {
1017 | "node": "*"
1018 | }
1019 | },
1020 | "node_modules/normalize-path": {
1021 | "version": "3.0.0",
1022 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1023 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1024 | "dev": true,
1025 | "engines": {
1026 | "node": ">=0.10.0"
1027 | }
1028 | },
1029 | "node_modules/object-assign": {
1030 | "version": "4.1.1",
1031 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1032 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1033 | "engines": {
1034 | "node": ">=0.10.0"
1035 | }
1036 | },
1037 | "node_modules/object-inspect": {
1038 | "version": "1.12.3",
1039 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
1040 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
1041 | "funding": {
1042 | "url": "https://github.com/sponsors/ljharb"
1043 | }
1044 | },
1045 | "node_modules/on-finished": {
1046 | "version": "2.4.1",
1047 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1048 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1049 | "dependencies": {
1050 | "ee-first": "1.1.1"
1051 | },
1052 | "engines": {
1053 | "node": ">= 0.8"
1054 | }
1055 | },
1056 | "node_modules/parseurl": {
1057 | "version": "1.3.3",
1058 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1059 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1060 | "engines": {
1061 | "node": ">= 0.8"
1062 | }
1063 | },
1064 | "node_modules/path-to-regexp": {
1065 | "version": "0.1.7",
1066 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1067 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1068 | },
1069 | "node_modules/picomatch": {
1070 | "version": "2.3.1",
1071 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1072 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1073 | "dev": true,
1074 | "engines": {
1075 | "node": ">=8.6"
1076 | },
1077 | "funding": {
1078 | "url": "https://github.com/sponsors/jonschlinkert"
1079 | }
1080 | },
1081 | "node_modules/proxy-addr": {
1082 | "version": "2.0.7",
1083 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1084 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1085 | "dependencies": {
1086 | "forwarded": "0.2.0",
1087 | "ipaddr.js": "1.9.1"
1088 | },
1089 | "engines": {
1090 | "node": ">= 0.10"
1091 | }
1092 | },
1093 | "node_modules/pstree.remy": {
1094 | "version": "1.1.8",
1095 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
1096 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
1097 | "dev": true
1098 | },
1099 | "node_modules/qs": {
1100 | "version": "6.11.0",
1101 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1102 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1103 | "dependencies": {
1104 | "side-channel": "^1.0.4"
1105 | },
1106 | "engines": {
1107 | "node": ">=0.6"
1108 | },
1109 | "funding": {
1110 | "url": "https://github.com/sponsors/ljharb"
1111 | }
1112 | },
1113 | "node_modules/range-parser": {
1114 | "version": "1.2.1",
1115 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1116 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1117 | "engines": {
1118 | "node": ">= 0.6"
1119 | }
1120 | },
1121 | "node_modules/raw-body": {
1122 | "version": "2.5.1",
1123 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1124 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1125 | "dependencies": {
1126 | "bytes": "3.1.2",
1127 | "http-errors": "2.0.0",
1128 | "iconv-lite": "0.4.24",
1129 | "unpipe": "1.0.0"
1130 | },
1131 | "engines": {
1132 | "node": ">= 0.8"
1133 | }
1134 | },
1135 | "node_modules/readdirp": {
1136 | "version": "3.6.0",
1137 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1138 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1139 | "dev": true,
1140 | "dependencies": {
1141 | "picomatch": "^2.2.1"
1142 | },
1143 | "engines": {
1144 | "node": ">=8.10.0"
1145 | }
1146 | },
1147 | "node_modules/safe-buffer": {
1148 | "version": "5.2.1",
1149 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1150 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1151 | "funding": [
1152 | {
1153 | "type": "github",
1154 | "url": "https://github.com/sponsors/feross"
1155 | },
1156 | {
1157 | "type": "patreon",
1158 | "url": "https://www.patreon.com/feross"
1159 | },
1160 | {
1161 | "type": "consulting",
1162 | "url": "https://feross.org/support"
1163 | }
1164 | ]
1165 | },
1166 | "node_modules/safer-buffer": {
1167 | "version": "2.1.2",
1168 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1169 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1170 | },
1171 | "node_modules/semver": {
1172 | "version": "7.5.4",
1173 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
1174 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
1175 | "dependencies": {
1176 | "lru-cache": "^6.0.0"
1177 | },
1178 | "bin": {
1179 | "semver": "bin/semver.js"
1180 | },
1181 | "engines": {
1182 | "node": ">=10"
1183 | }
1184 | },
1185 | "node_modules/send": {
1186 | "version": "0.18.0",
1187 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1188 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1189 | "dependencies": {
1190 | "debug": "2.6.9",
1191 | "depd": "2.0.0",
1192 | "destroy": "1.2.0",
1193 | "encodeurl": "~1.0.2",
1194 | "escape-html": "~1.0.3",
1195 | "etag": "~1.8.1",
1196 | "fresh": "0.5.2",
1197 | "http-errors": "2.0.0",
1198 | "mime": "1.6.0",
1199 | "ms": "2.1.3",
1200 | "on-finished": "2.4.1",
1201 | "range-parser": "~1.2.1",
1202 | "statuses": "2.0.1"
1203 | },
1204 | "engines": {
1205 | "node": ">= 0.8.0"
1206 | }
1207 | },
1208 | "node_modules/send/node_modules/ms": {
1209 | "version": "2.1.3",
1210 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1211 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1212 | },
1213 | "node_modules/serve-static": {
1214 | "version": "1.15.0",
1215 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1216 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1217 | "dependencies": {
1218 | "encodeurl": "~1.0.2",
1219 | "escape-html": "~1.0.3",
1220 | "parseurl": "~1.3.3",
1221 | "send": "0.18.0"
1222 | },
1223 | "engines": {
1224 | "node": ">= 0.8.0"
1225 | }
1226 | },
1227 | "node_modules/setprototypeof": {
1228 | "version": "1.2.0",
1229 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1230 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1231 | },
1232 | "node_modules/side-channel": {
1233 | "version": "1.0.4",
1234 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1235 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1236 | "dependencies": {
1237 | "call-bind": "^1.0.0",
1238 | "get-intrinsic": "^1.0.2",
1239 | "object-inspect": "^1.9.0"
1240 | },
1241 | "funding": {
1242 | "url": "https://github.com/sponsors/ljharb"
1243 | }
1244 | },
1245 | "node_modules/simple-update-notifier": {
1246 | "version": "2.0.0",
1247 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
1248 | "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
1249 | "dev": true,
1250 | "dependencies": {
1251 | "semver": "^7.5.3"
1252 | },
1253 | "engines": {
1254 | "node": ">=10"
1255 | }
1256 | },
1257 | "node_modules/statuses": {
1258 | "version": "2.0.1",
1259 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1260 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1261 | "engines": {
1262 | "node": ">= 0.8"
1263 | }
1264 | },
1265 | "node_modules/supports-color": {
1266 | "version": "5.5.0",
1267 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1268 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1269 | "dev": true,
1270 | "dependencies": {
1271 | "has-flag": "^3.0.0"
1272 | },
1273 | "engines": {
1274 | "node": ">=4"
1275 | }
1276 | },
1277 | "node_modules/to-regex-range": {
1278 | "version": "5.0.1",
1279 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1280 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1281 | "dev": true,
1282 | "dependencies": {
1283 | "is-number": "^7.0.0"
1284 | },
1285 | "engines": {
1286 | "node": ">=8.0"
1287 | }
1288 | },
1289 | "node_modules/toidentifier": {
1290 | "version": "1.0.1",
1291 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1292 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1293 | "engines": {
1294 | "node": ">=0.6"
1295 | }
1296 | },
1297 | "node_modules/touch": {
1298 | "version": "3.1.0",
1299 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
1300 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
1301 | "dev": true,
1302 | "dependencies": {
1303 | "nopt": "~1.0.10"
1304 | },
1305 | "bin": {
1306 | "nodetouch": "bin/nodetouch.js"
1307 | }
1308 | },
1309 | "node_modules/ts-node": {
1310 | "version": "10.9.1",
1311 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
1312 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
1313 | "dev": true,
1314 | "dependencies": {
1315 | "@cspotcode/source-map-support": "^0.8.0",
1316 | "@tsconfig/node10": "^1.0.7",
1317 | "@tsconfig/node12": "^1.0.7",
1318 | "@tsconfig/node14": "^1.0.0",
1319 | "@tsconfig/node16": "^1.0.2",
1320 | "acorn": "^8.4.1",
1321 | "acorn-walk": "^8.1.1",
1322 | "arg": "^4.1.0",
1323 | "create-require": "^1.1.0",
1324 | "diff": "^4.0.1",
1325 | "make-error": "^1.1.1",
1326 | "v8-compile-cache-lib": "^3.0.1",
1327 | "yn": "3.1.1"
1328 | },
1329 | "bin": {
1330 | "ts-node": "dist/bin.js",
1331 | "ts-node-cwd": "dist/bin-cwd.js",
1332 | "ts-node-esm": "dist/bin-esm.js",
1333 | "ts-node-script": "dist/bin-script.js",
1334 | "ts-node-transpile-only": "dist/bin-transpile.js",
1335 | "ts-script": "dist/bin-script-deprecated.js"
1336 | },
1337 | "peerDependencies": {
1338 | "@swc/core": ">=1.2.50",
1339 | "@swc/wasm": ">=1.2.50",
1340 | "@types/node": "*",
1341 | "typescript": ">=2.7"
1342 | },
1343 | "peerDependenciesMeta": {
1344 | "@swc/core": {
1345 | "optional": true
1346 | },
1347 | "@swc/wasm": {
1348 | "optional": true
1349 | }
1350 | }
1351 | },
1352 | "node_modules/type-is": {
1353 | "version": "1.6.18",
1354 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1355 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1356 | "dependencies": {
1357 | "media-typer": "0.3.0",
1358 | "mime-types": "~2.1.24"
1359 | },
1360 | "engines": {
1361 | "node": ">= 0.6"
1362 | }
1363 | },
1364 | "node_modules/typescript": {
1365 | "version": "5.2.2",
1366 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
1367 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
1368 | "dev": true,
1369 | "bin": {
1370 | "tsc": "bin/tsc",
1371 | "tsserver": "bin/tsserver"
1372 | },
1373 | "engines": {
1374 | "node": ">=14.17"
1375 | }
1376 | },
1377 | "node_modules/undefsafe": {
1378 | "version": "2.0.5",
1379 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
1380 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
1381 | "dev": true
1382 | },
1383 | "node_modules/unpipe": {
1384 | "version": "1.0.0",
1385 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1386 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1387 | "engines": {
1388 | "node": ">= 0.8"
1389 | }
1390 | },
1391 | "node_modules/utils-merge": {
1392 | "version": "1.0.1",
1393 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1394 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1395 | "engines": {
1396 | "node": ">= 0.4.0"
1397 | }
1398 | },
1399 | "node_modules/v8-compile-cache-lib": {
1400 | "version": "3.0.1",
1401 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
1402 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
1403 | "dev": true
1404 | },
1405 | "node_modules/vary": {
1406 | "version": "1.1.2",
1407 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1408 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1409 | "engines": {
1410 | "node": ">= 0.8"
1411 | }
1412 | },
1413 | "node_modules/yallist": {
1414 | "version": "4.0.0",
1415 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1416 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1417 | },
1418 | "node_modules/yn": {
1419 | "version": "3.1.1",
1420 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
1421 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
1422 | "dev": true,
1423 | "engines": {
1424 | "node": ">=6"
1425 | }
1426 | }
1427 | }
1428 | }
1429 |
--------------------------------------------------------------------------------