├── .gitignore ├── .vscode └── settings.json ├── README.md ├── client ├── App.Styles.scss ├── App.tsx ├── build │ ├── bundle.js │ └── index.html ├── components │ ├── DisplayGraphiql │ │ ├── DisplayGraphiql.scss │ │ └── DisplayGraphiql.tsx │ ├── NavBar │ │ ├── mediqlLogo.png │ │ ├── navbar.tsx │ │ └── navbarStyles.scss │ ├── TreeDiagram │ │ ├── TreeDiagram.tsx │ │ ├── TreeDiagramStyles.scss │ │ ├── closeButton.tsx │ │ └── closeButtonStyles.scss │ └── Visualizer │ │ └── Visualizer.tsx ├── contextStore │ └── port-context.tsx ├── index.html ├── index.tsx ├── package-lock.json ├── package.json └── webpack.config.js ├── package-lock.json ├── package.json ├── server ├── helpers │ └── transformData.ts ├── models │ ├── originRespModel.ts │ └── queryResModel.ts ├── package-lock.json ├── package.json └── server.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules/ -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

MediQL

2 | 3 |

Developer Tool for GraphQL Response Visualization & Error Transparency

4 | 5 |

6 | MediQL Logo 7 |

8 | 9 | 10 | ## **Description** 11 | 12 | MediQL is an innovative GraphQL developer tool that builds upon the capabilities of GraphiQL, an open-source web-based integrated development environment (IDE) for GraphQL. With MediQL, you can supercharge your GraphQL workflow by leveraging advanced features such as query response visualization, error indication, and real-time observation of API response statuses and objects. By seamlessly integrating with GraphiQL, MediQL enhances your development experience and empowers you to streamline debugging, optimize performance, and achieve greater efficiency in building GraphQL APIs. 13 | 14 | Currently in Alpha. 15 | 16 | ## **Installation (part 1)** 17 | 18 | 1. Fork this repo and clone to local machine. 19 | 2. Run `npm i` in both server directory and client directory to install respective dependencies. 20 | 3. Create a `.env` file in the server folder, and assign the global environment variable `MONGODB_URI` with your personal MongoDB connection string (personal database connection string). 21 | 4. Run `npm start dev` in the root directory.
22 | (**NOTE**: Server will be running on localhost:3003 & Client will be running on localhost:8080) 23 | 5. Visit http://localhost:8080/. 24 | 25 | You should be able to see GraphiQL's GUI loaded up, however, we will need to integrate and connect your personal GraphQL project with this application before being able to test your multi-layered queries! 26 | 27 | Let's install the necessary dependencies into your personal GraphQL project as it will be needing this to create the integrated development environment (ide). 28 | 29 | ## **Installation in your personal GraphQL Project (part 2)** 30 | 31 | 1. As MediQL is built on top of GraphiQL, it is necessary to have GraphiQL and a /graphql server route set up prior to installing MediQL. 32 | 2. Run `npm i express-graphql` to install dependency for GraphiQL (Visit https://github.com/graphql/graphiql for more information) 33 | 3. Run `npm i mediql` to install dependency for MediQL (Visit https://github.com/MediQL/mediql-npm-package or https://www.npmjs.com/package/mediql for more information) 34 | 4. Run `npm i cors` to install cors dependency as the CORS middleware enables Cross-Origin Resource Sharing, allowing your GraphQL project's server to handle requests from different origins, such as MediQL's application. 35 | 36 | Now, let's move on to configuring your personal GraphQL project and integrate it with MediQL! 37 | 38 | ## **Usage** 39 | 40 | 1. Ensure that your GraphQL project's server application will be able to respond to requests from different domains or ports, making it easier to handle cross-origin requests from MediQL. 41 | 42 | ```javascript 43 | const app = express(); 44 | const cors = require("cors"); 45 | app.use(cors()); 46 | ``` 47 | 48 | 2. Within your GraphQL project, in your schema file or file with resolvers (i.e., schema.js), import the `postOriginResp` function from the `mediql` package using CommonJS module syntax. 49 | 50 | ```javascript 51 | const { postOriginResp } = require("mediql"); 52 | ``` 53 | 54 | 3. In that same file, invoke the postOriginResp function inside each of your resolver functions with the specific arguments of `response`, `parsedResponse`, and `info`. 55 | 56 | ```javascript 57 | //declare & assign the response variable as the result of your fetch request to an external api url 58 | const response = await fetch('url'); 59 | //declare & assign the parsedResponse variable as the parsed JSON response of your response variable 60 | const parsedResponse = await response.json(); 61 | //invoke mediql's packaged function with the arguments of response, parsedResponse, and info respectively. 62 | postOriginResp(response, parsedResponse, info); 63 | //return parsedResponse as this is the typical GraphQL resolver set up 64 | return parsedResponse; 65 | ``` 66 | 67 | 4. Before the next step, you will need to have a '/graphql' endpoint route configured for GraphiQL in your server file. (Visit https://github.com/graphql/graphiql for more information) 68 | 69 | 5. In your server file (i.e., server.js), import the `postQueryResp` function from the `mediql` package using CommonJS module syntax. 70 | 71 | ```javascript 72 | const { postQueryResp } = require("mediql"); 73 | ``` 74 | 75 | 6. Within your '/graphql' endpoint route, include the extensions option and specify the function outlined below and invoke the `postQueryResp` function with the argument of `result` inside of it. 76 | 77 | ```javascript 78 | app.use( 79 | "/graphql", 80 | graphqlHTTP({ 81 | schema, 82 | graphiql: true, 83 | context: ({ req }) => ({ req }), 84 | extensions: async ( 85 | { document, variables, operationName, result }) => { 86 | //invoke postQueryResp function with the argument of result. 87 | postQueryResp(result); 88 | }, 89 | }) 90 | ); 91 | ``` 92 | 93 | 7. Make sure your GraphQL project's server/client are running on a PORT that is not localhost:3003 or localhost:8080 as the integrated development environment (IDE) will be using those ports. 94 | 95 | 8. Now, start up your GraphQL project server and head over to http://localhost:8080/ on your browser. 96 | 97 | 9. Input your GraphQL project's server PORT# and get those queries in! 98 | 99 | 100 | ## **Features** 101 | 102 | ### :sparkles: GraphiQL :sparkles: 103 | 104 | GraphiQL's user interface & functionality is provided for testing GraphQL queries alongside our visualizer extension, making a completely integrated development environment for developers. Plug in your GraphQL project's server PORT and get querying! 105 | 106 |

107 |
108 |

109 | 110 | 111 | ### :sparkles: Query Response Visualization & Error Indication :sparkles: 112 | 113 | When a GraphQL query has been made, MediQL visualizes the query response with as a tree of nodes on the right side of your screen. Errors are indicated in red. Possible errors or null values are indicated in orange. Lastly, completed queries with no issues are indicated in green. 114 | 115 |

116 |
117 |

118 | 119 | ### :sparkles: API Response Transparency :sparkles: 120 | 121 | As we all know, GraphQL responses do not provide API Response Transparency. If a field is not available, the developer ends up with a null value, with no indication of what type of API error was given originally. The developer would be at risk of the ambiguity of errors. 122 | 123 | This is where MediQL comes in and saves the day! 124 | 125 | Each node in the visualizer is clickable and provides insight on that specific resolver's query response! The original API response's status codes and objects are provided to you with no additional call to the external API's. The developer has the ability to look into the original API's response object as well. 126 | 127 |

128 |
129 |

130 | 131 | ### :sparkles: Light/Dark Theme :sparkles: 132 | 133 | We also offer a light and dark theme that is integrated with GraphiQL's user interface which allows users to customize their experience and choose the visual style that best suits their preferences and needs. 134 | 135 |

136 |
137 |

138 | 139 | ## **Tech Stack** 140 | 141 |

142 | 143 | 144 | 145 | 146 | 147 | 148 |
149 | 150 | 151 | 152 | 153 | 154 |

