├── .gitignore
├── services
├── comments
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── package.json
│ └── index.js
├── posts
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── package.json
│ ├── index.js
│ └── package-lock.json
├── query
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── package.json
│ ├── utils
│ │ └── handleEvent.js
│ ├── index.js
│ └── package-lock.json
├── event-bus
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── package.json
│ └── index.js
└── moderation
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── package.json
│ ├── index.js
│ └── package-lock.json
├── client
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── index.html
├── Dockerfile
├── src
│ ├── setupTests.js
│ ├── App.test.js
│ ├── App.js
│ ├── index.css
│ ├── reportWebVitals.js
│ ├── index.js
│ ├── components
│ │ ├── CommentList.js
│ │ ├── CommentCreate.js
│ │ ├── PostCreate.js
│ │ └── PostList.js
│ ├── App.css
│ └── logo.svg
├── .gitignore
├── package.json
└── README.md
├── xdiagrams
├── blog-micro-services.png
└── blog-micro-all-services.png
├── infrastructure
└── k8s
│ ├── posts-srv.yaml
│ ├── query-depl.yaml
│ ├── client-depl.yaml
│ ├── posts-depl.yaml
│ ├── comments-depl.yaml
│ ├── event-bus-depl.yaml
│ ├── moderation-depl.yaml
│ └── ingress-srv.yaml
├── README.md
└── skaffold.yaml
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_module/
3 | .env
4 |
--------------------------------------------------------------------------------
/services/comments/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_modules/
--------------------------------------------------------------------------------
/services/posts/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_modules/
--------------------------------------------------------------------------------
/services/query/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_modules/
--------------------------------------------------------------------------------
/services/event-bus/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_modules/
--------------------------------------------------------------------------------
/services/moderation/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_modules/
--------------------------------------------------------------------------------
/client/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/blog-micro/main/client/public/favicon.ico
--------------------------------------------------------------------------------
/client/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/blog-micro/main/client/public/logo192.png
--------------------------------------------------------------------------------
/client/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/blog-micro/main/client/public/logo512.png
--------------------------------------------------------------------------------
/xdiagrams/blog-micro-services.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/blog-micro/main/xdiagrams/blog-micro-services.png
--------------------------------------------------------------------------------
/xdiagrams/blog-micro-all-services.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/blog-micro/main/xdiagrams/blog-micro-all-services.png
--------------------------------------------------------------------------------
/services/posts/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /app
4 | COPY package.json ./
5 | RUN npm install
6 | COPY ./ ./ /app/
7 |
8 | CMD [ "npm", "start" ]
--------------------------------------------------------------------------------
/services/query/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /app
4 | COPY package.json ./
5 | RUN npm install
6 | COPY ./ ./ /app/
7 |
8 | CMD [ "npm", "start" ]
--------------------------------------------------------------------------------
/services/comments/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /app
4 | COPY package.json ./
5 | RUN npm install
6 | COPY ./ ./ /app/
7 |
8 | CMD [ "npm", "start" ]
--------------------------------------------------------------------------------
/services/event-bus/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /app
4 | COPY package.json ./
5 | RUN npm install
6 | COPY ./ ./ /app/
7 |
8 | CMD [ "npm", "start" ]
--------------------------------------------------------------------------------
/services/moderation/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /app
4 | COPY package.json ./
5 | RUN npm install
6 | COPY ./ ./ /app/
7 |
8 | CMD [ "npm", "start" ]
--------------------------------------------------------------------------------
/client/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | # Add the following lines
4 | ENV CI=true
5 | ENV WDS_SOCKET_PORT=0
6 |
7 | WORKDIR /app
8 | COPY package.json ./
9 | RUN npm install
10 | COPY ./ ./
11 |
12 | CMD ["npm", "start"]
--------------------------------------------------------------------------------
/client/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/client/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/infrastructure/k8s/posts-srv.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: posts-srv
5 | spec:
6 | type: NodePort
7 | selector:
8 | app: posts
9 | ports:
10 | - name: posts
11 | protocol: TCP
12 | port: 4000 # Node Port
13 | targetPort: 4000 # Pod Port
--------------------------------------------------------------------------------
/client/src/App.js:
--------------------------------------------------------------------------------
1 | import PostCreate from './components/PostCreate';
2 | import PostList from './components/PostList';
3 |
4 | function App() {
5 | return (
6 |
7 |
10 |
11 |
12 |
Posts
13 |
14 |
15 | );
16 | }
17 |
18 | export default App;
19 |
--------------------------------------------------------------------------------
/client/.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 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/services/moderation/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "moderation",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js",
8 | "dev": "nodemon index.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "axios": "^1.6.0",
15 | "express": "^4.18.2",
16 | "morgan": "^1.10.0"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/client/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/client/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/services/query/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "query",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js",
8 | "dev": "nodemon index.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "axios": "^1.6.1",
15 | "cors": "^2.8.5",
16 | "express": "^4.18.2",
17 | "morgan": "^1.10.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/services/comments/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "comments",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js",
8 | "dev": "nodemon index.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "axios": "^1.6.0",
15 | "cors": "^2.8.5",
16 | "express": "^4.18.2",
17 | "morgan": "^1.10.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/services/event-bus/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "event-bus",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js",
8 | "dev": "nodemon index.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "axios": "^1.6.0",
15 | "cors": "^2.8.5",
16 | "express": "^4.18.2",
17 | "morgan": "^1.10.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/services/posts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "posts",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "nodemon index.js",
8 | "dev": "nodemon index.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "axios": "^1.6.0",
15 | "cors": "^2.8.5",
16 | "express": "^4.18.2",
17 | "morgan": "^1.10.0",
18 | "nodemon": "3.0.1"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React Blog App and MicroServices
2 |
3 | This project (v1) will be a Full Stack MERN Application created using a micro services architecture.
4 |
5 | The frontend will be a React App and other frontend libraries.
6 |
7 | The backend will be using NodeJS, Express, MongoDB?, Redis and more.
8 |
9 | Deployment will be using Docker and Kubernetes.
10 |
11 | ## Diagrams
12 |
13 | ###### Services
14 |
15 | 
16 |
17 | ###### Data Flow
18 |
19 | 
--------------------------------------------------------------------------------
/client/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 | import 'bootstrap/dist/css/bootstrap.min.css';
7 |
8 | const root = ReactDOM.createRoot(document.getElementById('root'));
9 | root.render(
10 |
11 |
12 |
13 | );
14 |
15 | // If you want to start measuring performance in your app, pass a function
16 | // to log results (for example: reportWebVitals(console.log))
17 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
18 | reportWebVitals();
19 |
--------------------------------------------------------------------------------
/client/src/components/CommentList.js:
--------------------------------------------------------------------------------
1 | function CommentList({ comments }) {
2 |
3 | // prepare comments
4 | const renderedComments = comments.map((comment) => {
5 | let content;
6 |
7 | switch (comment.status) {
8 | case "approved":
9 | content = comment.content;
10 | break;
11 | case "pending":
12 | content = "posting...";
13 | break;
14 | case "rejected":
15 | content = "Cannot post";
16 | break;
17 | default:
18 | break;
19 | }
20 |
21 | return {content};
22 | });
23 |
24 | return ;
25 | }
26 | export default CommentList;
27 |
--------------------------------------------------------------------------------
/client/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | height: 40vmin;
7 | pointer-events: none;
8 | }
9 |
10 | @media (prefers-reduced-motion: no-preference) {
11 | .App-logo {
12 | animation: App-logo-spin infinite 20s linear;
13 | }
14 | }
15 |
16 | .App-header {
17 | background-color: #282c34;
18 | min-height: 100vh;
19 | display: flex;
20 | flex-direction: column;
21 | align-items: center;
22 | justify-content: center;
23 | font-size: calc(10px + 2vmin);
24 | color: white;
25 | }
26 |
27 | .App-link {
28 | color: #61dafb;
29 | }
30 |
31 | @keyframes App-logo-spin {
32 | from {
33 | transform: rotate(0deg);
34 | }
35 | to {
36 | transform: rotate(360deg);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/infrastructure/k8s/query-depl.yaml:
--------------------------------------------------------------------------------
1 | # === Deployment
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: query-depl
6 | spec:
7 | replicas: 1
8 | selector: # list the pods this deployment should manage using the matchLabels
9 | matchLabels:
10 | app: query
11 | template: # list the configuration of the pods we want this deployment to create
12 | metadata:
13 | labels:
14 | app: query
15 | spec:
16 | containers:
17 | - name: query
18 | image: attacktitan/blogmicro-query
19 | ---
20 | # === Service Cluster IP for Event Bus Deployment
21 | apiVersion: v1
22 | kind: Service # cluster ip
23 | metadata:
24 | name: query-srv
25 | spec:
26 | selector:
27 | app: query
28 | type: ClusterIP
29 | ports:
30 | - name: query
31 | protocol: TCP
32 | port: 4002
33 | targetPort: 4002
--------------------------------------------------------------------------------
/infrastructure/k8s/client-depl.yaml:
--------------------------------------------------------------------------------
1 | # === Deployment
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: client-depl
6 | spec:
7 | replicas: 1
8 | selector: # list the pods this deployment should manage using the matchLabels
9 | matchLabels:
10 | app: client
11 | template: # list the configuration of the pods we want this deployment to create
12 | metadata:
13 | labels:
14 | app: client
15 | spec:
16 | containers:
17 | - name: client
18 | image: attacktitan/blogmicro-client
19 | ---
20 | # === Service Cluster IP for Event Bus Deployment
21 | apiVersion: v1
22 | kind: Service # cluster ip
23 | metadata:
24 | name: client-srv
25 | spec:
26 | selector:
27 | app: client
28 | type: ClusterIP
29 | ports:
30 | - name: client
31 | protocol: TCP
32 | port: 3000
33 | targetPort: 3000
--------------------------------------------------------------------------------
/infrastructure/k8s/posts-depl.yaml:
--------------------------------------------------------------------------------
1 | # === Posts Deployment
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: posts-depl
6 | spec:
7 | replicas: 1
8 | selector: # list the pods this deployment should manage using the matchLabels
9 | matchLabels:
10 | app: posts
11 | template: # list the configuration of the pods we want this deployment to create
12 | metadata:
13 | labels:
14 | app: posts
15 | spec:
16 | containers:
17 | - name: posts
18 | image: attacktitan/blogmicro-posts
19 | ---
20 | # === Service Cluster IP for Posts Deployment
21 | apiVersion: v1
22 | kind: Service # cluster ip
23 | metadata:
24 | name: posts-clusterip-srv
25 | spec:
26 | selector:
27 | app: posts
28 | type: ClusterIP
29 | ports:
30 | - name: posts
31 | protocol: TCP
32 | port: 4000
33 | targetPort: 4000
--------------------------------------------------------------------------------
/infrastructure/k8s/comments-depl.yaml:
--------------------------------------------------------------------------------
1 | # === Deployment
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: comments-depl
6 | spec:
7 | replicas: 1
8 | selector: # list the pods this deployment should manage using the matchLabels
9 | matchLabels:
10 | app: comments
11 | template: # list the configuration of the pods we want this deployment to create
12 | metadata:
13 | labels:
14 | app: comments
15 | spec:
16 | containers:
17 | - name: comments
18 | image: attacktitan/blogmicro-comments
19 | ---
20 | # === Service Cluster IP for Event Bus Deployment
21 | apiVersion: v1
22 | kind: Service # cluster ip
23 | metadata:
24 | name: comments-srv
25 | spec:
26 | selector:
27 | app: comments
28 | type: ClusterIP
29 | ports:
30 | - name: comments
31 | protocol: TCP
32 | port: 4001
33 | targetPort: 4001
--------------------------------------------------------------------------------
/infrastructure/k8s/event-bus-depl.yaml:
--------------------------------------------------------------------------------
1 | # === Deployment
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: event-bus-depl
6 | spec:
7 | replicas: 1
8 | selector: # list the pods this deployment should manage using the matchLabels
9 | matchLabels:
10 | app: event-bus
11 | template: # list the configuration of the pods we want this deployment to create
12 | metadata:
13 | labels:
14 | app: event-bus
15 | spec:
16 | containers:
17 | - name: event-bus
18 | image: attacktitan/blogmicro-event-bus
19 | ---
20 | # === Service Cluster IP for Event Bus Deployment
21 | apiVersion: v1
22 | kind: Service # cluster ip
23 | metadata:
24 | name: event-bus-srv
25 | spec:
26 | selector:
27 | app: event-bus
28 | type: ClusterIP
29 | ports:
30 | - name: event-bus
31 | protocol: TCP
32 | port: 4005
33 | targetPort: 4005
--------------------------------------------------------------------------------
/infrastructure/k8s/moderation-depl.yaml:
--------------------------------------------------------------------------------
1 | # === Deployment
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: moderation-depl
6 | spec:
7 | replicas: 1
8 | selector: # list the pods this deployment should manage using the matchLabels
9 | matchLabels:
10 | app: moderation
11 | template: # list the configuration of the pods we want this deployment to create
12 | metadata:
13 | labels:
14 | app: moderation
15 | spec:
16 | containers:
17 | - name: moderation
18 | image: attacktitan/blogmicro-moderation
19 | ---
20 | # === Service Cluster IP for Event Bus Deployment
21 | apiVersion: v1
22 | kind: Service # cluster ip
23 | metadata:
24 | name: moderation-srv
25 | spec:
26 | selector:
27 | app: moderation
28 | type: ClusterIP
29 | ports:
30 | - name: moderation
31 | protocol: TCP
32 | port: 4003
33 | targetPort: 4003
--------------------------------------------------------------------------------
/client/src/components/CommentCreate.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import axios from "axios";
3 |
4 | function CommentCreate({ postId }) {
5 | const [content, setContent] = useState("");
6 |
7 | const handleSubmit = async (e) => {
8 | e.preventDefault();
9 | await axios.post(`http://posts.com/posts/${postId}/comments`, { content });
10 | setContent("");
11 | };
12 |
13 | return (
14 |
28 | );
29 | }
30 |
31 | export default CommentCreate;
32 |
--------------------------------------------------------------------------------
/services/query/utils/handleEvent.js:
--------------------------------------------------------------------------------
1 | module.exports = function handleEvent(type, data) {
2 | //* Post Created
3 | if (type === "PostCreated") {
4 | const { id, title } = data;
5 | posts[id] = { id, title, comments: [] };
6 | }
7 |
8 | //* Comment Created
9 | if (type === "CommentCreated") {
10 | const { id, content, postId, status } = data;
11 |
12 | const post = posts[postId];
13 | post.comments.push({ id, content, status });
14 | }
15 |
16 | //* Comment Updated
17 | if (type === "CommentUpdated") {
18 | const { id, content, postId, status } = data;
19 | // get post by postId
20 | const post = posts[postId];
21 |
22 | // find comment to updates
23 | const comment = post.comments.find((comment) => comment.id === id);
24 |
25 | // update comment
26 | comment.status = status;
27 | comment.content = content;
28 | console.log(comment);
29 | }
30 | }
--------------------------------------------------------------------------------
/client/src/components/PostCreate.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import axios from "axios";
3 |
4 | function PostCreate() {
5 | const [title, setTitle] = useState("");
6 |
7 | const handleSubmit = async (e) => {
8 | e.preventDefault();
9 |
10 | try {
11 | await axios.post("http://posts.com/posts/create", {title});
12 | } catch (error) {
13 | console.log(error);
14 | }
15 | setTitle('');
16 | };
17 | return (
18 |
33 | );
34 | }
35 | export default PostCreate;
36 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.17.0",
7 | "@testing-library/react": "^13.4.0",
8 | "@testing-library/user-event": "^13.5.0",
9 | "axios": "^1.6.0",
10 | "bootstrap": "^5.3.2",
11 | "react": "^18.2.0",
12 | "react-dom": "^18.2.0",
13 | "react-scripts": "5.0.1",
14 | "web-vitals": "^2.1.4"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "test": "react-scripts test",
20 | "eject": "react-scripts eject"
21 | },
22 | "eslintConfig": {
23 | "extends": [
24 | "react-app",
25 | "react-app/jest"
26 | ]
27 | },
28 | "browserslist": {
29 | "production": [
30 | ">0.2%",
31 | "not dead",
32 | "not op_mini all"
33 | ],
34 | "development": [
35 | "last 1 chrome version",
36 | "last 1 firefox version",
37 | "last 1 safari version"
38 | ]
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/services/moderation/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const axios = require("axios");
3 | const morgan = require("morgan");
4 |
5 | const app = express();
6 | const PORT = 4003;
7 |
8 | app.use(express.json());
9 | app.use(morgan("dev"));
10 |
11 | app.post("/events", async (req, res) => {
12 | const { type, data } = req.body;
13 | console.log(req.body);
14 |
15 | if (type === "CommentCreated") {
16 | //TODO: "perform moderation"
17 | const status = data.content.includes("monolithic")
18 | ? "rejected"
19 | : "approved";
20 |
21 | try {
22 | await axios.post("http://event-bus-srv:4005/events", {
23 | type: "CommentModerated",
24 | data: {
25 | id: data.id,
26 | postId: data.postId,
27 | status: status,
28 | content: data.content,
29 | },
30 | });
31 |
32 | res.send("ok");
33 | } catch (error) {
34 | console.log(error.message);
35 | }
36 | }
37 | });
38 |
39 | app.listen(PORT, () => {
40 | console.log(`Running on port: ${PORT}`);
41 | });
42 |
--------------------------------------------------------------------------------
/client/src/components/PostList.js:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 | import axios from 'axios';
3 | import CommentCreate from "./CommentCreate";
4 | import CommentList from "./CommentList";
5 |
6 | function PostList() {
7 | const [posts, setPosts] = useState({});
8 |
9 | const fetchPosts = async () => {
10 | try {
11 | const res = await axios.get('http://posts.com/posts');
12 | // console.log(res.data);
13 | setPosts(res.data);
14 | } catch (error) {
15 | console.log(error.message);
16 | }
17 | }
18 |
19 | useEffect(() => {
20 | fetchPosts();
21 | }, []);
22 |
23 | const renderedPosts = Object.values(posts).map(post => (
24 |
29 |
30 |
{post.title}
31 |
32 |
33 |
34 |
35 | ));
36 | console.log('POSTS:', renderedPosts);
37 | return (
38 |
39 | {renderedPosts}
40 |
)
41 | }
42 | export default PostList;
--------------------------------------------------------------------------------
/services/posts/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const { randomBytes } = require("crypto");
3 | const cors = require("cors");
4 | const morgan = require("morgan");
5 | const axios = require("axios");
6 |
7 | const app = express();
8 | const PORT = 4000;
9 |
10 | app.use(express.json());
11 | app.use(cors());
12 | app.use(morgan("dev"));
13 |
14 | const posts = {};
15 |
16 | /**
17 | * @method GET
18 | * @route /posts
19 | * @description Get all posts
20 | */
21 | app.get("/posts", (req, res) => {
22 | res.status(200).send(posts);
23 | });
24 |
25 | /**
26 | * @method POST
27 | * @route /posts
28 | * @description Create a new post
29 | */
30 | app.post("/posts/create", async (req, res) => {
31 | const id = randomBytes(4).toString("hex");
32 | const { title } = req.body;
33 |
34 | // store post in memory
35 | posts[id] = {
36 | id,
37 | title,
38 | };
39 |
40 | try {
41 | // emit event to event bus
42 | await axios.post("http://event-bus-srv:4005/events", {
43 | type: "PostCreated",
44 | data: { id, title },
45 | });
46 | } catch (error) {
47 | console.log(error.message);
48 | }
49 |
50 | res.status(201).send(posts[id]);
51 | });
52 |
53 |
54 | /**
55 | * @method POST
56 | * @path /events
57 | * @description Receives events send by the event bus
58 | */
59 | app.post('/events', (req, res) => {
60 | console.log('Event Received');
61 | res.status(200).send({})
62 | });
63 |
64 | app.listen(PORT, () => {
65 | console.log('v2');
66 | console.log(`Listening on port: ${PORT}`);
67 | });
68 |
--------------------------------------------------------------------------------
/services/event-bus/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const morgan = require('morgan');
3 | const axios = require('axios');
4 |
5 | const app = express();
6 | const PORT = 4005;
7 |
8 | app.use(express.json());
9 | app.use(morgan('dev'));
10 |
11 | // data store
12 | const eventsStore = [];
13 |
14 | /**
15 | * @method GET
16 | * @route /events
17 | * @description Send all events stored in the event store
18 | */
19 | app.get('/events', (req, res) => {
20 | res.status(200).send(eventsStore);
21 | });
22 |
23 |
24 | /**
25 | * @method POST
26 | * @route /events
27 | * @emits event to services
28 | * @description Takes in events and echos event to services
29 | */
30 | app.post('/events', (req, res) => {
31 | const event = req.body;
32 | console.log("EVENT BUS Event: ", event);
33 |
34 | // add event to event store
35 | eventsStore.push(event);
36 |
37 | axios.post('http://posts-clusterip-srv:4000/events', event).catch(err => {
38 | console.log(err.message);
39 | });
40 | axios.post('http://comments-srv:4001/events', event).catch(err => {
41 | console.log(err.message);
42 | });
43 | axios.post('http://query-srv:4002/events', event).catch(err => {
44 | console.log(err.message);
45 | });
46 | axios.post('http://moderation-srv:4003/events', event).catch(err => {
47 | console.log(err.message);
48 | });
49 |
50 | res.status(200).send({status: 'OK'});
51 | });
52 |
53 | app.listen(PORT, () => {
54 | console.log(`Server listening on port: ${PORT}`);
55 | })
--------------------------------------------------------------------------------
/infrastructure/k8s/ingress-srv.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: Ingress
3 | metadata:
4 | name: ingress-srv
5 | annotations:
6 | nginx.ingress.kubernetes.io/use-regex: 'true' # allows the use of regex (for routes params)
7 | spec:
8 | ingressClassName: nginx # this replaced the annotation: kubernetes.io/ingress.class: nginx
9 | rules:
10 | - host: posts.com # rule for posts service traffic
11 | http:
12 | paths:
13 | - path: /posts/create
14 | pathType: ImplementationSpecific
15 | backend:
16 | service:
17 | name: posts-clusterip-srv # to communicate to posts cluster service
18 | port:
19 | number: 4000
20 | - path: /posts
21 | pathType: ImplementationSpecific
22 | backend:
23 | service:
24 | name: query-srv # to communicate to posts cluster service
25 | port:
26 | number: 4002
27 | - path: /posts/?(.*)/comments # wildcard to match and postId
28 | pathType: ImplementationSpecific
29 | backend:
30 | service:
31 | name: comments-srv # to communicate to posts cluster service
32 | port:
33 | number: 4001
34 | - path: /?(.*) # this route is for (React App) with a wildcard to match any routes for client side routind
35 | pathType: ImplementationSpecific
36 | backend:
37 | service:
38 | name: client-srv # to communicate to posts cluster service
39 | port:
40 | number: 3000
--------------------------------------------------------------------------------
/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/skaffold.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: skaffold/v4beta3
2 | kind: Config
3 | manifests:
4 | rawYaml:
5 | - ./infrastructure/k8s/*
6 | build:
7 | local:
8 | push: false # will not push the image to docker hub
9 | artifacts: # the objects scaffold will be watching
10 | - image: attacktitan/blogmicro-client # the client image info
11 | context: client
12 | sync: # scaffold will keep in sync any js files inside src
13 | manual:
14 | - src: "src/**/*.js"
15 | dest: .
16 | docker:
17 | dockerfile: Dockerfile
18 | - image: attacktitan/blogmicro-comments # the client image info
19 | context: ./services/comments
20 | sync: # scaffold will keep in sync any js files inside src
21 | manual:
22 | - src: "*.js"
23 | dest: .
24 | docker:
25 | dockerfile: Dockerfile
26 | - image: attacktitan/blogmicro-event-bus # the client image info
27 | context: ./services/event-bus
28 | sync: # scaffold will keep in sync any js files inside src
29 | manual:
30 | - src: "*.js"
31 | dest: .
32 | docker:
33 | dockerfile: Dockerfile
34 | - image: attacktitan/blogmicro-moderation # the client image info
35 | context: ./services/moderation
36 | sync: # scaffold will keep in sync any js files inside src
37 | manual:
38 | - src: "*.js"
39 | dest: .
40 | docker:
41 | dockerfile: Dockerfile
42 | - image: attacktitan/blogmicro-posts # the client image info
43 | context: ./services/posts
44 | sync: # scaffold will keep in sync any js files inside src
45 | manual:
46 | - src: "*.js"
47 | dest: .
48 | docker:
49 | dockerfile: Dockerfile
50 | - image: attacktitan/blogmicro-query # the client image info
51 | context: ./services/query
52 | sync: # scaffold will keep in sync any js files inside src
53 | manual:
54 | - src: "*.js"
55 | dest: .
56 | docker:
57 | dockerfile: Dockerfile
58 |
--------------------------------------------------------------------------------
/services/query/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const cors = require("cors");
3 | const morgan = require("morgan");
4 | const axios = require('axios');
5 | // const handleEvent = require("./utils/handleEvent");
6 |
7 | const app = express();
8 | const PORT = process.env.PORT || 4002;
9 |
10 | app.use(express.json());
11 | app.use(morgan("dev"));
12 | app.use(cors());
13 |
14 | const posts = {};
15 |
16 | /**
17 | * @method GET
18 | * @path /posts
19 | * @description Send all posts with the posts's comments
20 | */
21 | app.get("/posts", (req, res) => {
22 | res.status(200).send(posts);
23 | });
24 |
25 | /**
26 | * @method POST
27 | * @path /events
28 | * @description Receives data from event-bus to be added to data structure/db
29 | */
30 | app.post("/events", (req, res) => {
31 | const { type, data } = req.body;
32 | console.log("QUERY EVENT TYPE: ", type);
33 |
34 | // process events and perform data updates
35 | handleEvent(type, data);
36 |
37 | res.status(200).send({ msg: "data added successfully!" });
38 | });
39 |
40 | //* === Listener
41 | app.listen(PORT, async () => {
42 | console.log(`Listening on port: ${PORT}`);
43 |
44 | try {
45 | // makes request to event bus to get all events
46 | const res = await axios.get('http://event-bus-srv:4005/events');
47 |
48 | // process every event from event bus data store
49 | for (let event of res.data) {
50 | console.log('Processing event: ', event.type);
51 | handleEvent(event.type, event.data);
52 | }
53 | } catch (error) {
54 | console.log(error.message);
55 | }
56 |
57 | });
58 |
59 | function handleEvent(type, data) {
60 | //* Post Created
61 | if (type === "PostCreated") {
62 | const { id, title } = data;
63 | posts[id] = { id, title, comments: [] };
64 | }
65 |
66 | //* Comment Created
67 | if (type === "CommentCreated") {
68 | const { id, content, postId, status } = data;
69 |
70 | const post = posts[postId];
71 | post.comments.push({ id, content, status });
72 | }
73 |
74 | //* Comment Updated
75 | if (type === "CommentUpdated") {
76 | const { id, content, postId, status } = data;
77 | // get post by postId
78 | const post = posts[postId];
79 |
80 | // find comment to updates
81 | const comment = post.comments.find((comment) => comment.id === id);
82 |
83 | // update comment
84 | comment.status = status;
85 | comment.content = content;
86 | console.log(comment);
87 | }
88 | }
--------------------------------------------------------------------------------
/client/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/services/comments/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const { randomBytes } = require("crypto");
3 | const cors = require("cors");
4 | const morgan = require("morgan");
5 | const axios = require("axios");
6 |
7 | const app = express();
8 | const PORT = 4001;
9 |
10 | app.use(express.json());
11 | app.use(cors());
12 | app.use(morgan("dev"));
13 |
14 | const commentsByPostId = {};
15 |
16 |
17 | /**
18 | * @method GET
19 | * @route /posts/:id/comments
20 | * @description Get comments by post id
21 | */
22 | app.get("/posts/:id/comments", (req, res) => {
23 | res.status(200).send(commentsByPostId[req.params.id] || []);
24 | });
25 |
26 |
27 | /**
28 | * @method POST
29 | * @route /posts/:id/comments
30 | * @description Create comment by post id
31 | * @emits "CommentCreated" to the event bus
32 | */
33 | app.post("/posts/:id/comments", async (req, res) => {
34 | const commentId = randomBytes(4).toString("hex");
35 | const { content } = req.body;
36 |
37 | // If the commentsByPostId object does not have a key of req.params.id, then set it equal to an empty array
38 | const comments = commentsByPostId[req.params.id] || [];
39 |
40 | // Push the new comment into the comments array
41 | comments.push({ id: commentId, content, status: "pending" });
42 |
43 | // Set the comments array as the value of the key req.params.id
44 | commentsByPostId[req.params.id] = comments;
45 |
46 | try {
47 | // emit event to event bus
48 | await axios.post("http://event-bus-srv:4005/events", {
49 | type: "CommentCreated",
50 | data: {
51 | id: commentId,
52 | content,
53 | postId: req.params.id,
54 | status: "pending",
55 | },
56 | });
57 | } catch (error) {
58 | console.log(error);
59 | }
60 |
61 | res.status(201).send(comments);
62 | });
63 |
64 | /**
65 | * @method POST
66 | * @endpoint /events
67 | * @description Receives events send by the event bus
68 | */
69 | app.post("/events", async (req, res) => {
70 | console.log("Event Received: ", req.body.type);
71 |
72 | const { type, data } = req.body;
73 |
74 | if (type === "CommentModerated") {
75 | const { id, postId, content, status } = data;
76 | // get all comment by postId
77 | const comments = commentsByPostId[postId];
78 |
79 | // find the comment to update
80 | const comment = comments.find((comment) => comment.id === id);
81 |
82 | // update the comment's status
83 | comment.status = status;
84 |
85 | console.log('COMMENT MODERATED: ', comment);
86 |
87 | try {
88 | await axios.post("http://event-bus-srv:4005/events", {
89 | type: "CommentUpdated",
90 | data: {
91 | id,
92 | status,
93 | postId,
94 | content
95 | },
96 | });
97 | } catch (error) {
98 | console.log(error.message);
99 | }
100 | }
101 | res.status(200).send({});
102 | });
103 |
104 | app.listen(PORT, () => {
105 | console.log("Listening on 4001");
106 | });
107 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
13 |
14 | The page will reload when you make changes.\
15 | You may also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can't go back!**
35 |
36 | If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
39 |
40 | You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
55 |
56 | ### Making a Progressive Web App
57 |
58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
59 |
60 | ### Advanced Configuration
61 |
62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `npm run build` fails to minify
69 |
70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
71 |
--------------------------------------------------------------------------------
/services/moderation/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "moderation",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "moderation",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "axios": "^1.6.0",
13 | "express": "^4.18.2",
14 | "morgan": "^1.10.0"
15 | }
16 | },
17 | "node_modules/accepts": {
18 | "version": "1.3.8",
19 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
20 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
21 | "dependencies": {
22 | "mime-types": "~2.1.34",
23 | "negotiator": "0.6.3"
24 | },
25 | "engines": {
26 | "node": ">= 0.6"
27 | }
28 | },
29 | "node_modules/array-flatten": {
30 | "version": "1.1.1",
31 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
32 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
33 | },
34 | "node_modules/asynckit": {
35 | "version": "0.4.0",
36 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
37 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
38 | },
39 | "node_modules/axios": {
40 | "version": "1.6.0",
41 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
42 | "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
43 | "dependencies": {
44 | "follow-redirects": "^1.15.0",
45 | "form-data": "^4.0.0",
46 | "proxy-from-env": "^1.1.0"
47 | }
48 | },
49 | "node_modules/basic-auth": {
50 | "version": "2.0.1",
51 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
52 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
53 | "dependencies": {
54 | "safe-buffer": "5.1.2"
55 | },
56 | "engines": {
57 | "node": ">= 0.8"
58 | }
59 | },
60 | "node_modules/basic-auth/node_modules/safe-buffer": {
61 | "version": "5.1.2",
62 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
63 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
64 | },
65 | "node_modules/body-parser": {
66 | "version": "1.20.1",
67 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
68 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
69 | "dependencies": {
70 | "bytes": "3.1.2",
71 | "content-type": "~1.0.4",
72 | "debug": "2.6.9",
73 | "depd": "2.0.0",
74 | "destroy": "1.2.0",
75 | "http-errors": "2.0.0",
76 | "iconv-lite": "0.4.24",
77 | "on-finished": "2.4.1",
78 | "qs": "6.11.0",
79 | "raw-body": "2.5.1",
80 | "type-is": "~1.6.18",
81 | "unpipe": "1.0.0"
82 | },
83 | "engines": {
84 | "node": ">= 0.8",
85 | "npm": "1.2.8000 || >= 1.4.16"
86 | }
87 | },
88 | "node_modules/bytes": {
89 | "version": "3.1.2",
90 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
91 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
92 | "engines": {
93 | "node": ">= 0.8"
94 | }
95 | },
96 | "node_modules/call-bind": {
97 | "version": "1.0.5",
98 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
99 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
100 | "dependencies": {
101 | "function-bind": "^1.1.2",
102 | "get-intrinsic": "^1.2.1",
103 | "set-function-length": "^1.1.1"
104 | },
105 | "funding": {
106 | "url": "https://github.com/sponsors/ljharb"
107 | }
108 | },
109 | "node_modules/combined-stream": {
110 | "version": "1.0.8",
111 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
112 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
113 | "dependencies": {
114 | "delayed-stream": "~1.0.0"
115 | },
116 | "engines": {
117 | "node": ">= 0.8"
118 | }
119 | },
120 | "node_modules/content-disposition": {
121 | "version": "0.5.4",
122 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
123 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
124 | "dependencies": {
125 | "safe-buffer": "5.2.1"
126 | },
127 | "engines": {
128 | "node": ">= 0.6"
129 | }
130 | },
131 | "node_modules/content-type": {
132 | "version": "1.0.5",
133 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
134 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
135 | "engines": {
136 | "node": ">= 0.6"
137 | }
138 | },
139 | "node_modules/cookie": {
140 | "version": "0.5.0",
141 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
142 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
143 | "engines": {
144 | "node": ">= 0.6"
145 | }
146 | },
147 | "node_modules/cookie-signature": {
148 | "version": "1.0.6",
149 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
150 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
151 | },
152 | "node_modules/debug": {
153 | "version": "2.6.9",
154 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
155 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
156 | "dependencies": {
157 | "ms": "2.0.0"
158 | }
159 | },
160 | "node_modules/define-data-property": {
161 | "version": "1.1.1",
162 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
163 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
164 | "dependencies": {
165 | "get-intrinsic": "^1.2.1",
166 | "gopd": "^1.0.1",
167 | "has-property-descriptors": "^1.0.0"
168 | },
169 | "engines": {
170 | "node": ">= 0.4"
171 | }
172 | },
173 | "node_modules/delayed-stream": {
174 | "version": "1.0.0",
175 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
176 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
177 | "engines": {
178 | "node": ">=0.4.0"
179 | }
180 | },
181 | "node_modules/depd": {
182 | "version": "2.0.0",
183 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
184 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
185 | "engines": {
186 | "node": ">= 0.8"
187 | }
188 | },
189 | "node_modules/destroy": {
190 | "version": "1.2.0",
191 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
192 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
193 | "engines": {
194 | "node": ">= 0.8",
195 | "npm": "1.2.8000 || >= 1.4.16"
196 | }
197 | },
198 | "node_modules/ee-first": {
199 | "version": "1.1.1",
200 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
201 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
202 | },
203 | "node_modules/encodeurl": {
204 | "version": "1.0.2",
205 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
206 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
207 | "engines": {
208 | "node": ">= 0.8"
209 | }
210 | },
211 | "node_modules/escape-html": {
212 | "version": "1.0.3",
213 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
214 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
215 | },
216 | "node_modules/etag": {
217 | "version": "1.8.1",
218 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
219 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
220 | "engines": {
221 | "node": ">= 0.6"
222 | }
223 | },
224 | "node_modules/express": {
225 | "version": "4.18.2",
226 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
227 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
228 | "dependencies": {
229 | "accepts": "~1.3.8",
230 | "array-flatten": "1.1.1",
231 | "body-parser": "1.20.1",
232 | "content-disposition": "0.5.4",
233 | "content-type": "~1.0.4",
234 | "cookie": "0.5.0",
235 | "cookie-signature": "1.0.6",
236 | "debug": "2.6.9",
237 | "depd": "2.0.0",
238 | "encodeurl": "~1.0.2",
239 | "escape-html": "~1.0.3",
240 | "etag": "~1.8.1",
241 | "finalhandler": "1.2.0",
242 | "fresh": "0.5.2",
243 | "http-errors": "2.0.0",
244 | "merge-descriptors": "1.0.1",
245 | "methods": "~1.1.2",
246 | "on-finished": "2.4.1",
247 | "parseurl": "~1.3.3",
248 | "path-to-regexp": "0.1.7",
249 | "proxy-addr": "~2.0.7",
250 | "qs": "6.11.0",
251 | "range-parser": "~1.2.1",
252 | "safe-buffer": "5.2.1",
253 | "send": "0.18.0",
254 | "serve-static": "1.15.0",
255 | "setprototypeof": "1.2.0",
256 | "statuses": "2.0.1",
257 | "type-is": "~1.6.18",
258 | "utils-merge": "1.0.1",
259 | "vary": "~1.1.2"
260 | },
261 | "engines": {
262 | "node": ">= 0.10.0"
263 | }
264 | },
265 | "node_modules/finalhandler": {
266 | "version": "1.2.0",
267 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
268 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
269 | "dependencies": {
270 | "debug": "2.6.9",
271 | "encodeurl": "~1.0.2",
272 | "escape-html": "~1.0.3",
273 | "on-finished": "2.4.1",
274 | "parseurl": "~1.3.3",
275 | "statuses": "2.0.1",
276 | "unpipe": "~1.0.0"
277 | },
278 | "engines": {
279 | "node": ">= 0.8"
280 | }
281 | },
282 | "node_modules/follow-redirects": {
283 | "version": "1.15.3",
284 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
285 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
286 | "funding": [
287 | {
288 | "type": "individual",
289 | "url": "https://github.com/sponsors/RubenVerborgh"
290 | }
291 | ],
292 | "engines": {
293 | "node": ">=4.0"
294 | },
295 | "peerDependenciesMeta": {
296 | "debug": {
297 | "optional": true
298 | }
299 | }
300 | },
301 | "node_modules/form-data": {
302 | "version": "4.0.0",
303 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
304 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
305 | "dependencies": {
306 | "asynckit": "^0.4.0",
307 | "combined-stream": "^1.0.8",
308 | "mime-types": "^2.1.12"
309 | },
310 | "engines": {
311 | "node": ">= 6"
312 | }
313 | },
314 | "node_modules/forwarded": {
315 | "version": "0.2.0",
316 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
317 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
318 | "engines": {
319 | "node": ">= 0.6"
320 | }
321 | },
322 | "node_modules/fresh": {
323 | "version": "0.5.2",
324 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
325 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
326 | "engines": {
327 | "node": ">= 0.6"
328 | }
329 | },
330 | "node_modules/function-bind": {
331 | "version": "1.1.2",
332 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
333 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
334 | "funding": {
335 | "url": "https://github.com/sponsors/ljharb"
336 | }
337 | },
338 | "node_modules/get-intrinsic": {
339 | "version": "1.2.2",
340 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
341 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
342 | "dependencies": {
343 | "function-bind": "^1.1.2",
344 | "has-proto": "^1.0.1",
345 | "has-symbols": "^1.0.3",
346 | "hasown": "^2.0.0"
347 | },
348 | "funding": {
349 | "url": "https://github.com/sponsors/ljharb"
350 | }
351 | },
352 | "node_modules/gopd": {
353 | "version": "1.0.1",
354 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
355 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
356 | "dependencies": {
357 | "get-intrinsic": "^1.1.3"
358 | },
359 | "funding": {
360 | "url": "https://github.com/sponsors/ljharb"
361 | }
362 | },
363 | "node_modules/has-property-descriptors": {
364 | "version": "1.0.1",
365 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
366 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
367 | "dependencies": {
368 | "get-intrinsic": "^1.2.2"
369 | },
370 | "funding": {
371 | "url": "https://github.com/sponsors/ljharb"
372 | }
373 | },
374 | "node_modules/has-proto": {
375 | "version": "1.0.1",
376 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
377 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
378 | "engines": {
379 | "node": ">= 0.4"
380 | },
381 | "funding": {
382 | "url": "https://github.com/sponsors/ljharb"
383 | }
384 | },
385 | "node_modules/has-symbols": {
386 | "version": "1.0.3",
387 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
388 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
389 | "engines": {
390 | "node": ">= 0.4"
391 | },
392 | "funding": {
393 | "url": "https://github.com/sponsors/ljharb"
394 | }
395 | },
396 | "node_modules/hasown": {
397 | "version": "2.0.0",
398 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
399 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
400 | "dependencies": {
401 | "function-bind": "^1.1.2"
402 | },
403 | "engines": {
404 | "node": ">= 0.4"
405 | }
406 | },
407 | "node_modules/http-errors": {
408 | "version": "2.0.0",
409 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
410 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
411 | "dependencies": {
412 | "depd": "2.0.0",
413 | "inherits": "2.0.4",
414 | "setprototypeof": "1.2.0",
415 | "statuses": "2.0.1",
416 | "toidentifier": "1.0.1"
417 | },
418 | "engines": {
419 | "node": ">= 0.8"
420 | }
421 | },
422 | "node_modules/iconv-lite": {
423 | "version": "0.4.24",
424 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
425 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
426 | "dependencies": {
427 | "safer-buffer": ">= 2.1.2 < 3"
428 | },
429 | "engines": {
430 | "node": ">=0.10.0"
431 | }
432 | },
433 | "node_modules/inherits": {
434 | "version": "2.0.4",
435 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
436 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
437 | },
438 | "node_modules/ipaddr.js": {
439 | "version": "1.9.1",
440 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
441 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
442 | "engines": {
443 | "node": ">= 0.10"
444 | }
445 | },
446 | "node_modules/media-typer": {
447 | "version": "0.3.0",
448 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
449 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
450 | "engines": {
451 | "node": ">= 0.6"
452 | }
453 | },
454 | "node_modules/merge-descriptors": {
455 | "version": "1.0.1",
456 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
457 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
458 | },
459 | "node_modules/methods": {
460 | "version": "1.1.2",
461 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
462 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
463 | "engines": {
464 | "node": ">= 0.6"
465 | }
466 | },
467 | "node_modules/mime": {
468 | "version": "1.6.0",
469 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
470 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
471 | "bin": {
472 | "mime": "cli.js"
473 | },
474 | "engines": {
475 | "node": ">=4"
476 | }
477 | },
478 | "node_modules/mime-db": {
479 | "version": "1.52.0",
480 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
481 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
482 | "engines": {
483 | "node": ">= 0.6"
484 | }
485 | },
486 | "node_modules/mime-types": {
487 | "version": "2.1.35",
488 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
489 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
490 | "dependencies": {
491 | "mime-db": "1.52.0"
492 | },
493 | "engines": {
494 | "node": ">= 0.6"
495 | }
496 | },
497 | "node_modules/morgan": {
498 | "version": "1.10.0",
499 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
500 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
501 | "dependencies": {
502 | "basic-auth": "~2.0.1",
503 | "debug": "2.6.9",
504 | "depd": "~2.0.0",
505 | "on-finished": "~2.3.0",
506 | "on-headers": "~1.0.2"
507 | },
508 | "engines": {
509 | "node": ">= 0.8.0"
510 | }
511 | },
512 | "node_modules/morgan/node_modules/on-finished": {
513 | "version": "2.3.0",
514 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
515 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
516 | "dependencies": {
517 | "ee-first": "1.1.1"
518 | },
519 | "engines": {
520 | "node": ">= 0.8"
521 | }
522 | },
523 | "node_modules/ms": {
524 | "version": "2.0.0",
525 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
526 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
527 | },
528 | "node_modules/negotiator": {
529 | "version": "0.6.3",
530 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
531 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
532 | "engines": {
533 | "node": ">= 0.6"
534 | }
535 | },
536 | "node_modules/object-inspect": {
537 | "version": "1.13.1",
538 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
539 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
540 | "funding": {
541 | "url": "https://github.com/sponsors/ljharb"
542 | }
543 | },
544 | "node_modules/on-finished": {
545 | "version": "2.4.1",
546 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
547 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
548 | "dependencies": {
549 | "ee-first": "1.1.1"
550 | },
551 | "engines": {
552 | "node": ">= 0.8"
553 | }
554 | },
555 | "node_modules/on-headers": {
556 | "version": "1.0.2",
557 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
558 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
559 | "engines": {
560 | "node": ">= 0.8"
561 | }
562 | },
563 | "node_modules/parseurl": {
564 | "version": "1.3.3",
565 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
566 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
567 | "engines": {
568 | "node": ">= 0.8"
569 | }
570 | },
571 | "node_modules/path-to-regexp": {
572 | "version": "0.1.7",
573 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
574 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
575 | },
576 | "node_modules/proxy-addr": {
577 | "version": "2.0.7",
578 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
579 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
580 | "dependencies": {
581 | "forwarded": "0.2.0",
582 | "ipaddr.js": "1.9.1"
583 | },
584 | "engines": {
585 | "node": ">= 0.10"
586 | }
587 | },
588 | "node_modules/proxy-from-env": {
589 | "version": "1.1.0",
590 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
591 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
592 | },
593 | "node_modules/qs": {
594 | "version": "6.11.0",
595 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
596 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
597 | "dependencies": {
598 | "side-channel": "^1.0.4"
599 | },
600 | "engines": {
601 | "node": ">=0.6"
602 | },
603 | "funding": {
604 | "url": "https://github.com/sponsors/ljharb"
605 | }
606 | },
607 | "node_modules/range-parser": {
608 | "version": "1.2.1",
609 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
610 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
611 | "engines": {
612 | "node": ">= 0.6"
613 | }
614 | },
615 | "node_modules/raw-body": {
616 | "version": "2.5.1",
617 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
618 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
619 | "dependencies": {
620 | "bytes": "3.1.2",
621 | "http-errors": "2.0.0",
622 | "iconv-lite": "0.4.24",
623 | "unpipe": "1.0.0"
624 | },
625 | "engines": {
626 | "node": ">= 0.8"
627 | }
628 | },
629 | "node_modules/safe-buffer": {
630 | "version": "5.2.1",
631 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
632 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
633 | "funding": [
634 | {
635 | "type": "github",
636 | "url": "https://github.com/sponsors/feross"
637 | },
638 | {
639 | "type": "patreon",
640 | "url": "https://www.patreon.com/feross"
641 | },
642 | {
643 | "type": "consulting",
644 | "url": "https://feross.org/support"
645 | }
646 | ]
647 | },
648 | "node_modules/safer-buffer": {
649 | "version": "2.1.2",
650 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
651 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
652 | },
653 | "node_modules/send": {
654 | "version": "0.18.0",
655 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
656 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
657 | "dependencies": {
658 | "debug": "2.6.9",
659 | "depd": "2.0.0",
660 | "destroy": "1.2.0",
661 | "encodeurl": "~1.0.2",
662 | "escape-html": "~1.0.3",
663 | "etag": "~1.8.1",
664 | "fresh": "0.5.2",
665 | "http-errors": "2.0.0",
666 | "mime": "1.6.0",
667 | "ms": "2.1.3",
668 | "on-finished": "2.4.1",
669 | "range-parser": "~1.2.1",
670 | "statuses": "2.0.1"
671 | },
672 | "engines": {
673 | "node": ">= 0.8.0"
674 | }
675 | },
676 | "node_modules/send/node_modules/ms": {
677 | "version": "2.1.3",
678 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
679 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
680 | },
681 | "node_modules/serve-static": {
682 | "version": "1.15.0",
683 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
684 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
685 | "dependencies": {
686 | "encodeurl": "~1.0.2",
687 | "escape-html": "~1.0.3",
688 | "parseurl": "~1.3.3",
689 | "send": "0.18.0"
690 | },
691 | "engines": {
692 | "node": ">= 0.8.0"
693 | }
694 | },
695 | "node_modules/set-function-length": {
696 | "version": "1.1.1",
697 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
698 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
699 | "dependencies": {
700 | "define-data-property": "^1.1.1",
701 | "get-intrinsic": "^1.2.1",
702 | "gopd": "^1.0.1",
703 | "has-property-descriptors": "^1.0.0"
704 | },
705 | "engines": {
706 | "node": ">= 0.4"
707 | }
708 | },
709 | "node_modules/setprototypeof": {
710 | "version": "1.2.0",
711 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
712 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
713 | },
714 | "node_modules/side-channel": {
715 | "version": "1.0.4",
716 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
717 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
718 | "dependencies": {
719 | "call-bind": "^1.0.0",
720 | "get-intrinsic": "^1.0.2",
721 | "object-inspect": "^1.9.0"
722 | },
723 | "funding": {
724 | "url": "https://github.com/sponsors/ljharb"
725 | }
726 | },
727 | "node_modules/statuses": {
728 | "version": "2.0.1",
729 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
730 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
731 | "engines": {
732 | "node": ">= 0.8"
733 | }
734 | },
735 | "node_modules/toidentifier": {
736 | "version": "1.0.1",
737 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
738 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
739 | "engines": {
740 | "node": ">=0.6"
741 | }
742 | },
743 | "node_modules/type-is": {
744 | "version": "1.6.18",
745 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
746 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
747 | "dependencies": {
748 | "media-typer": "0.3.0",
749 | "mime-types": "~2.1.24"
750 | },
751 | "engines": {
752 | "node": ">= 0.6"
753 | }
754 | },
755 | "node_modules/unpipe": {
756 | "version": "1.0.0",
757 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
758 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
759 | "engines": {
760 | "node": ">= 0.8"
761 | }
762 | },
763 | "node_modules/utils-merge": {
764 | "version": "1.0.1",
765 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
766 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
767 | "engines": {
768 | "node": ">= 0.4.0"
769 | }
770 | },
771 | "node_modules/vary": {
772 | "version": "1.1.2",
773 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
774 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
775 | "engines": {
776 | "node": ">= 0.8"
777 | }
778 | }
779 | },
780 | "dependencies": {
781 | "accepts": {
782 | "version": "1.3.8",
783 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
784 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
785 | "requires": {
786 | "mime-types": "~2.1.34",
787 | "negotiator": "0.6.3"
788 | }
789 | },
790 | "array-flatten": {
791 | "version": "1.1.1",
792 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
793 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
794 | },
795 | "asynckit": {
796 | "version": "0.4.0",
797 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
798 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
799 | },
800 | "axios": {
801 | "version": "1.6.0",
802 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
803 | "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
804 | "requires": {
805 | "follow-redirects": "^1.15.0",
806 | "form-data": "^4.0.0",
807 | "proxy-from-env": "^1.1.0"
808 | }
809 | },
810 | "basic-auth": {
811 | "version": "2.0.1",
812 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
813 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
814 | "requires": {
815 | "safe-buffer": "5.1.2"
816 | },
817 | "dependencies": {
818 | "safe-buffer": {
819 | "version": "5.1.2",
820 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
821 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
822 | }
823 | }
824 | },
825 | "body-parser": {
826 | "version": "1.20.1",
827 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
828 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
829 | "requires": {
830 | "bytes": "3.1.2",
831 | "content-type": "~1.0.4",
832 | "debug": "2.6.9",
833 | "depd": "2.0.0",
834 | "destroy": "1.2.0",
835 | "http-errors": "2.0.0",
836 | "iconv-lite": "0.4.24",
837 | "on-finished": "2.4.1",
838 | "qs": "6.11.0",
839 | "raw-body": "2.5.1",
840 | "type-is": "~1.6.18",
841 | "unpipe": "1.0.0"
842 | }
843 | },
844 | "bytes": {
845 | "version": "3.1.2",
846 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
847 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
848 | },
849 | "call-bind": {
850 | "version": "1.0.5",
851 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
852 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
853 | "requires": {
854 | "function-bind": "^1.1.2",
855 | "get-intrinsic": "^1.2.1",
856 | "set-function-length": "^1.1.1"
857 | }
858 | },
859 | "combined-stream": {
860 | "version": "1.0.8",
861 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
862 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
863 | "requires": {
864 | "delayed-stream": "~1.0.0"
865 | }
866 | },
867 | "content-disposition": {
868 | "version": "0.5.4",
869 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
870 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
871 | "requires": {
872 | "safe-buffer": "5.2.1"
873 | }
874 | },
875 | "content-type": {
876 | "version": "1.0.5",
877 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
878 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
879 | },
880 | "cookie": {
881 | "version": "0.5.0",
882 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
883 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
884 | },
885 | "cookie-signature": {
886 | "version": "1.0.6",
887 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
888 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
889 | },
890 | "debug": {
891 | "version": "2.6.9",
892 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
893 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
894 | "requires": {
895 | "ms": "2.0.0"
896 | }
897 | },
898 | "define-data-property": {
899 | "version": "1.1.1",
900 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
901 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
902 | "requires": {
903 | "get-intrinsic": "^1.2.1",
904 | "gopd": "^1.0.1",
905 | "has-property-descriptors": "^1.0.0"
906 | }
907 | },
908 | "delayed-stream": {
909 | "version": "1.0.0",
910 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
911 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
912 | },
913 | "depd": {
914 | "version": "2.0.0",
915 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
916 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
917 | },
918 | "destroy": {
919 | "version": "1.2.0",
920 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
921 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
922 | },
923 | "ee-first": {
924 | "version": "1.1.1",
925 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
926 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
927 | },
928 | "encodeurl": {
929 | "version": "1.0.2",
930 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
931 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
932 | },
933 | "escape-html": {
934 | "version": "1.0.3",
935 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
936 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
937 | },
938 | "etag": {
939 | "version": "1.8.1",
940 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
941 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
942 | },
943 | "express": {
944 | "version": "4.18.2",
945 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
946 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
947 | "requires": {
948 | "accepts": "~1.3.8",
949 | "array-flatten": "1.1.1",
950 | "body-parser": "1.20.1",
951 | "content-disposition": "0.5.4",
952 | "content-type": "~1.0.4",
953 | "cookie": "0.5.0",
954 | "cookie-signature": "1.0.6",
955 | "debug": "2.6.9",
956 | "depd": "2.0.0",
957 | "encodeurl": "~1.0.2",
958 | "escape-html": "~1.0.3",
959 | "etag": "~1.8.1",
960 | "finalhandler": "1.2.0",
961 | "fresh": "0.5.2",
962 | "http-errors": "2.0.0",
963 | "merge-descriptors": "1.0.1",
964 | "methods": "~1.1.2",
965 | "on-finished": "2.4.1",
966 | "parseurl": "~1.3.3",
967 | "path-to-regexp": "0.1.7",
968 | "proxy-addr": "~2.0.7",
969 | "qs": "6.11.0",
970 | "range-parser": "~1.2.1",
971 | "safe-buffer": "5.2.1",
972 | "send": "0.18.0",
973 | "serve-static": "1.15.0",
974 | "setprototypeof": "1.2.0",
975 | "statuses": "2.0.1",
976 | "type-is": "~1.6.18",
977 | "utils-merge": "1.0.1",
978 | "vary": "~1.1.2"
979 | }
980 | },
981 | "finalhandler": {
982 | "version": "1.2.0",
983 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
984 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
985 | "requires": {
986 | "debug": "2.6.9",
987 | "encodeurl": "~1.0.2",
988 | "escape-html": "~1.0.3",
989 | "on-finished": "2.4.1",
990 | "parseurl": "~1.3.3",
991 | "statuses": "2.0.1",
992 | "unpipe": "~1.0.0"
993 | }
994 | },
995 | "follow-redirects": {
996 | "version": "1.15.3",
997 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
998 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
999 | },
1000 | "form-data": {
1001 | "version": "4.0.0",
1002 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
1003 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
1004 | "requires": {
1005 | "asynckit": "^0.4.0",
1006 | "combined-stream": "^1.0.8",
1007 | "mime-types": "^2.1.12"
1008 | }
1009 | },
1010 | "forwarded": {
1011 | "version": "0.2.0",
1012 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1013 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1014 | },
1015 | "fresh": {
1016 | "version": "0.5.2",
1017 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1018 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
1019 | },
1020 | "function-bind": {
1021 | "version": "1.1.2",
1022 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1023 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
1024 | },
1025 | "get-intrinsic": {
1026 | "version": "1.2.2",
1027 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
1028 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
1029 | "requires": {
1030 | "function-bind": "^1.1.2",
1031 | "has-proto": "^1.0.1",
1032 | "has-symbols": "^1.0.3",
1033 | "hasown": "^2.0.0"
1034 | }
1035 | },
1036 | "gopd": {
1037 | "version": "1.0.1",
1038 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1039 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1040 | "requires": {
1041 | "get-intrinsic": "^1.1.3"
1042 | }
1043 | },
1044 | "has-property-descriptors": {
1045 | "version": "1.0.1",
1046 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
1047 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
1048 | "requires": {
1049 | "get-intrinsic": "^1.2.2"
1050 | }
1051 | },
1052 | "has-proto": {
1053 | "version": "1.0.1",
1054 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
1055 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
1056 | },
1057 | "has-symbols": {
1058 | "version": "1.0.3",
1059 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1060 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
1061 | },
1062 | "hasown": {
1063 | "version": "2.0.0",
1064 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
1065 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
1066 | "requires": {
1067 | "function-bind": "^1.1.2"
1068 | }
1069 | },
1070 | "http-errors": {
1071 | "version": "2.0.0",
1072 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1073 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1074 | "requires": {
1075 | "depd": "2.0.0",
1076 | "inherits": "2.0.4",
1077 | "setprototypeof": "1.2.0",
1078 | "statuses": "2.0.1",
1079 | "toidentifier": "1.0.1"
1080 | }
1081 | },
1082 | "iconv-lite": {
1083 | "version": "0.4.24",
1084 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1085 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1086 | "requires": {
1087 | "safer-buffer": ">= 2.1.2 < 3"
1088 | }
1089 | },
1090 | "inherits": {
1091 | "version": "2.0.4",
1092 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1093 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1094 | },
1095 | "ipaddr.js": {
1096 | "version": "1.9.1",
1097 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1098 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1099 | },
1100 | "media-typer": {
1101 | "version": "0.3.0",
1102 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1103 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
1104 | },
1105 | "merge-descriptors": {
1106 | "version": "1.0.1",
1107 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1108 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1109 | },
1110 | "methods": {
1111 | "version": "1.1.2",
1112 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1113 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
1114 | },
1115 | "mime": {
1116 | "version": "1.6.0",
1117 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1118 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1119 | },
1120 | "mime-db": {
1121 | "version": "1.52.0",
1122 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1123 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1124 | },
1125 | "mime-types": {
1126 | "version": "2.1.35",
1127 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1128 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1129 | "requires": {
1130 | "mime-db": "1.52.0"
1131 | }
1132 | },
1133 | "morgan": {
1134 | "version": "1.10.0",
1135 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
1136 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
1137 | "requires": {
1138 | "basic-auth": "~2.0.1",
1139 | "debug": "2.6.9",
1140 | "depd": "~2.0.0",
1141 | "on-finished": "~2.3.0",
1142 | "on-headers": "~1.0.2"
1143 | },
1144 | "dependencies": {
1145 | "on-finished": {
1146 | "version": "2.3.0",
1147 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1148 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
1149 | "requires": {
1150 | "ee-first": "1.1.1"
1151 | }
1152 | }
1153 | }
1154 | },
1155 | "ms": {
1156 | "version": "2.0.0",
1157 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1158 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1159 | },
1160 | "negotiator": {
1161 | "version": "0.6.3",
1162 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1163 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1164 | },
1165 | "object-inspect": {
1166 | "version": "1.13.1",
1167 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1168 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
1169 | },
1170 | "on-finished": {
1171 | "version": "2.4.1",
1172 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1173 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1174 | "requires": {
1175 | "ee-first": "1.1.1"
1176 | }
1177 | },
1178 | "on-headers": {
1179 | "version": "1.0.2",
1180 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1181 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1182 | },
1183 | "parseurl": {
1184 | "version": "1.3.3",
1185 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1186 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1187 | },
1188 | "path-to-regexp": {
1189 | "version": "0.1.7",
1190 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1191 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1192 | },
1193 | "proxy-addr": {
1194 | "version": "2.0.7",
1195 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1196 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1197 | "requires": {
1198 | "forwarded": "0.2.0",
1199 | "ipaddr.js": "1.9.1"
1200 | }
1201 | },
1202 | "proxy-from-env": {
1203 | "version": "1.1.0",
1204 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1205 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1206 | },
1207 | "qs": {
1208 | "version": "6.11.0",
1209 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1210 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1211 | "requires": {
1212 | "side-channel": "^1.0.4"
1213 | }
1214 | },
1215 | "range-parser": {
1216 | "version": "1.2.1",
1217 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1218 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1219 | },
1220 | "raw-body": {
1221 | "version": "2.5.1",
1222 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1223 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1224 | "requires": {
1225 | "bytes": "3.1.2",
1226 | "http-errors": "2.0.0",
1227 | "iconv-lite": "0.4.24",
1228 | "unpipe": "1.0.0"
1229 | }
1230 | },
1231 | "safe-buffer": {
1232 | "version": "5.2.1",
1233 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1234 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1235 | },
1236 | "safer-buffer": {
1237 | "version": "2.1.2",
1238 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1239 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1240 | },
1241 | "send": {
1242 | "version": "0.18.0",
1243 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1244 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1245 | "requires": {
1246 | "debug": "2.6.9",
1247 | "depd": "2.0.0",
1248 | "destroy": "1.2.0",
1249 | "encodeurl": "~1.0.2",
1250 | "escape-html": "~1.0.3",
1251 | "etag": "~1.8.1",
1252 | "fresh": "0.5.2",
1253 | "http-errors": "2.0.0",
1254 | "mime": "1.6.0",
1255 | "ms": "2.1.3",
1256 | "on-finished": "2.4.1",
1257 | "range-parser": "~1.2.1",
1258 | "statuses": "2.0.1"
1259 | },
1260 | "dependencies": {
1261 | "ms": {
1262 | "version": "2.1.3",
1263 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1264 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1265 | }
1266 | }
1267 | },
1268 | "serve-static": {
1269 | "version": "1.15.0",
1270 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1271 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1272 | "requires": {
1273 | "encodeurl": "~1.0.2",
1274 | "escape-html": "~1.0.3",
1275 | "parseurl": "~1.3.3",
1276 | "send": "0.18.0"
1277 | }
1278 | },
1279 | "set-function-length": {
1280 | "version": "1.1.1",
1281 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
1282 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
1283 | "requires": {
1284 | "define-data-property": "^1.1.1",
1285 | "get-intrinsic": "^1.2.1",
1286 | "gopd": "^1.0.1",
1287 | "has-property-descriptors": "^1.0.0"
1288 | }
1289 | },
1290 | "setprototypeof": {
1291 | "version": "1.2.0",
1292 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1293 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1294 | },
1295 | "side-channel": {
1296 | "version": "1.0.4",
1297 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1298 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1299 | "requires": {
1300 | "call-bind": "^1.0.0",
1301 | "get-intrinsic": "^1.0.2",
1302 | "object-inspect": "^1.9.0"
1303 | }
1304 | },
1305 | "statuses": {
1306 | "version": "2.0.1",
1307 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1308 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1309 | },
1310 | "toidentifier": {
1311 | "version": "1.0.1",
1312 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1313 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1314 | },
1315 | "type-is": {
1316 | "version": "1.6.18",
1317 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1318 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1319 | "requires": {
1320 | "media-typer": "0.3.0",
1321 | "mime-types": "~2.1.24"
1322 | }
1323 | },
1324 | "unpipe": {
1325 | "version": "1.0.0",
1326 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1327 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
1328 | },
1329 | "utils-merge": {
1330 | "version": "1.0.1",
1331 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1332 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
1333 | },
1334 | "vary": {
1335 | "version": "1.1.2",
1336 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1337 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
1338 | }
1339 | }
1340 | }
1341 |
--------------------------------------------------------------------------------
/services/posts/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "posts",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "posts",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "axios": "^1.6.0",
13 | "cors": "^2.8.5",
14 | "express": "^4.18.2",
15 | "morgan": "^1.10.0"
16 | }
17 | },
18 | "node_modules/accepts": {
19 | "version": "1.3.8",
20 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
21 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
22 | "dependencies": {
23 | "mime-types": "~2.1.34",
24 | "negotiator": "0.6.3"
25 | },
26 | "engines": {
27 | "node": ">= 0.6"
28 | }
29 | },
30 | "node_modules/array-flatten": {
31 | "version": "1.1.1",
32 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
33 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
34 | },
35 | "node_modules/asynckit": {
36 | "version": "0.4.0",
37 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
38 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
39 | },
40 | "node_modules/axios": {
41 | "version": "1.6.0",
42 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
43 | "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
44 | "dependencies": {
45 | "follow-redirects": "^1.15.0",
46 | "form-data": "^4.0.0",
47 | "proxy-from-env": "^1.1.0"
48 | }
49 | },
50 | "node_modules/basic-auth": {
51 | "version": "2.0.1",
52 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
53 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
54 | "dependencies": {
55 | "safe-buffer": "5.1.2"
56 | },
57 | "engines": {
58 | "node": ">= 0.8"
59 | }
60 | },
61 | "node_modules/basic-auth/node_modules/safe-buffer": {
62 | "version": "5.1.2",
63 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
64 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
65 | },
66 | "node_modules/body-parser": {
67 | "version": "1.20.1",
68 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
69 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
70 | "dependencies": {
71 | "bytes": "3.1.2",
72 | "content-type": "~1.0.4",
73 | "debug": "2.6.9",
74 | "depd": "2.0.0",
75 | "destroy": "1.2.0",
76 | "http-errors": "2.0.0",
77 | "iconv-lite": "0.4.24",
78 | "on-finished": "2.4.1",
79 | "qs": "6.11.0",
80 | "raw-body": "2.5.1",
81 | "type-is": "~1.6.18",
82 | "unpipe": "1.0.0"
83 | },
84 | "engines": {
85 | "node": ">= 0.8",
86 | "npm": "1.2.8000 || >= 1.4.16"
87 | }
88 | },
89 | "node_modules/bytes": {
90 | "version": "3.1.2",
91 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
92 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
93 | "engines": {
94 | "node": ">= 0.8"
95 | }
96 | },
97 | "node_modules/call-bind": {
98 | "version": "1.0.5",
99 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
100 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
101 | "dependencies": {
102 | "function-bind": "^1.1.2",
103 | "get-intrinsic": "^1.2.1",
104 | "set-function-length": "^1.1.1"
105 | },
106 | "funding": {
107 | "url": "https://github.com/sponsors/ljharb"
108 | }
109 | },
110 | "node_modules/combined-stream": {
111 | "version": "1.0.8",
112 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
113 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
114 | "dependencies": {
115 | "delayed-stream": "~1.0.0"
116 | },
117 | "engines": {
118 | "node": ">= 0.8"
119 | }
120 | },
121 | "node_modules/content-disposition": {
122 | "version": "0.5.4",
123 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
124 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
125 | "dependencies": {
126 | "safe-buffer": "5.2.1"
127 | },
128 | "engines": {
129 | "node": ">= 0.6"
130 | }
131 | },
132 | "node_modules/content-type": {
133 | "version": "1.0.5",
134 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
135 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
136 | "engines": {
137 | "node": ">= 0.6"
138 | }
139 | },
140 | "node_modules/cookie": {
141 | "version": "0.5.0",
142 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
143 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
144 | "engines": {
145 | "node": ">= 0.6"
146 | }
147 | },
148 | "node_modules/cookie-signature": {
149 | "version": "1.0.6",
150 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
151 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
152 | },
153 | "node_modules/cors": {
154 | "version": "2.8.5",
155 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
156 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
157 | "dependencies": {
158 | "object-assign": "^4",
159 | "vary": "^1"
160 | },
161 | "engines": {
162 | "node": ">= 0.10"
163 | }
164 | },
165 | "node_modules/debug": {
166 | "version": "2.6.9",
167 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
168 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
169 | "dependencies": {
170 | "ms": "2.0.0"
171 | }
172 | },
173 | "node_modules/define-data-property": {
174 | "version": "1.1.1",
175 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
176 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
177 | "dependencies": {
178 | "get-intrinsic": "^1.2.1",
179 | "gopd": "^1.0.1",
180 | "has-property-descriptors": "^1.0.0"
181 | },
182 | "engines": {
183 | "node": ">= 0.4"
184 | }
185 | },
186 | "node_modules/delayed-stream": {
187 | "version": "1.0.0",
188 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
189 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
190 | "engines": {
191 | "node": ">=0.4.0"
192 | }
193 | },
194 | "node_modules/depd": {
195 | "version": "2.0.0",
196 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
197 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
198 | "engines": {
199 | "node": ">= 0.8"
200 | }
201 | },
202 | "node_modules/destroy": {
203 | "version": "1.2.0",
204 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
205 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
206 | "engines": {
207 | "node": ">= 0.8",
208 | "npm": "1.2.8000 || >= 1.4.16"
209 | }
210 | },
211 | "node_modules/ee-first": {
212 | "version": "1.1.1",
213 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
214 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
215 | },
216 | "node_modules/encodeurl": {
217 | "version": "1.0.2",
218 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
219 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
220 | "engines": {
221 | "node": ">= 0.8"
222 | }
223 | },
224 | "node_modules/escape-html": {
225 | "version": "1.0.3",
226 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
227 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
228 | },
229 | "node_modules/etag": {
230 | "version": "1.8.1",
231 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
232 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
233 | "engines": {
234 | "node": ">= 0.6"
235 | }
236 | },
237 | "node_modules/express": {
238 | "version": "4.18.2",
239 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
240 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
241 | "dependencies": {
242 | "accepts": "~1.3.8",
243 | "array-flatten": "1.1.1",
244 | "body-parser": "1.20.1",
245 | "content-disposition": "0.5.4",
246 | "content-type": "~1.0.4",
247 | "cookie": "0.5.0",
248 | "cookie-signature": "1.0.6",
249 | "debug": "2.6.9",
250 | "depd": "2.0.0",
251 | "encodeurl": "~1.0.2",
252 | "escape-html": "~1.0.3",
253 | "etag": "~1.8.1",
254 | "finalhandler": "1.2.0",
255 | "fresh": "0.5.2",
256 | "http-errors": "2.0.0",
257 | "merge-descriptors": "1.0.1",
258 | "methods": "~1.1.2",
259 | "on-finished": "2.4.1",
260 | "parseurl": "~1.3.3",
261 | "path-to-regexp": "0.1.7",
262 | "proxy-addr": "~2.0.7",
263 | "qs": "6.11.0",
264 | "range-parser": "~1.2.1",
265 | "safe-buffer": "5.2.1",
266 | "send": "0.18.0",
267 | "serve-static": "1.15.0",
268 | "setprototypeof": "1.2.0",
269 | "statuses": "2.0.1",
270 | "type-is": "~1.6.18",
271 | "utils-merge": "1.0.1",
272 | "vary": "~1.1.2"
273 | },
274 | "engines": {
275 | "node": ">= 0.10.0"
276 | }
277 | },
278 | "node_modules/finalhandler": {
279 | "version": "1.2.0",
280 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
281 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
282 | "dependencies": {
283 | "debug": "2.6.9",
284 | "encodeurl": "~1.0.2",
285 | "escape-html": "~1.0.3",
286 | "on-finished": "2.4.1",
287 | "parseurl": "~1.3.3",
288 | "statuses": "2.0.1",
289 | "unpipe": "~1.0.0"
290 | },
291 | "engines": {
292 | "node": ">= 0.8"
293 | }
294 | },
295 | "node_modules/follow-redirects": {
296 | "version": "1.15.3",
297 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
298 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
299 | "funding": [
300 | {
301 | "type": "individual",
302 | "url": "https://github.com/sponsors/RubenVerborgh"
303 | }
304 | ],
305 | "engines": {
306 | "node": ">=4.0"
307 | },
308 | "peerDependenciesMeta": {
309 | "debug": {
310 | "optional": true
311 | }
312 | }
313 | },
314 | "node_modules/form-data": {
315 | "version": "4.0.0",
316 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
317 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
318 | "dependencies": {
319 | "asynckit": "^0.4.0",
320 | "combined-stream": "^1.0.8",
321 | "mime-types": "^2.1.12"
322 | },
323 | "engines": {
324 | "node": ">= 6"
325 | }
326 | },
327 | "node_modules/forwarded": {
328 | "version": "0.2.0",
329 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
330 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
331 | "engines": {
332 | "node": ">= 0.6"
333 | }
334 | },
335 | "node_modules/fresh": {
336 | "version": "0.5.2",
337 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
338 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
339 | "engines": {
340 | "node": ">= 0.6"
341 | }
342 | },
343 | "node_modules/function-bind": {
344 | "version": "1.1.2",
345 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
346 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
347 | "funding": {
348 | "url": "https://github.com/sponsors/ljharb"
349 | }
350 | },
351 | "node_modules/get-intrinsic": {
352 | "version": "1.2.2",
353 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
354 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
355 | "dependencies": {
356 | "function-bind": "^1.1.2",
357 | "has-proto": "^1.0.1",
358 | "has-symbols": "^1.0.3",
359 | "hasown": "^2.0.0"
360 | },
361 | "funding": {
362 | "url": "https://github.com/sponsors/ljharb"
363 | }
364 | },
365 | "node_modules/gopd": {
366 | "version": "1.0.1",
367 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
368 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
369 | "dependencies": {
370 | "get-intrinsic": "^1.1.3"
371 | },
372 | "funding": {
373 | "url": "https://github.com/sponsors/ljharb"
374 | }
375 | },
376 | "node_modules/has-property-descriptors": {
377 | "version": "1.0.1",
378 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
379 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
380 | "dependencies": {
381 | "get-intrinsic": "^1.2.2"
382 | },
383 | "funding": {
384 | "url": "https://github.com/sponsors/ljharb"
385 | }
386 | },
387 | "node_modules/has-proto": {
388 | "version": "1.0.1",
389 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
390 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
391 | "engines": {
392 | "node": ">= 0.4"
393 | },
394 | "funding": {
395 | "url": "https://github.com/sponsors/ljharb"
396 | }
397 | },
398 | "node_modules/has-symbols": {
399 | "version": "1.0.3",
400 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
401 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
402 | "engines": {
403 | "node": ">= 0.4"
404 | },
405 | "funding": {
406 | "url": "https://github.com/sponsors/ljharb"
407 | }
408 | },
409 | "node_modules/hasown": {
410 | "version": "2.0.0",
411 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
412 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
413 | "dependencies": {
414 | "function-bind": "^1.1.2"
415 | },
416 | "engines": {
417 | "node": ">= 0.4"
418 | }
419 | },
420 | "node_modules/http-errors": {
421 | "version": "2.0.0",
422 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
423 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
424 | "dependencies": {
425 | "depd": "2.0.0",
426 | "inherits": "2.0.4",
427 | "setprototypeof": "1.2.0",
428 | "statuses": "2.0.1",
429 | "toidentifier": "1.0.1"
430 | },
431 | "engines": {
432 | "node": ">= 0.8"
433 | }
434 | },
435 | "node_modules/iconv-lite": {
436 | "version": "0.4.24",
437 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
438 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
439 | "dependencies": {
440 | "safer-buffer": ">= 2.1.2 < 3"
441 | },
442 | "engines": {
443 | "node": ">=0.10.0"
444 | }
445 | },
446 | "node_modules/inherits": {
447 | "version": "2.0.4",
448 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
449 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
450 | },
451 | "node_modules/ipaddr.js": {
452 | "version": "1.9.1",
453 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
454 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
455 | "engines": {
456 | "node": ">= 0.10"
457 | }
458 | },
459 | "node_modules/media-typer": {
460 | "version": "0.3.0",
461 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
462 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
463 | "engines": {
464 | "node": ">= 0.6"
465 | }
466 | },
467 | "node_modules/merge-descriptors": {
468 | "version": "1.0.1",
469 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
470 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
471 | },
472 | "node_modules/methods": {
473 | "version": "1.1.2",
474 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
475 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
476 | "engines": {
477 | "node": ">= 0.6"
478 | }
479 | },
480 | "node_modules/mime": {
481 | "version": "1.6.0",
482 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
483 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
484 | "bin": {
485 | "mime": "cli.js"
486 | },
487 | "engines": {
488 | "node": ">=4"
489 | }
490 | },
491 | "node_modules/mime-db": {
492 | "version": "1.52.0",
493 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
494 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
495 | "engines": {
496 | "node": ">= 0.6"
497 | }
498 | },
499 | "node_modules/mime-types": {
500 | "version": "2.1.35",
501 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
502 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
503 | "dependencies": {
504 | "mime-db": "1.52.0"
505 | },
506 | "engines": {
507 | "node": ">= 0.6"
508 | }
509 | },
510 | "node_modules/morgan": {
511 | "version": "1.10.0",
512 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
513 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
514 | "dependencies": {
515 | "basic-auth": "~2.0.1",
516 | "debug": "2.6.9",
517 | "depd": "~2.0.0",
518 | "on-finished": "~2.3.0",
519 | "on-headers": "~1.0.2"
520 | },
521 | "engines": {
522 | "node": ">= 0.8.0"
523 | }
524 | },
525 | "node_modules/morgan/node_modules/on-finished": {
526 | "version": "2.3.0",
527 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
528 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
529 | "dependencies": {
530 | "ee-first": "1.1.1"
531 | },
532 | "engines": {
533 | "node": ">= 0.8"
534 | }
535 | },
536 | "node_modules/ms": {
537 | "version": "2.0.0",
538 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
539 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
540 | },
541 | "node_modules/negotiator": {
542 | "version": "0.6.3",
543 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
544 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
545 | "engines": {
546 | "node": ">= 0.6"
547 | }
548 | },
549 | "node_modules/object-assign": {
550 | "version": "4.1.1",
551 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
552 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
553 | "engines": {
554 | "node": ">=0.10.0"
555 | }
556 | },
557 | "node_modules/object-inspect": {
558 | "version": "1.13.1",
559 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
560 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
561 | "funding": {
562 | "url": "https://github.com/sponsors/ljharb"
563 | }
564 | },
565 | "node_modules/on-finished": {
566 | "version": "2.4.1",
567 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
568 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
569 | "dependencies": {
570 | "ee-first": "1.1.1"
571 | },
572 | "engines": {
573 | "node": ">= 0.8"
574 | }
575 | },
576 | "node_modules/on-headers": {
577 | "version": "1.0.2",
578 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
579 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
580 | "engines": {
581 | "node": ">= 0.8"
582 | }
583 | },
584 | "node_modules/parseurl": {
585 | "version": "1.3.3",
586 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
587 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
588 | "engines": {
589 | "node": ">= 0.8"
590 | }
591 | },
592 | "node_modules/path-to-regexp": {
593 | "version": "0.1.7",
594 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
595 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
596 | },
597 | "node_modules/proxy-addr": {
598 | "version": "2.0.7",
599 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
600 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
601 | "dependencies": {
602 | "forwarded": "0.2.0",
603 | "ipaddr.js": "1.9.1"
604 | },
605 | "engines": {
606 | "node": ">= 0.10"
607 | }
608 | },
609 | "node_modules/proxy-from-env": {
610 | "version": "1.1.0",
611 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
612 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
613 | },
614 | "node_modules/qs": {
615 | "version": "6.11.0",
616 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
617 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
618 | "dependencies": {
619 | "side-channel": "^1.0.4"
620 | },
621 | "engines": {
622 | "node": ">=0.6"
623 | },
624 | "funding": {
625 | "url": "https://github.com/sponsors/ljharb"
626 | }
627 | },
628 | "node_modules/range-parser": {
629 | "version": "1.2.1",
630 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
631 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
632 | "engines": {
633 | "node": ">= 0.6"
634 | }
635 | },
636 | "node_modules/raw-body": {
637 | "version": "2.5.1",
638 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
639 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
640 | "dependencies": {
641 | "bytes": "3.1.2",
642 | "http-errors": "2.0.0",
643 | "iconv-lite": "0.4.24",
644 | "unpipe": "1.0.0"
645 | },
646 | "engines": {
647 | "node": ">= 0.8"
648 | }
649 | },
650 | "node_modules/safe-buffer": {
651 | "version": "5.2.1",
652 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
653 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
654 | "funding": [
655 | {
656 | "type": "github",
657 | "url": "https://github.com/sponsors/feross"
658 | },
659 | {
660 | "type": "patreon",
661 | "url": "https://www.patreon.com/feross"
662 | },
663 | {
664 | "type": "consulting",
665 | "url": "https://feross.org/support"
666 | }
667 | ]
668 | },
669 | "node_modules/safer-buffer": {
670 | "version": "2.1.2",
671 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
672 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
673 | },
674 | "node_modules/send": {
675 | "version": "0.18.0",
676 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
677 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
678 | "dependencies": {
679 | "debug": "2.6.9",
680 | "depd": "2.0.0",
681 | "destroy": "1.2.0",
682 | "encodeurl": "~1.0.2",
683 | "escape-html": "~1.0.3",
684 | "etag": "~1.8.1",
685 | "fresh": "0.5.2",
686 | "http-errors": "2.0.0",
687 | "mime": "1.6.0",
688 | "ms": "2.1.3",
689 | "on-finished": "2.4.1",
690 | "range-parser": "~1.2.1",
691 | "statuses": "2.0.1"
692 | },
693 | "engines": {
694 | "node": ">= 0.8.0"
695 | }
696 | },
697 | "node_modules/send/node_modules/ms": {
698 | "version": "2.1.3",
699 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
700 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
701 | },
702 | "node_modules/serve-static": {
703 | "version": "1.15.0",
704 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
705 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
706 | "dependencies": {
707 | "encodeurl": "~1.0.2",
708 | "escape-html": "~1.0.3",
709 | "parseurl": "~1.3.3",
710 | "send": "0.18.0"
711 | },
712 | "engines": {
713 | "node": ">= 0.8.0"
714 | }
715 | },
716 | "node_modules/set-function-length": {
717 | "version": "1.1.1",
718 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
719 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
720 | "dependencies": {
721 | "define-data-property": "^1.1.1",
722 | "get-intrinsic": "^1.2.1",
723 | "gopd": "^1.0.1",
724 | "has-property-descriptors": "^1.0.0"
725 | },
726 | "engines": {
727 | "node": ">= 0.4"
728 | }
729 | },
730 | "node_modules/setprototypeof": {
731 | "version": "1.2.0",
732 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
733 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
734 | },
735 | "node_modules/side-channel": {
736 | "version": "1.0.4",
737 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
738 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
739 | "dependencies": {
740 | "call-bind": "^1.0.0",
741 | "get-intrinsic": "^1.0.2",
742 | "object-inspect": "^1.9.0"
743 | },
744 | "funding": {
745 | "url": "https://github.com/sponsors/ljharb"
746 | }
747 | },
748 | "node_modules/statuses": {
749 | "version": "2.0.1",
750 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
751 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
752 | "engines": {
753 | "node": ">= 0.8"
754 | }
755 | },
756 | "node_modules/toidentifier": {
757 | "version": "1.0.1",
758 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
759 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
760 | "engines": {
761 | "node": ">=0.6"
762 | }
763 | },
764 | "node_modules/type-is": {
765 | "version": "1.6.18",
766 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
767 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
768 | "dependencies": {
769 | "media-typer": "0.3.0",
770 | "mime-types": "~2.1.24"
771 | },
772 | "engines": {
773 | "node": ">= 0.6"
774 | }
775 | },
776 | "node_modules/unpipe": {
777 | "version": "1.0.0",
778 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
779 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
780 | "engines": {
781 | "node": ">= 0.8"
782 | }
783 | },
784 | "node_modules/utils-merge": {
785 | "version": "1.0.1",
786 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
787 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
788 | "engines": {
789 | "node": ">= 0.4.0"
790 | }
791 | },
792 | "node_modules/vary": {
793 | "version": "1.1.2",
794 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
795 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
796 | "engines": {
797 | "node": ">= 0.8"
798 | }
799 | }
800 | },
801 | "dependencies": {
802 | "accepts": {
803 | "version": "1.3.8",
804 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
805 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
806 | "requires": {
807 | "mime-types": "~2.1.34",
808 | "negotiator": "0.6.3"
809 | }
810 | },
811 | "array-flatten": {
812 | "version": "1.1.1",
813 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
814 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
815 | },
816 | "asynckit": {
817 | "version": "0.4.0",
818 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
819 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
820 | },
821 | "axios": {
822 | "version": "1.6.0",
823 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
824 | "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
825 | "requires": {
826 | "follow-redirects": "^1.15.0",
827 | "form-data": "^4.0.0",
828 | "proxy-from-env": "^1.1.0"
829 | }
830 | },
831 | "basic-auth": {
832 | "version": "2.0.1",
833 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
834 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
835 | "requires": {
836 | "safe-buffer": "5.1.2"
837 | },
838 | "dependencies": {
839 | "safe-buffer": {
840 | "version": "5.1.2",
841 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
842 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
843 | }
844 | }
845 | },
846 | "body-parser": {
847 | "version": "1.20.1",
848 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
849 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
850 | "requires": {
851 | "bytes": "3.1.2",
852 | "content-type": "~1.0.4",
853 | "debug": "2.6.9",
854 | "depd": "2.0.0",
855 | "destroy": "1.2.0",
856 | "http-errors": "2.0.0",
857 | "iconv-lite": "0.4.24",
858 | "on-finished": "2.4.1",
859 | "qs": "6.11.0",
860 | "raw-body": "2.5.1",
861 | "type-is": "~1.6.18",
862 | "unpipe": "1.0.0"
863 | }
864 | },
865 | "bytes": {
866 | "version": "3.1.2",
867 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
868 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
869 | },
870 | "call-bind": {
871 | "version": "1.0.5",
872 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
873 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
874 | "requires": {
875 | "function-bind": "^1.1.2",
876 | "get-intrinsic": "^1.2.1",
877 | "set-function-length": "^1.1.1"
878 | }
879 | },
880 | "combined-stream": {
881 | "version": "1.0.8",
882 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
883 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
884 | "requires": {
885 | "delayed-stream": "~1.0.0"
886 | }
887 | },
888 | "content-disposition": {
889 | "version": "0.5.4",
890 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
891 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
892 | "requires": {
893 | "safe-buffer": "5.2.1"
894 | }
895 | },
896 | "content-type": {
897 | "version": "1.0.5",
898 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
899 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
900 | },
901 | "cookie": {
902 | "version": "0.5.0",
903 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
904 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
905 | },
906 | "cookie-signature": {
907 | "version": "1.0.6",
908 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
909 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
910 | },
911 | "cors": {
912 | "version": "2.8.5",
913 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
914 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
915 | "requires": {
916 | "object-assign": "^4",
917 | "vary": "^1"
918 | }
919 | },
920 | "debug": {
921 | "version": "2.6.9",
922 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
923 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
924 | "requires": {
925 | "ms": "2.0.0"
926 | }
927 | },
928 | "define-data-property": {
929 | "version": "1.1.1",
930 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
931 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
932 | "requires": {
933 | "get-intrinsic": "^1.2.1",
934 | "gopd": "^1.0.1",
935 | "has-property-descriptors": "^1.0.0"
936 | }
937 | },
938 | "delayed-stream": {
939 | "version": "1.0.0",
940 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
941 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
942 | },
943 | "depd": {
944 | "version": "2.0.0",
945 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
946 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
947 | },
948 | "destroy": {
949 | "version": "1.2.0",
950 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
951 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
952 | },
953 | "ee-first": {
954 | "version": "1.1.1",
955 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
956 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
957 | },
958 | "encodeurl": {
959 | "version": "1.0.2",
960 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
961 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
962 | },
963 | "escape-html": {
964 | "version": "1.0.3",
965 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
966 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
967 | },
968 | "etag": {
969 | "version": "1.8.1",
970 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
971 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
972 | },
973 | "express": {
974 | "version": "4.18.2",
975 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
976 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
977 | "requires": {
978 | "accepts": "~1.3.8",
979 | "array-flatten": "1.1.1",
980 | "body-parser": "1.20.1",
981 | "content-disposition": "0.5.4",
982 | "content-type": "~1.0.4",
983 | "cookie": "0.5.0",
984 | "cookie-signature": "1.0.6",
985 | "debug": "2.6.9",
986 | "depd": "2.0.0",
987 | "encodeurl": "~1.0.2",
988 | "escape-html": "~1.0.3",
989 | "etag": "~1.8.1",
990 | "finalhandler": "1.2.0",
991 | "fresh": "0.5.2",
992 | "http-errors": "2.0.0",
993 | "merge-descriptors": "1.0.1",
994 | "methods": "~1.1.2",
995 | "on-finished": "2.4.1",
996 | "parseurl": "~1.3.3",
997 | "path-to-regexp": "0.1.7",
998 | "proxy-addr": "~2.0.7",
999 | "qs": "6.11.0",
1000 | "range-parser": "~1.2.1",
1001 | "safe-buffer": "5.2.1",
1002 | "send": "0.18.0",
1003 | "serve-static": "1.15.0",
1004 | "setprototypeof": "1.2.0",
1005 | "statuses": "2.0.1",
1006 | "type-is": "~1.6.18",
1007 | "utils-merge": "1.0.1",
1008 | "vary": "~1.1.2"
1009 | }
1010 | },
1011 | "finalhandler": {
1012 | "version": "1.2.0",
1013 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
1014 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
1015 | "requires": {
1016 | "debug": "2.6.9",
1017 | "encodeurl": "~1.0.2",
1018 | "escape-html": "~1.0.3",
1019 | "on-finished": "2.4.1",
1020 | "parseurl": "~1.3.3",
1021 | "statuses": "2.0.1",
1022 | "unpipe": "~1.0.0"
1023 | }
1024 | },
1025 | "follow-redirects": {
1026 | "version": "1.15.3",
1027 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
1028 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
1029 | },
1030 | "form-data": {
1031 | "version": "4.0.0",
1032 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
1033 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
1034 | "requires": {
1035 | "asynckit": "^0.4.0",
1036 | "combined-stream": "^1.0.8",
1037 | "mime-types": "^2.1.12"
1038 | }
1039 | },
1040 | "forwarded": {
1041 | "version": "0.2.0",
1042 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1043 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1044 | },
1045 | "fresh": {
1046 | "version": "0.5.2",
1047 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1048 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
1049 | },
1050 | "function-bind": {
1051 | "version": "1.1.2",
1052 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1053 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
1054 | },
1055 | "get-intrinsic": {
1056 | "version": "1.2.2",
1057 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
1058 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
1059 | "requires": {
1060 | "function-bind": "^1.1.2",
1061 | "has-proto": "^1.0.1",
1062 | "has-symbols": "^1.0.3",
1063 | "hasown": "^2.0.0"
1064 | }
1065 | },
1066 | "gopd": {
1067 | "version": "1.0.1",
1068 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1069 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1070 | "requires": {
1071 | "get-intrinsic": "^1.1.3"
1072 | }
1073 | },
1074 | "has-property-descriptors": {
1075 | "version": "1.0.1",
1076 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
1077 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
1078 | "requires": {
1079 | "get-intrinsic": "^1.2.2"
1080 | }
1081 | },
1082 | "has-proto": {
1083 | "version": "1.0.1",
1084 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
1085 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
1086 | },
1087 | "has-symbols": {
1088 | "version": "1.0.3",
1089 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1090 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
1091 | },
1092 | "hasown": {
1093 | "version": "2.0.0",
1094 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
1095 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
1096 | "requires": {
1097 | "function-bind": "^1.1.2"
1098 | }
1099 | },
1100 | "http-errors": {
1101 | "version": "2.0.0",
1102 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1103 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1104 | "requires": {
1105 | "depd": "2.0.0",
1106 | "inherits": "2.0.4",
1107 | "setprototypeof": "1.2.0",
1108 | "statuses": "2.0.1",
1109 | "toidentifier": "1.0.1"
1110 | }
1111 | },
1112 | "iconv-lite": {
1113 | "version": "0.4.24",
1114 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1115 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1116 | "requires": {
1117 | "safer-buffer": ">= 2.1.2 < 3"
1118 | }
1119 | },
1120 | "inherits": {
1121 | "version": "2.0.4",
1122 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1123 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1124 | },
1125 | "ipaddr.js": {
1126 | "version": "1.9.1",
1127 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1128 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1129 | },
1130 | "media-typer": {
1131 | "version": "0.3.0",
1132 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1133 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
1134 | },
1135 | "merge-descriptors": {
1136 | "version": "1.0.1",
1137 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1138 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1139 | },
1140 | "methods": {
1141 | "version": "1.1.2",
1142 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1143 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
1144 | },
1145 | "mime": {
1146 | "version": "1.6.0",
1147 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1148 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1149 | },
1150 | "mime-db": {
1151 | "version": "1.52.0",
1152 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1153 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1154 | },
1155 | "mime-types": {
1156 | "version": "2.1.35",
1157 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1158 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1159 | "requires": {
1160 | "mime-db": "1.52.0"
1161 | }
1162 | },
1163 | "morgan": {
1164 | "version": "1.10.0",
1165 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
1166 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
1167 | "requires": {
1168 | "basic-auth": "~2.0.1",
1169 | "debug": "2.6.9",
1170 | "depd": "~2.0.0",
1171 | "on-finished": "~2.3.0",
1172 | "on-headers": "~1.0.2"
1173 | },
1174 | "dependencies": {
1175 | "on-finished": {
1176 | "version": "2.3.0",
1177 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1178 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
1179 | "requires": {
1180 | "ee-first": "1.1.1"
1181 | }
1182 | }
1183 | }
1184 | },
1185 | "ms": {
1186 | "version": "2.0.0",
1187 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1188 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1189 | },
1190 | "negotiator": {
1191 | "version": "0.6.3",
1192 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1193 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1194 | },
1195 | "object-assign": {
1196 | "version": "4.1.1",
1197 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1198 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
1199 | },
1200 | "object-inspect": {
1201 | "version": "1.13.1",
1202 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1203 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
1204 | },
1205 | "on-finished": {
1206 | "version": "2.4.1",
1207 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1208 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1209 | "requires": {
1210 | "ee-first": "1.1.1"
1211 | }
1212 | },
1213 | "on-headers": {
1214 | "version": "1.0.2",
1215 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1216 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1217 | },
1218 | "parseurl": {
1219 | "version": "1.3.3",
1220 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1221 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1222 | },
1223 | "path-to-regexp": {
1224 | "version": "0.1.7",
1225 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1226 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1227 | },
1228 | "proxy-addr": {
1229 | "version": "2.0.7",
1230 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1231 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1232 | "requires": {
1233 | "forwarded": "0.2.0",
1234 | "ipaddr.js": "1.9.1"
1235 | }
1236 | },
1237 | "proxy-from-env": {
1238 | "version": "1.1.0",
1239 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1240 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1241 | },
1242 | "qs": {
1243 | "version": "6.11.0",
1244 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1245 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1246 | "requires": {
1247 | "side-channel": "^1.0.4"
1248 | }
1249 | },
1250 | "range-parser": {
1251 | "version": "1.2.1",
1252 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1253 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1254 | },
1255 | "raw-body": {
1256 | "version": "2.5.1",
1257 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1258 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1259 | "requires": {
1260 | "bytes": "3.1.2",
1261 | "http-errors": "2.0.0",
1262 | "iconv-lite": "0.4.24",
1263 | "unpipe": "1.0.0"
1264 | }
1265 | },
1266 | "safe-buffer": {
1267 | "version": "5.2.1",
1268 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1269 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1270 | },
1271 | "safer-buffer": {
1272 | "version": "2.1.2",
1273 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1274 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1275 | },
1276 | "send": {
1277 | "version": "0.18.0",
1278 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1279 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1280 | "requires": {
1281 | "debug": "2.6.9",
1282 | "depd": "2.0.0",
1283 | "destroy": "1.2.0",
1284 | "encodeurl": "~1.0.2",
1285 | "escape-html": "~1.0.3",
1286 | "etag": "~1.8.1",
1287 | "fresh": "0.5.2",
1288 | "http-errors": "2.0.0",
1289 | "mime": "1.6.0",
1290 | "ms": "2.1.3",
1291 | "on-finished": "2.4.1",
1292 | "range-parser": "~1.2.1",
1293 | "statuses": "2.0.1"
1294 | },
1295 | "dependencies": {
1296 | "ms": {
1297 | "version": "2.1.3",
1298 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1299 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1300 | }
1301 | }
1302 | },
1303 | "serve-static": {
1304 | "version": "1.15.0",
1305 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1306 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1307 | "requires": {
1308 | "encodeurl": "~1.0.2",
1309 | "escape-html": "~1.0.3",
1310 | "parseurl": "~1.3.3",
1311 | "send": "0.18.0"
1312 | }
1313 | },
1314 | "set-function-length": {
1315 | "version": "1.1.1",
1316 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
1317 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
1318 | "requires": {
1319 | "define-data-property": "^1.1.1",
1320 | "get-intrinsic": "^1.2.1",
1321 | "gopd": "^1.0.1",
1322 | "has-property-descriptors": "^1.0.0"
1323 | }
1324 | },
1325 | "setprototypeof": {
1326 | "version": "1.2.0",
1327 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1328 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1329 | },
1330 | "side-channel": {
1331 | "version": "1.0.4",
1332 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1333 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1334 | "requires": {
1335 | "call-bind": "^1.0.0",
1336 | "get-intrinsic": "^1.0.2",
1337 | "object-inspect": "^1.9.0"
1338 | }
1339 | },
1340 | "statuses": {
1341 | "version": "2.0.1",
1342 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1343 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1344 | },
1345 | "toidentifier": {
1346 | "version": "1.0.1",
1347 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1348 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1349 | },
1350 | "type-is": {
1351 | "version": "1.6.18",
1352 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1353 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1354 | "requires": {
1355 | "media-typer": "0.3.0",
1356 | "mime-types": "~2.1.24"
1357 | }
1358 | },
1359 | "unpipe": {
1360 | "version": "1.0.0",
1361 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1362 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
1363 | },
1364 | "utils-merge": {
1365 | "version": "1.0.1",
1366 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1367 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
1368 | },
1369 | "vary": {
1370 | "version": "1.1.2",
1371 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1372 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
1373 | }
1374 | }
1375 | }
1376 |
--------------------------------------------------------------------------------
/services/query/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "query",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "query",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "axios": "^1.6.1",
13 | "cors": "^2.8.5",
14 | "express": "^4.18.2",
15 | "morgan": "^1.10.0"
16 | }
17 | },
18 | "node_modules/accepts": {
19 | "version": "1.3.8",
20 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
21 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
22 | "dependencies": {
23 | "mime-types": "~2.1.34",
24 | "negotiator": "0.6.3"
25 | },
26 | "engines": {
27 | "node": ">= 0.6"
28 | }
29 | },
30 | "node_modules/array-flatten": {
31 | "version": "1.1.1",
32 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
33 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
34 | },
35 | "node_modules/asynckit": {
36 | "version": "0.4.0",
37 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
38 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
39 | },
40 | "node_modules/axios": {
41 | "version": "1.6.1",
42 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
43 | "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
44 | "dependencies": {
45 | "follow-redirects": "^1.15.0",
46 | "form-data": "^4.0.0",
47 | "proxy-from-env": "^1.1.0"
48 | }
49 | },
50 | "node_modules/basic-auth": {
51 | "version": "2.0.1",
52 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
53 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
54 | "dependencies": {
55 | "safe-buffer": "5.1.2"
56 | },
57 | "engines": {
58 | "node": ">= 0.8"
59 | }
60 | },
61 | "node_modules/basic-auth/node_modules/safe-buffer": {
62 | "version": "5.1.2",
63 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
64 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
65 | },
66 | "node_modules/body-parser": {
67 | "version": "1.20.1",
68 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
69 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
70 | "dependencies": {
71 | "bytes": "3.1.2",
72 | "content-type": "~1.0.4",
73 | "debug": "2.6.9",
74 | "depd": "2.0.0",
75 | "destroy": "1.2.0",
76 | "http-errors": "2.0.0",
77 | "iconv-lite": "0.4.24",
78 | "on-finished": "2.4.1",
79 | "qs": "6.11.0",
80 | "raw-body": "2.5.1",
81 | "type-is": "~1.6.18",
82 | "unpipe": "1.0.0"
83 | },
84 | "engines": {
85 | "node": ">= 0.8",
86 | "npm": "1.2.8000 || >= 1.4.16"
87 | }
88 | },
89 | "node_modules/bytes": {
90 | "version": "3.1.2",
91 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
92 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
93 | "engines": {
94 | "node": ">= 0.8"
95 | }
96 | },
97 | "node_modules/call-bind": {
98 | "version": "1.0.5",
99 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
100 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
101 | "dependencies": {
102 | "function-bind": "^1.1.2",
103 | "get-intrinsic": "^1.2.1",
104 | "set-function-length": "^1.1.1"
105 | },
106 | "funding": {
107 | "url": "https://github.com/sponsors/ljharb"
108 | }
109 | },
110 | "node_modules/combined-stream": {
111 | "version": "1.0.8",
112 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
113 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
114 | "dependencies": {
115 | "delayed-stream": "~1.0.0"
116 | },
117 | "engines": {
118 | "node": ">= 0.8"
119 | }
120 | },
121 | "node_modules/content-disposition": {
122 | "version": "0.5.4",
123 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
124 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
125 | "dependencies": {
126 | "safe-buffer": "5.2.1"
127 | },
128 | "engines": {
129 | "node": ">= 0.6"
130 | }
131 | },
132 | "node_modules/content-type": {
133 | "version": "1.0.5",
134 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
135 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
136 | "engines": {
137 | "node": ">= 0.6"
138 | }
139 | },
140 | "node_modules/cookie": {
141 | "version": "0.5.0",
142 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
143 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
144 | "engines": {
145 | "node": ">= 0.6"
146 | }
147 | },
148 | "node_modules/cookie-signature": {
149 | "version": "1.0.6",
150 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
151 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
152 | },
153 | "node_modules/cors": {
154 | "version": "2.8.5",
155 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
156 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
157 | "dependencies": {
158 | "object-assign": "^4",
159 | "vary": "^1"
160 | },
161 | "engines": {
162 | "node": ">= 0.10"
163 | }
164 | },
165 | "node_modules/debug": {
166 | "version": "2.6.9",
167 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
168 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
169 | "dependencies": {
170 | "ms": "2.0.0"
171 | }
172 | },
173 | "node_modules/define-data-property": {
174 | "version": "1.1.1",
175 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
176 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
177 | "dependencies": {
178 | "get-intrinsic": "^1.2.1",
179 | "gopd": "^1.0.1",
180 | "has-property-descriptors": "^1.0.0"
181 | },
182 | "engines": {
183 | "node": ">= 0.4"
184 | }
185 | },
186 | "node_modules/delayed-stream": {
187 | "version": "1.0.0",
188 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
189 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
190 | "engines": {
191 | "node": ">=0.4.0"
192 | }
193 | },
194 | "node_modules/depd": {
195 | "version": "2.0.0",
196 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
197 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
198 | "engines": {
199 | "node": ">= 0.8"
200 | }
201 | },
202 | "node_modules/destroy": {
203 | "version": "1.2.0",
204 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
205 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
206 | "engines": {
207 | "node": ">= 0.8",
208 | "npm": "1.2.8000 || >= 1.4.16"
209 | }
210 | },
211 | "node_modules/ee-first": {
212 | "version": "1.1.1",
213 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
214 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
215 | },
216 | "node_modules/encodeurl": {
217 | "version": "1.0.2",
218 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
219 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
220 | "engines": {
221 | "node": ">= 0.8"
222 | }
223 | },
224 | "node_modules/escape-html": {
225 | "version": "1.0.3",
226 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
227 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
228 | },
229 | "node_modules/etag": {
230 | "version": "1.8.1",
231 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
232 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
233 | "engines": {
234 | "node": ">= 0.6"
235 | }
236 | },
237 | "node_modules/express": {
238 | "version": "4.18.2",
239 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
240 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
241 | "dependencies": {
242 | "accepts": "~1.3.8",
243 | "array-flatten": "1.1.1",
244 | "body-parser": "1.20.1",
245 | "content-disposition": "0.5.4",
246 | "content-type": "~1.0.4",
247 | "cookie": "0.5.0",
248 | "cookie-signature": "1.0.6",
249 | "debug": "2.6.9",
250 | "depd": "2.0.0",
251 | "encodeurl": "~1.0.2",
252 | "escape-html": "~1.0.3",
253 | "etag": "~1.8.1",
254 | "finalhandler": "1.2.0",
255 | "fresh": "0.5.2",
256 | "http-errors": "2.0.0",
257 | "merge-descriptors": "1.0.1",
258 | "methods": "~1.1.2",
259 | "on-finished": "2.4.1",
260 | "parseurl": "~1.3.3",
261 | "path-to-regexp": "0.1.7",
262 | "proxy-addr": "~2.0.7",
263 | "qs": "6.11.0",
264 | "range-parser": "~1.2.1",
265 | "safe-buffer": "5.2.1",
266 | "send": "0.18.0",
267 | "serve-static": "1.15.0",
268 | "setprototypeof": "1.2.0",
269 | "statuses": "2.0.1",
270 | "type-is": "~1.6.18",
271 | "utils-merge": "1.0.1",
272 | "vary": "~1.1.2"
273 | },
274 | "engines": {
275 | "node": ">= 0.10.0"
276 | }
277 | },
278 | "node_modules/finalhandler": {
279 | "version": "1.2.0",
280 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
281 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
282 | "dependencies": {
283 | "debug": "2.6.9",
284 | "encodeurl": "~1.0.2",
285 | "escape-html": "~1.0.3",
286 | "on-finished": "2.4.1",
287 | "parseurl": "~1.3.3",
288 | "statuses": "2.0.1",
289 | "unpipe": "~1.0.0"
290 | },
291 | "engines": {
292 | "node": ">= 0.8"
293 | }
294 | },
295 | "node_modules/follow-redirects": {
296 | "version": "1.15.3",
297 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
298 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
299 | "funding": [
300 | {
301 | "type": "individual",
302 | "url": "https://github.com/sponsors/RubenVerborgh"
303 | }
304 | ],
305 | "engines": {
306 | "node": ">=4.0"
307 | },
308 | "peerDependenciesMeta": {
309 | "debug": {
310 | "optional": true
311 | }
312 | }
313 | },
314 | "node_modules/form-data": {
315 | "version": "4.0.0",
316 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
317 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
318 | "dependencies": {
319 | "asynckit": "^0.4.0",
320 | "combined-stream": "^1.0.8",
321 | "mime-types": "^2.1.12"
322 | },
323 | "engines": {
324 | "node": ">= 6"
325 | }
326 | },
327 | "node_modules/forwarded": {
328 | "version": "0.2.0",
329 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
330 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
331 | "engines": {
332 | "node": ">= 0.6"
333 | }
334 | },
335 | "node_modules/fresh": {
336 | "version": "0.5.2",
337 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
338 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
339 | "engines": {
340 | "node": ">= 0.6"
341 | }
342 | },
343 | "node_modules/function-bind": {
344 | "version": "1.1.2",
345 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
346 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
347 | "funding": {
348 | "url": "https://github.com/sponsors/ljharb"
349 | }
350 | },
351 | "node_modules/get-intrinsic": {
352 | "version": "1.2.2",
353 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
354 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
355 | "dependencies": {
356 | "function-bind": "^1.1.2",
357 | "has-proto": "^1.0.1",
358 | "has-symbols": "^1.0.3",
359 | "hasown": "^2.0.0"
360 | },
361 | "funding": {
362 | "url": "https://github.com/sponsors/ljharb"
363 | }
364 | },
365 | "node_modules/gopd": {
366 | "version": "1.0.1",
367 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
368 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
369 | "dependencies": {
370 | "get-intrinsic": "^1.1.3"
371 | },
372 | "funding": {
373 | "url": "https://github.com/sponsors/ljharb"
374 | }
375 | },
376 | "node_modules/has-property-descriptors": {
377 | "version": "1.0.1",
378 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
379 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
380 | "dependencies": {
381 | "get-intrinsic": "^1.2.2"
382 | },
383 | "funding": {
384 | "url": "https://github.com/sponsors/ljharb"
385 | }
386 | },
387 | "node_modules/has-proto": {
388 | "version": "1.0.1",
389 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
390 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
391 | "engines": {
392 | "node": ">= 0.4"
393 | },
394 | "funding": {
395 | "url": "https://github.com/sponsors/ljharb"
396 | }
397 | },
398 | "node_modules/has-symbols": {
399 | "version": "1.0.3",
400 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
401 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
402 | "engines": {
403 | "node": ">= 0.4"
404 | },
405 | "funding": {
406 | "url": "https://github.com/sponsors/ljharb"
407 | }
408 | },
409 | "node_modules/hasown": {
410 | "version": "2.0.0",
411 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
412 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
413 | "dependencies": {
414 | "function-bind": "^1.1.2"
415 | },
416 | "engines": {
417 | "node": ">= 0.4"
418 | }
419 | },
420 | "node_modules/http-errors": {
421 | "version": "2.0.0",
422 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
423 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
424 | "dependencies": {
425 | "depd": "2.0.0",
426 | "inherits": "2.0.4",
427 | "setprototypeof": "1.2.0",
428 | "statuses": "2.0.1",
429 | "toidentifier": "1.0.1"
430 | },
431 | "engines": {
432 | "node": ">= 0.8"
433 | }
434 | },
435 | "node_modules/iconv-lite": {
436 | "version": "0.4.24",
437 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
438 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
439 | "dependencies": {
440 | "safer-buffer": ">= 2.1.2 < 3"
441 | },
442 | "engines": {
443 | "node": ">=0.10.0"
444 | }
445 | },
446 | "node_modules/inherits": {
447 | "version": "2.0.4",
448 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
449 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
450 | },
451 | "node_modules/ipaddr.js": {
452 | "version": "1.9.1",
453 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
454 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
455 | "engines": {
456 | "node": ">= 0.10"
457 | }
458 | },
459 | "node_modules/media-typer": {
460 | "version": "0.3.0",
461 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
462 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
463 | "engines": {
464 | "node": ">= 0.6"
465 | }
466 | },
467 | "node_modules/merge-descriptors": {
468 | "version": "1.0.1",
469 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
470 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
471 | },
472 | "node_modules/methods": {
473 | "version": "1.1.2",
474 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
475 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
476 | "engines": {
477 | "node": ">= 0.6"
478 | }
479 | },
480 | "node_modules/mime": {
481 | "version": "1.6.0",
482 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
483 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
484 | "bin": {
485 | "mime": "cli.js"
486 | },
487 | "engines": {
488 | "node": ">=4"
489 | }
490 | },
491 | "node_modules/mime-db": {
492 | "version": "1.52.0",
493 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
494 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
495 | "engines": {
496 | "node": ">= 0.6"
497 | }
498 | },
499 | "node_modules/mime-types": {
500 | "version": "2.1.35",
501 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
502 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
503 | "dependencies": {
504 | "mime-db": "1.52.0"
505 | },
506 | "engines": {
507 | "node": ">= 0.6"
508 | }
509 | },
510 | "node_modules/morgan": {
511 | "version": "1.10.0",
512 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
513 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
514 | "dependencies": {
515 | "basic-auth": "~2.0.1",
516 | "debug": "2.6.9",
517 | "depd": "~2.0.0",
518 | "on-finished": "~2.3.0",
519 | "on-headers": "~1.0.2"
520 | },
521 | "engines": {
522 | "node": ">= 0.8.0"
523 | }
524 | },
525 | "node_modules/morgan/node_modules/on-finished": {
526 | "version": "2.3.0",
527 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
528 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
529 | "dependencies": {
530 | "ee-first": "1.1.1"
531 | },
532 | "engines": {
533 | "node": ">= 0.8"
534 | }
535 | },
536 | "node_modules/ms": {
537 | "version": "2.0.0",
538 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
539 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
540 | },
541 | "node_modules/negotiator": {
542 | "version": "0.6.3",
543 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
544 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
545 | "engines": {
546 | "node": ">= 0.6"
547 | }
548 | },
549 | "node_modules/object-assign": {
550 | "version": "4.1.1",
551 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
552 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
553 | "engines": {
554 | "node": ">=0.10.0"
555 | }
556 | },
557 | "node_modules/object-inspect": {
558 | "version": "1.13.1",
559 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
560 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
561 | "funding": {
562 | "url": "https://github.com/sponsors/ljharb"
563 | }
564 | },
565 | "node_modules/on-finished": {
566 | "version": "2.4.1",
567 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
568 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
569 | "dependencies": {
570 | "ee-first": "1.1.1"
571 | },
572 | "engines": {
573 | "node": ">= 0.8"
574 | }
575 | },
576 | "node_modules/on-headers": {
577 | "version": "1.0.2",
578 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
579 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
580 | "engines": {
581 | "node": ">= 0.8"
582 | }
583 | },
584 | "node_modules/parseurl": {
585 | "version": "1.3.3",
586 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
587 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
588 | "engines": {
589 | "node": ">= 0.8"
590 | }
591 | },
592 | "node_modules/path-to-regexp": {
593 | "version": "0.1.7",
594 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
595 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
596 | },
597 | "node_modules/proxy-addr": {
598 | "version": "2.0.7",
599 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
600 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
601 | "dependencies": {
602 | "forwarded": "0.2.0",
603 | "ipaddr.js": "1.9.1"
604 | },
605 | "engines": {
606 | "node": ">= 0.10"
607 | }
608 | },
609 | "node_modules/proxy-from-env": {
610 | "version": "1.1.0",
611 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
612 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
613 | },
614 | "node_modules/qs": {
615 | "version": "6.11.0",
616 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
617 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
618 | "dependencies": {
619 | "side-channel": "^1.0.4"
620 | },
621 | "engines": {
622 | "node": ">=0.6"
623 | },
624 | "funding": {
625 | "url": "https://github.com/sponsors/ljharb"
626 | }
627 | },
628 | "node_modules/range-parser": {
629 | "version": "1.2.1",
630 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
631 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
632 | "engines": {
633 | "node": ">= 0.6"
634 | }
635 | },
636 | "node_modules/raw-body": {
637 | "version": "2.5.1",
638 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
639 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
640 | "dependencies": {
641 | "bytes": "3.1.2",
642 | "http-errors": "2.0.0",
643 | "iconv-lite": "0.4.24",
644 | "unpipe": "1.0.0"
645 | },
646 | "engines": {
647 | "node": ">= 0.8"
648 | }
649 | },
650 | "node_modules/safe-buffer": {
651 | "version": "5.2.1",
652 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
653 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
654 | "funding": [
655 | {
656 | "type": "github",
657 | "url": "https://github.com/sponsors/feross"
658 | },
659 | {
660 | "type": "patreon",
661 | "url": "https://www.patreon.com/feross"
662 | },
663 | {
664 | "type": "consulting",
665 | "url": "https://feross.org/support"
666 | }
667 | ]
668 | },
669 | "node_modules/safer-buffer": {
670 | "version": "2.1.2",
671 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
672 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
673 | },
674 | "node_modules/send": {
675 | "version": "0.18.0",
676 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
677 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
678 | "dependencies": {
679 | "debug": "2.6.9",
680 | "depd": "2.0.0",
681 | "destroy": "1.2.0",
682 | "encodeurl": "~1.0.2",
683 | "escape-html": "~1.0.3",
684 | "etag": "~1.8.1",
685 | "fresh": "0.5.2",
686 | "http-errors": "2.0.0",
687 | "mime": "1.6.0",
688 | "ms": "2.1.3",
689 | "on-finished": "2.4.1",
690 | "range-parser": "~1.2.1",
691 | "statuses": "2.0.1"
692 | },
693 | "engines": {
694 | "node": ">= 0.8.0"
695 | }
696 | },
697 | "node_modules/send/node_modules/ms": {
698 | "version": "2.1.3",
699 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
700 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
701 | },
702 | "node_modules/serve-static": {
703 | "version": "1.15.0",
704 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
705 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
706 | "dependencies": {
707 | "encodeurl": "~1.0.2",
708 | "escape-html": "~1.0.3",
709 | "parseurl": "~1.3.3",
710 | "send": "0.18.0"
711 | },
712 | "engines": {
713 | "node": ">= 0.8.0"
714 | }
715 | },
716 | "node_modules/set-function-length": {
717 | "version": "1.1.1",
718 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
719 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
720 | "dependencies": {
721 | "define-data-property": "^1.1.1",
722 | "get-intrinsic": "^1.2.1",
723 | "gopd": "^1.0.1",
724 | "has-property-descriptors": "^1.0.0"
725 | },
726 | "engines": {
727 | "node": ">= 0.4"
728 | }
729 | },
730 | "node_modules/setprototypeof": {
731 | "version": "1.2.0",
732 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
733 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
734 | },
735 | "node_modules/side-channel": {
736 | "version": "1.0.4",
737 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
738 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
739 | "dependencies": {
740 | "call-bind": "^1.0.0",
741 | "get-intrinsic": "^1.0.2",
742 | "object-inspect": "^1.9.0"
743 | },
744 | "funding": {
745 | "url": "https://github.com/sponsors/ljharb"
746 | }
747 | },
748 | "node_modules/statuses": {
749 | "version": "2.0.1",
750 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
751 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
752 | "engines": {
753 | "node": ">= 0.8"
754 | }
755 | },
756 | "node_modules/toidentifier": {
757 | "version": "1.0.1",
758 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
759 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
760 | "engines": {
761 | "node": ">=0.6"
762 | }
763 | },
764 | "node_modules/type-is": {
765 | "version": "1.6.18",
766 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
767 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
768 | "dependencies": {
769 | "media-typer": "0.3.0",
770 | "mime-types": "~2.1.24"
771 | },
772 | "engines": {
773 | "node": ">= 0.6"
774 | }
775 | },
776 | "node_modules/unpipe": {
777 | "version": "1.0.0",
778 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
779 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
780 | "engines": {
781 | "node": ">= 0.8"
782 | }
783 | },
784 | "node_modules/utils-merge": {
785 | "version": "1.0.1",
786 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
787 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
788 | "engines": {
789 | "node": ">= 0.4.0"
790 | }
791 | },
792 | "node_modules/vary": {
793 | "version": "1.1.2",
794 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
795 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
796 | "engines": {
797 | "node": ">= 0.8"
798 | }
799 | }
800 | },
801 | "dependencies": {
802 | "accepts": {
803 | "version": "1.3.8",
804 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
805 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
806 | "requires": {
807 | "mime-types": "~2.1.34",
808 | "negotiator": "0.6.3"
809 | }
810 | },
811 | "array-flatten": {
812 | "version": "1.1.1",
813 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
814 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
815 | },
816 | "asynckit": {
817 | "version": "0.4.0",
818 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
819 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
820 | },
821 | "axios": {
822 | "version": "1.6.1",
823 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
824 | "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
825 | "requires": {
826 | "follow-redirects": "^1.15.0",
827 | "form-data": "^4.0.0",
828 | "proxy-from-env": "^1.1.0"
829 | }
830 | },
831 | "basic-auth": {
832 | "version": "2.0.1",
833 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
834 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
835 | "requires": {
836 | "safe-buffer": "5.1.2"
837 | },
838 | "dependencies": {
839 | "safe-buffer": {
840 | "version": "5.1.2",
841 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
842 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
843 | }
844 | }
845 | },
846 | "body-parser": {
847 | "version": "1.20.1",
848 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
849 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
850 | "requires": {
851 | "bytes": "3.1.2",
852 | "content-type": "~1.0.4",
853 | "debug": "2.6.9",
854 | "depd": "2.0.0",
855 | "destroy": "1.2.0",
856 | "http-errors": "2.0.0",
857 | "iconv-lite": "0.4.24",
858 | "on-finished": "2.4.1",
859 | "qs": "6.11.0",
860 | "raw-body": "2.5.1",
861 | "type-is": "~1.6.18",
862 | "unpipe": "1.0.0"
863 | }
864 | },
865 | "bytes": {
866 | "version": "3.1.2",
867 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
868 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
869 | },
870 | "call-bind": {
871 | "version": "1.0.5",
872 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
873 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
874 | "requires": {
875 | "function-bind": "^1.1.2",
876 | "get-intrinsic": "^1.2.1",
877 | "set-function-length": "^1.1.1"
878 | }
879 | },
880 | "combined-stream": {
881 | "version": "1.0.8",
882 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
883 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
884 | "requires": {
885 | "delayed-stream": "~1.0.0"
886 | }
887 | },
888 | "content-disposition": {
889 | "version": "0.5.4",
890 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
891 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
892 | "requires": {
893 | "safe-buffer": "5.2.1"
894 | }
895 | },
896 | "content-type": {
897 | "version": "1.0.5",
898 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
899 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
900 | },
901 | "cookie": {
902 | "version": "0.5.0",
903 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
904 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
905 | },
906 | "cookie-signature": {
907 | "version": "1.0.6",
908 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
909 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
910 | },
911 | "cors": {
912 | "version": "2.8.5",
913 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
914 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
915 | "requires": {
916 | "object-assign": "^4",
917 | "vary": "^1"
918 | }
919 | },
920 | "debug": {
921 | "version": "2.6.9",
922 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
923 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
924 | "requires": {
925 | "ms": "2.0.0"
926 | }
927 | },
928 | "define-data-property": {
929 | "version": "1.1.1",
930 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
931 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
932 | "requires": {
933 | "get-intrinsic": "^1.2.1",
934 | "gopd": "^1.0.1",
935 | "has-property-descriptors": "^1.0.0"
936 | }
937 | },
938 | "delayed-stream": {
939 | "version": "1.0.0",
940 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
941 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
942 | },
943 | "depd": {
944 | "version": "2.0.0",
945 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
946 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
947 | },
948 | "destroy": {
949 | "version": "1.2.0",
950 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
951 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
952 | },
953 | "ee-first": {
954 | "version": "1.1.1",
955 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
956 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
957 | },
958 | "encodeurl": {
959 | "version": "1.0.2",
960 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
961 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
962 | },
963 | "escape-html": {
964 | "version": "1.0.3",
965 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
966 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
967 | },
968 | "etag": {
969 | "version": "1.8.1",
970 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
971 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
972 | },
973 | "express": {
974 | "version": "4.18.2",
975 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
976 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
977 | "requires": {
978 | "accepts": "~1.3.8",
979 | "array-flatten": "1.1.1",
980 | "body-parser": "1.20.1",
981 | "content-disposition": "0.5.4",
982 | "content-type": "~1.0.4",
983 | "cookie": "0.5.0",
984 | "cookie-signature": "1.0.6",
985 | "debug": "2.6.9",
986 | "depd": "2.0.0",
987 | "encodeurl": "~1.0.2",
988 | "escape-html": "~1.0.3",
989 | "etag": "~1.8.1",
990 | "finalhandler": "1.2.0",
991 | "fresh": "0.5.2",
992 | "http-errors": "2.0.0",
993 | "merge-descriptors": "1.0.1",
994 | "methods": "~1.1.2",
995 | "on-finished": "2.4.1",
996 | "parseurl": "~1.3.3",
997 | "path-to-regexp": "0.1.7",
998 | "proxy-addr": "~2.0.7",
999 | "qs": "6.11.0",
1000 | "range-parser": "~1.2.1",
1001 | "safe-buffer": "5.2.1",
1002 | "send": "0.18.0",
1003 | "serve-static": "1.15.0",
1004 | "setprototypeof": "1.2.0",
1005 | "statuses": "2.0.1",
1006 | "type-is": "~1.6.18",
1007 | "utils-merge": "1.0.1",
1008 | "vary": "~1.1.2"
1009 | }
1010 | },
1011 | "finalhandler": {
1012 | "version": "1.2.0",
1013 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
1014 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
1015 | "requires": {
1016 | "debug": "2.6.9",
1017 | "encodeurl": "~1.0.2",
1018 | "escape-html": "~1.0.3",
1019 | "on-finished": "2.4.1",
1020 | "parseurl": "~1.3.3",
1021 | "statuses": "2.0.1",
1022 | "unpipe": "~1.0.0"
1023 | }
1024 | },
1025 | "follow-redirects": {
1026 | "version": "1.15.3",
1027 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
1028 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
1029 | },
1030 | "form-data": {
1031 | "version": "4.0.0",
1032 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
1033 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
1034 | "requires": {
1035 | "asynckit": "^0.4.0",
1036 | "combined-stream": "^1.0.8",
1037 | "mime-types": "^2.1.12"
1038 | }
1039 | },
1040 | "forwarded": {
1041 | "version": "0.2.0",
1042 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1043 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1044 | },
1045 | "fresh": {
1046 | "version": "0.5.2",
1047 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1048 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
1049 | },
1050 | "function-bind": {
1051 | "version": "1.1.2",
1052 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1053 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
1054 | },
1055 | "get-intrinsic": {
1056 | "version": "1.2.2",
1057 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
1058 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
1059 | "requires": {
1060 | "function-bind": "^1.1.2",
1061 | "has-proto": "^1.0.1",
1062 | "has-symbols": "^1.0.3",
1063 | "hasown": "^2.0.0"
1064 | }
1065 | },
1066 | "gopd": {
1067 | "version": "1.0.1",
1068 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1069 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1070 | "requires": {
1071 | "get-intrinsic": "^1.1.3"
1072 | }
1073 | },
1074 | "has-property-descriptors": {
1075 | "version": "1.0.1",
1076 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
1077 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
1078 | "requires": {
1079 | "get-intrinsic": "^1.2.2"
1080 | }
1081 | },
1082 | "has-proto": {
1083 | "version": "1.0.1",
1084 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
1085 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
1086 | },
1087 | "has-symbols": {
1088 | "version": "1.0.3",
1089 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1090 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
1091 | },
1092 | "hasown": {
1093 | "version": "2.0.0",
1094 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
1095 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
1096 | "requires": {
1097 | "function-bind": "^1.1.2"
1098 | }
1099 | },
1100 | "http-errors": {
1101 | "version": "2.0.0",
1102 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1103 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1104 | "requires": {
1105 | "depd": "2.0.0",
1106 | "inherits": "2.0.4",
1107 | "setprototypeof": "1.2.0",
1108 | "statuses": "2.0.1",
1109 | "toidentifier": "1.0.1"
1110 | }
1111 | },
1112 | "iconv-lite": {
1113 | "version": "0.4.24",
1114 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1115 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1116 | "requires": {
1117 | "safer-buffer": ">= 2.1.2 < 3"
1118 | }
1119 | },
1120 | "inherits": {
1121 | "version": "2.0.4",
1122 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1123 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1124 | },
1125 | "ipaddr.js": {
1126 | "version": "1.9.1",
1127 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1128 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1129 | },
1130 | "media-typer": {
1131 | "version": "0.3.0",
1132 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1133 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
1134 | },
1135 | "merge-descriptors": {
1136 | "version": "1.0.1",
1137 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1138 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1139 | },
1140 | "methods": {
1141 | "version": "1.1.2",
1142 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1143 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
1144 | },
1145 | "mime": {
1146 | "version": "1.6.0",
1147 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1148 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1149 | },
1150 | "mime-db": {
1151 | "version": "1.52.0",
1152 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1153 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1154 | },
1155 | "mime-types": {
1156 | "version": "2.1.35",
1157 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1158 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1159 | "requires": {
1160 | "mime-db": "1.52.0"
1161 | }
1162 | },
1163 | "morgan": {
1164 | "version": "1.10.0",
1165 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
1166 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
1167 | "requires": {
1168 | "basic-auth": "~2.0.1",
1169 | "debug": "2.6.9",
1170 | "depd": "~2.0.0",
1171 | "on-finished": "~2.3.0",
1172 | "on-headers": "~1.0.2"
1173 | },
1174 | "dependencies": {
1175 | "on-finished": {
1176 | "version": "2.3.0",
1177 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1178 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
1179 | "requires": {
1180 | "ee-first": "1.1.1"
1181 | }
1182 | }
1183 | }
1184 | },
1185 | "ms": {
1186 | "version": "2.0.0",
1187 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1188 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1189 | },
1190 | "negotiator": {
1191 | "version": "0.6.3",
1192 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1193 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1194 | },
1195 | "object-assign": {
1196 | "version": "4.1.1",
1197 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1198 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
1199 | },
1200 | "object-inspect": {
1201 | "version": "1.13.1",
1202 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1203 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
1204 | },
1205 | "on-finished": {
1206 | "version": "2.4.1",
1207 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1208 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1209 | "requires": {
1210 | "ee-first": "1.1.1"
1211 | }
1212 | },
1213 | "on-headers": {
1214 | "version": "1.0.2",
1215 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1216 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1217 | },
1218 | "parseurl": {
1219 | "version": "1.3.3",
1220 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1221 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1222 | },
1223 | "path-to-regexp": {
1224 | "version": "0.1.7",
1225 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1226 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1227 | },
1228 | "proxy-addr": {
1229 | "version": "2.0.7",
1230 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1231 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1232 | "requires": {
1233 | "forwarded": "0.2.0",
1234 | "ipaddr.js": "1.9.1"
1235 | }
1236 | },
1237 | "proxy-from-env": {
1238 | "version": "1.1.0",
1239 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1240 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1241 | },
1242 | "qs": {
1243 | "version": "6.11.0",
1244 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1245 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1246 | "requires": {
1247 | "side-channel": "^1.0.4"
1248 | }
1249 | },
1250 | "range-parser": {
1251 | "version": "1.2.1",
1252 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1253 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1254 | },
1255 | "raw-body": {
1256 | "version": "2.5.1",
1257 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1258 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1259 | "requires": {
1260 | "bytes": "3.1.2",
1261 | "http-errors": "2.0.0",
1262 | "iconv-lite": "0.4.24",
1263 | "unpipe": "1.0.0"
1264 | }
1265 | },
1266 | "safe-buffer": {
1267 | "version": "5.2.1",
1268 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1269 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1270 | },
1271 | "safer-buffer": {
1272 | "version": "2.1.2",
1273 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1274 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1275 | },
1276 | "send": {
1277 | "version": "0.18.0",
1278 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1279 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1280 | "requires": {
1281 | "debug": "2.6.9",
1282 | "depd": "2.0.0",
1283 | "destroy": "1.2.0",
1284 | "encodeurl": "~1.0.2",
1285 | "escape-html": "~1.0.3",
1286 | "etag": "~1.8.1",
1287 | "fresh": "0.5.2",
1288 | "http-errors": "2.0.0",
1289 | "mime": "1.6.0",
1290 | "ms": "2.1.3",
1291 | "on-finished": "2.4.1",
1292 | "range-parser": "~1.2.1",
1293 | "statuses": "2.0.1"
1294 | },
1295 | "dependencies": {
1296 | "ms": {
1297 | "version": "2.1.3",
1298 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1299 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1300 | }
1301 | }
1302 | },
1303 | "serve-static": {
1304 | "version": "1.15.0",
1305 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1306 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1307 | "requires": {
1308 | "encodeurl": "~1.0.2",
1309 | "escape-html": "~1.0.3",
1310 | "parseurl": "~1.3.3",
1311 | "send": "0.18.0"
1312 | }
1313 | },
1314 | "set-function-length": {
1315 | "version": "1.1.1",
1316 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
1317 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
1318 | "requires": {
1319 | "define-data-property": "^1.1.1",
1320 | "get-intrinsic": "^1.2.1",
1321 | "gopd": "^1.0.1",
1322 | "has-property-descriptors": "^1.0.0"
1323 | }
1324 | },
1325 | "setprototypeof": {
1326 | "version": "1.2.0",
1327 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1328 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1329 | },
1330 | "side-channel": {
1331 | "version": "1.0.4",
1332 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1333 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1334 | "requires": {
1335 | "call-bind": "^1.0.0",
1336 | "get-intrinsic": "^1.0.2",
1337 | "object-inspect": "^1.9.0"
1338 | }
1339 | },
1340 | "statuses": {
1341 | "version": "2.0.1",
1342 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1343 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
1344 | },
1345 | "toidentifier": {
1346 | "version": "1.0.1",
1347 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1348 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
1349 | },
1350 | "type-is": {
1351 | "version": "1.6.18",
1352 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1353 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1354 | "requires": {
1355 | "media-typer": "0.3.0",
1356 | "mime-types": "~2.1.24"
1357 | }
1358 | },
1359 | "unpipe": {
1360 | "version": "1.0.0",
1361 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1362 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
1363 | },
1364 | "utils-merge": {
1365 | "version": "1.0.1",
1366 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1367 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
1368 | },
1369 | "vary": {
1370 | "version": "1.1.2",
1371 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1372 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
1373 | }
1374 | }
1375 | }
1376 |
--------------------------------------------------------------------------------