├── .DS_Store ├── .gitignore ├── README.md ├── bun.lockb ├── gpt-action.json ├── index.js ├── jsconfig.json ├── package-lock.json ├── package.json └── public └── .DS_Store /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developersdigest/websitegpt/645566bb552e466b406e7b393a92cd7280b047b8/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | 15 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 16 | 17 | # Runtime data 18 | 19 | pids 20 | _.pid 21 | _.seed 22 | \*.pid.lock 23 | 24 | # Directory for instrumented libs generated by jscoverage/JSCover 25 | 26 | lib-cov 27 | 28 | # Coverage directory used by tools like istanbul 29 | 30 | coverage 31 | \*.lcov 32 | 33 | # nyc test coverage 34 | 35 | .nyc_output 36 | 37 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 38 | 39 | .grunt 40 | 41 | # Bower dependency directory (https://bower.io/) 42 | 43 | bower_components 44 | 45 | # node-waf configuration 46 | 47 | .lock-wscript 48 | 49 | # Compiled binary addons (https://nodejs.org/api/addons.html) 50 | 51 | build/Release 52 | 53 | # Dependency directories 54 | 55 | node_modules/ 56 | jspm_packages/ 57 | 58 | # Snowpack dependency directory (https://snowpack.dev/) 59 | 60 | web_modules/ 61 | 62 | # TypeScript cache 63 | 64 | \*.tsbuildinfo 65 | 66 | # Optional npm cache directory 67 | 68 | .npm 69 | 70 | # Optional eslint cache 71 | 72 | .eslintcache 73 | 74 | # Optional stylelint cache 75 | 76 | .stylelintcache 77 | 78 | # Microbundle cache 79 | 80 | .rpt2_cache/ 81 | .rts2_cache_cjs/ 82 | .rts2_cache_es/ 83 | .rts2_cache_umd/ 84 | 85 | # Optional REPL history 86 | 87 | .node_repl_history 88 | 89 | # Output of 'npm pack' 90 | 91 | \*.tgz 92 | 93 | # Yarn Integrity file 94 | 95 | .yarn-integrity 96 | 97 | # dotenv environment variable files 98 | 99 | .env 100 | .env.development.local 101 | .env.test.local 102 | .env.production.local 103 | .env.local 104 | 105 | # parcel-bundler cache (https://parceljs.org/) 106 | 107 | .cache 108 | .parcel-cache 109 | 110 | # Next.js build output 111 | 112 | .next 113 | out 114 | 115 | # Nuxt.js build / generate output 116 | 117 | .nuxt 118 | dist 119 | 120 | # Gatsby files 121 | 122 | .cache/ 123 | 124 | # Comment in the public line in if your project uses Gatsby and not Next.js 125 | 126 | # https://nextjs.org/blog/next-9-1#public-directory-support 127 | 128 | # public 129 | 130 | # vuepress build output 131 | 132 | .vuepress/dist 133 | 134 | # vuepress v2.x temp and cache directory 135 | 136 | .temp 137 | .cache 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.\* 170 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WebsiteGPT 2 | 3 | Welcome to the WebsiteGPT repository! This project focuses on creating a custom GPT capable of generating and deploying live, interactive websites. It's a comprehensive guide for developers interested in integrating AI-driven content generation into web development. 4 | 5 | ## Instructional Video 6 | 7 | For a detailed step-by-step tutorial, check out our instructional video: 8 | [WebsiteGPT: A Step-by-Step Guide to Building and Deploying a Custom GPT to the GPT Store](https://www.youtube.com/watch?v=MGs0UvKuthM) 9 | 10 | ## Project Overview 11 | 12 | WebsiteGPT demonstrates the process of building a custom GPT from scratch. The project covers the entire workflow - from setting up the backend using Node.js to deploying the application. Key features include dynamic content generation and deployment using modern development tools. 13 | 14 | ### Video Tutorial Breakdown 15 | 16 | - **00:00** Introduction to Building a Custom GPT 17 | - **00:21** Demonstration of the Custom GPT 18 | - **00:29** Starting the Project in VS Code 19 | - **00:53** Setting Up the Backend 20 | - **01:37** Defining the Route and Generating a Unique File Name 21 | - **01:47** Creating the Basic HTML Structure 22 | - **02:15** Handling File Persistence and Deployment 23 | - **03:13** Setting Up a New Repository on GitHub 24 | - **03:55** Deploying the Project on Render 25 | - **05:11** Updating the Server URL 26 | - **05:54** Setting Up GPT Actions 27 | - **07:12** Building Out the GPT 28 | - **08:00** Conclusion and Next Steps 29 | 30 | ### Relevant Links 31 | 32 | - [GPT Store](https://chat.openai.com/gpts) 33 | - [OpenAI Blog: Introducing the GPT Store](https://openai.com/blog/introducing-the-gpt-store) 34 | - [GPT Crawler](https://www.youtube.com/watch?v=CFMK_707xqg) 35 | - [GPT Actions](https://www.youtube.com/watch?v=-ceIJx7zaBM) 36 | - [GPT Proxy](https://www.youtube.com/watch?v=pfBxw56hwf4) 37 | 38 | ### Stay Connected 39 | 40 | 🔥 Don't forget to like, share, and subscribe for more updates! 41 | 👉 Follow me on Twitter: [@dev__digest](https://twitter.com/dev__digest) 42 | 43 | --- 44 | 45 | ## Repository Structure 46 | 47 | Below is an outline of the key components of the WebsiteGPT project: 48 | 49 | ### Main Files and Directories 50 | 51 | - `index.js` - The main server file where the Express app is defined. 52 | - `public/` - Directory for serving static files. 53 | - `gpt/` - Subdirectory for the generated GPT files. 54 | 55 | ### Setup and Configuration 56 | 57 | 1. Import necessary modules like `express`, `fs`, `crypto`. 58 | 2. Define `__filename` and `__dirname` for ES module compatibility. 59 | 3. Set up directories for static files and create them if they don't exist. 60 | 4. Instantiate the Express app and define CORS middleware. 61 | 5. Implement the POST route for '/deploy' to handle GPT-generated content. 62 | 6. Serve static files from the 'public' directory. 63 | 7. Start the server on the specified port. 64 | 65 | ### Running the Project 66 | 67 | To run WebsiteGPT on your local machine: 68 | 69 | 1. Clone the repository. 70 | 2. Navigate to the project directory. 71 | 3. Run `npm install` to install dependencies. 72 | 4. Start the server with `npm start`. 73 | 5. Access the application at `http://localhost:3000`. 74 | 75 | --- 76 | 77 | ## License 78 | 79 | WebsiteGPT is released under the [MIT License](LICENSE). Feel free to use, modify, and distribute the code as per the license terms. 80 | 81 | --- 82 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developersdigest/websitegpt/645566bb552e466b406e7b393a92cd7280b047b8/bun.lockb -------------------------------------------------------------------------------- /gpt-action.json: -------------------------------------------------------------------------------- 1 | { 2 | "openapi": "3.1.0", 3 | "info": { 4 | "title": "Generates a functional Website", 5 | "description": "Generates HTML to put within a body tag with tailwind css classes to generate a basic website that I am requested for", 6 | "version": "v1.0.0" 7 | }, 8 | "servers": [ 9 | { 10 | "url": "https://YOURRENDERLINKGOESHERE.onrender.com" 11 | } 12 | ], 13 | "paths": { 14 | "/deploy": { 15 | "post": { 16 | "description": "Deploy the HTML with tailwindcss classes to a website.", 17 | "operationId": "deploy", 18 | "parameters": [ 19 | { 20 | "name": "html", 21 | "in": "query", 22 | "description": "The string of html with tailwind css classes to go within tags. Nothing more.", 23 | "required": true, 24 | "schema": { 25 | "type": "string" 26 | } 27 | } 28 | ], 29 | "deprecated": false 30 | } 31 | } 32 | }, 33 | "components": { 34 | "schemas": {} 35 | } 36 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // 1. Import necessary modules and packages 2 | import express from "express"; 3 | import fs from "fs"; 4 | import crypto from "crypto"; 5 | import { fileURLToPath } from "url"; 6 | import path from "path"; 7 | // 2. Define __filename and __dirname for ES module compatibility 8 | const __filename = fileURLToPath(import.meta.url); 9 | const __dirname = path.dirname(__filename); 10 | // 3. Set up the directories for serving static files 11 | const publicDir = path.join(__dirname, "public"); 12 | const gptDir = path.join(publicDir, "gpt"); 13 | // 4. Check and create 'gpt' directory if it does not exist 14 | if (!fs.existsSync(gptDir)) { 15 | fs.mkdirSync(gptDir, { recursive: true }); 16 | } 17 | // 5. Create an instance of Express application 18 | const app = express(); 19 | // 6. Define the port on which the server will listen 20 | const port = 3000; 21 | // 7. Middleware for handling Cross-Origin Resource Sharing (CORS) 22 | const corsMiddleware = (req, res, next) => { 23 | res.header("Access-Control-Allow-Origin", "https://chat.openai.com"); 24 | res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE"); 25 | res.header("Access-Control-Allow-Headers", "Content-Type, Authorization"); 26 | res.header("Access-Control-Allow-Credentials", "true"); 27 | if (req.method === "OPTIONS") { 28 | res.sendStatus(200); 29 | } else { 30 | next(); 31 | } 32 | }; 33 | // 8. Apply CORS middleware to the Express app 34 | app.use(corsMiddleware); 35 | // 9. Middleware to parse JSON and URL-encoded data 36 | app.use(express.json()); 37 | app.use(express.urlencoded({ extended: true })); 38 | // 10. Define the POST route for '/deploy' 39 | app.post("/deploy", (req, res) => { 40 | // 11. Generate a unique file name 41 | const uniqueFileName = crypto.randomBytes(4).toString("hex") + ".html"; 42 | // 12. Set the path for the new file 43 | const filePath = path.join(gptDir, uniqueFileName); 44 | // 13. Create the HTML content to be saved 45 | const htmlContent = ` 46 | 47 | 48 | 49 | 50 | 51 | ${req.query.html} 52 | 53 | `; 54 | // 14. Write the HTML content to the file (At this point you could also upload to an AWS S3 Bucket for persistence) 55 | fs.writeFileSync(filePath, htmlContent); 56 | console.log(`File saved at: ${filePath}`); 57 | // 15. Send the URL of the generated file as a response 58 | res.send(`https://YOURRENDERLINKGOESHERE.onrender.com/gpt/${uniqueFileName}`); 59 | }); 60 | // 16. Serve static files from the 'public' directory 61 | app.use(express.static(publicDir)); 62 | // 17. Start the server and listen on the defined port 63 | app.listen(port, () => { 64 | console.log(`Server listening at http://localhost:${port}`); 65 | }); -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "module": "esnext", 5 | "target": "esnext", 6 | "moduleResolution": "bundler", 7 | "moduleDetection": "force", 8 | "allowImportingTsExtensions": true, 9 | "noEmit": true, 10 | "composite": true, 11 | "strict": true, 12 | "downlevelIteration": true, 13 | "skipLibCheck": true, 14 | "jsx": "preserve", 15 | "allowSyntheticDefaultImports": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "allowJs": true, 18 | "types": [ 19 | "bun-types" // add Bun global 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpt-website-creator", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "gpt-website-creator", 8 | "dependencies": { 9 | "crypto": "^1.0.1", 10 | "express": "^4.18.2" 11 | }, 12 | "devDependencies": { 13 | "bun-types": "latest" 14 | }, 15 | "peerDependencies": { 16 | "typescript": "^5.0.0" 17 | } 18 | }, 19 | "node_modules/@types/node": { 20 | "version": "20.11.0", 21 | "dev": true, 22 | "license": "MIT", 23 | "dependencies": { 24 | "undici-types": "~5.26.4" 25 | } 26 | }, 27 | "node_modules/@types/node/node_modules/undici-types": { 28 | "version": "5.26.5", 29 | "dev": true, 30 | "license": "MIT" 31 | }, 32 | "node_modules/@types/ws": { 33 | "version": "8.5.10", 34 | "dev": true, 35 | "license": "MIT", 36 | "dependencies": { 37 | "@types/node": "*" 38 | } 39 | }, 40 | "node_modules/accepts": { 41 | "version": "1.3.8", 42 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 43 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 44 | "dependencies": { 45 | "mime-types": "~2.1.34", 46 | "negotiator": "0.6.3" 47 | }, 48 | "engines": { 49 | "node": ">= 0.6" 50 | } 51 | }, 52 | "node_modules/array-flatten": { 53 | "version": "1.1.1", 54 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 55 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 56 | }, 57 | "node_modules/body-parser": { 58 | "version": "1.20.1", 59 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 60 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 61 | "dependencies": { 62 | "bytes": "3.1.2", 63 | "content-type": "~1.0.4", 64 | "debug": "2.6.9", 65 | "depd": "2.0.0", 66 | "destroy": "1.2.0", 67 | "http-errors": "2.0.0", 68 | "iconv-lite": "0.4.24", 69 | "on-finished": "2.4.1", 70 | "qs": "6.11.0", 71 | "raw-body": "2.5.1", 72 | "type-is": "~1.6.18", 73 | "unpipe": "1.0.0" 74 | }, 75 | "engines": { 76 | "node": ">= 0.8", 77 | "npm": "1.2.8000 || >= 1.4.16" 78 | } 79 | }, 80 | "node_modules/bun-types": { 81 | "version": "1.0.22", 82 | "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.0.22.tgz", 83 | "integrity": "sha512-JxmXAx6cXb37+rMsn30WRXlz9lbPFR9rQE78hNSoy5wJ8m/nUktkmHpo7xZb/YKDds23ifxWLjDtyni9MeXLgw==", 84 | "dev": true, 85 | "dependencies": { 86 | "@types/node": "*", 87 | "@types/ws": "*", 88 | "undici-types": "^5.26.4" 89 | } 90 | }, 91 | "node_modules/bytes": { 92 | "version": "3.1.2", 93 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 94 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 95 | "engines": { 96 | "node": ">= 0.8" 97 | } 98 | }, 99 | "node_modules/call-bind": { 100 | "version": "1.0.5", 101 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", 102 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", 103 | "dependencies": { 104 | "function-bind": "^1.1.2", 105 | "get-intrinsic": "^1.2.1", 106 | "set-function-length": "^1.1.1" 107 | }, 108 | "funding": { 109 | "url": "https://github.com/sponsors/ljharb" 110 | } 111 | }, 112 | "node_modules/content-disposition": { 113 | "version": "0.5.4", 114 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 115 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 116 | "dependencies": { 117 | "safe-buffer": "5.2.1" 118 | }, 119 | "engines": { 120 | "node": ">= 0.6" 121 | } 122 | }, 123 | "node_modules/content-type": { 124 | "version": "1.0.5", 125 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 126 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 127 | "engines": { 128 | "node": ">= 0.6" 129 | } 130 | }, 131 | "node_modules/cookie": { 132 | "version": "0.5.0", 133 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 134 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 135 | "engines": { 136 | "node": ">= 0.6" 137 | } 138 | }, 139 | "node_modules/cookie-signature": { 140 | "version": "1.0.6", 141 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 142 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 143 | }, 144 | "node_modules/crypto": { 145 | "version": "1.0.1", 146 | "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", 147 | "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", 148 | "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." 149 | }, 150 | "node_modules/debug": { 151 | "version": "2.6.9", 152 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 153 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 154 | "dependencies": { 155 | "ms": "2.0.0" 156 | } 157 | }, 158 | "node_modules/define-data-property": { 159 | "version": "1.1.1", 160 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", 161 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", 162 | "dependencies": { 163 | "get-intrinsic": "^1.2.1", 164 | "gopd": "^1.0.1", 165 | "has-property-descriptors": "^1.0.0" 166 | }, 167 | "engines": { 168 | "node": ">= 0.4" 169 | } 170 | }, 171 | "node_modules/depd": { 172 | "version": "2.0.0", 173 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 174 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 175 | "engines": { 176 | "node": ">= 0.8" 177 | } 178 | }, 179 | "node_modules/destroy": { 180 | "version": "1.2.0", 181 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 182 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 183 | "engines": { 184 | "node": ">= 0.8", 185 | "npm": "1.2.8000 || >= 1.4.16" 186 | } 187 | }, 188 | "node_modules/ee-first": { 189 | "version": "1.1.1", 190 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 191 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 192 | }, 193 | "node_modules/encodeurl": { 194 | "version": "1.0.2", 195 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 196 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 197 | "engines": { 198 | "node": ">= 0.8" 199 | } 200 | }, 201 | "node_modules/escape-html": { 202 | "version": "1.0.3", 203 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 204 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 205 | }, 206 | "node_modules/etag": { 207 | "version": "1.8.1", 208 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 209 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 210 | "engines": { 211 | "node": ">= 0.6" 212 | } 213 | }, 214 | "node_modules/express": { 215 | "version": "4.18.2", 216 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 217 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 218 | "dependencies": { 219 | "accepts": "~1.3.8", 220 | "array-flatten": "1.1.1", 221 | "body-parser": "1.20.1", 222 | "content-disposition": "0.5.4", 223 | "content-type": "~1.0.4", 224 | "cookie": "0.5.0", 225 | "cookie-signature": "1.0.6", 226 | "debug": "2.6.9", 227 | "depd": "2.0.0", 228 | "encodeurl": "~1.0.2", 229 | "escape-html": "~1.0.3", 230 | "etag": "~1.8.1", 231 | "finalhandler": "1.2.0", 232 | "fresh": "0.5.2", 233 | "http-errors": "2.0.0", 234 | "merge-descriptors": "1.0.1", 235 | "methods": "~1.1.2", 236 | "on-finished": "2.4.1", 237 | "parseurl": "~1.3.3", 238 | "path-to-regexp": "0.1.7", 239 | "proxy-addr": "~2.0.7", 240 | "qs": "6.11.0", 241 | "range-parser": "~1.2.1", 242 | "safe-buffer": "5.2.1", 243 | "send": "0.18.0", 244 | "serve-static": "1.15.0", 245 | "setprototypeof": "1.2.0", 246 | "statuses": "2.0.1", 247 | "type-is": "~1.6.18", 248 | "utils-merge": "1.0.1", 249 | "vary": "~1.1.2" 250 | }, 251 | "engines": { 252 | "node": ">= 0.10.0" 253 | } 254 | }, 255 | "node_modules/finalhandler": { 256 | "version": "1.2.0", 257 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 258 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 259 | "dependencies": { 260 | "debug": "2.6.9", 261 | "encodeurl": "~1.0.2", 262 | "escape-html": "~1.0.3", 263 | "on-finished": "2.4.1", 264 | "parseurl": "~1.3.3", 265 | "statuses": "2.0.1", 266 | "unpipe": "~1.0.0" 267 | }, 268 | "engines": { 269 | "node": ">= 0.8" 270 | } 271 | }, 272 | "node_modules/forwarded": { 273 | "version": "0.2.0", 274 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 275 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 276 | "engines": { 277 | "node": ">= 0.6" 278 | } 279 | }, 280 | "node_modules/fresh": { 281 | "version": "0.5.2", 282 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 283 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 284 | "engines": { 285 | "node": ">= 0.6" 286 | } 287 | }, 288 | "node_modules/function-bind": { 289 | "version": "1.1.2", 290 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 291 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 292 | "funding": { 293 | "url": "https://github.com/sponsors/ljharb" 294 | } 295 | }, 296 | "node_modules/get-intrinsic": { 297 | "version": "1.2.2", 298 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", 299 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", 300 | "dependencies": { 301 | "function-bind": "^1.1.2", 302 | "has-proto": "^1.0.1", 303 | "has-symbols": "^1.0.3", 304 | "hasown": "^2.0.0" 305 | }, 306 | "funding": { 307 | "url": "https://github.com/sponsors/ljharb" 308 | } 309 | }, 310 | "node_modules/gopd": { 311 | "version": "1.0.1", 312 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 313 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 314 | "dependencies": { 315 | "get-intrinsic": "^1.1.3" 316 | }, 317 | "funding": { 318 | "url": "https://github.com/sponsors/ljharb" 319 | } 320 | }, 321 | "node_modules/has-property-descriptors": { 322 | "version": "1.0.1", 323 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 324 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 325 | "dependencies": { 326 | "get-intrinsic": "^1.2.2" 327 | }, 328 | "funding": { 329 | "url": "https://github.com/sponsors/ljharb" 330 | } 331 | }, 332 | "node_modules/has-proto": { 333 | "version": "1.0.1", 334 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 335 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 336 | "engines": { 337 | "node": ">= 0.4" 338 | }, 339 | "funding": { 340 | "url": "https://github.com/sponsors/ljharb" 341 | } 342 | }, 343 | "node_modules/has-symbols": { 344 | "version": "1.0.3", 345 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 346 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 347 | "engines": { 348 | "node": ">= 0.4" 349 | }, 350 | "funding": { 351 | "url": "https://github.com/sponsors/ljharb" 352 | } 353 | }, 354 | "node_modules/hasown": { 355 | "version": "2.0.0", 356 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 357 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 358 | "dependencies": { 359 | "function-bind": "^1.1.2" 360 | }, 361 | "engines": { 362 | "node": ">= 0.4" 363 | } 364 | }, 365 | "node_modules/http-errors": { 366 | "version": "2.0.0", 367 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 368 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 369 | "dependencies": { 370 | "depd": "2.0.0", 371 | "inherits": "2.0.4", 372 | "setprototypeof": "1.2.0", 373 | "statuses": "2.0.1", 374 | "toidentifier": "1.0.1" 375 | }, 376 | "engines": { 377 | "node": ">= 0.8" 378 | } 379 | }, 380 | "node_modules/iconv-lite": { 381 | "version": "0.4.24", 382 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 383 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 384 | "dependencies": { 385 | "safer-buffer": ">= 2.1.2 < 3" 386 | }, 387 | "engines": { 388 | "node": ">=0.10.0" 389 | } 390 | }, 391 | "node_modules/inherits": { 392 | "version": "2.0.4", 393 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 394 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 395 | }, 396 | "node_modules/ipaddr.js": { 397 | "version": "1.9.1", 398 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 399 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 400 | "engines": { 401 | "node": ">= 0.10" 402 | } 403 | }, 404 | "node_modules/media-typer": { 405 | "version": "0.3.0", 406 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 407 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 408 | "engines": { 409 | "node": ">= 0.6" 410 | } 411 | }, 412 | "node_modules/merge-descriptors": { 413 | "version": "1.0.1", 414 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 415 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 416 | }, 417 | "node_modules/methods": { 418 | "version": "1.1.2", 419 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 420 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 421 | "engines": { 422 | "node": ">= 0.6" 423 | } 424 | }, 425 | "node_modules/mime": { 426 | "version": "1.6.0", 427 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 428 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 429 | "bin": { 430 | "mime": "cli.js" 431 | }, 432 | "engines": { 433 | "node": ">=4" 434 | } 435 | }, 436 | "node_modules/mime-db": { 437 | "version": "1.52.0", 438 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 439 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 440 | "engines": { 441 | "node": ">= 0.6" 442 | } 443 | }, 444 | "node_modules/mime-types": { 445 | "version": "2.1.35", 446 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 447 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 448 | "dependencies": { 449 | "mime-db": "1.52.0" 450 | }, 451 | "engines": { 452 | "node": ">= 0.6" 453 | } 454 | }, 455 | "node_modules/ms": { 456 | "version": "2.0.0", 457 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 458 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 459 | }, 460 | "node_modules/negotiator": { 461 | "version": "0.6.3", 462 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 463 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 464 | "engines": { 465 | "node": ">= 0.6" 466 | } 467 | }, 468 | "node_modules/object-inspect": { 469 | "version": "1.13.1", 470 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 471 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", 472 | "funding": { 473 | "url": "https://github.com/sponsors/ljharb" 474 | } 475 | }, 476 | "node_modules/on-finished": { 477 | "version": "2.4.1", 478 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 479 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 480 | "dependencies": { 481 | "ee-first": "1.1.1" 482 | }, 483 | "engines": { 484 | "node": ">= 0.8" 485 | } 486 | }, 487 | "node_modules/parseurl": { 488 | "version": "1.3.3", 489 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 490 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 491 | "engines": { 492 | "node": ">= 0.8" 493 | } 494 | }, 495 | "node_modules/path-to-regexp": { 496 | "version": "0.1.7", 497 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 498 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 499 | }, 500 | "node_modules/proxy-addr": { 501 | "version": "2.0.7", 502 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 503 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 504 | "dependencies": { 505 | "forwarded": "0.2.0", 506 | "ipaddr.js": "1.9.1" 507 | }, 508 | "engines": { 509 | "node": ">= 0.10" 510 | } 511 | }, 512 | "node_modules/qs": { 513 | "version": "6.11.0", 514 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 515 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 516 | "dependencies": { 517 | "side-channel": "^1.0.4" 518 | }, 519 | "engines": { 520 | "node": ">=0.6" 521 | }, 522 | "funding": { 523 | "url": "https://github.com/sponsors/ljharb" 524 | } 525 | }, 526 | "node_modules/range-parser": { 527 | "version": "1.2.1", 528 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 529 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 530 | "engines": { 531 | "node": ">= 0.6" 532 | } 533 | }, 534 | "node_modules/raw-body": { 535 | "version": "2.5.1", 536 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 537 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 538 | "dependencies": { 539 | "bytes": "3.1.2", 540 | "http-errors": "2.0.0", 541 | "iconv-lite": "0.4.24", 542 | "unpipe": "1.0.0" 543 | }, 544 | "engines": { 545 | "node": ">= 0.8" 546 | } 547 | }, 548 | "node_modules/safe-buffer": { 549 | "version": "5.2.1", 550 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 551 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 552 | "funding": [ 553 | { 554 | "type": "github", 555 | "url": "https://github.com/sponsors/feross" 556 | }, 557 | { 558 | "type": "patreon", 559 | "url": "https://www.patreon.com/feross" 560 | }, 561 | { 562 | "type": "consulting", 563 | "url": "https://feross.org/support" 564 | } 565 | ] 566 | }, 567 | "node_modules/safer-buffer": { 568 | "version": "2.1.2", 569 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 570 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 571 | }, 572 | "node_modules/send": { 573 | "version": "0.18.0", 574 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 575 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 576 | "dependencies": { 577 | "debug": "2.6.9", 578 | "depd": "2.0.0", 579 | "destroy": "1.2.0", 580 | "encodeurl": "~1.0.2", 581 | "escape-html": "~1.0.3", 582 | "etag": "~1.8.1", 583 | "fresh": "0.5.2", 584 | "http-errors": "2.0.0", 585 | "mime": "1.6.0", 586 | "ms": "2.1.3", 587 | "on-finished": "2.4.1", 588 | "range-parser": "~1.2.1", 589 | "statuses": "2.0.1" 590 | }, 591 | "engines": { 592 | "node": ">= 0.8.0" 593 | } 594 | }, 595 | "node_modules/send/node_modules/ms": { 596 | "version": "2.1.3", 597 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 598 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 599 | }, 600 | "node_modules/serve-static": { 601 | "version": "1.15.0", 602 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 603 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 604 | "dependencies": { 605 | "encodeurl": "~1.0.2", 606 | "escape-html": "~1.0.3", 607 | "parseurl": "~1.3.3", 608 | "send": "0.18.0" 609 | }, 610 | "engines": { 611 | "node": ">= 0.8.0" 612 | } 613 | }, 614 | "node_modules/set-function-length": { 615 | "version": "1.1.1", 616 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", 617 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", 618 | "dependencies": { 619 | "define-data-property": "^1.1.1", 620 | "get-intrinsic": "^1.2.1", 621 | "gopd": "^1.0.1", 622 | "has-property-descriptors": "^1.0.0" 623 | }, 624 | "engines": { 625 | "node": ">= 0.4" 626 | } 627 | }, 628 | "node_modules/setprototypeof": { 629 | "version": "1.2.0", 630 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 631 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 632 | }, 633 | "node_modules/side-channel": { 634 | "version": "1.0.4", 635 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 636 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 637 | "dependencies": { 638 | "call-bind": "^1.0.0", 639 | "get-intrinsic": "^1.0.2", 640 | "object-inspect": "^1.9.0" 641 | }, 642 | "funding": { 643 | "url": "https://github.com/sponsors/ljharb" 644 | } 645 | }, 646 | "node_modules/statuses": { 647 | "version": "2.0.1", 648 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 649 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 650 | "engines": { 651 | "node": ">= 0.8" 652 | } 653 | }, 654 | "node_modules/toidentifier": { 655 | "version": "1.0.1", 656 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 657 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 658 | "engines": { 659 | "node": ">=0.6" 660 | } 661 | }, 662 | "node_modules/type-is": { 663 | "version": "1.6.18", 664 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 665 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 666 | "dependencies": { 667 | "media-typer": "0.3.0", 668 | "mime-types": "~2.1.24" 669 | }, 670 | "engines": { 671 | "node": ">= 0.6" 672 | } 673 | }, 674 | "node_modules/typescript": { 675 | "version": "5.3.3", 676 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", 677 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", 678 | "peer": true, 679 | "bin": { 680 | "tsc": "bin/tsc", 681 | "tsserver": "bin/tsserver" 682 | }, 683 | "engines": { 684 | "node": ">=14.17" 685 | } 686 | }, 687 | "node_modules/undici-types": { 688 | "version": "5.28.2", 689 | "dev": true, 690 | "license": "MIT" 691 | }, 692 | "node_modules/unpipe": { 693 | "version": "1.0.0", 694 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 695 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 696 | "engines": { 697 | "node": ">= 0.8" 698 | } 699 | }, 700 | "node_modules/utils-merge": { 701 | "version": "1.0.1", 702 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 703 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 704 | "engines": { 705 | "node": ">= 0.4.0" 706 | } 707 | }, 708 | "node_modules/vary": { 709 | "version": "1.1.2", 710 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 711 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 712 | "engines": { 713 | "node": ">= 0.8" 714 | } 715 | } 716 | } 717 | } 718 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpt-website-creator", 3 | "module": "index.js", 4 | "type": "module", 5 | "devDependencies": { 6 | "bun-types": "latest" 7 | }, 8 | "peerDependencies": { 9 | "typescript": "^5.0.0" 10 | }, 11 | "scripts": { 12 | "start": "node index.js" 13 | }, 14 | "dependencies": { 15 | "crypto": "^1.0.1", 16 | "express": "^4.18.2" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /public/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developersdigest/websitegpt/645566bb552e466b406e7b393a92cd7280b047b8/public/.DS_Store --------------------------------------------------------------------------------