155 | 156 | 157 | ## **Read More** 158 | 159 | [Read](https://medium.com/@noahtofte/364ff07bed34) more about the importance of Error Transparency!! 160 | 161 | ## **Co-Creators** 162 | 163 | - James Huang 164 | - [GitHub](https://github.com/JamesJunJieHuang) 165 | - [LinkedIn](https://www.linkedin.com/in/jamesjhuang/) 166 | - Lily Hoong 167 | - [GitHub](https://github.com/hoonglily) 168 | - [LinkedIn](https://www.linkedin.com/in/lilyhoong/) 169 | - Noah Tofte 170 | - [GitHub](https://github.com/nAndrewT) 171 | - [LinkedIn](https://www.linkedin.com/in/ntofte/) 172 | - Jake Ruiz 173 | - [GitHub](https://github.com/J-Ruiz) 174 | - [LinkedIn](https://www.linkedin.com/in/jake-ruiz/) 175 | 176 | 177 | ## **Acknowledgements** 178 | 179 | This project uses GraphiQL, an in-browser IDE for exploring GraphQL APIs. GraphiQL is a powerful tool for testing and debugging GraphQL queries, and it has been instrumental in the development of this project. 180 | 181 | In addition, our team has developed an extension for GraphiQL that adds a response visualizer and error indicator, which enhances its functionality and makes it even more useful for developers. We would like to thank the creators of GraphiQL for providing a solid foundation for our extension, and for inspiring us to build upon its features. 182 | 183 | We also want to thank our team for their hard work and dedication in developing the extension and making it available to the community. We hope that our extension will be helpful to other developers who are using GraphiQL to explore and test their GraphQL APIs. 184 | 185 | ## **Contributing** 186 | 187 | Thank you for your interest in contributing to our project! We welcome contributions from developers, designers, testers, and other contributors who share our passion for building great software. 188 | 189 | ### Prerequisites 190 | 191 | Before you start contributing, you should have knowledge of HTML, CSS, and JavaScript, as well as experience with Git and GitHub. Familiarity with React and GraphQL is also a plus. 192 | 193 | ### Guidelines 194 | 195 | To contribute to our project, please follow these guidelines: 196 | 197 | 1. Fork the repository and clone it to your local machine. 198 | 2. Create a new branch for your changes and make your changes. 199 | 3. Submit a pull request to our repository and describe your changes in detail. 200 | 4. Wait for a code review and address any feedback from our team. 201 | 5. Once your changes have been approved, we will merge your pull request into our repository. 202 | 203 | If you need help getting started or have any questions, please reach out to us on our GitHub repository. 204 | 205 | ### Code of conduct 206 | 207 | We expect all contributors to follow our code of conduct, which is based on the Contributor Covenant (http://contributor-covenant.org). This code of conduct outlines our expectations for behavior and communication among contributors and helps to create a respectful and inclusive community for everyone. 208 | 209 | ### Attribution 210 | 211 | We would like to acknowledge and give credit to all contributors who have contributed to our project, including code, documentation, and other contributions. Thank you for helping us to make our project better for everyone! 212 | 213 | ## **Roadmap** 214 | 215 | - [x] Implement support for multiple GraphQL APIs. 216 | - [ ] Refactor the codebase to improve maintainability. 217 | - [ ] Deploy the application as a website so that developers can use it without cloning the repo. 218 | 219 | 220 | -------------------------------------------------------------------------------- /client/App.Styles.scss: -------------------------------------------------------------------------------- 1 | .mainDiv { 2 | display: flex; 3 | flex-direction: row; 4 | margin-top: 20px; 5 | height: 100%; 6 | } 7 | 8 | .toggle-container { 9 | position: fixed; 10 | bottom: 1rem; 11 | right: 1rem; 12 | z-index: 9999; 13 | } 14 | 15 | :root { 16 | --app-background-color: hsl(219, 28%, 100%); 17 | background-color: var(--app-background-color); 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /client/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import "./App.Styles.scss"; 3 | import "./components/TreeDiagram/TreeDiagramStyles.scss"; 4 | import "./components/DisplayGraphiql/DisplayGraphiql.scss"; 5 | 6 | import Navbar from "./components/NavBar/navbar"; 7 | import Visualizer from "./components/Visualizer/Visualizer"; 8 | import DisplayGraphiql from "./components/DisplayGraphiql/DisplayGraphiql"; 9 | import { PortContextProvider } from "./contextStore/port-context"; 10 | 11 | function App() { 12 | const [theme, setTheme] = useState( 13 | localStorage.getItem("background-color") || "light" 14 | ); 15 | 16 | useEffect(() => { 17 | const body = document.body; 18 | 19 | const observer = new MutationObserver((mutationsList) => { 20 | for (const mutation of mutationsList) { 21 | if (mutation.attributeName === "class") { 22 | const isDarkMode = body.classList.contains("graphiql-dark"); 23 | const newTheme = isDarkMode ? "dark" : "light"; 24 | setTheme(newTheme); 25 | localStorage.setItem("background-color", newTheme); 26 | } 27 | } 28 | }); 29 | 30 | observer.observe(body, { attributes: true }); 31 | 32 | return () => { 33 | observer.disconnect(); 34 | }; 35 | }, []); 36 | 37 | useEffect(() => { 38 | if (theme === "dark") { 39 | document.documentElement.style.setProperty("--app-background-color", "hsl(219, 29%, 18%)"); 40 | } else { 41 | document.documentElement.style.setProperty("--app-background-color", "hsl(219, 28%, 100%)"); 42 | } 43 | }, [theme]); 44 | 45 | return ( 46 |
47 | 48 | 49 |
50 | 51 | 52 |
53 |
54 |
55 | ); 56 | } 57 | 58 | export default App; 59 | -------------------------------------------------------------------------------- /client/build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | MediQL 8 | 9 | 10 |
11 | 17 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /client/components/DisplayGraphiql/DisplayGraphiql.scss: -------------------------------------------------------------------------------- 1 | #graphiql-container{ 2 | width: 50%; 3 | height: 80vh; 4 | min-height: 100%; 5 | max-height: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /client/components/DisplayGraphiql/DisplayGraphiql.tsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from "react"; 2 | 3 | //inviting graphiQL GUI component into our application 4 | import { GraphiQL } from "graphiql"; 5 | import { createGraphiQLFetcher } from "@graphiql/toolkit"; 6 | import "graphiql/graphiql.min.css"; 7 | import PortContext from "../../contextStore/port-context"; 8 | 9 | const DisplayGraphiql = () => { 10 | const { port } = useContext(PortContext); 11 | return ( 12 |
13 | 21 |
22 | ); 23 | }; 24 | 25 | export default DisplayGraphiql; 26 | -------------------------------------------------------------------------------- /client/components/NavBar/mediqlLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oslabs-beta/MediQL/98f688510bd8f9afc0c42d773183f4a064828f5d/client/components/NavBar/mediqlLogo.png -------------------------------------------------------------------------------- /client/components/NavBar/navbar.tsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from "react"; 2 | // import logo from './mediqlLogo.png'; 3 | import PortContext from "../../contextStore/port-context"; 4 | import Box from '@mui/material/Box'; 5 | import TextField from '@mui/material/TextField'; 6 | import { createTheme, ThemeProvider } from "@mui/material/styles"; 7 | 8 | import './navbarStyles.scss'; 9 | 10 | function Navbar({theme}) { 11 | //set port context so port can be used to render graphiql component 12 | const { setPort: setGlobalPort } = useContext(PortContext); 13 | 14 | const handlePortChange = (event: React.ChangeEvent) => { 15 | setGlobalPort(event.target.value); 16 | }; 17 | 18 | const handleSubmit = (event: React.FormEvent) => { 19 | event.preventDefault(); 20 | }; 21 | 22 | const boxTheme = createTheme({ 23 | components: { 24 | MuiFormLabel: { 25 | styleOverrides: { 26 | root: { 27 | color: theme === "dark" ? "rgba(255, 255, 255, 0.7)" : "rgb(255, 255, 255)", 28 | }, 29 | }, 30 | }, 31 | MuiOutlinedInput: { 32 | styleOverrides: { 33 | root: { 34 | color: theme === "dark" ? "rgba(255, 255, 255, 0.7)" : "rgb(255, 255, 255)", 35 | "& .MuiOutlinedInput-notchedOutline": { 36 | borderColor: theme === "dark" ? "rgba(255, 255, 255, 0.7)" : "rgb(255, 255, 255)", 37 | }, 38 | "&:hover .MuiOutlinedInput-notchedOutline": { 39 | borderColor: theme === "dark" ? "rgba(255, 255, 255, 0.7)" : "rgb(255, 255, 255)", 40 | }, 41 | }, 42 | }, 43 | }, 44 | }, 45 | }); 46 | 47 | return ( 48 | <> 49 | 78 | 79 | ) 80 | } 81 | 82 | export default Navbar; -------------------------------------------------------------------------------- /client/components/NavBar/navbarStyles.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@800&display=swap'); 2 | 3 | nav { 4 | display: flex; 5 | justify-content: flex-start; 6 | padding: 20px 80px; 7 | list-style-type: none; 8 | font-family: 'Plus Jakarta Sans', sans-serif; 9 | color: rgb(254,72,189); 10 | 11 | a { 12 | img { 13 | height: 60px; 14 | width: 60px; 15 | } 16 | } 17 | 18 | .logoName{ 19 | display: flex; 20 | padding-right: 3%; 21 | } 22 | } 23 | 24 | .nav { 25 | background-color: #bdb8d6; 26 | box-shadow: 0 5px 15px #887eb6; 27 | 28 | &.dark-theme { 29 | background-color: rgb(15, 23, 42); 30 | box-shadow: 0 5px 15px rgb(15, 23, 42); 31 | } 32 | } 33 | 34 | body { 35 | margin : 0; 36 | padding: 0; 37 | } 38 | 39 | -------------------------------------------------------------------------------- /client/components/TreeDiagram/TreeDiagram.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect, useRef } from 'react'; 2 | import CloseButton from './closeButton'; 3 | import { createRoot } from 'react-dom/client'; 4 | 5 | import * as d3 from 'd3'; 6 | 7 | interface Data { 8 | name: string | null; 9 | children: Data[] | null; 10 | } 11 | 12 | interface TreeDiagramProps { 13 | data: Data[]; 14 | } 15 | 16 | const TreeDiagram = ({ data }: TreeDiagramProps) => { 17 | //connects to the DOM and the SVG element returned below 18 | 19 | const svgRef = useRef(null); 20 | const containerRef = useRef(null); 21 | 22 | const handleOverlayClick = () => { 23 | const overlay = document.getElementById('popup-overlay'); 24 | const popup = document.getElementById('popup-data'); 25 | overlay?.remove(); 26 | popup?.remove(); 27 | }; 28 | 29 | useEffect(() => { 30 | console.log('data: ', data); 31 | 32 | if (data !== null) { 33 | let root = d3.hierarchy(data); 34 | 35 | let levelWidth = [1]; 36 | let childCount = function (level: number, n: d3.HierarchyNode) { 37 | if (n.children && n.children.length > 0) { 38 | if (levelWidth.length <= level + 1) levelWidth.push(0); 39 | 40 | levelWidth[level + 1] += n.children.length; 41 | n.children.forEach(function (d) { 42 | childCount(level + 1, d); 43 | }); 44 | } 45 | }; 46 | childCount(0, root); 47 | // console.log('level width: ', levelWidth); 48 | let treeHeight = d3.max(levelWidth) * 65; 49 | let treeLayout = d3.tree().size([treeHeight, 350]); 50 | 51 | let rootNode = treeLayout(root) as d3.HierarchyPointNode; 52 | 53 | // Links 54 | d3.select('svg g') 55 | .selectAll('line') 56 | .data(rootNode.links()) 57 | .join('line') 58 | .attr('x1', function (d) { 59 | return d.source.y; 60 | }) 61 | .attr('y1', function (d) { 62 | return d.source.x; 63 | }) 64 | .attr('x2', function (d) { 65 | return d.target.y; 66 | }) 67 | .attr('y2', function (d) { 68 | return d.target.x; 69 | }); 70 | 71 | // Nodes 72 | d3.select('svg g') 73 | .selectAll('circle') 74 | .data(rootNode.descendants()) 75 | .join('circle') 76 | .attr('cx', function (d) { 77 | return d.y; 78 | }) 79 | .attr('cy', function (d) { 80 | return d.x; 81 | }) 82 | .attr('r', 7) 83 | .attr('fill', (d) => { 84 | // console.log('d.data-->', d.data); 85 | 86 | if (d.data.children !== undefined && !d.data.children?.length) { 87 | // console.log('THIS CHILD IS LENGTH OF 0'); 88 | return 'orange'; 89 | } else if (d.data.statusCode > 299) { 90 | return 'red'; 91 | } else { 92 | return 'green'; 93 | } 94 | }) 95 | .on('click', (event, d) => { 96 | if (!document.getElementById('popup-data')) { 97 | // Create overlay 98 | const overlay = document.createElement('div'); 99 | // This will allow us to do the styling on scss 100 | overlay.classList.add('popup-overlay'); 101 | overlay.setAttribute('id', 'popup-overlay'); 102 | overlay.addEventListener('click', handleOverlayClick); 103 | document.body.appendChild(overlay); 104 | 105 | // Create popup 106 | const popup = document.createElement('div'); 107 | 108 | // This will allow us to do the styling on scss 109 | popup.classList.add('popup'); 110 | popup.setAttribute('id', 'popup-data'); 111 | 112 | const dataName = document.createElement('h2'); 113 | dataName.setAttribute('class', 'dataName'); 114 | dataName.innerText = `${d.data.name}`; 115 | 116 | const statusCode = document.createElement('p'); 117 | statusCode.innerText = `Status Code: ${d.data.statusCode}`; 118 | 119 | const statusMessage = document.createElement('p'); 120 | statusMessage.innerText = `Status Message: ${d.data.statusMsg}`; 121 | 122 | const moreInfo = document.createElement('button'); 123 | moreInfo.innerText = 'Show Original Response'; 124 | moreInfo.setAttribute('id', 'more-info-button'); 125 | moreInfo.setAttribute('class', 'button-class'); 126 | 127 | const displayMoreInfo = document.createElement('div'); 128 | displayMoreInfo.innerHTML = `
${JSON.stringify(
129 |               d.data.resp,
130 |               null,
131 |               2
132 |             )}
`; 133 | displayMoreInfo.setAttribute('id', 'more-info'); 134 | 135 | const moreInfoClick = () => { 136 | const moreInfoButton = popup.querySelector('#more-info-button'); 137 | const moreInfoDiv = popup.querySelector('#more-info'); 138 | moreInfoButton.addEventListener('click', (event) => { 139 | event.stopPropagation(); 140 | if (moreInfoDiv.style.display === 'block') { 141 | moreInfoDiv.style.display = 'none'; 142 | moreInfoButton.textContent = 'Hide Original Response'; 143 | } else { 144 | moreInfoDiv.style.display = 'block'; 145 | moreInfoButton.textContent = 'Show Original Response'; 146 | } 147 | }); 148 | }; 149 | 150 | if (d.data.statusCodes === 200 || d.data.statusMsg === 'OK') { 151 | popup.append( 152 | dataName, 153 | statusCode, 154 | statusMessage, 155 | moreInfo, 156 | displayMoreInfo 157 | ); 158 | moreInfoClick(); 159 | } else if (d.data.statusCodes === 404 || d.data.statusMsg) { 160 | displayMoreInfo.innerText = d.data.resp 161 | ? JSON.stringify(d.data.resp) 162 | : 'No response data'; 163 | popup.append( 164 | dataName, 165 | statusCode, 166 | statusMessage, 167 | moreInfo, 168 | displayMoreInfo 169 | ); 170 | moreInfoClick(); 171 | } else if (!d.data.resp && !d.data.children) { 172 | popup.append(dataName); 173 | } else if ( 174 | d.data.children !== undefined && 175 | !d.data.children?.length 176 | ) { 177 | const childrenData = document.createElement('div'); 178 | childrenData.innerText = d.data.children 179 | ? `Children: ${JSON.stringify(d.data.children)}` 180 | : 'Children: Null'; 181 | popup.append(dataName, childrenData); 182 | } else { 183 | popup.append(dataName); 184 | } 185 | 186 | let button = document.createElement('div'); 187 | createRoot(button).render(); 188 | button.addEventListener('click', function () { 189 | popup.remove(); 190 | overlay.remove(); 191 | }); 192 | popup.append(button); 193 | document.body.appendChild(popup); 194 | } 195 | }); 196 | 197 | // Labels 198 | d3.select('svg g') 199 | .selectAll('text.label') 200 | .data(rootNode.descendants()) 201 | .join('text') 202 | .classed('label', true) 203 | .attr('x', function (d) { 204 | return d.y; 205 | }) 206 | .attr('y', function (d) { 207 | return d.x - 10; 208 | }) 209 | .style('fill', function (d) { 210 | if (d.data.name === 'data') { 211 | return '#00C2E0'; 212 | } else if (!d.data.resp && !d.data.children) { 213 | return '#FFCC99'; 214 | } else { 215 | return '#70BCFF'; 216 | } 217 | }) 218 | .text(function (d) { 219 | const name = d.data.name; 220 | if (typeof name === 'string') { 221 | if (typeof name === 'string' && name.includes(',')) { 222 | const words = name.split(' '); 223 | for (let i = 0; i < words.length; i++) { 224 | if (words[i].includes(',')) { 225 | return ( 226 | words 227 | .slice(0, i + 1) 228 | .join(' ') 229 | .replace(',', '') + '[...]' 230 | ); 231 | } 232 | } 233 | } 234 | return name; 235 | } 236 | }); 237 | 238 | // Leaf count labels 239 | d3.select('svg g') 240 | .selectAll('text.count-label') 241 | .data(rootNode.descendants()) 242 | .join('text') 243 | .classed('count-label', true) 244 | .attr('x', function (d) { 245 | return d.y + 20; 246 | }) 247 | .attr('y', function (d) { 248 | return d.x; 249 | }); 250 | 251 | //set view box 252 | let dimensions = (d3.select('svg g').node() as SVGGElement).getBBox(); 253 | 254 | let targetTreeD = document.getElementById('tree-d'); 255 | targetTreeD?.setAttribute( 256 | 'viewBox', 257 | `${dimensions.x} 258 | ${dimensions.y} 259 | ${dimensions.width * 1.3} 260 | ${dimensions.height}` 261 | ); 262 | } 263 | }); 264 | 265 | return ( 266 | <> 267 |
268 | 269 | 270 | 271 |
272 | 273 | ); 274 | }; 275 | 276 | export default TreeDiagram; 277 | -------------------------------------------------------------------------------- /client/components/TreeDiagram/TreeDiagramStyles.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Montserrat:ital@1&display=swap'); 2 | @import url('https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@800&display=swap'); 3 | @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap'); 4 | @import url('https://fonts.googleapis.com/css2?family=Fira+Code&display=swap'); 5 | 6 | .container { 7 | display: flex; 8 | justify-content: center; 9 | align-items: center; 10 | height: 100vh; /* set the height to 100% of the viewport height */ 11 | } 12 | 13 | body { 14 | font-family: 'Fira Code', monospace; 15 | // font-family: 'Roboto', sans-serif; 16 | } 17 | 18 | text { 19 | font-size: 12px; 20 | text-anchor: middle; 21 | } 22 | 23 | .label { 24 | fill: black; 25 | } 26 | 27 | circle { 28 | stroke: none; 29 | } 30 | 31 | line { 32 | fill: none; 33 | stroke: #ccc; 34 | stroke-width: 1px; 35 | } 36 | 37 | #tree-container { 38 | overflow-y: scroll; 39 | overflow-x: scroll; 40 | height: 100vh; 41 | width: 50%; 42 | } 43 | 44 | #tree-d { 45 | padding-top: 3%; 46 | padding-bottom: 3%; 47 | // transform: translateX(50px); 48 | min-height: 50%; 49 | min-width: 50%; 50 | 51 | /* Define the initial state of the element */ 52 | opacity: 0; 53 | 54 | /* Define the animation using keyframes */ 55 | @keyframes fadeIn { 56 | from { 57 | opacity: 0; 58 | } 59 | to { 60 | opacity: 1; 61 | } 62 | } 63 | 64 | /* Apply the animation to the element */ 65 | animation-name: fadeIn; 66 | animation-duration: 1s; 67 | animation-fill-mode: forwards; 68 | 69 | } 70 | 71 | .popup-overlay { 72 | position: fixed; 73 | top: 0; 74 | left: 0; 75 | width: 100%; 76 | height: 100%; 77 | background-color: rgba(0, 0, 0, 0.5); 78 | z-index: 9998; 79 | display: flex; 80 | justify-content: center; 81 | align-items: center; 82 | } 83 | 84 | .popup { 85 | flex-direction: column; 86 | justify-content: space-between; 87 | align-items: center; 88 | position: fixed; 89 | top: 50%; 90 | left: 50%; 91 | transform: translate(-50%, -50%); 92 | background-color: white; 93 | padding: 30px; 94 | border: 1px solid black; 95 | width: auto; 96 | height: auto; 97 | max-height: 80vh; 98 | max-width: 80%; 99 | z-index: 9999; 100 | overflow-y: auto; 101 | border-radius: 5px; 102 | text-align: center; 103 | } 104 | 105 | .dataName{ 106 | font-weight: bolder; 107 | font-family: 'Merriweather Sans', sans-serif; 108 | } 109 | 110 | #more-info{ 111 | text-align: left; 112 | display: none; 113 | // border: groove lightblue; 114 | } 115 | 116 | pre { 117 | white-space: pre-wrap; 118 | word-break: break-all; 119 | font-family: 'Fira Code', monospace !important; 120 | } 121 | 122 | .button-class { 123 | display: inline-block; 124 | padding: 10px 20px; 125 | margin-bottom: 10px; 126 | background-color: #8299ac; 127 | color: white; 128 | text-align: center; 129 | text-decoration: none; 130 | font-size: 16px; 131 | border-radius: 3px; 132 | cursor: pointer; 133 | 134 | &:hover{ 135 | background-color: #9eb1c0; 136 | } 137 | 138 | &:active{ 139 | background-color: #7c959a; 140 | } 141 | } -------------------------------------------------------------------------------- /client/components/TreeDiagram/closeButton.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import CancelPresentationTwoToneIcon from '@mui/icons-material/CancelPresentationTwoTone'; 3 | import { createTheme, ThemeProvider } from '@mui/material/styles'; 4 | import { IconButton } from '@mui/material'; 5 | import './closeButtonStyles.scss'; 6 | 7 | const theme = createTheme({ 8 | palette: { 9 | primary: { 10 | main: '#FF5794', 11 | }, 12 | }, 13 | }); 14 | 15 | const CloseButton = () => { 16 | return ( 17 |
18 | 19 | 20 | 21 | 22 | 23 |
24 | ); 25 | }; 26 | 27 | export default CloseButton; 28 | -------------------------------------------------------------------------------- /client/components/TreeDiagram/closeButtonStyles.scss: -------------------------------------------------------------------------------- 1 | .close-button { 2 | position: absolute; 3 | top: 10px; 4 | right: 10px; 5 | } 6 | 7 | .close-button .largebutton{ 8 | transform: scale(1.5); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /client/components/Visualizer/Visualizer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useState, useContext } from 'react'; 3 | import TreeDiagram from '../TreeDiagram/TreeDiagram'; 4 | import { io } from 'socket.io-client'; 5 | 6 | const Visualizer = () => { 7 | const socket = io(); 8 | const [data, setData] = useState(null); 9 | 10 | socket.on('newDoc', async (doc) => { 11 | await setData(doc); 12 | }); 13 | 14 | return <>{data ? : null}; 15 | }; 16 | 17 | export default Visualizer; 18 | -------------------------------------------------------------------------------- /client/contextStore/port-context.tsx: -------------------------------------------------------------------------------- 1 | import React, { createContext, useState } from "react"; 2 | 3 | //typescript 4 | interface PortContextProps { 5 | port: string; 6 | setPort: React.Dispatch>; 7 | } 8 | 9 | //typescript 10 | const PortContext = createContext({ 11 | port: "", 12 | setPort: () => {}, 13 | }); 14 | 15 | export const PortContextProvider = (props) => { 16 | const [port, setPort] = useState(""); 17 | const portContextValue = { port, setPort }; 18 | 19 | return ( 20 | 21 | {props.children} 22 | 23 | ); 24 | }; 25 | 26 | export default PortContext; 27 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | MediQL 8 | 9 | 10 |
11 | 12 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /client/index.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import React from 'react'; 4 | import App from './App'; 5 | import ReactDOM from "react-dom/client"; 6 | import { BrowserRouter } from "react-router-dom"; 7 | 8 | const container = document.getElementById('root') as HTMLElement; 9 | 10 | if (container) { 11 | const root = createRoot(container); 12 | root.render( 13 | 14 | 15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "description": "We kill errors on the client side", 5 | "main": "index.tsx", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "webpack-dev-server --config webpack.config.js --progress --color", 9 | "build": "webpack --config webpack.config.js --progress --color" 10 | }, 11 | "author": "James, Noah, Lily, Jake", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@apollo/client": "^3.7.9", 15 | "@emotion/react": "^11.10.6", 16 | "@emotion/styled": "^11.10.6", 17 | "@graphiql/react": "^0.17.1", 18 | "@graphiql/toolkit": "^0.8.3", 19 | "@mui/icons-material": "^5.11.16", 20 | "@mui/material": "^5.11.12", 21 | "@types/socket.io": "^3.0.2", 22 | "css-loader": "^6.7.3", 23 | "css-minimizer-webpack-plugin": "^4.2.2", 24 | "d3": "^7.8.2", 25 | "graphiql": "^2.4.1", 26 | "graphql-ws": "^5.12.0", 27 | "html-webpack-plugin": "^5.5.0", 28 | "react": "^18.2.0", 29 | "react-d3-tree": "^3.5.0", 30 | "react-dom": "^18.2.0", 31 | "react-router-dom": "^6.8.1", 32 | "sass": "^1.58.3", 33 | "sass-loader": "^13.2.0", 34 | "socket.io": "^4.6.1", 35 | "socket.io-client": "^4.6.1", 36 | "style-loader": "^3.3.1", 37 | "webpack-bundle-analyzer": "^4.8.0" 38 | }, 39 | "devDependencies": { 40 | "@babel/cli": "^7.21.0", 41 | "@babel/core": "^7.21.0", 42 | "@babel/eslint-parser": "^7.19.1", 43 | "@babel/plugin-transform-runtime": "^7.21.0", 44 | "@babel/preset-env": "^7.20.2", 45 | "@babel/preset-react": "^7.18.6", 46 | "@babel/runtime": "^7.21.0", 47 | "@types/d3": "^7.4.0", 48 | "@types/react": "^18.0.31", 49 | "@types/react-dom": "^18.0.11", 50 | "babel-loader": "^9.1.2", 51 | "file-loader": "^6.2.0", 52 | "ts-loader": "^9.4.2", 53 | "ts-node": "^10.9.1", 54 | "url-loader": "^4.1.1", 55 | "webpack": "^5.75.0", 56 | "webpack-cli": "^5.0.1", 57 | "webpack-dev-server": "^4.11.1" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /client/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | 4 | module.exports = { 5 | mode: "development", 6 | entry: "./index.tsx", 7 | output: { 8 | filename: "bundle.js", 9 | path: path.resolve(__dirname, "build"), 10 | }, 11 | target: "web", 12 | devServer: { 13 | port: 8080, 14 | host: "localhost", 15 | open: true, 16 | hot: true, 17 | liveReload: true, 18 | proxy: { 19 | "/": { 20 | target: "http://localhost:3003", 21 | }, 22 | }, 23 | }, 24 | resolve: { 25 | extensions: [".js", ".jsx", ".tsx", ".json"], 26 | }, 27 | plugins: [ 28 | new HtmlWebpackPlugin({ 29 | title: "Development", 30 | template: "index.html", 31 | }), 32 | ], 33 | module: { 34 | rules: [ 35 | { 36 | test: /\.(js|jsx)$/, 37 | exclude: /node_modules/, 38 | loader: "babel-loader", 39 | options: { 40 | presets: ["@babel/env", "@babel/react"], 41 | }, 42 | }, 43 | { 44 | test: /\.tsx?$/, 45 | exclude: /node_modules/, 46 | use: { 47 | loader: "ts-loader", 48 | options: { 49 | transpileOnly: true, 50 | }, 51 | }, 52 | }, 53 | { 54 | test: /\.s?css/, 55 | use: ["style-loader", "css-loader", "sass-loader"], 56 | }, 57 | { 58 | test: /\.(png|jpe?g|gif)$/i, 59 | loader: 'url-loader', 60 | options: { 61 | limit: 8192, 62 | }, 63 | }, 64 | ], 65 | }, 66 | devServer: { 67 | proxy: { 68 | "/socket.io": { 69 | target: "http://localhost:3003", 70 | ws: true, 71 | }, 72 | }, 73 | }, 74 | }; 75 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "errorqller", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "errorqller", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "dotenv": "^16.0.3", 13 | "express-graphql": "^0.12.0" 14 | }, 15 | "devDependencies": { 16 | "@types/express": "^4.17.17", 17 | "ts-node": "^10.9.1", 18 | "typescript": "^5.0.2" 19 | } 20 | }, 21 | "node_modules/@cspotcode/source-map-support": { 22 | "version": "0.8.1", 23 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 24 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 25 | "dev": true, 26 | "dependencies": { 27 | "@jridgewell/trace-mapping": "0.3.9" 28 | }, 29 | "engines": { 30 | "node": ">=12" 31 | } 32 | }, 33 | "node_modules/@jridgewell/resolve-uri": { 34 | "version": "3.1.0", 35 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 36 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 37 | "dev": true, 38 | "engines": { 39 | "node": ">=6.0.0" 40 | } 41 | }, 42 | "node_modules/@jridgewell/sourcemap-codec": { 43 | "version": "1.4.14", 44 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 45 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 46 | "dev": true 47 | }, 48 | "node_modules/@jridgewell/trace-mapping": { 49 | "version": "0.3.9", 50 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 51 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 52 | "dev": true, 53 | "dependencies": { 54 | "@jridgewell/resolve-uri": "^3.0.3", 55 | "@jridgewell/sourcemap-codec": "^1.4.10" 56 | } 57 | }, 58 | "node_modules/@tsconfig/node10": { 59 | "version": "1.0.9", 60 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 61 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 62 | "dev": true 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true 69 | }, 70 | "node_modules/@tsconfig/node14": { 71 | "version": "1.0.3", 72 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 73 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 74 | "dev": true 75 | }, 76 | "node_modules/@tsconfig/node16": { 77 | "version": "1.0.3", 78 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", 79 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 80 | "dev": true 81 | }, 82 | "node_modules/@types/body-parser": { 83 | "version": "1.19.2", 84 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", 85 | "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", 86 | "dev": true, 87 | "dependencies": { 88 | "@types/connect": "*", 89 | "@types/node": "*" 90 | } 91 | }, 92 | "node_modules/@types/connect": { 93 | "version": "3.4.35", 94 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", 95 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 96 | "dev": true, 97 | "dependencies": { 98 | "@types/node": "*" 99 | } 100 | }, 101 | "node_modules/@types/express": { 102 | "version": "4.17.17", 103 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", 104 | "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", 105 | "dev": true, 106 | "dependencies": { 107 | "@types/body-parser": "*", 108 | "@types/express-serve-static-core": "^4.17.33", 109 | "@types/qs": "*", 110 | "@types/serve-static": "*" 111 | } 112 | }, 113 | "node_modules/@types/express-serve-static-core": { 114 | "version": "4.17.33", 115 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", 116 | "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", 117 | "dev": true, 118 | "dependencies": { 119 | "@types/node": "*", 120 | "@types/qs": "*", 121 | "@types/range-parser": "*" 122 | } 123 | }, 124 | "node_modules/@types/mime": { 125 | "version": "3.0.1", 126 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", 127 | "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", 128 | "dev": true 129 | }, 130 | "node_modules/@types/node": { 131 | "version": "18.15.10", 132 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.10.tgz", 133 | "integrity": "sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==", 134 | "dev": true 135 | }, 136 | "node_modules/@types/qs": { 137 | "version": "6.9.7", 138 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", 139 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", 140 | "dev": true 141 | }, 142 | "node_modules/@types/range-parser": { 143 | "version": "1.2.4", 144 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 145 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 146 | "dev": true 147 | }, 148 | "node_modules/@types/serve-static": { 149 | "version": "1.15.1", 150 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", 151 | "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", 152 | "dev": true, 153 | "dependencies": { 154 | "@types/mime": "*", 155 | "@types/node": "*" 156 | } 157 | }, 158 | "node_modules/accepts": { 159 | "version": "1.3.8", 160 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 161 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 162 | "dependencies": { 163 | "mime-types": "~2.1.34", 164 | "negotiator": "0.6.3" 165 | }, 166 | "engines": { 167 | "node": ">= 0.6" 168 | } 169 | }, 170 | "node_modules/acorn": { 171 | "version": "8.8.2", 172 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 173 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 174 | "dev": true, 175 | "bin": { 176 | "acorn": "bin/acorn" 177 | }, 178 | "engines": { 179 | "node": ">=0.4.0" 180 | } 181 | }, 182 | "node_modules/acorn-walk": { 183 | "version": "8.2.0", 184 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 185 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 186 | "dev": true, 187 | "engines": { 188 | "node": ">=0.4.0" 189 | } 190 | }, 191 | "node_modules/arg": { 192 | "version": "4.1.3", 193 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 194 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 195 | "dev": true 196 | }, 197 | "node_modules/bytes": { 198 | "version": "3.1.2", 199 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 200 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 201 | "engines": { 202 | "node": ">= 0.8" 203 | } 204 | }, 205 | "node_modules/content-type": { 206 | "version": "1.0.5", 207 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 208 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 209 | "engines": { 210 | "node": ">= 0.6" 211 | } 212 | }, 213 | "node_modules/create-require": { 214 | "version": "1.1.1", 215 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 216 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 217 | "dev": true 218 | }, 219 | "node_modules/depd": { 220 | "version": "1.1.2", 221 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 222 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 223 | "engines": { 224 | "node": ">= 0.6" 225 | } 226 | }, 227 | "node_modules/diff": { 228 | "version": "4.0.2", 229 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 230 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 231 | "dev": true, 232 | "engines": { 233 | "node": ">=0.3.1" 234 | } 235 | }, 236 | "node_modules/dotenv": { 237 | "version": "16.0.3", 238 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 239 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 240 | "engines": { 241 | "node": ">=12" 242 | } 243 | }, 244 | "node_modules/express-graphql": { 245 | "version": "0.12.0", 246 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 247 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 248 | "dependencies": { 249 | "accepts": "^1.3.7", 250 | "content-type": "^1.0.4", 251 | "http-errors": "1.8.0", 252 | "raw-body": "^2.4.1" 253 | }, 254 | "engines": { 255 | "node": ">= 10.x" 256 | }, 257 | "peerDependencies": { 258 | "graphql": "^14.7.0 || ^15.3.0" 259 | } 260 | }, 261 | "node_modules/graphql": { 262 | "version": "15.8.0", 263 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", 264 | "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", 265 | "peer": true, 266 | "engines": { 267 | "node": ">= 10.x" 268 | } 269 | }, 270 | "node_modules/http-errors": { 271 | "version": "1.8.0", 272 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 273 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 274 | "dependencies": { 275 | "depd": "~1.1.2", 276 | "inherits": "2.0.4", 277 | "setprototypeof": "1.2.0", 278 | "statuses": ">= 1.5.0 < 2", 279 | "toidentifier": "1.0.0" 280 | }, 281 | "engines": { 282 | "node": ">= 0.6" 283 | } 284 | }, 285 | "node_modules/iconv-lite": { 286 | "version": "0.4.24", 287 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 288 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 289 | "dependencies": { 290 | "safer-buffer": ">= 2.1.2 < 3" 291 | }, 292 | "engines": { 293 | "node": ">=0.10.0" 294 | } 295 | }, 296 | "node_modules/inherits": { 297 | "version": "2.0.4", 298 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 299 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 300 | }, 301 | "node_modules/make-error": { 302 | "version": "1.3.6", 303 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 304 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 305 | "dev": true 306 | }, 307 | "node_modules/mime-db": { 308 | "version": "1.52.0", 309 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 310 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 311 | "engines": { 312 | "node": ">= 0.6" 313 | } 314 | }, 315 | "node_modules/mime-types": { 316 | "version": "2.1.35", 317 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 318 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 319 | "dependencies": { 320 | "mime-db": "1.52.0" 321 | }, 322 | "engines": { 323 | "node": ">= 0.6" 324 | } 325 | }, 326 | "node_modules/negotiator": { 327 | "version": "0.6.3", 328 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 329 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 330 | "engines": { 331 | "node": ">= 0.6" 332 | } 333 | }, 334 | "node_modules/raw-body": { 335 | "version": "2.5.2", 336 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 337 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 338 | "dependencies": { 339 | "bytes": "3.1.2", 340 | "http-errors": "2.0.0", 341 | "iconv-lite": "0.4.24", 342 | "unpipe": "1.0.0" 343 | }, 344 | "engines": { 345 | "node": ">= 0.8" 346 | } 347 | }, 348 | "node_modules/raw-body/node_modules/depd": { 349 | "version": "2.0.0", 350 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 351 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 352 | "engines": { 353 | "node": ">= 0.8" 354 | } 355 | }, 356 | "node_modules/raw-body/node_modules/http-errors": { 357 | "version": "2.0.0", 358 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 359 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 360 | "dependencies": { 361 | "depd": "2.0.0", 362 | "inherits": "2.0.4", 363 | "setprototypeof": "1.2.0", 364 | "statuses": "2.0.1", 365 | "toidentifier": "1.0.1" 366 | }, 367 | "engines": { 368 | "node": ">= 0.8" 369 | } 370 | }, 371 | "node_modules/raw-body/node_modules/statuses": { 372 | "version": "2.0.1", 373 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 374 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 375 | "engines": { 376 | "node": ">= 0.8" 377 | } 378 | }, 379 | "node_modules/raw-body/node_modules/toidentifier": { 380 | "version": "1.0.1", 381 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 382 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 383 | "engines": { 384 | "node": ">=0.6" 385 | } 386 | }, 387 | "node_modules/safer-buffer": { 388 | "version": "2.1.2", 389 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 390 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 391 | }, 392 | "node_modules/setprototypeof": { 393 | "version": "1.2.0", 394 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 395 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 396 | }, 397 | "node_modules/statuses": { 398 | "version": "1.5.0", 399 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 400 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", 401 | "engines": { 402 | "node": ">= 0.6" 403 | } 404 | }, 405 | "node_modules/toidentifier": { 406 | "version": "1.0.0", 407 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 408 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", 409 | "engines": { 410 | "node": ">=0.6" 411 | } 412 | }, 413 | "node_modules/ts-node": { 414 | "version": "10.9.1", 415 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 416 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 417 | "dev": true, 418 | "dependencies": { 419 | "@cspotcode/source-map-support": "^0.8.0", 420 | "@tsconfig/node10": "^1.0.7", 421 | "@tsconfig/node12": "^1.0.7", 422 | "@tsconfig/node14": "^1.0.0", 423 | "@tsconfig/node16": "^1.0.2", 424 | "acorn": "^8.4.1", 425 | "acorn-walk": "^8.1.1", 426 | "arg": "^4.1.0", 427 | "create-require": "^1.1.0", 428 | "diff": "^4.0.1", 429 | "make-error": "^1.1.1", 430 | "v8-compile-cache-lib": "^3.0.1", 431 | "yn": "3.1.1" 432 | }, 433 | "bin": { 434 | "ts-node": "dist/bin.js", 435 | "ts-node-cwd": "dist/bin-cwd.js", 436 | "ts-node-esm": "dist/bin-esm.js", 437 | "ts-node-script": "dist/bin-script.js", 438 | "ts-node-transpile-only": "dist/bin-transpile.js", 439 | "ts-script": "dist/bin-script-deprecated.js" 440 | }, 441 | "peerDependencies": { 442 | "@swc/core": ">=1.2.50", 443 | "@swc/wasm": ">=1.2.50", 444 | "@types/node": "*", 445 | "typescript": ">=2.7" 446 | }, 447 | "peerDependenciesMeta": { 448 | "@swc/core": { 449 | "optional": true 450 | }, 451 | "@swc/wasm": { 452 | "optional": true 453 | } 454 | } 455 | }, 456 | "node_modules/typescript": { 457 | "version": "5.0.2", 458 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", 459 | "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", 460 | "dev": true, 461 | "bin": { 462 | "tsc": "bin/tsc", 463 | "tsserver": "bin/tsserver" 464 | }, 465 | "engines": { 466 | "node": ">=12.20" 467 | } 468 | }, 469 | "node_modules/unpipe": { 470 | "version": "1.0.0", 471 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 472 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 473 | "engines": { 474 | "node": ">= 0.8" 475 | } 476 | }, 477 | "node_modules/v8-compile-cache-lib": { 478 | "version": "3.0.1", 479 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 480 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 481 | "dev": true 482 | }, 483 | "node_modules/yn": { 484 | "version": "3.1.1", 485 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 486 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 487 | "dev": true, 488 | "engines": { 489 | "node": ">=6" 490 | } 491 | } 492 | }, 493 | "dependencies": { 494 | "@cspotcode/source-map-support": { 495 | "version": "0.8.1", 496 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 497 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 498 | "dev": true, 499 | "requires": { 500 | "@jridgewell/trace-mapping": "0.3.9" 501 | } 502 | }, 503 | "@jridgewell/resolve-uri": { 504 | "version": "3.1.0", 505 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 506 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 507 | "dev": true 508 | }, 509 | "@jridgewell/sourcemap-codec": { 510 | "version": "1.4.14", 511 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 512 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 513 | "dev": true 514 | }, 515 | "@jridgewell/trace-mapping": { 516 | "version": "0.3.9", 517 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 518 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 519 | "dev": true, 520 | "requires": { 521 | "@jridgewell/resolve-uri": "^3.0.3", 522 | "@jridgewell/sourcemap-codec": "^1.4.10" 523 | } 524 | }, 525 | "@tsconfig/node10": { 526 | "version": "1.0.9", 527 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 528 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 529 | "dev": true 530 | }, 531 | "@tsconfig/node12": { 532 | "version": "1.0.11", 533 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 534 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 535 | "dev": true 536 | }, 537 | "@tsconfig/node14": { 538 | "version": "1.0.3", 539 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 540 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 541 | "dev": true 542 | }, 543 | "@tsconfig/node16": { 544 | "version": "1.0.3", 545 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", 546 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 547 | "dev": true 548 | }, 549 | "@types/body-parser": { 550 | "version": "1.19.2", 551 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", 552 | "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", 553 | "dev": true, 554 | "requires": { 555 | "@types/connect": "*", 556 | "@types/node": "*" 557 | } 558 | }, 559 | "@types/connect": { 560 | "version": "3.4.35", 561 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", 562 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 563 | "dev": true, 564 | "requires": { 565 | "@types/node": "*" 566 | } 567 | }, 568 | "@types/express": { 569 | "version": "4.17.17", 570 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", 571 | "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", 572 | "dev": true, 573 | "requires": { 574 | "@types/body-parser": "*", 575 | "@types/express-serve-static-core": "^4.17.33", 576 | "@types/qs": "*", 577 | "@types/serve-static": "*" 578 | } 579 | }, 580 | "@types/express-serve-static-core": { 581 | "version": "4.17.33", 582 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", 583 | "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", 584 | "dev": true, 585 | "requires": { 586 | "@types/node": "*", 587 | "@types/qs": "*", 588 | "@types/range-parser": "*" 589 | } 590 | }, 591 | "@types/mime": { 592 | "version": "3.0.1", 593 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", 594 | "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", 595 | "dev": true 596 | }, 597 | "@types/node": { 598 | "version": "18.15.10", 599 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.10.tgz", 600 | "integrity": "sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==", 601 | "dev": true 602 | }, 603 | "@types/qs": { 604 | "version": "6.9.7", 605 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", 606 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", 607 | "dev": true 608 | }, 609 | "@types/range-parser": { 610 | "version": "1.2.4", 611 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 612 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 613 | "dev": true 614 | }, 615 | "@types/serve-static": { 616 | "version": "1.15.1", 617 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", 618 | "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", 619 | "dev": true, 620 | "requires": { 621 | "@types/mime": "*", 622 | "@types/node": "*" 623 | } 624 | }, 625 | "accepts": { 626 | "version": "1.3.8", 627 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 628 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 629 | "requires": { 630 | "mime-types": "~2.1.34", 631 | "negotiator": "0.6.3" 632 | } 633 | }, 634 | "acorn": { 635 | "version": "8.8.2", 636 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 637 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 638 | "dev": true 639 | }, 640 | "acorn-walk": { 641 | "version": "8.2.0", 642 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 643 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 644 | "dev": true 645 | }, 646 | "arg": { 647 | "version": "4.1.3", 648 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 649 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 650 | "dev": true 651 | }, 652 | "bytes": { 653 | "version": "3.1.2", 654 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 655 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 656 | }, 657 | "content-type": { 658 | "version": "1.0.5", 659 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 660 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" 661 | }, 662 | "create-require": { 663 | "version": "1.1.1", 664 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 665 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 666 | "dev": true 667 | }, 668 | "depd": { 669 | "version": "1.1.2", 670 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 671 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" 672 | }, 673 | "diff": { 674 | "version": "4.0.2", 675 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 676 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 677 | "dev": true 678 | }, 679 | "dotenv": { 680 | "version": "16.0.3", 681 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 682 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" 683 | }, 684 | "express-graphql": { 685 | "version": "0.12.0", 686 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 687 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 688 | "requires": { 689 | "accepts": "^1.3.7", 690 | "content-type": "^1.0.4", 691 | "http-errors": "1.8.0", 692 | "raw-body": "^2.4.1" 693 | } 694 | }, 695 | "graphql": { 696 | "version": "15.8.0", 697 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", 698 | "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", 699 | "peer": true 700 | }, 701 | "http-errors": { 702 | "version": "1.8.0", 703 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 704 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 705 | "requires": { 706 | "depd": "~1.1.2", 707 | "inherits": "2.0.4", 708 | "setprototypeof": "1.2.0", 709 | "statuses": ">= 1.5.0 < 2", 710 | "toidentifier": "1.0.0" 711 | } 712 | }, 713 | "iconv-lite": { 714 | "version": "0.4.24", 715 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 716 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 717 | "requires": { 718 | "safer-buffer": ">= 2.1.2 < 3" 719 | } 720 | }, 721 | "inherits": { 722 | "version": "2.0.4", 723 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 724 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 725 | }, 726 | "make-error": { 727 | "version": "1.3.6", 728 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 729 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 730 | "dev": true 731 | }, 732 | "mime-db": { 733 | "version": "1.52.0", 734 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 735 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 736 | }, 737 | "mime-types": { 738 | "version": "2.1.35", 739 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 740 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 741 | "requires": { 742 | "mime-db": "1.52.0" 743 | } 744 | }, 745 | "negotiator": { 746 | "version": "0.6.3", 747 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 748 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 749 | }, 750 | "raw-body": { 751 | "version": "2.5.2", 752 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 753 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 754 | "requires": { 755 | "bytes": "3.1.2", 756 | "http-errors": "2.0.0", 757 | "iconv-lite": "0.4.24", 758 | "unpipe": "1.0.0" 759 | }, 760 | "dependencies": { 761 | "depd": { 762 | "version": "2.0.0", 763 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 764 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 765 | }, 766 | "http-errors": { 767 | "version": "2.0.0", 768 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 769 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 770 | "requires": { 771 | "depd": "2.0.0", 772 | "inherits": "2.0.4", 773 | "setprototypeof": "1.2.0", 774 | "statuses": "2.0.1", 775 | "toidentifier": "1.0.1" 776 | } 777 | }, 778 | "statuses": { 779 | "version": "2.0.1", 780 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 781 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 782 | }, 783 | "toidentifier": { 784 | "version": "1.0.1", 785 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 786 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 787 | } 788 | } 789 | }, 790 | "safer-buffer": { 791 | "version": "2.1.2", 792 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 793 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 794 | }, 795 | "setprototypeof": { 796 | "version": "1.2.0", 797 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 798 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 799 | }, 800 | "statuses": { 801 | "version": "1.5.0", 802 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 803 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" 804 | }, 805 | "toidentifier": { 806 | "version": "1.0.0", 807 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 808 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 809 | }, 810 | "ts-node": { 811 | "version": "10.9.1", 812 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 813 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 814 | "dev": true, 815 | "requires": { 816 | "@cspotcode/source-map-support": "^0.8.0", 817 | "@tsconfig/node10": "^1.0.7", 818 | "@tsconfig/node12": "^1.0.7", 819 | "@tsconfig/node14": "^1.0.0", 820 | "@tsconfig/node16": "^1.0.2", 821 | "acorn": "^8.4.1", 822 | "acorn-walk": "^8.1.1", 823 | "arg": "^4.1.0", 824 | "create-require": "^1.1.0", 825 | "diff": "^4.0.1", 826 | "make-error": "^1.1.1", 827 | "v8-compile-cache-lib": "^3.0.1", 828 | "yn": "3.1.1" 829 | } 830 | }, 831 | "typescript": { 832 | "version": "5.0.2", 833 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", 834 | "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", 835 | "dev": true 836 | }, 837 | "unpipe": { 838 | "version": "1.0.0", 839 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 840 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 841 | }, 842 | "v8-compile-cache-lib": { 843 | "version": "3.0.1", 844 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 845 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 846 | "dev": true 847 | }, 848 | "yn": { 849 | "version": "3.1.1", 850 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 851 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 852 | "dev": true 853 | } 854 | } 855 | } 856 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "errorqller", 3 | "version": "1.0.0", 4 | "description": "We kill errors", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "server": "nodemon server/server.js", 9 | "dev": "cd server && npm start & cd client && npm start", 10 | "build": "webpack --config webpack.config.js --progress --color", 11 | "start-server": "npm run start-server --prefix server", 12 | "start-client": "npm start --prefix client" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/oslabs-beta/ErrorQLler.git" 17 | }, 18 | "author": "James, Noah, Lily, Jake", 19 | "license": "ISC", 20 | "bugs": { 21 | "url": "https://github.com/oslabs-beta/ErrorQLler/issues" 22 | }, 23 | "homepage": "https://github.com/oslabs-beta/ErrorQLler#readme", 24 | "dependencies": { 25 | "dotenv": "^16.0.3", 26 | "express-graphql": "^0.12.0" 27 | }, 28 | "devDependencies": { 29 | "@types/express": "^4.17.17", 30 | "ts-node": "^10.9.1", 31 | "typescript": "^5.0.2" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /server/helpers/transformData.ts: -------------------------------------------------------------------------------- 1 | import originRespModel from '../models/originRespModel'; 2 | import SECRET from '../server'; 3 | 4 | interface Input { 5 | [key: string]: Record | string; 6 | } 7 | 8 | interface FieldObject { 9 | name: string; 10 | children: any[]; 11 | } 12 | 13 | interface RespObject { 14 | name: string; 15 | resp?: object | undefined; 16 | statusCode?: number | undefined; 17 | statusMsg?: string | undefined; 18 | children: any[]; 19 | } 20 | 21 | interface ResolverResp { 22 | response?: { 23 | alias: string; 24 | originResp?: Object; 25 | originRespStatus?: Number; 26 | originRespMessage?: string; 27 | }; 28 | } 29 | 30 | interface Output { 31 | name: string; 32 | children: any[]; 33 | } 34 | 35 | export const transformData = async (input: Input): Promise => { 36 | console.log('input: ', input) 37 | if (input === null || input === undefined) { 38 | // handle case where input is null or undefined 39 | return { name: 'data', children: [] }; 40 | } 41 | 42 | const resolverQueries = await originRespModel 43 | .find({ id: SECRET }) 44 | .sort({ timestamp: -1 }) 45 | .lean() 46 | .exec() 47 | .then((docs) => docs.reverse()); 48 | 49 | // function code here 50 | const output: Output = { name: 'data', children: [] }; 51 | //iterate through input object's alias 52 | for (let [inputKey, inputValue] of Object.entries(input)) { 53 | //matching the queries that are repeated, and taking the latest query that has been repeated 54 | const matchedQuery: ResolverResp | undefined = resolverQueries.filter( 55 | (obj: ResolverResp): boolean => { 56 | return obj.response?.alias === inputKey; 57 | } 58 | )[0]; 59 | const { originResp, originRespStatus, originRespMessage } = 60 | matchedQuery?.response || {}; 61 | const respObject: RespObject = { 62 | resp: originResp, 63 | statusCode: originRespStatus?.valueOf(), 64 | statusMsg: originRespMessage, 65 | name: inputKey, 66 | children: [], 67 | }; 68 | if (!inputValue) { 69 | inputValue = {}; 70 | } 71 | //iterate through the fields within alias 72 | for (const [fieldKey, fieldValue] of Object.entries(inputValue)) { 73 | if (!Object.keys(inputValue).length) { 74 | continue; 75 | } 76 | //if field value does not exist or has the value of null, push in an empty array into children field 77 | if (!fieldValue) { 78 | const fieldObject: FieldObject = { 79 | name: fieldKey, 80 | children: [], 81 | }; 82 | respObject.children.push(fieldObject); 83 | } 84 | else { 85 | const fieldObject = { 86 | name: fieldKey, 87 | children: [{ name: fieldValue }], 88 | }; 89 | respObject.children.push(fieldObject); 90 | } 91 | } 92 | output.children.push(respObject); 93 | } 94 | console.log('output: ', output) 95 | return output; 96 | }; 97 | -------------------------------------------------------------------------------- /server/models/originRespModel.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const originRespSchema = new mongoose.Schema( 4 | { id: { type: String }, response: { type: Object } }, 5 | { timestamps: true } 6 | ); 7 | 8 | const OriginResp = mongoose.model("OriginResp", originRespSchema); 9 | 10 | export default OriginResp; 11 | -------------------------------------------------------------------------------- /server/models/queryResModel.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const queryResSchema = new mongoose.Schema( 4 | { id: { type: String }, response: { type: Object } }, 5 | { timestamps: true } 6 | ); 7 | 8 | const QueryRes = mongoose.model("QueryRes", queryResSchema); 9 | 10 | export default QueryRes; 11 | -------------------------------------------------------------------------------- /server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "server", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@types/socket.io": "^3.0.2", 13 | "@types/ws": "^8.5.4", 14 | "cors": "^2.8.5", 15 | "dotenv": "^16.0.3", 16 | "express": "^4.18.2", 17 | "express-graphql": "^0.12.0", 18 | "express-ws": "^5.0.2", 19 | "mongoose": "^7.0.3", 20 | "socket.io": "^4.6.1", 21 | "uuid": "^9.0.0", 22 | "ws": "^8.13.0" 23 | }, 24 | "devDependencies": { 25 | "@types/express": "^4.17.17", 26 | "@types/uuid": "^9.0.1", 27 | "nodemon": "^2.0.20" 28 | } 29 | }, 30 | "node_modules/@socket.io/component-emitter": { 31 | "version": "3.1.0", 32 | "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", 33 | "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" 34 | }, 35 | "node_modules/@types/body-parser": { 36 | "version": "1.19.2", 37 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", 38 | "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", 39 | "dev": true, 40 | "dependencies": { 41 | "@types/connect": "*", 42 | "@types/node": "*" 43 | } 44 | }, 45 | "node_modules/@types/connect": { 46 | "version": "3.4.35", 47 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", 48 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 49 | "dev": true, 50 | "dependencies": { 51 | "@types/node": "*" 52 | } 53 | }, 54 | "node_modules/@types/cookie": { 55 | "version": "0.4.1", 56 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", 57 | "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" 58 | }, 59 | "node_modules/@types/cors": { 60 | "version": "2.8.13", 61 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", 62 | "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", 63 | "dependencies": { 64 | "@types/node": "*" 65 | } 66 | }, 67 | "node_modules/@types/express": { 68 | "version": "4.17.17", 69 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", 70 | "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", 71 | "dev": true, 72 | "dependencies": { 73 | "@types/body-parser": "*", 74 | "@types/express-serve-static-core": "^4.17.33", 75 | "@types/qs": "*", 76 | "@types/serve-static": "*" 77 | } 78 | }, 79 | "node_modules/@types/express-serve-static-core": { 80 | "version": "4.17.33", 81 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", 82 | "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", 83 | "dev": true, 84 | "dependencies": { 85 | "@types/node": "*", 86 | "@types/qs": "*", 87 | "@types/range-parser": "*" 88 | } 89 | }, 90 | "node_modules/@types/mime": { 91 | "version": "3.0.1", 92 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", 93 | "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", 94 | "dev": true 95 | }, 96 | "node_modules/@types/node": { 97 | "version": "18.14.0", 98 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", 99 | "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" 100 | }, 101 | "node_modules/@types/qs": { 102 | "version": "6.9.7", 103 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", 104 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", 105 | "dev": true 106 | }, 107 | "node_modules/@types/range-parser": { 108 | "version": "1.2.4", 109 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 110 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 111 | "dev": true 112 | }, 113 | "node_modules/@types/serve-static": { 114 | "version": "1.15.1", 115 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", 116 | "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", 117 | "dev": true, 118 | "dependencies": { 119 | "@types/mime": "*", 120 | "@types/node": "*" 121 | } 122 | }, 123 | "node_modules/@types/socket.io": { 124 | "version": "3.0.2", 125 | "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-3.0.2.tgz", 126 | "integrity": "sha512-pu0sN9m5VjCxBZVK8hW37ZcMe8rjn4HHggBN5CbaRTvFwv5jOmuIRZEuddsBPa9Th0ts0SIo3Niukq+95cMBbQ==", 127 | "deprecated": "This is a stub types definition. socket.io provides its own type definitions, so you do not need this installed.", 128 | "dependencies": { 129 | "socket.io": "*" 130 | } 131 | }, 132 | "node_modules/@types/uuid": { 133 | "version": "9.0.1", 134 | "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", 135 | "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", 136 | "dev": true 137 | }, 138 | "node_modules/@types/webidl-conversions": { 139 | "version": "7.0.0", 140 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 141 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 142 | }, 143 | "node_modules/@types/whatwg-url": { 144 | "version": "8.2.2", 145 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 146 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 147 | "dependencies": { 148 | "@types/node": "*", 149 | "@types/webidl-conversions": "*" 150 | } 151 | }, 152 | "node_modules/@types/ws": { 153 | "version": "8.5.4", 154 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", 155 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 156 | "dependencies": { 157 | "@types/node": "*" 158 | } 159 | }, 160 | "node_modules/abbrev": { 161 | "version": "1.1.1", 162 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 163 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 164 | "dev": true 165 | }, 166 | "node_modules/accepts": { 167 | "version": "1.3.8", 168 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 169 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 170 | "dependencies": { 171 | "mime-types": "~2.1.34", 172 | "negotiator": "0.6.3" 173 | }, 174 | "engines": { 175 | "node": ">= 0.6" 176 | } 177 | }, 178 | "node_modules/anymatch": { 179 | "version": "3.1.3", 180 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 181 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 182 | "dev": true, 183 | "dependencies": { 184 | "normalize-path": "^3.0.0", 185 | "picomatch": "^2.0.4" 186 | }, 187 | "engines": { 188 | "node": ">= 8" 189 | } 190 | }, 191 | "node_modules/array-flatten": { 192 | "version": "1.1.1", 193 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 194 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 195 | }, 196 | "node_modules/balanced-match": { 197 | "version": "1.0.2", 198 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 199 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 200 | "dev": true 201 | }, 202 | "node_modules/base64id": { 203 | "version": "2.0.0", 204 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 205 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", 206 | "engines": { 207 | "node": "^4.5.0 || >= 5.9" 208 | } 209 | }, 210 | "node_modules/binary-extensions": { 211 | "version": "2.2.0", 212 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 213 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 214 | "dev": true, 215 | "engines": { 216 | "node": ">=8" 217 | } 218 | }, 219 | "node_modules/body-parser": { 220 | "version": "1.20.1", 221 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 222 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 223 | "dependencies": { 224 | "bytes": "3.1.2", 225 | "content-type": "~1.0.4", 226 | "debug": "2.6.9", 227 | "depd": "2.0.0", 228 | "destroy": "1.2.0", 229 | "http-errors": "2.0.0", 230 | "iconv-lite": "0.4.24", 231 | "on-finished": "2.4.1", 232 | "qs": "6.11.0", 233 | "raw-body": "2.5.1", 234 | "type-is": "~1.6.18", 235 | "unpipe": "1.0.0" 236 | }, 237 | "engines": { 238 | "node": ">= 0.8", 239 | "npm": "1.2.8000 || >= 1.4.16" 240 | } 241 | }, 242 | "node_modules/brace-expansion": { 243 | "version": "1.1.11", 244 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 245 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 246 | "dev": true, 247 | "dependencies": { 248 | "balanced-match": "^1.0.0", 249 | "concat-map": "0.0.1" 250 | } 251 | }, 252 | "node_modules/braces": { 253 | "version": "3.0.2", 254 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 255 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 256 | "dev": true, 257 | "dependencies": { 258 | "fill-range": "^7.0.1" 259 | }, 260 | "engines": { 261 | "node": ">=8" 262 | } 263 | }, 264 | "node_modules/bson": { 265 | "version": "5.1.0", 266 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.1.0.tgz", 267 | "integrity": "sha512-FEecNHkhYRBe7X9KDkdG12xNuz5VHGeH6mCE0B5sBmYtiR/Ux/9vUH/v4NUoBCDr6NuEhvahjoLiiRogptVW0A==", 268 | "engines": { 269 | "node": ">=14.20.1" 270 | } 271 | }, 272 | "node_modules/bytes": { 273 | "version": "3.1.2", 274 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 275 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 276 | "engines": { 277 | "node": ">= 0.8" 278 | } 279 | }, 280 | "node_modules/call-bind": { 281 | "version": "1.0.2", 282 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 283 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 284 | "dependencies": { 285 | "function-bind": "^1.1.1", 286 | "get-intrinsic": "^1.0.2" 287 | }, 288 | "funding": { 289 | "url": "https://github.com/sponsors/ljharb" 290 | } 291 | }, 292 | "node_modules/chokidar": { 293 | "version": "3.5.3", 294 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 295 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 296 | "dev": true, 297 | "funding": [ 298 | { 299 | "type": "individual", 300 | "url": "https://paulmillr.com/funding/" 301 | } 302 | ], 303 | "dependencies": { 304 | "anymatch": "~3.1.2", 305 | "braces": "~3.0.2", 306 | "glob-parent": "~5.1.2", 307 | "is-binary-path": "~2.1.0", 308 | "is-glob": "~4.0.1", 309 | "normalize-path": "~3.0.0", 310 | "readdirp": "~3.6.0" 311 | }, 312 | "engines": { 313 | "node": ">= 8.10.0" 314 | }, 315 | "optionalDependencies": { 316 | "fsevents": "~2.3.2" 317 | } 318 | }, 319 | "node_modules/concat-map": { 320 | "version": "0.0.1", 321 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 322 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 323 | "dev": true 324 | }, 325 | "node_modules/content-disposition": { 326 | "version": "0.5.4", 327 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 328 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 329 | "dependencies": { 330 | "safe-buffer": "5.2.1" 331 | }, 332 | "engines": { 333 | "node": ">= 0.6" 334 | } 335 | }, 336 | "node_modules/content-type": { 337 | "version": "1.0.5", 338 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 339 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 340 | "engines": { 341 | "node": ">= 0.6" 342 | } 343 | }, 344 | "node_modules/cookie": { 345 | "version": "0.5.0", 346 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 347 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 348 | "engines": { 349 | "node": ">= 0.6" 350 | } 351 | }, 352 | "node_modules/cookie-signature": { 353 | "version": "1.0.6", 354 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 355 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 356 | }, 357 | "node_modules/cors": { 358 | "version": "2.8.5", 359 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 360 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 361 | "dependencies": { 362 | "object-assign": "^4", 363 | "vary": "^1" 364 | }, 365 | "engines": { 366 | "node": ">= 0.10" 367 | } 368 | }, 369 | "node_modules/debug": { 370 | "version": "2.6.9", 371 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 372 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 373 | "dependencies": { 374 | "ms": "2.0.0" 375 | } 376 | }, 377 | "node_modules/depd": { 378 | "version": "2.0.0", 379 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 380 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 381 | "engines": { 382 | "node": ">= 0.8" 383 | } 384 | }, 385 | "node_modules/destroy": { 386 | "version": "1.2.0", 387 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 388 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 389 | "engines": { 390 | "node": ">= 0.8", 391 | "npm": "1.2.8000 || >= 1.4.16" 392 | } 393 | }, 394 | "node_modules/dotenv": { 395 | "version": "16.0.3", 396 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 397 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 398 | "engines": { 399 | "node": ">=12" 400 | } 401 | }, 402 | "node_modules/ee-first": { 403 | "version": "1.1.1", 404 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 405 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 406 | }, 407 | "node_modules/encodeurl": { 408 | "version": "1.0.2", 409 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 410 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 411 | "engines": { 412 | "node": ">= 0.8" 413 | } 414 | }, 415 | "node_modules/engine.io": { 416 | "version": "6.4.1", 417 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", 418 | "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", 419 | "dependencies": { 420 | "@types/cookie": "^0.4.1", 421 | "@types/cors": "^2.8.12", 422 | "@types/node": ">=10.0.0", 423 | "accepts": "~1.3.4", 424 | "base64id": "2.0.0", 425 | "cookie": "~0.4.1", 426 | "cors": "~2.8.5", 427 | "debug": "~4.3.1", 428 | "engine.io-parser": "~5.0.3", 429 | "ws": "~8.11.0" 430 | }, 431 | "engines": { 432 | "node": ">=10.0.0" 433 | } 434 | }, 435 | "node_modules/engine.io-parser": { 436 | "version": "5.0.6", 437 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", 438 | "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", 439 | "engines": { 440 | "node": ">=10.0.0" 441 | } 442 | }, 443 | "node_modules/engine.io/node_modules/cookie": { 444 | "version": "0.4.2", 445 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 446 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", 447 | "engines": { 448 | "node": ">= 0.6" 449 | } 450 | }, 451 | "node_modules/engine.io/node_modules/debug": { 452 | "version": "4.3.4", 453 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 454 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 455 | "dependencies": { 456 | "ms": "2.1.2" 457 | }, 458 | "engines": { 459 | "node": ">=6.0" 460 | }, 461 | "peerDependenciesMeta": { 462 | "supports-color": { 463 | "optional": true 464 | } 465 | } 466 | }, 467 | "node_modules/engine.io/node_modules/ms": { 468 | "version": "2.1.2", 469 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 470 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 471 | }, 472 | "node_modules/engine.io/node_modules/ws": { 473 | "version": "8.11.0", 474 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", 475 | "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", 476 | "engines": { 477 | "node": ">=10.0.0" 478 | }, 479 | "peerDependencies": { 480 | "bufferutil": "^4.0.1", 481 | "utf-8-validate": "^5.0.2" 482 | }, 483 | "peerDependenciesMeta": { 484 | "bufferutil": { 485 | "optional": true 486 | }, 487 | "utf-8-validate": { 488 | "optional": true 489 | } 490 | } 491 | }, 492 | "node_modules/escape-html": { 493 | "version": "1.0.3", 494 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 495 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 496 | }, 497 | "node_modules/etag": { 498 | "version": "1.8.1", 499 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 500 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 501 | "engines": { 502 | "node": ">= 0.6" 503 | } 504 | }, 505 | "node_modules/express": { 506 | "version": "4.18.2", 507 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 508 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 509 | "dependencies": { 510 | "accepts": "~1.3.8", 511 | "array-flatten": "1.1.1", 512 | "body-parser": "1.20.1", 513 | "content-disposition": "0.5.4", 514 | "content-type": "~1.0.4", 515 | "cookie": "0.5.0", 516 | "cookie-signature": "1.0.6", 517 | "debug": "2.6.9", 518 | "depd": "2.0.0", 519 | "encodeurl": "~1.0.2", 520 | "escape-html": "~1.0.3", 521 | "etag": "~1.8.1", 522 | "finalhandler": "1.2.0", 523 | "fresh": "0.5.2", 524 | "http-errors": "2.0.0", 525 | "merge-descriptors": "1.0.1", 526 | "methods": "~1.1.2", 527 | "on-finished": "2.4.1", 528 | "parseurl": "~1.3.3", 529 | "path-to-regexp": "0.1.7", 530 | "proxy-addr": "~2.0.7", 531 | "qs": "6.11.0", 532 | "range-parser": "~1.2.1", 533 | "safe-buffer": "5.2.1", 534 | "send": "0.18.0", 535 | "serve-static": "1.15.0", 536 | "setprototypeof": "1.2.0", 537 | "statuses": "2.0.1", 538 | "type-is": "~1.6.18", 539 | "utils-merge": "1.0.1", 540 | "vary": "~1.1.2" 541 | }, 542 | "engines": { 543 | "node": ">= 0.10.0" 544 | } 545 | }, 546 | "node_modules/express-graphql": { 547 | "version": "0.12.0", 548 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 549 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 550 | "dependencies": { 551 | "accepts": "^1.3.7", 552 | "content-type": "^1.0.4", 553 | "http-errors": "1.8.0", 554 | "raw-body": "^2.4.1" 555 | }, 556 | "engines": { 557 | "node": ">= 10.x" 558 | }, 559 | "peerDependencies": { 560 | "graphql": "^14.7.0 || ^15.3.0" 561 | } 562 | }, 563 | "node_modules/express-graphql/node_modules/depd": { 564 | "version": "1.1.2", 565 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 566 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 567 | "engines": { 568 | "node": ">= 0.6" 569 | } 570 | }, 571 | "node_modules/express-graphql/node_modules/http-errors": { 572 | "version": "1.8.0", 573 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 574 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 575 | "dependencies": { 576 | "depd": "~1.1.2", 577 | "inherits": "2.0.4", 578 | "setprototypeof": "1.2.0", 579 | "statuses": ">= 1.5.0 < 2", 580 | "toidentifier": "1.0.0" 581 | }, 582 | "engines": { 583 | "node": ">= 0.6" 584 | } 585 | }, 586 | "node_modules/express-graphql/node_modules/statuses": { 587 | "version": "1.5.0", 588 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 589 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", 590 | "engines": { 591 | "node": ">= 0.6" 592 | } 593 | }, 594 | "node_modules/express-graphql/node_modules/toidentifier": { 595 | "version": "1.0.0", 596 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 597 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", 598 | "engines": { 599 | "node": ">=0.6" 600 | } 601 | }, 602 | "node_modules/express-ws": { 603 | "version": "5.0.2", 604 | "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-5.0.2.tgz", 605 | "integrity": "sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==", 606 | "dependencies": { 607 | "ws": "^7.4.6" 608 | }, 609 | "engines": { 610 | "node": ">=4.5.0" 611 | }, 612 | "peerDependencies": { 613 | "express": "^4.0.0 || ^5.0.0-alpha.1" 614 | } 615 | }, 616 | "node_modules/express-ws/node_modules/ws": { 617 | "version": "7.5.9", 618 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 619 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 620 | "engines": { 621 | "node": ">=8.3.0" 622 | }, 623 | "peerDependencies": { 624 | "bufferutil": "^4.0.1", 625 | "utf-8-validate": "^5.0.2" 626 | }, 627 | "peerDependenciesMeta": { 628 | "bufferutil": { 629 | "optional": true 630 | }, 631 | "utf-8-validate": { 632 | "optional": true 633 | } 634 | } 635 | }, 636 | "node_modules/fill-range": { 637 | "version": "7.0.1", 638 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 639 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 640 | "dev": true, 641 | "dependencies": { 642 | "to-regex-range": "^5.0.1" 643 | }, 644 | "engines": { 645 | "node": ">=8" 646 | } 647 | }, 648 | "node_modules/finalhandler": { 649 | "version": "1.2.0", 650 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 651 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 652 | "dependencies": { 653 | "debug": "2.6.9", 654 | "encodeurl": "~1.0.2", 655 | "escape-html": "~1.0.3", 656 | "on-finished": "2.4.1", 657 | "parseurl": "~1.3.3", 658 | "statuses": "2.0.1", 659 | "unpipe": "~1.0.0" 660 | }, 661 | "engines": { 662 | "node": ">= 0.8" 663 | } 664 | }, 665 | "node_modules/forwarded": { 666 | "version": "0.2.0", 667 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 668 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 669 | "engines": { 670 | "node": ">= 0.6" 671 | } 672 | }, 673 | "node_modules/fresh": { 674 | "version": "0.5.2", 675 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 676 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 677 | "engines": { 678 | "node": ">= 0.6" 679 | } 680 | }, 681 | "node_modules/fsevents": { 682 | "version": "2.3.2", 683 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 684 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 685 | "dev": true, 686 | "hasInstallScript": true, 687 | "optional": true, 688 | "os": [ 689 | "darwin" 690 | ], 691 | "engines": { 692 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 693 | } 694 | }, 695 | "node_modules/function-bind": { 696 | "version": "1.1.1", 697 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 698 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 699 | }, 700 | "node_modules/get-intrinsic": { 701 | "version": "1.2.0", 702 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 703 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 704 | "dependencies": { 705 | "function-bind": "^1.1.1", 706 | "has": "^1.0.3", 707 | "has-symbols": "^1.0.3" 708 | }, 709 | "funding": { 710 | "url": "https://github.com/sponsors/ljharb" 711 | } 712 | }, 713 | "node_modules/glob-parent": { 714 | "version": "5.1.2", 715 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 716 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 717 | "dev": true, 718 | "dependencies": { 719 | "is-glob": "^4.0.1" 720 | }, 721 | "engines": { 722 | "node": ">= 6" 723 | } 724 | }, 725 | "node_modules/graphql": { 726 | "version": "15.8.0", 727 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", 728 | "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", 729 | "peer": true, 730 | "engines": { 731 | "node": ">= 10.x" 732 | } 733 | }, 734 | "node_modules/has": { 735 | "version": "1.0.3", 736 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 737 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 738 | "dependencies": { 739 | "function-bind": "^1.1.1" 740 | }, 741 | "engines": { 742 | "node": ">= 0.4.0" 743 | } 744 | }, 745 | "node_modules/has-flag": { 746 | "version": "3.0.0", 747 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 748 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 749 | "dev": true, 750 | "engines": { 751 | "node": ">=4" 752 | } 753 | }, 754 | "node_modules/has-symbols": { 755 | "version": "1.0.3", 756 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 757 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 758 | "engines": { 759 | "node": ">= 0.4" 760 | }, 761 | "funding": { 762 | "url": "https://github.com/sponsors/ljharb" 763 | } 764 | }, 765 | "node_modules/http-errors": { 766 | "version": "2.0.0", 767 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 768 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 769 | "dependencies": { 770 | "depd": "2.0.0", 771 | "inherits": "2.0.4", 772 | "setprototypeof": "1.2.0", 773 | "statuses": "2.0.1", 774 | "toidentifier": "1.0.1" 775 | }, 776 | "engines": { 777 | "node": ">= 0.8" 778 | } 779 | }, 780 | "node_modules/iconv-lite": { 781 | "version": "0.4.24", 782 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 783 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 784 | "dependencies": { 785 | "safer-buffer": ">= 2.1.2 < 3" 786 | }, 787 | "engines": { 788 | "node": ">=0.10.0" 789 | } 790 | }, 791 | "node_modules/ignore-by-default": { 792 | "version": "1.0.1", 793 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 794 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 795 | "dev": true 796 | }, 797 | "node_modules/inherits": { 798 | "version": "2.0.4", 799 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 800 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 801 | }, 802 | "node_modules/ip": { 803 | "version": "2.0.0", 804 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 805 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 806 | }, 807 | "node_modules/ipaddr.js": { 808 | "version": "1.9.1", 809 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 810 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 811 | "engines": { 812 | "node": ">= 0.10" 813 | } 814 | }, 815 | "node_modules/is-binary-path": { 816 | "version": "2.1.0", 817 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 818 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 819 | "dev": true, 820 | "dependencies": { 821 | "binary-extensions": "^2.0.0" 822 | }, 823 | "engines": { 824 | "node": ">=8" 825 | } 826 | }, 827 | "node_modules/is-extglob": { 828 | "version": "2.1.1", 829 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 830 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 831 | "dev": true, 832 | "engines": { 833 | "node": ">=0.10.0" 834 | } 835 | }, 836 | "node_modules/is-glob": { 837 | "version": "4.0.3", 838 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 839 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 840 | "dev": true, 841 | "dependencies": { 842 | "is-extglob": "^2.1.1" 843 | }, 844 | "engines": { 845 | "node": ">=0.10.0" 846 | } 847 | }, 848 | "node_modules/is-number": { 849 | "version": "7.0.0", 850 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 851 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 852 | "dev": true, 853 | "engines": { 854 | "node": ">=0.12.0" 855 | } 856 | }, 857 | "node_modules/kareem": { 858 | "version": "2.5.1", 859 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 860 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 861 | "engines": { 862 | "node": ">=12.0.0" 863 | } 864 | }, 865 | "node_modules/media-typer": { 866 | "version": "0.3.0", 867 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 868 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 869 | "engines": { 870 | "node": ">= 0.6" 871 | } 872 | }, 873 | "node_modules/memory-pager": { 874 | "version": "1.5.0", 875 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 876 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 877 | "optional": true 878 | }, 879 | "node_modules/merge-descriptors": { 880 | "version": "1.0.1", 881 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 882 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 883 | }, 884 | "node_modules/methods": { 885 | "version": "1.1.2", 886 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 887 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 888 | "engines": { 889 | "node": ">= 0.6" 890 | } 891 | }, 892 | "node_modules/mime": { 893 | "version": "1.6.0", 894 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 895 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 896 | "bin": { 897 | "mime": "cli.js" 898 | }, 899 | "engines": { 900 | "node": ">=4" 901 | } 902 | }, 903 | "node_modules/mime-db": { 904 | "version": "1.52.0", 905 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 906 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 907 | "engines": { 908 | "node": ">= 0.6" 909 | } 910 | }, 911 | "node_modules/mime-types": { 912 | "version": "2.1.35", 913 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 914 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 915 | "dependencies": { 916 | "mime-db": "1.52.0" 917 | }, 918 | "engines": { 919 | "node": ">= 0.6" 920 | } 921 | }, 922 | "node_modules/minimatch": { 923 | "version": "3.1.2", 924 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 925 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 926 | "dev": true, 927 | "dependencies": { 928 | "brace-expansion": "^1.1.7" 929 | }, 930 | "engines": { 931 | "node": "*" 932 | } 933 | }, 934 | "node_modules/mongodb": { 935 | "version": "5.1.0", 936 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 937 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 938 | "dependencies": { 939 | "bson": "^5.0.1", 940 | "mongodb-connection-string-url": "^2.6.0", 941 | "socks": "^2.7.1" 942 | }, 943 | "engines": { 944 | "node": ">=14.20.1" 945 | }, 946 | "optionalDependencies": { 947 | "saslprep": "^1.0.3" 948 | }, 949 | "peerDependencies": { 950 | "@aws-sdk/credential-providers": "^3.201.0", 951 | "mongodb-client-encryption": "^2.3.0", 952 | "snappy": "^7.2.2" 953 | }, 954 | "peerDependenciesMeta": { 955 | "@aws-sdk/credential-providers": { 956 | "optional": true 957 | }, 958 | "mongodb-client-encryption": { 959 | "optional": true 960 | }, 961 | "snappy": { 962 | "optional": true 963 | } 964 | } 965 | }, 966 | "node_modules/mongodb-connection-string-url": { 967 | "version": "2.6.0", 968 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 969 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 970 | "dependencies": { 971 | "@types/whatwg-url": "^8.2.1", 972 | "whatwg-url": "^11.0.0" 973 | } 974 | }, 975 | "node_modules/mongoose": { 976 | "version": "7.0.3", 977 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.3.tgz", 978 | "integrity": "sha512-3n8vc1/mssuxKa6vfghSocp3MeiCFYzhX36Ok+PsDNNYzHC9tw3rNkAMLemIwZ2jgXqkZ7CfKOxkzjp/d/SWfg==", 979 | "dependencies": { 980 | "bson": "^5.0.1", 981 | "kareem": "2.5.1", 982 | "mongodb": "5.1.0", 983 | "mpath": "0.9.0", 984 | "mquery": "5.0.0", 985 | "ms": "2.1.3", 986 | "sift": "16.0.1" 987 | }, 988 | "engines": { 989 | "node": ">=14.0.0" 990 | }, 991 | "funding": { 992 | "type": "opencollective", 993 | "url": "https://opencollective.com/mongoose" 994 | } 995 | }, 996 | "node_modules/mongoose/node_modules/ms": { 997 | "version": "2.1.3", 998 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 999 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1000 | }, 1001 | "node_modules/mpath": { 1002 | "version": "0.9.0", 1003 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1004 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 1005 | "engines": { 1006 | "node": ">=4.0.0" 1007 | } 1008 | }, 1009 | "node_modules/mquery": { 1010 | "version": "5.0.0", 1011 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 1012 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 1013 | "dependencies": { 1014 | "debug": "4.x" 1015 | }, 1016 | "engines": { 1017 | "node": ">=14.0.0" 1018 | } 1019 | }, 1020 | "node_modules/mquery/node_modules/debug": { 1021 | "version": "4.3.4", 1022 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1023 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1024 | "dependencies": { 1025 | "ms": "2.1.2" 1026 | }, 1027 | "engines": { 1028 | "node": ">=6.0" 1029 | }, 1030 | "peerDependenciesMeta": { 1031 | "supports-color": { 1032 | "optional": true 1033 | } 1034 | } 1035 | }, 1036 | "node_modules/mquery/node_modules/ms": { 1037 | "version": "2.1.2", 1038 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1039 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1040 | }, 1041 | "node_modules/ms": { 1042 | "version": "2.0.0", 1043 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1044 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1045 | }, 1046 | "node_modules/negotiator": { 1047 | "version": "0.6.3", 1048 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1049 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1050 | "engines": { 1051 | "node": ">= 0.6" 1052 | } 1053 | }, 1054 | "node_modules/nodemon": { 1055 | "version": "2.0.20", 1056 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", 1057 | "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", 1058 | "dev": true, 1059 | "dependencies": { 1060 | "chokidar": "^3.5.2", 1061 | "debug": "^3.2.7", 1062 | "ignore-by-default": "^1.0.1", 1063 | "minimatch": "^3.1.2", 1064 | "pstree.remy": "^1.1.8", 1065 | "semver": "^5.7.1", 1066 | "simple-update-notifier": "^1.0.7", 1067 | "supports-color": "^5.5.0", 1068 | "touch": "^3.1.0", 1069 | "undefsafe": "^2.0.5" 1070 | }, 1071 | "bin": { 1072 | "nodemon": "bin/nodemon.js" 1073 | }, 1074 | "engines": { 1075 | "node": ">=8.10.0" 1076 | }, 1077 | "funding": { 1078 | "type": "opencollective", 1079 | "url": "https://opencollective.com/nodemon" 1080 | } 1081 | }, 1082 | "node_modules/nodemon/node_modules/debug": { 1083 | "version": "3.2.7", 1084 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1085 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1086 | "dev": true, 1087 | "dependencies": { 1088 | "ms": "^2.1.1" 1089 | } 1090 | }, 1091 | "node_modules/nodemon/node_modules/ms": { 1092 | "version": "2.1.3", 1093 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1094 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1095 | "dev": true 1096 | }, 1097 | "node_modules/nopt": { 1098 | "version": "1.0.10", 1099 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1100 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 1101 | "dev": true, 1102 | "dependencies": { 1103 | "abbrev": "1" 1104 | }, 1105 | "bin": { 1106 | "nopt": "bin/nopt.js" 1107 | }, 1108 | "engines": { 1109 | "node": "*" 1110 | } 1111 | }, 1112 | "node_modules/normalize-path": { 1113 | "version": "3.0.0", 1114 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1115 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1116 | "dev": true, 1117 | "engines": { 1118 | "node": ">=0.10.0" 1119 | } 1120 | }, 1121 | "node_modules/object-assign": { 1122 | "version": "4.1.1", 1123 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1124 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1125 | "engines": { 1126 | "node": ">=0.10.0" 1127 | } 1128 | }, 1129 | "node_modules/object-inspect": { 1130 | "version": "1.12.3", 1131 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1132 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1133 | "funding": { 1134 | "url": "https://github.com/sponsors/ljharb" 1135 | } 1136 | }, 1137 | "node_modules/on-finished": { 1138 | "version": "2.4.1", 1139 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1140 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1141 | "dependencies": { 1142 | "ee-first": "1.1.1" 1143 | }, 1144 | "engines": { 1145 | "node": ">= 0.8" 1146 | } 1147 | }, 1148 | "node_modules/parseurl": { 1149 | "version": "1.3.3", 1150 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1151 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1152 | "engines": { 1153 | "node": ">= 0.8" 1154 | } 1155 | }, 1156 | "node_modules/path-to-regexp": { 1157 | "version": "0.1.7", 1158 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1159 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1160 | }, 1161 | "node_modules/picomatch": { 1162 | "version": "2.3.1", 1163 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1164 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1165 | "dev": true, 1166 | "engines": { 1167 | "node": ">=8.6" 1168 | }, 1169 | "funding": { 1170 | "url": "https://github.com/sponsors/jonschlinkert" 1171 | } 1172 | }, 1173 | "node_modules/proxy-addr": { 1174 | "version": "2.0.7", 1175 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1176 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1177 | "dependencies": { 1178 | "forwarded": "0.2.0", 1179 | "ipaddr.js": "1.9.1" 1180 | }, 1181 | "engines": { 1182 | "node": ">= 0.10" 1183 | } 1184 | }, 1185 | "node_modules/pstree.remy": { 1186 | "version": "1.1.8", 1187 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1188 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 1189 | "dev": true 1190 | }, 1191 | "node_modules/punycode": { 1192 | "version": "2.3.0", 1193 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1194 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1195 | "engines": { 1196 | "node": ">=6" 1197 | } 1198 | }, 1199 | "node_modules/qs": { 1200 | "version": "6.11.0", 1201 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1202 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1203 | "dependencies": { 1204 | "side-channel": "^1.0.4" 1205 | }, 1206 | "engines": { 1207 | "node": ">=0.6" 1208 | }, 1209 | "funding": { 1210 | "url": "https://github.com/sponsors/ljharb" 1211 | } 1212 | }, 1213 | "node_modules/range-parser": { 1214 | "version": "1.2.1", 1215 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1216 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1217 | "engines": { 1218 | "node": ">= 0.6" 1219 | } 1220 | }, 1221 | "node_modules/raw-body": { 1222 | "version": "2.5.1", 1223 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1224 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1225 | "dependencies": { 1226 | "bytes": "3.1.2", 1227 | "http-errors": "2.0.0", 1228 | "iconv-lite": "0.4.24", 1229 | "unpipe": "1.0.0" 1230 | }, 1231 | "engines": { 1232 | "node": ">= 0.8" 1233 | } 1234 | }, 1235 | "node_modules/readdirp": { 1236 | "version": "3.6.0", 1237 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1238 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1239 | "dev": true, 1240 | "dependencies": { 1241 | "picomatch": "^2.2.1" 1242 | }, 1243 | "engines": { 1244 | "node": ">=8.10.0" 1245 | } 1246 | }, 1247 | "node_modules/safe-buffer": { 1248 | "version": "5.2.1", 1249 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1250 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1251 | "funding": [ 1252 | { 1253 | "type": "github", 1254 | "url": "https://github.com/sponsors/feross" 1255 | }, 1256 | { 1257 | "type": "patreon", 1258 | "url": "https://www.patreon.com/feross" 1259 | }, 1260 | { 1261 | "type": "consulting", 1262 | "url": "https://feross.org/support" 1263 | } 1264 | ] 1265 | }, 1266 | "node_modules/safer-buffer": { 1267 | "version": "2.1.2", 1268 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1269 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1270 | }, 1271 | "node_modules/saslprep": { 1272 | "version": "1.0.3", 1273 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1274 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1275 | "optional": true, 1276 | "dependencies": { 1277 | "sparse-bitfield": "^3.0.3" 1278 | }, 1279 | "engines": { 1280 | "node": ">=6" 1281 | } 1282 | }, 1283 | "node_modules/semver": { 1284 | "version": "5.7.1", 1285 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1286 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1287 | "dev": true, 1288 | "bin": { 1289 | "semver": "bin/semver" 1290 | } 1291 | }, 1292 | "node_modules/send": { 1293 | "version": "0.18.0", 1294 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1295 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1296 | "dependencies": { 1297 | "debug": "2.6.9", 1298 | "depd": "2.0.0", 1299 | "destroy": "1.2.0", 1300 | "encodeurl": "~1.0.2", 1301 | "escape-html": "~1.0.3", 1302 | "etag": "~1.8.1", 1303 | "fresh": "0.5.2", 1304 | "http-errors": "2.0.0", 1305 | "mime": "1.6.0", 1306 | "ms": "2.1.3", 1307 | "on-finished": "2.4.1", 1308 | "range-parser": "~1.2.1", 1309 | "statuses": "2.0.1" 1310 | }, 1311 | "engines": { 1312 | "node": ">= 0.8.0" 1313 | } 1314 | }, 1315 | "node_modules/send/node_modules/ms": { 1316 | "version": "2.1.3", 1317 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1318 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1319 | }, 1320 | "node_modules/serve-static": { 1321 | "version": "1.15.0", 1322 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1323 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1324 | "dependencies": { 1325 | "encodeurl": "~1.0.2", 1326 | "escape-html": "~1.0.3", 1327 | "parseurl": "~1.3.3", 1328 | "send": "0.18.0" 1329 | }, 1330 | "engines": { 1331 | "node": ">= 0.8.0" 1332 | } 1333 | }, 1334 | "node_modules/setprototypeof": { 1335 | "version": "1.2.0", 1336 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1337 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1338 | }, 1339 | "node_modules/side-channel": { 1340 | "version": "1.0.4", 1341 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1342 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1343 | "dependencies": { 1344 | "call-bind": "^1.0.0", 1345 | "get-intrinsic": "^1.0.2", 1346 | "object-inspect": "^1.9.0" 1347 | }, 1348 | "funding": { 1349 | "url": "https://github.com/sponsors/ljharb" 1350 | } 1351 | }, 1352 | "node_modules/sift": { 1353 | "version": "16.0.1", 1354 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1355 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 1356 | }, 1357 | "node_modules/simple-update-notifier": { 1358 | "version": "1.1.0", 1359 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", 1360 | "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", 1361 | "dev": true, 1362 | "dependencies": { 1363 | "semver": "~7.0.0" 1364 | }, 1365 | "engines": { 1366 | "node": ">=8.10.0" 1367 | } 1368 | }, 1369 | "node_modules/simple-update-notifier/node_modules/semver": { 1370 | "version": "7.0.0", 1371 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1372 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1373 | "dev": true, 1374 | "bin": { 1375 | "semver": "bin/semver.js" 1376 | } 1377 | }, 1378 | "node_modules/smart-buffer": { 1379 | "version": "4.2.0", 1380 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1381 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1382 | "engines": { 1383 | "node": ">= 6.0.0", 1384 | "npm": ">= 3.0.0" 1385 | } 1386 | }, 1387 | "node_modules/socket.io": { 1388 | "version": "4.6.1", 1389 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", 1390 | "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", 1391 | "dependencies": { 1392 | "accepts": "~1.3.4", 1393 | "base64id": "~2.0.0", 1394 | "debug": "~4.3.2", 1395 | "engine.io": "~6.4.1", 1396 | "socket.io-adapter": "~2.5.2", 1397 | "socket.io-parser": "~4.2.1" 1398 | }, 1399 | "engines": { 1400 | "node": ">=10.0.0" 1401 | } 1402 | }, 1403 | "node_modules/socket.io-adapter": { 1404 | "version": "2.5.2", 1405 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", 1406 | "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", 1407 | "dependencies": { 1408 | "ws": "~8.11.0" 1409 | } 1410 | }, 1411 | "node_modules/socket.io-adapter/node_modules/ws": { 1412 | "version": "8.11.0", 1413 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", 1414 | "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", 1415 | "engines": { 1416 | "node": ">=10.0.0" 1417 | }, 1418 | "peerDependencies": { 1419 | "bufferutil": "^4.0.1", 1420 | "utf-8-validate": "^5.0.2" 1421 | }, 1422 | "peerDependenciesMeta": { 1423 | "bufferutil": { 1424 | "optional": true 1425 | }, 1426 | "utf-8-validate": { 1427 | "optional": true 1428 | } 1429 | } 1430 | }, 1431 | "node_modules/socket.io-parser": { 1432 | "version": "4.2.2", 1433 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", 1434 | "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", 1435 | "dependencies": { 1436 | "@socket.io/component-emitter": "~3.1.0", 1437 | "debug": "~4.3.1" 1438 | }, 1439 | "engines": { 1440 | "node": ">=10.0.0" 1441 | } 1442 | }, 1443 | "node_modules/socket.io-parser/node_modules/debug": { 1444 | "version": "4.3.4", 1445 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1446 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1447 | "dependencies": { 1448 | "ms": "2.1.2" 1449 | }, 1450 | "engines": { 1451 | "node": ">=6.0" 1452 | }, 1453 | "peerDependenciesMeta": { 1454 | "supports-color": { 1455 | "optional": true 1456 | } 1457 | } 1458 | }, 1459 | "node_modules/socket.io-parser/node_modules/ms": { 1460 | "version": "2.1.2", 1461 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1462 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1463 | }, 1464 | "node_modules/socket.io/node_modules/debug": { 1465 | "version": "4.3.4", 1466 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1467 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1468 | "dependencies": { 1469 | "ms": "2.1.2" 1470 | }, 1471 | "engines": { 1472 | "node": ">=6.0" 1473 | }, 1474 | "peerDependenciesMeta": { 1475 | "supports-color": { 1476 | "optional": true 1477 | } 1478 | } 1479 | }, 1480 | "node_modules/socket.io/node_modules/ms": { 1481 | "version": "2.1.2", 1482 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1483 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1484 | }, 1485 | "node_modules/socks": { 1486 | "version": "2.7.1", 1487 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1488 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1489 | "dependencies": { 1490 | "ip": "^2.0.0", 1491 | "smart-buffer": "^4.2.0" 1492 | }, 1493 | "engines": { 1494 | "node": ">= 10.13.0", 1495 | "npm": ">= 3.0.0" 1496 | } 1497 | }, 1498 | "node_modules/sparse-bitfield": { 1499 | "version": "3.0.3", 1500 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1501 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1502 | "optional": true, 1503 | "dependencies": { 1504 | "memory-pager": "^1.0.2" 1505 | } 1506 | }, 1507 | "node_modules/statuses": { 1508 | "version": "2.0.1", 1509 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1510 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1511 | "engines": { 1512 | "node": ">= 0.8" 1513 | } 1514 | }, 1515 | "node_modules/supports-color": { 1516 | "version": "5.5.0", 1517 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1518 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1519 | "dev": true, 1520 | "dependencies": { 1521 | "has-flag": "^3.0.0" 1522 | }, 1523 | "engines": { 1524 | "node": ">=4" 1525 | } 1526 | }, 1527 | "node_modules/to-regex-range": { 1528 | "version": "5.0.1", 1529 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1530 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1531 | "dev": true, 1532 | "dependencies": { 1533 | "is-number": "^7.0.0" 1534 | }, 1535 | "engines": { 1536 | "node": ">=8.0" 1537 | } 1538 | }, 1539 | "node_modules/toidentifier": { 1540 | "version": "1.0.1", 1541 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1542 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1543 | "engines": { 1544 | "node": ">=0.6" 1545 | } 1546 | }, 1547 | "node_modules/touch": { 1548 | "version": "3.1.0", 1549 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1550 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1551 | "dev": true, 1552 | "dependencies": { 1553 | "nopt": "~1.0.10" 1554 | }, 1555 | "bin": { 1556 | "nodetouch": "bin/nodetouch.js" 1557 | } 1558 | }, 1559 | "node_modules/tr46": { 1560 | "version": "3.0.0", 1561 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1562 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1563 | "dependencies": { 1564 | "punycode": "^2.1.1" 1565 | }, 1566 | "engines": { 1567 | "node": ">=12" 1568 | } 1569 | }, 1570 | "node_modules/type-is": { 1571 | "version": "1.6.18", 1572 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1573 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1574 | "dependencies": { 1575 | "media-typer": "0.3.0", 1576 | "mime-types": "~2.1.24" 1577 | }, 1578 | "engines": { 1579 | "node": ">= 0.6" 1580 | } 1581 | }, 1582 | "node_modules/undefsafe": { 1583 | "version": "2.0.5", 1584 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 1585 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 1586 | "dev": true 1587 | }, 1588 | "node_modules/unpipe": { 1589 | "version": "1.0.0", 1590 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1591 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1592 | "engines": { 1593 | "node": ">= 0.8" 1594 | } 1595 | }, 1596 | "node_modules/utils-merge": { 1597 | "version": "1.0.1", 1598 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1599 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 1600 | "engines": { 1601 | "node": ">= 0.4.0" 1602 | } 1603 | }, 1604 | "node_modules/uuid": { 1605 | "version": "9.0.0", 1606 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", 1607 | "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", 1608 | "bin": { 1609 | "uuid": "dist/bin/uuid" 1610 | } 1611 | }, 1612 | "node_modules/vary": { 1613 | "version": "1.1.2", 1614 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1615 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1616 | "engines": { 1617 | "node": ">= 0.8" 1618 | } 1619 | }, 1620 | "node_modules/webidl-conversions": { 1621 | "version": "7.0.0", 1622 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1623 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 1624 | "engines": { 1625 | "node": ">=12" 1626 | } 1627 | }, 1628 | "node_modules/whatwg-url": { 1629 | "version": "11.0.0", 1630 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1631 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1632 | "dependencies": { 1633 | "tr46": "^3.0.0", 1634 | "webidl-conversions": "^7.0.0" 1635 | }, 1636 | "engines": { 1637 | "node": ">=12" 1638 | } 1639 | }, 1640 | "node_modules/ws": { 1641 | "version": "8.13.0", 1642 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", 1643 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 1644 | "engines": { 1645 | "node": ">=10.0.0" 1646 | }, 1647 | "peerDependencies": { 1648 | "bufferutil": "^4.0.1", 1649 | "utf-8-validate": ">=5.0.2" 1650 | }, 1651 | "peerDependenciesMeta": { 1652 | "bufferutil": { 1653 | "optional": true 1654 | }, 1655 | "utf-8-validate": { 1656 | "optional": true 1657 | } 1658 | } 1659 | } 1660 | }, 1661 | "dependencies": { 1662 | "@socket.io/component-emitter": { 1663 | "version": "3.1.0", 1664 | "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", 1665 | "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" 1666 | }, 1667 | "@types/body-parser": { 1668 | "version": "1.19.2", 1669 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", 1670 | "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", 1671 | "dev": true, 1672 | "requires": { 1673 | "@types/connect": "*", 1674 | "@types/node": "*" 1675 | } 1676 | }, 1677 | "@types/connect": { 1678 | "version": "3.4.35", 1679 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", 1680 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 1681 | "dev": true, 1682 | "requires": { 1683 | "@types/node": "*" 1684 | } 1685 | }, 1686 | "@types/cookie": { 1687 | "version": "0.4.1", 1688 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", 1689 | "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" 1690 | }, 1691 | "@types/cors": { 1692 | "version": "2.8.13", 1693 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", 1694 | "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", 1695 | "requires": { 1696 | "@types/node": "*" 1697 | } 1698 | }, 1699 | "@types/express": { 1700 | "version": "4.17.17", 1701 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", 1702 | "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", 1703 | "dev": true, 1704 | "requires": { 1705 | "@types/body-parser": "*", 1706 | "@types/express-serve-static-core": "^4.17.33", 1707 | "@types/qs": "*", 1708 | "@types/serve-static": "*" 1709 | } 1710 | }, 1711 | "@types/express-serve-static-core": { 1712 | "version": "4.17.33", 1713 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", 1714 | "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", 1715 | "dev": true, 1716 | "requires": { 1717 | "@types/node": "*", 1718 | "@types/qs": "*", 1719 | "@types/range-parser": "*" 1720 | } 1721 | }, 1722 | "@types/mime": { 1723 | "version": "3.0.1", 1724 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", 1725 | "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", 1726 | "dev": true 1727 | }, 1728 | "@types/node": { 1729 | "version": "18.14.0", 1730 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", 1731 | "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" 1732 | }, 1733 | "@types/qs": { 1734 | "version": "6.9.7", 1735 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", 1736 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", 1737 | "dev": true 1738 | }, 1739 | "@types/range-parser": { 1740 | "version": "1.2.4", 1741 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 1742 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 1743 | "dev": true 1744 | }, 1745 | "@types/serve-static": { 1746 | "version": "1.15.1", 1747 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", 1748 | "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", 1749 | "dev": true, 1750 | "requires": { 1751 | "@types/mime": "*", 1752 | "@types/node": "*" 1753 | } 1754 | }, 1755 | "@types/socket.io": { 1756 | "version": "3.0.2", 1757 | "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-3.0.2.tgz", 1758 | "integrity": "sha512-pu0sN9m5VjCxBZVK8hW37ZcMe8rjn4HHggBN5CbaRTvFwv5jOmuIRZEuddsBPa9Th0ts0SIo3Niukq+95cMBbQ==", 1759 | "requires": { 1760 | "socket.io": "*" 1761 | } 1762 | }, 1763 | "@types/uuid": { 1764 | "version": "9.0.1", 1765 | "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", 1766 | "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", 1767 | "dev": true 1768 | }, 1769 | "@types/webidl-conversions": { 1770 | "version": "7.0.0", 1771 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1772 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 1773 | }, 1774 | "@types/whatwg-url": { 1775 | "version": "8.2.2", 1776 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 1777 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 1778 | "requires": { 1779 | "@types/node": "*", 1780 | "@types/webidl-conversions": "*" 1781 | } 1782 | }, 1783 | "@types/ws": { 1784 | "version": "8.5.4", 1785 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", 1786 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 1787 | "requires": { 1788 | "@types/node": "*" 1789 | } 1790 | }, 1791 | "abbrev": { 1792 | "version": "1.1.1", 1793 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 1794 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 1795 | "dev": true 1796 | }, 1797 | "accepts": { 1798 | "version": "1.3.8", 1799 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1800 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1801 | "requires": { 1802 | "mime-types": "~2.1.34", 1803 | "negotiator": "0.6.3" 1804 | } 1805 | }, 1806 | "anymatch": { 1807 | "version": "3.1.3", 1808 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1809 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1810 | "dev": true, 1811 | "requires": { 1812 | "normalize-path": "^3.0.0", 1813 | "picomatch": "^2.0.4" 1814 | } 1815 | }, 1816 | "array-flatten": { 1817 | "version": "1.1.1", 1818 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1819 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 1820 | }, 1821 | "balanced-match": { 1822 | "version": "1.0.2", 1823 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1824 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1825 | "dev": true 1826 | }, 1827 | "base64id": { 1828 | "version": "2.0.0", 1829 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 1830 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" 1831 | }, 1832 | "binary-extensions": { 1833 | "version": "2.2.0", 1834 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1835 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1836 | "dev": true 1837 | }, 1838 | "body-parser": { 1839 | "version": "1.20.1", 1840 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 1841 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 1842 | "requires": { 1843 | "bytes": "3.1.2", 1844 | "content-type": "~1.0.4", 1845 | "debug": "2.6.9", 1846 | "depd": "2.0.0", 1847 | "destroy": "1.2.0", 1848 | "http-errors": "2.0.0", 1849 | "iconv-lite": "0.4.24", 1850 | "on-finished": "2.4.1", 1851 | "qs": "6.11.0", 1852 | "raw-body": "2.5.1", 1853 | "type-is": "~1.6.18", 1854 | "unpipe": "1.0.0" 1855 | } 1856 | }, 1857 | "brace-expansion": { 1858 | "version": "1.1.11", 1859 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1860 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1861 | "dev": true, 1862 | "requires": { 1863 | "balanced-match": "^1.0.0", 1864 | "concat-map": "0.0.1" 1865 | } 1866 | }, 1867 | "braces": { 1868 | "version": "3.0.2", 1869 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1870 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1871 | "dev": true, 1872 | "requires": { 1873 | "fill-range": "^7.0.1" 1874 | } 1875 | }, 1876 | "bson": { 1877 | "version": "5.1.0", 1878 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.1.0.tgz", 1879 | "integrity": "sha512-FEecNHkhYRBe7X9KDkdG12xNuz5VHGeH6mCE0B5sBmYtiR/Ux/9vUH/v4NUoBCDr6NuEhvahjoLiiRogptVW0A==" 1880 | }, 1881 | "bytes": { 1882 | "version": "3.1.2", 1883 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 1884 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 1885 | }, 1886 | "call-bind": { 1887 | "version": "1.0.2", 1888 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1889 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1890 | "requires": { 1891 | "function-bind": "^1.1.1", 1892 | "get-intrinsic": "^1.0.2" 1893 | } 1894 | }, 1895 | "chokidar": { 1896 | "version": "3.5.3", 1897 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1898 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1899 | "dev": true, 1900 | "requires": { 1901 | "anymatch": "~3.1.2", 1902 | "braces": "~3.0.2", 1903 | "fsevents": "~2.3.2", 1904 | "glob-parent": "~5.1.2", 1905 | "is-binary-path": "~2.1.0", 1906 | "is-glob": "~4.0.1", 1907 | "normalize-path": "~3.0.0", 1908 | "readdirp": "~3.6.0" 1909 | } 1910 | }, 1911 | "concat-map": { 1912 | "version": "0.0.1", 1913 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1914 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1915 | "dev": true 1916 | }, 1917 | "content-disposition": { 1918 | "version": "0.5.4", 1919 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 1920 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 1921 | "requires": { 1922 | "safe-buffer": "5.2.1" 1923 | } 1924 | }, 1925 | "content-type": { 1926 | "version": "1.0.5", 1927 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 1928 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" 1929 | }, 1930 | "cookie": { 1931 | "version": "0.5.0", 1932 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1933 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 1934 | }, 1935 | "cookie-signature": { 1936 | "version": "1.0.6", 1937 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1938 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 1939 | }, 1940 | "cors": { 1941 | "version": "2.8.5", 1942 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 1943 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 1944 | "requires": { 1945 | "object-assign": "^4", 1946 | "vary": "^1" 1947 | } 1948 | }, 1949 | "debug": { 1950 | "version": "2.6.9", 1951 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1952 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1953 | "requires": { 1954 | "ms": "2.0.0" 1955 | } 1956 | }, 1957 | "depd": { 1958 | "version": "2.0.0", 1959 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1960 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 1961 | }, 1962 | "destroy": { 1963 | "version": "1.2.0", 1964 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1965 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 1966 | }, 1967 | "dotenv": { 1968 | "version": "16.0.3", 1969 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 1970 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" 1971 | }, 1972 | "ee-first": { 1973 | "version": "1.1.1", 1974 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1975 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 1976 | }, 1977 | "encodeurl": { 1978 | "version": "1.0.2", 1979 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1980 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 1981 | }, 1982 | "engine.io": { 1983 | "version": "6.4.1", 1984 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", 1985 | "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", 1986 | "requires": { 1987 | "@types/cookie": "^0.4.1", 1988 | "@types/cors": "^2.8.12", 1989 | "@types/node": ">=10.0.0", 1990 | "accepts": "~1.3.4", 1991 | "base64id": "2.0.0", 1992 | "cookie": "~0.4.1", 1993 | "cors": "~2.8.5", 1994 | "debug": "~4.3.1", 1995 | "engine.io-parser": "~5.0.3", 1996 | "ws": "~8.11.0" 1997 | }, 1998 | "dependencies": { 1999 | "cookie": { 2000 | "version": "0.4.2", 2001 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 2002 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" 2003 | }, 2004 | "debug": { 2005 | "version": "4.3.4", 2006 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2007 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2008 | "requires": { 2009 | "ms": "2.1.2" 2010 | } 2011 | }, 2012 | "ms": { 2013 | "version": "2.1.2", 2014 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2015 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2016 | }, 2017 | "ws": { 2018 | "version": "8.11.0", 2019 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", 2020 | "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", 2021 | "requires": {} 2022 | } 2023 | } 2024 | }, 2025 | "engine.io-parser": { 2026 | "version": "5.0.6", 2027 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", 2028 | "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" 2029 | }, 2030 | "escape-html": { 2031 | "version": "1.0.3", 2032 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2033 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 2034 | }, 2035 | "etag": { 2036 | "version": "1.8.1", 2037 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 2038 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 2039 | }, 2040 | "express": { 2041 | "version": "4.18.2", 2042 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 2043 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 2044 | "requires": { 2045 | "accepts": "~1.3.8", 2046 | "array-flatten": "1.1.1", 2047 | "body-parser": "1.20.1", 2048 | "content-disposition": "0.5.4", 2049 | "content-type": "~1.0.4", 2050 | "cookie": "0.5.0", 2051 | "cookie-signature": "1.0.6", 2052 | "debug": "2.6.9", 2053 | "depd": "2.0.0", 2054 | "encodeurl": "~1.0.2", 2055 | "escape-html": "~1.0.3", 2056 | "etag": "~1.8.1", 2057 | "finalhandler": "1.2.0", 2058 | "fresh": "0.5.2", 2059 | "http-errors": "2.0.0", 2060 | "merge-descriptors": "1.0.1", 2061 | "methods": "~1.1.2", 2062 | "on-finished": "2.4.1", 2063 | "parseurl": "~1.3.3", 2064 | "path-to-regexp": "0.1.7", 2065 | "proxy-addr": "~2.0.7", 2066 | "qs": "6.11.0", 2067 | "range-parser": "~1.2.1", 2068 | "safe-buffer": "5.2.1", 2069 | "send": "0.18.0", 2070 | "serve-static": "1.15.0", 2071 | "setprototypeof": "1.2.0", 2072 | "statuses": "2.0.1", 2073 | "type-is": "~1.6.18", 2074 | "utils-merge": "1.0.1", 2075 | "vary": "~1.1.2" 2076 | } 2077 | }, 2078 | "express-graphql": { 2079 | "version": "0.12.0", 2080 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 2081 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 2082 | "requires": { 2083 | "accepts": "^1.3.7", 2084 | "content-type": "^1.0.4", 2085 | "http-errors": "1.8.0", 2086 | "raw-body": "^2.4.1" 2087 | }, 2088 | "dependencies": { 2089 | "depd": { 2090 | "version": "1.1.2", 2091 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 2092 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" 2093 | }, 2094 | "http-errors": { 2095 | "version": "1.8.0", 2096 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 2097 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 2098 | "requires": { 2099 | "depd": "~1.1.2", 2100 | "inherits": "2.0.4", 2101 | "setprototypeof": "1.2.0", 2102 | "statuses": ">= 1.5.0 < 2", 2103 | "toidentifier": "1.0.0" 2104 | } 2105 | }, 2106 | "statuses": { 2107 | "version": "1.5.0", 2108 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 2109 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" 2110 | }, 2111 | "toidentifier": { 2112 | "version": "1.0.0", 2113 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 2114 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 2115 | } 2116 | } 2117 | }, 2118 | "express-ws": { 2119 | "version": "5.0.2", 2120 | "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-5.0.2.tgz", 2121 | "integrity": "sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==", 2122 | "requires": { 2123 | "ws": "^7.4.6" 2124 | }, 2125 | "dependencies": { 2126 | "ws": { 2127 | "version": "7.5.9", 2128 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 2129 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 2130 | "requires": {} 2131 | } 2132 | } 2133 | }, 2134 | "fill-range": { 2135 | "version": "7.0.1", 2136 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2137 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2138 | "dev": true, 2139 | "requires": { 2140 | "to-regex-range": "^5.0.1" 2141 | } 2142 | }, 2143 | "finalhandler": { 2144 | "version": "1.2.0", 2145 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 2146 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 2147 | "requires": { 2148 | "debug": "2.6.9", 2149 | "encodeurl": "~1.0.2", 2150 | "escape-html": "~1.0.3", 2151 | "on-finished": "2.4.1", 2152 | "parseurl": "~1.3.3", 2153 | "statuses": "2.0.1", 2154 | "unpipe": "~1.0.0" 2155 | } 2156 | }, 2157 | "forwarded": { 2158 | "version": "0.2.0", 2159 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2160 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 2161 | }, 2162 | "fresh": { 2163 | "version": "0.5.2", 2164 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2165 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 2166 | }, 2167 | "fsevents": { 2168 | "version": "2.3.2", 2169 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2170 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2171 | "dev": true, 2172 | "optional": true 2173 | }, 2174 | "function-bind": { 2175 | "version": "1.1.1", 2176 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2177 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 2178 | }, 2179 | "get-intrinsic": { 2180 | "version": "1.2.0", 2181 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 2182 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 2183 | "requires": { 2184 | "function-bind": "^1.1.1", 2185 | "has": "^1.0.3", 2186 | "has-symbols": "^1.0.3" 2187 | } 2188 | }, 2189 | "glob-parent": { 2190 | "version": "5.1.2", 2191 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2192 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2193 | "dev": true, 2194 | "requires": { 2195 | "is-glob": "^4.0.1" 2196 | } 2197 | }, 2198 | "graphql": { 2199 | "version": "15.8.0", 2200 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", 2201 | "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", 2202 | "peer": true 2203 | }, 2204 | "has": { 2205 | "version": "1.0.3", 2206 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2207 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2208 | "requires": { 2209 | "function-bind": "^1.1.1" 2210 | } 2211 | }, 2212 | "has-flag": { 2213 | "version": "3.0.0", 2214 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2215 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 2216 | "dev": true 2217 | }, 2218 | "has-symbols": { 2219 | "version": "1.0.3", 2220 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2221 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 2222 | }, 2223 | "http-errors": { 2224 | "version": "2.0.0", 2225 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2226 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2227 | "requires": { 2228 | "depd": "2.0.0", 2229 | "inherits": "2.0.4", 2230 | "setprototypeof": "1.2.0", 2231 | "statuses": "2.0.1", 2232 | "toidentifier": "1.0.1" 2233 | } 2234 | }, 2235 | "iconv-lite": { 2236 | "version": "0.4.24", 2237 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2238 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2239 | "requires": { 2240 | "safer-buffer": ">= 2.1.2 < 3" 2241 | } 2242 | }, 2243 | "ignore-by-default": { 2244 | "version": "1.0.1", 2245 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 2246 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 2247 | "dev": true 2248 | }, 2249 | "inherits": { 2250 | "version": "2.0.4", 2251 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2252 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2253 | }, 2254 | "ip": { 2255 | "version": "2.0.0", 2256 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 2257 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 2258 | }, 2259 | "ipaddr.js": { 2260 | "version": "1.9.1", 2261 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2262 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 2263 | }, 2264 | "is-binary-path": { 2265 | "version": "2.1.0", 2266 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2267 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2268 | "dev": true, 2269 | "requires": { 2270 | "binary-extensions": "^2.0.0" 2271 | } 2272 | }, 2273 | "is-extglob": { 2274 | "version": "2.1.1", 2275 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2276 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2277 | "dev": true 2278 | }, 2279 | "is-glob": { 2280 | "version": "4.0.3", 2281 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2282 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2283 | "dev": true, 2284 | "requires": { 2285 | "is-extglob": "^2.1.1" 2286 | } 2287 | }, 2288 | "is-number": { 2289 | "version": "7.0.0", 2290 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2291 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2292 | "dev": true 2293 | }, 2294 | "kareem": { 2295 | "version": "2.5.1", 2296 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 2297 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" 2298 | }, 2299 | "media-typer": { 2300 | "version": "0.3.0", 2301 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2302 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 2303 | }, 2304 | "memory-pager": { 2305 | "version": "1.5.0", 2306 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 2307 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 2308 | "optional": true 2309 | }, 2310 | "merge-descriptors": { 2311 | "version": "1.0.1", 2312 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2313 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 2314 | }, 2315 | "methods": { 2316 | "version": "1.1.2", 2317 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2318 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 2319 | }, 2320 | "mime": { 2321 | "version": "1.6.0", 2322 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2323 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 2324 | }, 2325 | "mime-db": { 2326 | "version": "1.52.0", 2327 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2328 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 2329 | }, 2330 | "mime-types": { 2331 | "version": "2.1.35", 2332 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2333 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2334 | "requires": { 2335 | "mime-db": "1.52.0" 2336 | } 2337 | }, 2338 | "minimatch": { 2339 | "version": "3.1.2", 2340 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2341 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2342 | "dev": true, 2343 | "requires": { 2344 | "brace-expansion": "^1.1.7" 2345 | } 2346 | }, 2347 | "mongodb": { 2348 | "version": "5.1.0", 2349 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 2350 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 2351 | "requires": { 2352 | "bson": "^5.0.1", 2353 | "mongodb-connection-string-url": "^2.6.0", 2354 | "saslprep": "^1.0.3", 2355 | "socks": "^2.7.1" 2356 | } 2357 | }, 2358 | "mongodb-connection-string-url": { 2359 | "version": "2.6.0", 2360 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 2361 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 2362 | "requires": { 2363 | "@types/whatwg-url": "^8.2.1", 2364 | "whatwg-url": "^11.0.0" 2365 | } 2366 | }, 2367 | "mongoose": { 2368 | "version": "7.0.3", 2369 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.3.tgz", 2370 | "integrity": "sha512-3n8vc1/mssuxKa6vfghSocp3MeiCFYzhX36Ok+PsDNNYzHC9tw3rNkAMLemIwZ2jgXqkZ7CfKOxkzjp/d/SWfg==", 2371 | "requires": { 2372 | "bson": "^5.0.1", 2373 | "kareem": "2.5.1", 2374 | "mongodb": "5.1.0", 2375 | "mpath": "0.9.0", 2376 | "mquery": "5.0.0", 2377 | "ms": "2.1.3", 2378 | "sift": "16.0.1" 2379 | }, 2380 | "dependencies": { 2381 | "ms": { 2382 | "version": "2.1.3", 2383 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2384 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2385 | } 2386 | } 2387 | }, 2388 | "mpath": { 2389 | "version": "0.9.0", 2390 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 2391 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" 2392 | }, 2393 | "mquery": { 2394 | "version": "5.0.0", 2395 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 2396 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 2397 | "requires": { 2398 | "debug": "4.x" 2399 | }, 2400 | "dependencies": { 2401 | "debug": { 2402 | "version": "4.3.4", 2403 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2404 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2405 | "requires": { 2406 | "ms": "2.1.2" 2407 | } 2408 | }, 2409 | "ms": { 2410 | "version": "2.1.2", 2411 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2412 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2413 | } 2414 | } 2415 | }, 2416 | "ms": { 2417 | "version": "2.0.0", 2418 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2419 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 2420 | }, 2421 | "negotiator": { 2422 | "version": "0.6.3", 2423 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 2424 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 2425 | }, 2426 | "nodemon": { 2427 | "version": "2.0.20", 2428 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", 2429 | "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", 2430 | "dev": true, 2431 | "requires": { 2432 | "chokidar": "^3.5.2", 2433 | "debug": "^3.2.7", 2434 | "ignore-by-default": "^1.0.1", 2435 | "minimatch": "^3.1.2", 2436 | "pstree.remy": "^1.1.8", 2437 | "semver": "^5.7.1", 2438 | "simple-update-notifier": "^1.0.7", 2439 | "supports-color": "^5.5.0", 2440 | "touch": "^3.1.0", 2441 | "undefsafe": "^2.0.5" 2442 | }, 2443 | "dependencies": { 2444 | "debug": { 2445 | "version": "3.2.7", 2446 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2447 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2448 | "dev": true, 2449 | "requires": { 2450 | "ms": "^2.1.1" 2451 | } 2452 | }, 2453 | "ms": { 2454 | "version": "2.1.3", 2455 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2456 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2457 | "dev": true 2458 | } 2459 | } 2460 | }, 2461 | "nopt": { 2462 | "version": "1.0.10", 2463 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 2464 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 2465 | "dev": true, 2466 | "requires": { 2467 | "abbrev": "1" 2468 | } 2469 | }, 2470 | "normalize-path": { 2471 | "version": "3.0.0", 2472 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2473 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2474 | "dev": true 2475 | }, 2476 | "object-assign": { 2477 | "version": "4.1.1", 2478 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2479 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 2480 | }, 2481 | "object-inspect": { 2482 | "version": "1.12.3", 2483 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 2484 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" 2485 | }, 2486 | "on-finished": { 2487 | "version": "2.4.1", 2488 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2489 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2490 | "requires": { 2491 | "ee-first": "1.1.1" 2492 | } 2493 | }, 2494 | "parseurl": { 2495 | "version": "1.3.3", 2496 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2497 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 2498 | }, 2499 | "path-to-regexp": { 2500 | "version": "0.1.7", 2501 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2502 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 2503 | }, 2504 | "picomatch": { 2505 | "version": "2.3.1", 2506 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2507 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2508 | "dev": true 2509 | }, 2510 | "proxy-addr": { 2511 | "version": "2.0.7", 2512 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2513 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2514 | "requires": { 2515 | "forwarded": "0.2.0", 2516 | "ipaddr.js": "1.9.1" 2517 | } 2518 | }, 2519 | "pstree.remy": { 2520 | "version": "1.1.8", 2521 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 2522 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 2523 | "dev": true 2524 | }, 2525 | "punycode": { 2526 | "version": "2.3.0", 2527 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2528 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" 2529 | }, 2530 | "qs": { 2531 | "version": "6.11.0", 2532 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 2533 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 2534 | "requires": { 2535 | "side-channel": "^1.0.4" 2536 | } 2537 | }, 2538 | "range-parser": { 2539 | "version": "1.2.1", 2540 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2541 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 2542 | }, 2543 | "raw-body": { 2544 | "version": "2.5.1", 2545 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 2546 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 2547 | "requires": { 2548 | "bytes": "3.1.2", 2549 | "http-errors": "2.0.0", 2550 | "iconv-lite": "0.4.24", 2551 | "unpipe": "1.0.0" 2552 | } 2553 | }, 2554 | "readdirp": { 2555 | "version": "3.6.0", 2556 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2557 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2558 | "dev": true, 2559 | "requires": { 2560 | "picomatch": "^2.2.1" 2561 | } 2562 | }, 2563 | "safe-buffer": { 2564 | "version": "5.2.1", 2565 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2566 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 2567 | }, 2568 | "safer-buffer": { 2569 | "version": "2.1.2", 2570 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2571 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2572 | }, 2573 | "saslprep": { 2574 | "version": "1.0.3", 2575 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 2576 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 2577 | "optional": true, 2578 | "requires": { 2579 | "sparse-bitfield": "^3.0.3" 2580 | } 2581 | }, 2582 | "semver": { 2583 | "version": "5.7.1", 2584 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2585 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2586 | "dev": true 2587 | }, 2588 | "send": { 2589 | "version": "0.18.0", 2590 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 2591 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 2592 | "requires": { 2593 | "debug": "2.6.9", 2594 | "depd": "2.0.0", 2595 | "destroy": "1.2.0", 2596 | "encodeurl": "~1.0.2", 2597 | "escape-html": "~1.0.3", 2598 | "etag": "~1.8.1", 2599 | "fresh": "0.5.2", 2600 | "http-errors": "2.0.0", 2601 | "mime": "1.6.0", 2602 | "ms": "2.1.3", 2603 | "on-finished": "2.4.1", 2604 | "range-parser": "~1.2.1", 2605 | "statuses": "2.0.1" 2606 | }, 2607 | "dependencies": { 2608 | "ms": { 2609 | "version": "2.1.3", 2610 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2611 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2612 | } 2613 | } 2614 | }, 2615 | "serve-static": { 2616 | "version": "1.15.0", 2617 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 2618 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 2619 | "requires": { 2620 | "encodeurl": "~1.0.2", 2621 | "escape-html": "~1.0.3", 2622 | "parseurl": "~1.3.3", 2623 | "send": "0.18.0" 2624 | } 2625 | }, 2626 | "setprototypeof": { 2627 | "version": "1.2.0", 2628 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 2629 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 2630 | }, 2631 | "side-channel": { 2632 | "version": "1.0.4", 2633 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2634 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2635 | "requires": { 2636 | "call-bind": "^1.0.0", 2637 | "get-intrinsic": "^1.0.2", 2638 | "object-inspect": "^1.9.0" 2639 | } 2640 | }, 2641 | "sift": { 2642 | "version": "16.0.1", 2643 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 2644 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 2645 | }, 2646 | "simple-update-notifier": { 2647 | "version": "1.1.0", 2648 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", 2649 | "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", 2650 | "dev": true, 2651 | "requires": { 2652 | "semver": "~7.0.0" 2653 | }, 2654 | "dependencies": { 2655 | "semver": { 2656 | "version": "7.0.0", 2657 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 2658 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 2659 | "dev": true 2660 | } 2661 | } 2662 | }, 2663 | "smart-buffer": { 2664 | "version": "4.2.0", 2665 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 2666 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 2667 | }, 2668 | "socket.io": { 2669 | "version": "4.6.1", 2670 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", 2671 | "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", 2672 | "requires": { 2673 | "accepts": "~1.3.4", 2674 | "base64id": "~2.0.0", 2675 | "debug": "~4.3.2", 2676 | "engine.io": "~6.4.1", 2677 | "socket.io-adapter": "~2.5.2", 2678 | "socket.io-parser": "~4.2.1" 2679 | }, 2680 | "dependencies": { 2681 | "debug": { 2682 | "version": "4.3.4", 2683 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2684 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2685 | "requires": { 2686 | "ms": "2.1.2" 2687 | } 2688 | }, 2689 | "ms": { 2690 | "version": "2.1.2", 2691 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2692 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2693 | } 2694 | } 2695 | }, 2696 | "socket.io-adapter": { 2697 | "version": "2.5.2", 2698 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", 2699 | "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", 2700 | "requires": { 2701 | "ws": "~8.11.0" 2702 | }, 2703 | "dependencies": { 2704 | "ws": { 2705 | "version": "8.11.0", 2706 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", 2707 | "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", 2708 | "requires": {} 2709 | } 2710 | } 2711 | }, 2712 | "socket.io-parser": { 2713 | "version": "4.2.2", 2714 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", 2715 | "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", 2716 | "requires": { 2717 | "@socket.io/component-emitter": "~3.1.0", 2718 | "debug": "~4.3.1" 2719 | }, 2720 | "dependencies": { 2721 | "debug": { 2722 | "version": "4.3.4", 2723 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2724 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2725 | "requires": { 2726 | "ms": "2.1.2" 2727 | } 2728 | }, 2729 | "ms": { 2730 | "version": "2.1.2", 2731 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2732 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2733 | } 2734 | } 2735 | }, 2736 | "socks": { 2737 | "version": "2.7.1", 2738 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 2739 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 2740 | "requires": { 2741 | "ip": "^2.0.0", 2742 | "smart-buffer": "^4.2.0" 2743 | } 2744 | }, 2745 | "sparse-bitfield": { 2746 | "version": "3.0.3", 2747 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 2748 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 2749 | "optional": true, 2750 | "requires": { 2751 | "memory-pager": "^1.0.2" 2752 | } 2753 | }, 2754 | "statuses": { 2755 | "version": "2.0.1", 2756 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 2757 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 2758 | }, 2759 | "supports-color": { 2760 | "version": "5.5.0", 2761 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2762 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2763 | "dev": true, 2764 | "requires": { 2765 | "has-flag": "^3.0.0" 2766 | } 2767 | }, 2768 | "to-regex-range": { 2769 | "version": "5.0.1", 2770 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2771 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2772 | "dev": true, 2773 | "requires": { 2774 | "is-number": "^7.0.0" 2775 | } 2776 | }, 2777 | "toidentifier": { 2778 | "version": "1.0.1", 2779 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2780 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 2781 | }, 2782 | "touch": { 2783 | "version": "3.1.0", 2784 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 2785 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 2786 | "dev": true, 2787 | "requires": { 2788 | "nopt": "~1.0.10" 2789 | } 2790 | }, 2791 | "tr46": { 2792 | "version": "3.0.0", 2793 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 2794 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 2795 | "requires": { 2796 | "punycode": "^2.1.1" 2797 | } 2798 | }, 2799 | "type-is": { 2800 | "version": "1.6.18", 2801 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2802 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2803 | "requires": { 2804 | "media-typer": "0.3.0", 2805 | "mime-types": "~2.1.24" 2806 | } 2807 | }, 2808 | "undefsafe": { 2809 | "version": "2.0.5", 2810 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 2811 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 2812 | "dev": true 2813 | }, 2814 | "unpipe": { 2815 | "version": "1.0.0", 2816 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2817 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 2818 | }, 2819 | "utils-merge": { 2820 | "version": "1.0.1", 2821 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2822 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 2823 | }, 2824 | "uuid": { 2825 | "version": "9.0.0", 2826 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", 2827 | "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" 2828 | }, 2829 | "vary": { 2830 | "version": "1.1.2", 2831 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2832 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 2833 | }, 2834 | "webidl-conversions": { 2835 | "version": "7.0.0", 2836 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 2837 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" 2838 | }, 2839 | "whatwg-url": { 2840 | "version": "11.0.0", 2841 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 2842 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 2843 | "requires": { 2844 | "tr46": "^3.0.0", 2845 | "webidl-conversions": "^7.0.0" 2846 | } 2847 | }, 2848 | "ws": { 2849 | "version": "8.13.0", 2850 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", 2851 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 2852 | "requires": {} 2853 | } 2854 | } 2855 | } 2856 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "description": "We kill error in the server", 5 | "main": "server.ts", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon ./server.ts" 9 | }, 10 | "author": "James, Noah, Lily, Jake", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@types/socket.io": "^3.0.2", 14 | "@types/ws": "^8.5.4", 15 | "cors": "^2.8.5", 16 | "dotenv": "^16.0.3", 17 | "express": "^4.18.2", 18 | "express-graphql": "^0.12.0", 19 | "express-ws": "^5.0.2", 20 | "mongoose": "^7.0.3", 21 | "socket.io": "^4.6.1", 22 | "uuid": "^9.0.0", 23 | "ws": "^8.13.0" 24 | }, 25 | "devDependencies": { 26 | "@types/express": "^4.17.17", 27 | "@types/uuid": "^9.0.1", 28 | "nodemon": "^2.0.20" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /server/server.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Response, Request } from "express"; 2 | import express from "express"; 3 | import path from "path"; 4 | import cors from "cors"; 5 | import http from "http"; 6 | import { Server } from "socket.io"; 7 | import { transformData } from "../server/helpers/transformData"; 8 | import dotenv from "dotenv"; 9 | import { v4 as uuidv4 } from "uuid"; 10 | dotenv.config(); 11 | // SECRET is necessary for future implementation of a deployed application with one singular database 12 | const SECRET = uuidv4(); 13 | 14 | const app = express(); 15 | const server = http.createServer(app); 16 | const io = new Server(server); 17 | const db = process.env.MONGODB_URI; 18 | const PORT = 3003; 19 | 20 | 21 | //Models 22 | import QueryRes from "./models/queryResModel"; 23 | import OriginResp from "./models/originRespModel"; 24 | 25 | //Mongoose 26 | import mongoose from "mongoose"; 27 | mongoose.set("strictQuery", false); 28 | 29 | mongoose 30 | .connect(`${db}`) 31 | .then(() => { 32 | console.log("Connected to DB ✅"); 33 | QueryRes.watch().on("change", async (data) => { 34 | const latestDoc = await QueryRes.findOne({ id: SECRET }).sort({ 35 | _id: -1, 36 | }); 37 | 38 | //explicitly targeting additions into the collection, ensuring a document is found, before transforming Data 39 | if (data.operationType === "insert" && latestDoc) { 40 | const newDoc = await transformData(latestDoc?.response.queryResp.data); 41 | io.emit("newDoc", newDoc); 42 | await QueryRes.deleteMany({ id: SECRET }); 43 | await OriginResp.deleteMany({ id: SECRET }); 44 | } 45 | }); 46 | }) 47 | .catch(console.error); 48 | 49 | app.use(express.json()); 50 | app.use(express.urlencoded({ extended: true })); 51 | app.use(express.static(path.resolve(__dirname, "../client"))); 52 | app.use(cors()); 53 | 54 | //create mediqlSECRET 55 | // app.post("/mediqlSECRET", async (req: Request, res: Response) => { 56 | // //reqbody will contain 3900 or port given 57 | // await fetch("http://localhost:3900/mediqlSecret", { 58 | // method: "POST", 59 | // body: JSON.stringify({ SECRET: SECRET }), 60 | // headers: { 61 | // "Content-Type": "application/json", 62 | // }, 63 | // }).then(() => { 64 | // console.log("SECRET sent: ", SECRET); 65 | // console.log("SECRET type: ", typeof SECRET); 66 | // }); 67 | // res.status(200).send("thank you AGAIN"); 68 | // }); 69 | // app.post("/mediqlSECRET", async (req: Request, res: Response) => { 70 | // //reqbody will contain 3900 or port given 71 | // await fetch("http://localhost:3900/mediqlSecret", { 72 | // method: "POST", 73 | // body: JSON.stringify({ SECRET: SECRET }), 74 | // headers: { 75 | // "Content-Type": "application/json", 76 | // }, 77 | // }).then(() => { 78 | // console.log("SECRET sent: ", SECRET); 79 | // console.log("SECRET type: ", typeof SECRET); 80 | // }); 81 | 82 | // res.status(200).send("thank you AGAIN"); 83 | // }); 84 | 85 | 86 | //Gets response from graphiql and sends to DB in /queryRespReceiver 87 | app.post("/queryRespReceiver", async (req: Request, res: Response) => { 88 | const savedData = await QueryRes.create({ id: SECRET, response: req.body }); 89 | res.json(req.body.queryResp); 90 | }); 91 | 92 | //originalResponseReceiver 93 | app.post("/originalRespReceiver", async (req: Request, res: Response) => { 94 | const { parentNode } = req.body; 95 | await OriginResp.create({ id: SECRET, response: req.body }); 96 | res.json(req.body); 97 | }); 98 | 99 | // catch-all route handler for any requests to an unknown route 100 | app.use((req: Request, res: Response) => 101 | res.status(404).send("Page not found, please check your URL endpoints!") 102 | ); 103 | 104 | // express error handler 105 | app.use((err: Error, req: Request, res: Response, next: NextFunction) => { 106 | const defaultErr = { 107 | log: "Express error handler caught unknown middleware error", 108 | status: 500, 109 | message: { err: err }, 110 | }; 111 | const errorObj = Object.assign({}, defaultErr, err); 112 | return res.status(errorObj.status).json(errorObj.message); 113 | }); 114 | 115 | io.on("connection", async (socket) => { 116 | console.log("A user connected"); 117 | 118 | socket.on("disconnect", () => { 119 | console.log("A user disconnected"); 120 | }); 121 | }); 122 | 123 | server.listen(PORT, () => { 124 | console.log(`Server running on port ${PORT}`); 125 | }); 126 | 127 | export default SECRET; 128 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | "jsx": "react", 17 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 18 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 19 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 20 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 21 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 22 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 23 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 24 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 25 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 26 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 27 | 28 | /* Modules */ 29 | "module": "commonjs" /* Specify what module code is generated. */, 30 | // "rootDir": "./", /* Specify the root folder within your source files. */ 31 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 32 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 33 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 34 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 35 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 36 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 38 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 39 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 40 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 41 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 42 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 43 | // "resolveJsonModule": true, /* Enable importing .json files. */ 44 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 45 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 46 | 47 | /* JavaScript Support */ 48 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 49 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 50 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 51 | 52 | /* Emit */ 53 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 54 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 55 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 56 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 57 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 58 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 59 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 60 | // "removeComments": true, /* Disable emitting comments. */ 61 | // "noEmit": true, /* Disable emitting files from a compilation. */ 62 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 63 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 64 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 65 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 66 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 67 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 68 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 69 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 70 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 71 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 72 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 73 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 74 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 75 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 76 | 77 | /* Interop Constraints */ 78 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 79 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 80 | "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 81 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 82 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 83 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 84 | 85 | /* Type Checking */ 86 | "strict": true /* Enable all strict type-checking options. */, 87 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 88 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 89 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 90 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 91 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 92 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 93 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 94 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 95 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 96 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 97 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 98 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 99 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 100 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 101 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 102 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 103 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 104 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 105 | 106 | /* Completeness */ 107 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 108 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 109 | } 110 | } 111 | --------------------------------------------------------------------------------