AnthoneoJ commited on
Commit
a839f47
·
1 Parent(s): 90bd670
Files changed (11) hide show
  1. .gitignore +24 -0
  2. counter.js +9 -0
  3. index.html +29 -0
  4. javascript.svg +1 -0
  5. main.js +136 -0
  6. notes.txt +12 -0
  7. package-lock.json +1498 -0
  8. package.json +19 -0
  9. public/vite.svg +1 -0
  10. server.js +83 -0
  11. style.css +96 -0
.gitignore ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?
counter.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ export function setupCounter(element) {
2
+ let counter = 0
3
+ const setCounter = (count) => {
4
+ counter = count
5
+ element.innerHTML = `count is ${counter}`
6
+ }
7
+ element.addEventListener('click', () => setCounter(counter + 1))
8
+ setCounter(0)
9
+ }
index.html ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Replicate UI</title>
8
+ </head>
9
+ <body>
10
+ <div>
11
+ <h1>Replicate UI</h1>
12
+ <div class="card">
13
+ <input type="file" id="imageFileInput" accept="image/*"><br><br>
14
+
15
+ <label for="imageUrlInput">Image URL:</label>
16
+ <input type="text" id="imageUrlInput" placeholder="Enter image URL"><br><br>
17
+
18
+ <label for="promptInput">Prompt:</label>
19
+ <input type="text" id="promptInput" placeholder="Enter prompt"><br><br>
20
+
21
+ <button id="submitButton" type="button">Submit</button>
22
+ </div>
23
+ <p id="qwenOutput" class="read-the-docs">
24
+ [Output will be displayed here]
25
+ </p>
26
+ </div>
27
+ <script type="module" src="/main.js"></script>
28
+ </body>
29
+ </html>
javascript.svg ADDED
main.js ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import './style.css'
2
+
3
+ // Load environment variables
4
+ const portNum = process.env.PORT_NUM || 7860;
5
+
6
+ // Get a reference to the elements
7
+ const imageUploader = document.getElementById("imageFileInput");
8
+ const imageUrlInput = document.getElementById("imageUrlInput");
9
+ const promptInput = document.getElementById("promptInput");
10
+ const submitButton = document.querySelector("#submitButton");
11
+ const qwenOutput = document.querySelector("#qwenOutput");
12
+ // Attach an event listeners
13
+ imageUploader.addEventListener("change", imageFileChanged);
14
+ imageUrlInput.addEventListener("input", imageUrlChanged);
15
+ submitButton.addEventListener("click", submitReplicate);
16
+
17
+ var imageDataURL = "";
18
+
19
+ // Define the model here
20
+ // the example below is for https://replicate.com/lucataco/qwen-vl-chat?input=http
21
+ const model_code = process.env.MODEL_CODE || "50881b153b4d5f72b3db697e2bbad23bb1277ab741c5b52d80cd6ee17ea660e9";
22
+
23
+ // Set up the API options here
24
+ const proxyUrl = `http://localhost:${portNum}/api/predictions`; //proxy is required due to CORS policy
25
+ const proxyUrlImage = `http://localhost:${portNum}/imagehosting/upload`; //proxy is required due to CORS policy
26
+ //const apiUrl = "https://api.replicate.com/v1/predictions";
27
+ var requestOptions = {
28
+ method: 'POST',
29
+ headers: {
30
+ 'Content-Type': 'application/json'
31
+ }
32
+ };
33
+
34
+
35
+ function imageFileChanged(event) {
36
+ const file = event.target.files[0];
37
+ if (!file) return;
38
+ imageUrlInput.value = "";
39
+ const reader = new FileReader();
40
+ reader.onload = (e) => {
41
+ console.log(e.target);
42
+ imageDataURL = e.target.result;
43
+ };
44
+ reader.readAsDataURL(file);
45
+ }
46
+
47
+ function imageUrlChanged(event) {
48
+ const imageUrl = imageUrlInput.value.trim();
49
+ if (imageUrl === "") return;
50
+ imageDataURL = "";
51
+ imageUploader.value = "";
52
+ }
53
+
54
+ function submitReplicate() {
55
+ const promptText = promptInput.value;
56
+
57
+ let imageUrlPromise;
58
+
59
+ // Detect whether the input is a URL or path
60
+ if (imageDataURL !== "") {
61
+ // File
62
+ const reqImageHostOpts = {
63
+ method: 'POST',
64
+ headers: {
65
+ 'Content-Type': 'application/json'
66
+ },
67
+ body: JSON.stringify({ source: imageDataURL.split(',')[1] })
68
+ };
69
+
70
+ // Fetch the image data and resolve the promise when done
71
+ imageUrlPromise = new Promise((resolve, reject) => {
72
+ fetch(proxyUrlImage, reqImageHostOpts)
73
+ .then(response => response.json())
74
+ .then(data => {
75
+ console.log(`Image data:`);
76
+ console.log(data);
77
+ resolve(data.data.url);
78
+ })
79
+ .catch(error => reject(error));
80
+ });
81
+ } else {
82
+ // URL
83
+ imageUrlPromise = Promise.resolve(imageUrlInput.value);
84
+ }
85
+
86
+ // Once the image URL is ready, update request data and options, then run replicate
87
+ imageUrlPromise.then(imageUrl => {
88
+ const requestData = {
89
+ version: model_code,
90
+ input: {
91
+ image: imageUrl,
92
+ prompt: promptText
93
+ }
94
+ };
95
+
96
+ // Update request options
97
+ requestOptions.body = JSON.stringify(requestData);
98
+
99
+ runReplicate();
100
+ }).catch(error => {
101
+ console.error('Error fetching image data:', error);
102
+ });
103
+ }
104
+
105
+ function runReplicate() {
106
+ console.log('runReplicate() invoked');
107
+ console.log(`Request:`);
108
+ console.log(requestOptions);
109
+ fetch(proxyUrl, requestOptions)
110
+ .then(response => response.json())
111
+ .then(data => {
112
+ console.log(`Initial data:`);
113
+ console.log(data);
114
+ const getUrl = data.urls.get;
115
+ qwenOutput.innerHTML = 'Waiting for output...';
116
+ pollPrediction(getUrl);
117
+ })
118
+ .catch(error => console.error('Error:', error));
119
+ }
120
+
121
+ function pollPrediction(predictionUrl) {
122
+ fetch('/api/predictions/' + encodeURIComponent(predictionUrl))
123
+ .then(response => response.json())
124
+ .then(data => {
125
+ qwenOutput.innerHTML = `Status: ${data.status}`;
126
+ if (data.status === 'succeeded') {
127
+ console.log(`Received data:`);
128
+ console.log(data);
129
+ qwenOutput.innerHTML = `Qwen: ${data.output}`;
130
+ } else {
131
+ // If the status is not "succeeded" yet, continue polling
132
+ setTimeout(() => pollPrediction(predictionUrl), 3000); // Poll every 3 second (adjust as needed)
133
+ }
134
+ })
135
+ .catch(error => console.error('Error:', error));
136
+ }
notes.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PS C:\COMMON\UPWORK\qwen_vl> npm init vite vite-prod
2
+ ? Select a framework: » - Use arrow-keys. Return to submit.
3
+ √ Select a framework: » Vanilla
4
+ √ Select a variant: » JavaScript
5
+
6
+ Scaffolding project in C:\COMMON\UPWORK\qwen_vl\vite-prod...
7
+
8
+ Done. Now run:
9
+
10
+ cd vite-prod
11
+ npm install
12
+ npm run dev
package-lock.json ADDED
@@ -0,0 +1,1498 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "vite-prod",
3
+ "version": "0.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "vite-prod",
9
+ "version": "0.0.0",
10
+ "dependencies": {
11
+ "body-parser": "^1.20.2",
12
+ "cors": "^2.8.5",
13
+ "express": "^4.18.2"
14
+ },
15
+ "devDependencies": {
16
+ "vite": "^5.1.0"
17
+ }
18
+ },
19
+ "node_modules/@esbuild/aix-ppc64": {
20
+ "version": "0.19.12",
21
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
22
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
23
+ "cpu": [
24
+ "ppc64"
25
+ ],
26
+ "dev": true,
27
+ "optional": true,
28
+ "os": [
29
+ "aix"
30
+ ],
31
+ "engines": {
32
+ "node": ">=12"
33
+ }
34
+ },
35
+ "node_modules/@esbuild/android-arm": {
36
+ "version": "0.19.12",
37
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
38
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
39
+ "cpu": [
40
+ "arm"
41
+ ],
42
+ "dev": true,
43
+ "optional": true,
44
+ "os": [
45
+ "android"
46
+ ],
47
+ "engines": {
48
+ "node": ">=12"
49
+ }
50
+ },
51
+ "node_modules/@esbuild/android-arm64": {
52
+ "version": "0.19.12",
53
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
54
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
55
+ "cpu": [
56
+ "arm64"
57
+ ],
58
+ "dev": true,
59
+ "optional": true,
60
+ "os": [
61
+ "android"
62
+ ],
63
+ "engines": {
64
+ "node": ">=12"
65
+ }
66
+ },
67
+ "node_modules/@esbuild/android-x64": {
68
+ "version": "0.19.12",
69
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
70
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
71
+ "cpu": [
72
+ "x64"
73
+ ],
74
+ "dev": true,
75
+ "optional": true,
76
+ "os": [
77
+ "android"
78
+ ],
79
+ "engines": {
80
+ "node": ">=12"
81
+ }
82
+ },
83
+ "node_modules/@esbuild/darwin-arm64": {
84
+ "version": "0.19.12",
85
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
86
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
87
+ "cpu": [
88
+ "arm64"
89
+ ],
90
+ "dev": true,
91
+ "optional": true,
92
+ "os": [
93
+ "darwin"
94
+ ],
95
+ "engines": {
96
+ "node": ">=12"
97
+ }
98
+ },
99
+ "node_modules/@esbuild/darwin-x64": {
100
+ "version": "0.19.12",
101
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
102
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
103
+ "cpu": [
104
+ "x64"
105
+ ],
106
+ "dev": true,
107
+ "optional": true,
108
+ "os": [
109
+ "darwin"
110
+ ],
111
+ "engines": {
112
+ "node": ">=12"
113
+ }
114
+ },
115
+ "node_modules/@esbuild/freebsd-arm64": {
116
+ "version": "0.19.12",
117
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
118
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
119
+ "cpu": [
120
+ "arm64"
121
+ ],
122
+ "dev": true,
123
+ "optional": true,
124
+ "os": [
125
+ "freebsd"
126
+ ],
127
+ "engines": {
128
+ "node": ">=12"
129
+ }
130
+ },
131
+ "node_modules/@esbuild/freebsd-x64": {
132
+ "version": "0.19.12",
133
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
134
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
135
+ "cpu": [
136
+ "x64"
137
+ ],
138
+ "dev": true,
139
+ "optional": true,
140
+ "os": [
141
+ "freebsd"
142
+ ],
143
+ "engines": {
144
+ "node": ">=12"
145
+ }
146
+ },
147
+ "node_modules/@esbuild/linux-arm": {
148
+ "version": "0.19.12",
149
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
150
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
151
+ "cpu": [
152
+ "arm"
153
+ ],
154
+ "dev": true,
155
+ "optional": true,
156
+ "os": [
157
+ "linux"
158
+ ],
159
+ "engines": {
160
+ "node": ">=12"
161
+ }
162
+ },
163
+ "node_modules/@esbuild/linux-arm64": {
164
+ "version": "0.19.12",
165
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
166
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
167
+ "cpu": [
168
+ "arm64"
169
+ ],
170
+ "dev": true,
171
+ "optional": true,
172
+ "os": [
173
+ "linux"
174
+ ],
175
+ "engines": {
176
+ "node": ">=12"
177
+ }
178
+ },
179
+ "node_modules/@esbuild/linux-ia32": {
180
+ "version": "0.19.12",
181
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
182
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
183
+ "cpu": [
184
+ "ia32"
185
+ ],
186
+ "dev": true,
187
+ "optional": true,
188
+ "os": [
189
+ "linux"
190
+ ],
191
+ "engines": {
192
+ "node": ">=12"
193
+ }
194
+ },
195
+ "node_modules/@esbuild/linux-loong64": {
196
+ "version": "0.19.12",
197
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
198
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
199
+ "cpu": [
200
+ "loong64"
201
+ ],
202
+ "dev": true,
203
+ "optional": true,
204
+ "os": [
205
+ "linux"
206
+ ],
207
+ "engines": {
208
+ "node": ">=12"
209
+ }
210
+ },
211
+ "node_modules/@esbuild/linux-mips64el": {
212
+ "version": "0.19.12",
213
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
214
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
215
+ "cpu": [
216
+ "mips64el"
217
+ ],
218
+ "dev": true,
219
+ "optional": true,
220
+ "os": [
221
+ "linux"
222
+ ],
223
+ "engines": {
224
+ "node": ">=12"
225
+ }
226
+ },
227
+ "node_modules/@esbuild/linux-ppc64": {
228
+ "version": "0.19.12",
229
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
230
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
231
+ "cpu": [
232
+ "ppc64"
233
+ ],
234
+ "dev": true,
235
+ "optional": true,
236
+ "os": [
237
+ "linux"
238
+ ],
239
+ "engines": {
240
+ "node": ">=12"
241
+ }
242
+ },
243
+ "node_modules/@esbuild/linux-riscv64": {
244
+ "version": "0.19.12",
245
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
246
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
247
+ "cpu": [
248
+ "riscv64"
249
+ ],
250
+ "dev": true,
251
+ "optional": true,
252
+ "os": [
253
+ "linux"
254
+ ],
255
+ "engines": {
256
+ "node": ">=12"
257
+ }
258
+ },
259
+ "node_modules/@esbuild/linux-s390x": {
260
+ "version": "0.19.12",
261
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
262
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
263
+ "cpu": [
264
+ "s390x"
265
+ ],
266
+ "dev": true,
267
+ "optional": true,
268
+ "os": [
269
+ "linux"
270
+ ],
271
+ "engines": {
272
+ "node": ">=12"
273
+ }
274
+ },
275
+ "node_modules/@esbuild/linux-x64": {
276
+ "version": "0.19.12",
277
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
278
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
279
+ "cpu": [
280
+ "x64"
281
+ ],
282
+ "dev": true,
283
+ "optional": true,
284
+ "os": [
285
+ "linux"
286
+ ],
287
+ "engines": {
288
+ "node": ">=12"
289
+ }
290
+ },
291
+ "node_modules/@esbuild/netbsd-x64": {
292
+ "version": "0.19.12",
293
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
294
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
295
+ "cpu": [
296
+ "x64"
297
+ ],
298
+ "dev": true,
299
+ "optional": true,
300
+ "os": [
301
+ "netbsd"
302
+ ],
303
+ "engines": {
304
+ "node": ">=12"
305
+ }
306
+ },
307
+ "node_modules/@esbuild/openbsd-x64": {
308
+ "version": "0.19.12",
309
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
310
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
311
+ "cpu": [
312
+ "x64"
313
+ ],
314
+ "dev": true,
315
+ "optional": true,
316
+ "os": [
317
+ "openbsd"
318
+ ],
319
+ "engines": {
320
+ "node": ">=12"
321
+ }
322
+ },
323
+ "node_modules/@esbuild/sunos-x64": {
324
+ "version": "0.19.12",
325
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
326
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
327
+ "cpu": [
328
+ "x64"
329
+ ],
330
+ "dev": true,
331
+ "optional": true,
332
+ "os": [
333
+ "sunos"
334
+ ],
335
+ "engines": {
336
+ "node": ">=12"
337
+ }
338
+ },
339
+ "node_modules/@esbuild/win32-arm64": {
340
+ "version": "0.19.12",
341
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
342
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
343
+ "cpu": [
344
+ "arm64"
345
+ ],
346
+ "dev": true,
347
+ "optional": true,
348
+ "os": [
349
+ "win32"
350
+ ],
351
+ "engines": {
352
+ "node": ">=12"
353
+ }
354
+ },
355
+ "node_modules/@esbuild/win32-ia32": {
356
+ "version": "0.19.12",
357
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
358
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
359
+ "cpu": [
360
+ "ia32"
361
+ ],
362
+ "dev": true,
363
+ "optional": true,
364
+ "os": [
365
+ "win32"
366
+ ],
367
+ "engines": {
368
+ "node": ">=12"
369
+ }
370
+ },
371
+ "node_modules/@esbuild/win32-x64": {
372
+ "version": "0.19.12",
373
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
374
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
375
+ "cpu": [
376
+ "x64"
377
+ ],
378
+ "dev": true,
379
+ "optional": true,
380
+ "os": [
381
+ "win32"
382
+ ],
383
+ "engines": {
384
+ "node": ">=12"
385
+ }
386
+ },
387
+ "node_modules/@rollup/rollup-android-arm-eabi": {
388
+ "version": "4.12.0",
389
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz",
390
+ "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==",
391
+ "cpu": [
392
+ "arm"
393
+ ],
394
+ "dev": true,
395
+ "optional": true,
396
+ "os": [
397
+ "android"
398
+ ]
399
+ },
400
+ "node_modules/@rollup/rollup-android-arm64": {
401
+ "version": "4.12.0",
402
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz",
403
+ "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==",
404
+ "cpu": [
405
+ "arm64"
406
+ ],
407
+ "dev": true,
408
+ "optional": true,
409
+ "os": [
410
+ "android"
411
+ ]
412
+ },
413
+ "node_modules/@rollup/rollup-darwin-arm64": {
414
+ "version": "4.12.0",
415
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz",
416
+ "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==",
417
+ "cpu": [
418
+ "arm64"
419
+ ],
420
+ "dev": true,
421
+ "optional": true,
422
+ "os": [
423
+ "darwin"
424
+ ]
425
+ },
426
+ "node_modules/@rollup/rollup-darwin-x64": {
427
+ "version": "4.12.0",
428
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz",
429
+ "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==",
430
+ "cpu": [
431
+ "x64"
432
+ ],
433
+ "dev": true,
434
+ "optional": true,
435
+ "os": [
436
+ "darwin"
437
+ ]
438
+ },
439
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
440
+ "version": "4.12.0",
441
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz",
442
+ "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==",
443
+ "cpu": [
444
+ "arm"
445
+ ],
446
+ "dev": true,
447
+ "optional": true,
448
+ "os": [
449
+ "linux"
450
+ ]
451
+ },
452
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
453
+ "version": "4.12.0",
454
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz",
455
+ "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==",
456
+ "cpu": [
457
+ "arm64"
458
+ ],
459
+ "dev": true,
460
+ "optional": true,
461
+ "os": [
462
+ "linux"
463
+ ]
464
+ },
465
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
466
+ "version": "4.12.0",
467
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz",
468
+ "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==",
469
+ "cpu": [
470
+ "arm64"
471
+ ],
472
+ "dev": true,
473
+ "optional": true,
474
+ "os": [
475
+ "linux"
476
+ ]
477
+ },
478
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
479
+ "version": "4.12.0",
480
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz",
481
+ "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==",
482
+ "cpu": [
483
+ "riscv64"
484
+ ],
485
+ "dev": true,
486
+ "optional": true,
487
+ "os": [
488
+ "linux"
489
+ ]
490
+ },
491
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
492
+ "version": "4.12.0",
493
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz",
494
+ "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==",
495
+ "cpu": [
496
+ "x64"
497
+ ],
498
+ "dev": true,
499
+ "optional": true,
500
+ "os": [
501
+ "linux"
502
+ ]
503
+ },
504
+ "node_modules/@rollup/rollup-linux-x64-musl": {
505
+ "version": "4.12.0",
506
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz",
507
+ "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==",
508
+ "cpu": [
509
+ "x64"
510
+ ],
511
+ "dev": true,
512
+ "optional": true,
513
+ "os": [
514
+ "linux"
515
+ ]
516
+ },
517
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
518
+ "version": "4.12.0",
519
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz",
520
+ "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==",
521
+ "cpu": [
522
+ "arm64"
523
+ ],
524
+ "dev": true,
525
+ "optional": true,
526
+ "os": [
527
+ "win32"
528
+ ]
529
+ },
530
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
531
+ "version": "4.12.0",
532
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz",
533
+ "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==",
534
+ "cpu": [
535
+ "ia32"
536
+ ],
537
+ "dev": true,
538
+ "optional": true,
539
+ "os": [
540
+ "win32"
541
+ ]
542
+ },
543
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
544
+ "version": "4.12.0",
545
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz",
546
+ "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==",
547
+ "cpu": [
548
+ "x64"
549
+ ],
550
+ "dev": true,
551
+ "optional": true,
552
+ "os": [
553
+ "win32"
554
+ ]
555
+ },
556
+ "node_modules/@types/estree": {
557
+ "version": "1.0.5",
558
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
559
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
560
+ "dev": true
561
+ },
562
+ "node_modules/accepts": {
563
+ "version": "1.3.8",
564
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
565
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
566
+ "dependencies": {
567
+ "mime-types": "~2.1.34",
568
+ "negotiator": "0.6.3"
569
+ },
570
+ "engines": {
571
+ "node": ">= 0.6"
572
+ }
573
+ },
574
+ "node_modules/array-flatten": {
575
+ "version": "1.1.1",
576
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
577
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
578
+ },
579
+ "node_modules/body-parser": {
580
+ "version": "1.20.2",
581
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
582
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
583
+ "dependencies": {
584
+ "bytes": "3.1.2",
585
+ "content-type": "~1.0.5",
586
+ "debug": "2.6.9",
587
+ "depd": "2.0.0",
588
+ "destroy": "1.2.0",
589
+ "http-errors": "2.0.0",
590
+ "iconv-lite": "0.4.24",
591
+ "on-finished": "2.4.1",
592
+ "qs": "6.11.0",
593
+ "raw-body": "2.5.2",
594
+ "type-is": "~1.6.18",
595
+ "unpipe": "1.0.0"
596
+ },
597
+ "engines": {
598
+ "node": ">= 0.8",
599
+ "npm": "1.2.8000 || >= 1.4.16"
600
+ }
601
+ },
602
+ "node_modules/bytes": {
603
+ "version": "3.1.2",
604
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
605
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
606
+ "engines": {
607
+ "node": ">= 0.8"
608
+ }
609
+ },
610
+ "node_modules/call-bind": {
611
+ "version": "1.0.7",
612
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
613
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
614
+ "dependencies": {
615
+ "es-define-property": "^1.0.0",
616
+ "es-errors": "^1.3.0",
617
+ "function-bind": "^1.1.2",
618
+ "get-intrinsic": "^1.2.4",
619
+ "set-function-length": "^1.2.1"
620
+ },
621
+ "engines": {
622
+ "node": ">= 0.4"
623
+ },
624
+ "funding": {
625
+ "url": "https://github.com/sponsors/ljharb"
626
+ }
627
+ },
628
+ "node_modules/content-disposition": {
629
+ "version": "0.5.4",
630
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
631
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
632
+ "dependencies": {
633
+ "safe-buffer": "5.2.1"
634
+ },
635
+ "engines": {
636
+ "node": ">= 0.6"
637
+ }
638
+ },
639
+ "node_modules/content-type": {
640
+ "version": "1.0.5",
641
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
642
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
643
+ "engines": {
644
+ "node": ">= 0.6"
645
+ }
646
+ },
647
+ "node_modules/cookie": {
648
+ "version": "0.5.0",
649
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
650
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
651
+ "engines": {
652
+ "node": ">= 0.6"
653
+ }
654
+ },
655
+ "node_modules/cookie-signature": {
656
+ "version": "1.0.6",
657
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
658
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
659
+ },
660
+ "node_modules/cors": {
661
+ "version": "2.8.5",
662
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
663
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
664
+ "dependencies": {
665
+ "object-assign": "^4",
666
+ "vary": "^1"
667
+ },
668
+ "engines": {
669
+ "node": ">= 0.10"
670
+ }
671
+ },
672
+ "node_modules/debug": {
673
+ "version": "2.6.9",
674
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
675
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
676
+ "dependencies": {
677
+ "ms": "2.0.0"
678
+ }
679
+ },
680
+ "node_modules/define-data-property": {
681
+ "version": "1.1.4",
682
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
683
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
684
+ "dependencies": {
685
+ "es-define-property": "^1.0.0",
686
+ "es-errors": "^1.3.0",
687
+ "gopd": "^1.0.1"
688
+ },
689
+ "engines": {
690
+ "node": ">= 0.4"
691
+ },
692
+ "funding": {
693
+ "url": "https://github.com/sponsors/ljharb"
694
+ }
695
+ },
696
+ "node_modules/depd": {
697
+ "version": "2.0.0",
698
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
699
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
700
+ "engines": {
701
+ "node": ">= 0.8"
702
+ }
703
+ },
704
+ "node_modules/destroy": {
705
+ "version": "1.2.0",
706
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
707
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
708
+ "engines": {
709
+ "node": ">= 0.8",
710
+ "npm": "1.2.8000 || >= 1.4.16"
711
+ }
712
+ },
713
+ "node_modules/ee-first": {
714
+ "version": "1.1.1",
715
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
716
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
717
+ },
718
+ "node_modules/encodeurl": {
719
+ "version": "1.0.2",
720
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
721
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
722
+ "engines": {
723
+ "node": ">= 0.8"
724
+ }
725
+ },
726
+ "node_modules/es-define-property": {
727
+ "version": "1.0.0",
728
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
729
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
730
+ "dependencies": {
731
+ "get-intrinsic": "^1.2.4"
732
+ },
733
+ "engines": {
734
+ "node": ">= 0.4"
735
+ }
736
+ },
737
+ "node_modules/es-errors": {
738
+ "version": "1.3.0",
739
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
740
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
741
+ "engines": {
742
+ "node": ">= 0.4"
743
+ }
744
+ },
745
+ "node_modules/esbuild": {
746
+ "version": "0.19.12",
747
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
748
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
749
+ "dev": true,
750
+ "hasInstallScript": true,
751
+ "bin": {
752
+ "esbuild": "bin/esbuild"
753
+ },
754
+ "engines": {
755
+ "node": ">=12"
756
+ },
757
+ "optionalDependencies": {
758
+ "@esbuild/aix-ppc64": "0.19.12",
759
+ "@esbuild/android-arm": "0.19.12",
760
+ "@esbuild/android-arm64": "0.19.12",
761
+ "@esbuild/android-x64": "0.19.12",
762
+ "@esbuild/darwin-arm64": "0.19.12",
763
+ "@esbuild/darwin-x64": "0.19.12",
764
+ "@esbuild/freebsd-arm64": "0.19.12",
765
+ "@esbuild/freebsd-x64": "0.19.12",
766
+ "@esbuild/linux-arm": "0.19.12",
767
+ "@esbuild/linux-arm64": "0.19.12",
768
+ "@esbuild/linux-ia32": "0.19.12",
769
+ "@esbuild/linux-loong64": "0.19.12",
770
+ "@esbuild/linux-mips64el": "0.19.12",
771
+ "@esbuild/linux-ppc64": "0.19.12",
772
+ "@esbuild/linux-riscv64": "0.19.12",
773
+ "@esbuild/linux-s390x": "0.19.12",
774
+ "@esbuild/linux-x64": "0.19.12",
775
+ "@esbuild/netbsd-x64": "0.19.12",
776
+ "@esbuild/openbsd-x64": "0.19.12",
777
+ "@esbuild/sunos-x64": "0.19.12",
778
+ "@esbuild/win32-arm64": "0.19.12",
779
+ "@esbuild/win32-ia32": "0.19.12",
780
+ "@esbuild/win32-x64": "0.19.12"
781
+ }
782
+ },
783
+ "node_modules/escape-html": {
784
+ "version": "1.0.3",
785
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
786
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
787
+ },
788
+ "node_modules/etag": {
789
+ "version": "1.8.1",
790
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
791
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
792
+ "engines": {
793
+ "node": ">= 0.6"
794
+ }
795
+ },
796
+ "node_modules/express": {
797
+ "version": "4.18.2",
798
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
799
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
800
+ "dependencies": {
801
+ "accepts": "~1.3.8",
802
+ "array-flatten": "1.1.1",
803
+ "body-parser": "1.20.1",
804
+ "content-disposition": "0.5.4",
805
+ "content-type": "~1.0.4",
806
+ "cookie": "0.5.0",
807
+ "cookie-signature": "1.0.6",
808
+ "debug": "2.6.9",
809
+ "depd": "2.0.0",
810
+ "encodeurl": "~1.0.2",
811
+ "escape-html": "~1.0.3",
812
+ "etag": "~1.8.1",
813
+ "finalhandler": "1.2.0",
814
+ "fresh": "0.5.2",
815
+ "http-errors": "2.0.0",
816
+ "merge-descriptors": "1.0.1",
817
+ "methods": "~1.1.2",
818
+ "on-finished": "2.4.1",
819
+ "parseurl": "~1.3.3",
820
+ "path-to-regexp": "0.1.7",
821
+ "proxy-addr": "~2.0.7",
822
+ "qs": "6.11.0",
823
+ "range-parser": "~1.2.1",
824
+ "safe-buffer": "5.2.1",
825
+ "send": "0.18.0",
826
+ "serve-static": "1.15.0",
827
+ "setprototypeof": "1.2.0",
828
+ "statuses": "2.0.1",
829
+ "type-is": "~1.6.18",
830
+ "utils-merge": "1.0.1",
831
+ "vary": "~1.1.2"
832
+ },
833
+ "engines": {
834
+ "node": ">= 0.10.0"
835
+ }
836
+ },
837
+ "node_modules/express/node_modules/body-parser": {
838
+ "version": "1.20.1",
839
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
840
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
841
+ "dependencies": {
842
+ "bytes": "3.1.2",
843
+ "content-type": "~1.0.4",
844
+ "debug": "2.6.9",
845
+ "depd": "2.0.0",
846
+ "destroy": "1.2.0",
847
+ "http-errors": "2.0.0",
848
+ "iconv-lite": "0.4.24",
849
+ "on-finished": "2.4.1",
850
+ "qs": "6.11.0",
851
+ "raw-body": "2.5.1",
852
+ "type-is": "~1.6.18",
853
+ "unpipe": "1.0.0"
854
+ },
855
+ "engines": {
856
+ "node": ">= 0.8",
857
+ "npm": "1.2.8000 || >= 1.4.16"
858
+ }
859
+ },
860
+ "node_modules/express/node_modules/raw-body": {
861
+ "version": "2.5.1",
862
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
863
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
864
+ "dependencies": {
865
+ "bytes": "3.1.2",
866
+ "http-errors": "2.0.0",
867
+ "iconv-lite": "0.4.24",
868
+ "unpipe": "1.0.0"
869
+ },
870
+ "engines": {
871
+ "node": ">= 0.8"
872
+ }
873
+ },
874
+ "node_modules/finalhandler": {
875
+ "version": "1.2.0",
876
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
877
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
878
+ "dependencies": {
879
+ "debug": "2.6.9",
880
+ "encodeurl": "~1.0.2",
881
+ "escape-html": "~1.0.3",
882
+ "on-finished": "2.4.1",
883
+ "parseurl": "~1.3.3",
884
+ "statuses": "2.0.1",
885
+ "unpipe": "~1.0.0"
886
+ },
887
+ "engines": {
888
+ "node": ">= 0.8"
889
+ }
890
+ },
891
+ "node_modules/forwarded": {
892
+ "version": "0.2.0",
893
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
894
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
895
+ "engines": {
896
+ "node": ">= 0.6"
897
+ }
898
+ },
899
+ "node_modules/fresh": {
900
+ "version": "0.5.2",
901
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
902
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
903
+ "engines": {
904
+ "node": ">= 0.6"
905
+ }
906
+ },
907
+ "node_modules/fsevents": {
908
+ "version": "2.3.3",
909
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
910
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
911
+ "dev": true,
912
+ "hasInstallScript": true,
913
+ "optional": true,
914
+ "os": [
915
+ "darwin"
916
+ ],
917
+ "engines": {
918
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
919
+ }
920
+ },
921
+ "node_modules/function-bind": {
922
+ "version": "1.1.2",
923
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
924
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
925
+ "funding": {
926
+ "url": "https://github.com/sponsors/ljharb"
927
+ }
928
+ },
929
+ "node_modules/get-intrinsic": {
930
+ "version": "1.2.4",
931
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
932
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
933
+ "dependencies": {
934
+ "es-errors": "^1.3.0",
935
+ "function-bind": "^1.1.2",
936
+ "has-proto": "^1.0.1",
937
+ "has-symbols": "^1.0.3",
938
+ "hasown": "^2.0.0"
939
+ },
940
+ "engines": {
941
+ "node": ">= 0.4"
942
+ },
943
+ "funding": {
944
+ "url": "https://github.com/sponsors/ljharb"
945
+ }
946
+ },
947
+ "node_modules/gopd": {
948
+ "version": "1.0.1",
949
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
950
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
951
+ "dependencies": {
952
+ "get-intrinsic": "^1.1.3"
953
+ },
954
+ "funding": {
955
+ "url": "https://github.com/sponsors/ljharb"
956
+ }
957
+ },
958
+ "node_modules/has-property-descriptors": {
959
+ "version": "1.0.2",
960
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
961
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
962
+ "dependencies": {
963
+ "es-define-property": "^1.0.0"
964
+ },
965
+ "funding": {
966
+ "url": "https://github.com/sponsors/ljharb"
967
+ }
968
+ },
969
+ "node_modules/has-proto": {
970
+ "version": "1.0.1",
971
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
972
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
973
+ "engines": {
974
+ "node": ">= 0.4"
975
+ },
976
+ "funding": {
977
+ "url": "https://github.com/sponsors/ljharb"
978
+ }
979
+ },
980
+ "node_modules/has-symbols": {
981
+ "version": "1.0.3",
982
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
983
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
984
+ "engines": {
985
+ "node": ">= 0.4"
986
+ },
987
+ "funding": {
988
+ "url": "https://github.com/sponsors/ljharb"
989
+ }
990
+ },
991
+ "node_modules/hasown": {
992
+ "version": "2.0.1",
993
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
994
+ "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
995
+ "dependencies": {
996
+ "function-bind": "^1.1.2"
997
+ },
998
+ "engines": {
999
+ "node": ">= 0.4"
1000
+ }
1001
+ },
1002
+ "node_modules/http-errors": {
1003
+ "version": "2.0.0",
1004
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1005
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1006
+ "dependencies": {
1007
+ "depd": "2.0.0",
1008
+ "inherits": "2.0.4",
1009
+ "setprototypeof": "1.2.0",
1010
+ "statuses": "2.0.1",
1011
+ "toidentifier": "1.0.1"
1012
+ },
1013
+ "engines": {
1014
+ "node": ">= 0.8"
1015
+ }
1016
+ },
1017
+ "node_modules/iconv-lite": {
1018
+ "version": "0.4.24",
1019
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1020
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1021
+ "dependencies": {
1022
+ "safer-buffer": ">= 2.1.2 < 3"
1023
+ },
1024
+ "engines": {
1025
+ "node": ">=0.10.0"
1026
+ }
1027
+ },
1028
+ "node_modules/inherits": {
1029
+ "version": "2.0.4",
1030
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1031
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1032
+ },
1033
+ "node_modules/ipaddr.js": {
1034
+ "version": "1.9.1",
1035
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1036
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
1037
+ "engines": {
1038
+ "node": ">= 0.10"
1039
+ }
1040
+ },
1041
+ "node_modules/media-typer": {
1042
+ "version": "0.3.0",
1043
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1044
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
1045
+ "engines": {
1046
+ "node": ">= 0.6"
1047
+ }
1048
+ },
1049
+ "node_modules/merge-descriptors": {
1050
+ "version": "1.0.1",
1051
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1052
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1053
+ },
1054
+ "node_modules/methods": {
1055
+ "version": "1.1.2",
1056
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1057
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
1058
+ "engines": {
1059
+ "node": ">= 0.6"
1060
+ }
1061
+ },
1062
+ "node_modules/mime": {
1063
+ "version": "1.6.0",
1064
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1065
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1066
+ "bin": {
1067
+ "mime": "cli.js"
1068
+ },
1069
+ "engines": {
1070
+ "node": ">=4"
1071
+ }
1072
+ },
1073
+ "node_modules/mime-db": {
1074
+ "version": "1.52.0",
1075
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1076
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1077
+ "engines": {
1078
+ "node": ">= 0.6"
1079
+ }
1080
+ },
1081
+ "node_modules/mime-types": {
1082
+ "version": "2.1.35",
1083
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1084
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1085
+ "dependencies": {
1086
+ "mime-db": "1.52.0"
1087
+ },
1088
+ "engines": {
1089
+ "node": ">= 0.6"
1090
+ }
1091
+ },
1092
+ "node_modules/ms": {
1093
+ "version": "2.0.0",
1094
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1095
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1096
+ },
1097
+ "node_modules/nanoid": {
1098
+ "version": "3.3.7",
1099
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
1100
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
1101
+ "dev": true,
1102
+ "funding": [
1103
+ {
1104
+ "type": "github",
1105
+ "url": "https://github.com/sponsors/ai"
1106
+ }
1107
+ ],
1108
+ "bin": {
1109
+ "nanoid": "bin/nanoid.cjs"
1110
+ },
1111
+ "engines": {
1112
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1113
+ }
1114
+ },
1115
+ "node_modules/negotiator": {
1116
+ "version": "0.6.3",
1117
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1118
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1119
+ "engines": {
1120
+ "node": ">= 0.6"
1121
+ }
1122
+ },
1123
+ "node_modules/object-assign": {
1124
+ "version": "4.1.1",
1125
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1126
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1127
+ "engines": {
1128
+ "node": ">=0.10.0"
1129
+ }
1130
+ },
1131
+ "node_modules/object-inspect": {
1132
+ "version": "1.13.1",
1133
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1134
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
1135
+ "funding": {
1136
+ "url": "https://github.com/sponsors/ljharb"
1137
+ }
1138
+ },
1139
+ "node_modules/on-finished": {
1140
+ "version": "2.4.1",
1141
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1142
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1143
+ "dependencies": {
1144
+ "ee-first": "1.1.1"
1145
+ },
1146
+ "engines": {
1147
+ "node": ">= 0.8"
1148
+ }
1149
+ },
1150
+ "node_modules/parseurl": {
1151
+ "version": "1.3.3",
1152
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1153
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1154
+ "engines": {
1155
+ "node": ">= 0.8"
1156
+ }
1157
+ },
1158
+ "node_modules/path-to-regexp": {
1159
+ "version": "0.1.7",
1160
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1161
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1162
+ },
1163
+ "node_modules/picocolors": {
1164
+ "version": "1.0.0",
1165
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1166
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1167
+ "dev": true
1168
+ },
1169
+ "node_modules/postcss": {
1170
+ "version": "8.4.35",
1171
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
1172
+ "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
1173
+ "dev": true,
1174
+ "funding": [
1175
+ {
1176
+ "type": "opencollective",
1177
+ "url": "https://opencollective.com/postcss/"
1178
+ },
1179
+ {
1180
+ "type": "tidelift",
1181
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1182
+ },
1183
+ {
1184
+ "type": "github",
1185
+ "url": "https://github.com/sponsors/ai"
1186
+ }
1187
+ ],
1188
+ "dependencies": {
1189
+ "nanoid": "^3.3.7",
1190
+ "picocolors": "^1.0.0",
1191
+ "source-map-js": "^1.0.2"
1192
+ },
1193
+ "engines": {
1194
+ "node": "^10 || ^12 || >=14"
1195
+ }
1196
+ },
1197
+ "node_modules/proxy-addr": {
1198
+ "version": "2.0.7",
1199
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1200
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1201
+ "dependencies": {
1202
+ "forwarded": "0.2.0",
1203
+ "ipaddr.js": "1.9.1"
1204
+ },
1205
+ "engines": {
1206
+ "node": ">= 0.10"
1207
+ }
1208
+ },
1209
+ "node_modules/qs": {
1210
+ "version": "6.11.0",
1211
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1212
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1213
+ "dependencies": {
1214
+ "side-channel": "^1.0.4"
1215
+ },
1216
+ "engines": {
1217
+ "node": ">=0.6"
1218
+ },
1219
+ "funding": {
1220
+ "url": "https://github.com/sponsors/ljharb"
1221
+ }
1222
+ },
1223
+ "node_modules/range-parser": {
1224
+ "version": "1.2.1",
1225
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1226
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1227
+ "engines": {
1228
+ "node": ">= 0.6"
1229
+ }
1230
+ },
1231
+ "node_modules/raw-body": {
1232
+ "version": "2.5.2",
1233
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
1234
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
1235
+ "dependencies": {
1236
+ "bytes": "3.1.2",
1237
+ "http-errors": "2.0.0",
1238
+ "iconv-lite": "0.4.24",
1239
+ "unpipe": "1.0.0"
1240
+ },
1241
+ "engines": {
1242
+ "node": ">= 0.8"
1243
+ }
1244
+ },
1245
+ "node_modules/rollup": {
1246
+ "version": "4.12.0",
1247
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz",
1248
+ "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==",
1249
+ "dev": true,
1250
+ "dependencies": {
1251
+ "@types/estree": "1.0.5"
1252
+ },
1253
+ "bin": {
1254
+ "rollup": "dist/bin/rollup"
1255
+ },
1256
+ "engines": {
1257
+ "node": ">=18.0.0",
1258
+ "npm": ">=8.0.0"
1259
+ },
1260
+ "optionalDependencies": {
1261
+ "@rollup/rollup-android-arm-eabi": "4.12.0",
1262
+ "@rollup/rollup-android-arm64": "4.12.0",
1263
+ "@rollup/rollup-darwin-arm64": "4.12.0",
1264
+ "@rollup/rollup-darwin-x64": "4.12.0",
1265
+ "@rollup/rollup-linux-arm-gnueabihf": "4.12.0",
1266
+ "@rollup/rollup-linux-arm64-gnu": "4.12.0",
1267
+ "@rollup/rollup-linux-arm64-musl": "4.12.0",
1268
+ "@rollup/rollup-linux-riscv64-gnu": "4.12.0",
1269
+ "@rollup/rollup-linux-x64-gnu": "4.12.0",
1270
+ "@rollup/rollup-linux-x64-musl": "4.12.0",
1271
+ "@rollup/rollup-win32-arm64-msvc": "4.12.0",
1272
+ "@rollup/rollup-win32-ia32-msvc": "4.12.0",
1273
+ "@rollup/rollup-win32-x64-msvc": "4.12.0",
1274
+ "fsevents": "~2.3.2"
1275
+ }
1276
+ },
1277
+ "node_modules/safe-buffer": {
1278
+ "version": "5.2.1",
1279
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1280
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1281
+ "funding": [
1282
+ {
1283
+ "type": "github",
1284
+ "url": "https://github.com/sponsors/feross"
1285
+ },
1286
+ {
1287
+ "type": "patreon",
1288
+ "url": "https://www.patreon.com/feross"
1289
+ },
1290
+ {
1291
+ "type": "consulting",
1292
+ "url": "https://feross.org/support"
1293
+ }
1294
+ ]
1295
+ },
1296
+ "node_modules/safer-buffer": {
1297
+ "version": "2.1.2",
1298
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1299
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1300
+ },
1301
+ "node_modules/send": {
1302
+ "version": "0.18.0",
1303
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1304
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1305
+ "dependencies": {
1306
+ "debug": "2.6.9",
1307
+ "depd": "2.0.0",
1308
+ "destroy": "1.2.0",
1309
+ "encodeurl": "~1.0.2",
1310
+ "escape-html": "~1.0.3",
1311
+ "etag": "~1.8.1",
1312
+ "fresh": "0.5.2",
1313
+ "http-errors": "2.0.0",
1314
+ "mime": "1.6.0",
1315
+ "ms": "2.1.3",
1316
+ "on-finished": "2.4.1",
1317
+ "range-parser": "~1.2.1",
1318
+ "statuses": "2.0.1"
1319
+ },
1320
+ "engines": {
1321
+ "node": ">= 0.8.0"
1322
+ }
1323
+ },
1324
+ "node_modules/send/node_modules/ms": {
1325
+ "version": "2.1.3",
1326
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1327
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1328
+ },
1329
+ "node_modules/serve-static": {
1330
+ "version": "1.15.0",
1331
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1332
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1333
+ "dependencies": {
1334
+ "encodeurl": "~1.0.2",
1335
+ "escape-html": "~1.0.3",
1336
+ "parseurl": "~1.3.3",
1337
+ "send": "0.18.0"
1338
+ },
1339
+ "engines": {
1340
+ "node": ">= 0.8.0"
1341
+ }
1342
+ },
1343
+ "node_modules/set-function-length": {
1344
+ "version": "1.2.1",
1345
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
1346
+ "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
1347
+ "dependencies": {
1348
+ "define-data-property": "^1.1.2",
1349
+ "es-errors": "^1.3.0",
1350
+ "function-bind": "^1.1.2",
1351
+ "get-intrinsic": "^1.2.3",
1352
+ "gopd": "^1.0.1",
1353
+ "has-property-descriptors": "^1.0.1"
1354
+ },
1355
+ "engines": {
1356
+ "node": ">= 0.4"
1357
+ }
1358
+ },
1359
+ "node_modules/setprototypeof": {
1360
+ "version": "1.2.0",
1361
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1362
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1363
+ },
1364
+ "node_modules/side-channel": {
1365
+ "version": "1.0.5",
1366
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz",
1367
+ "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
1368
+ "dependencies": {
1369
+ "call-bind": "^1.0.6",
1370
+ "es-errors": "^1.3.0",
1371
+ "get-intrinsic": "^1.2.4",
1372
+ "object-inspect": "^1.13.1"
1373
+ },
1374
+ "engines": {
1375
+ "node": ">= 0.4"
1376
+ },
1377
+ "funding": {
1378
+ "url": "https://github.com/sponsors/ljharb"
1379
+ }
1380
+ },
1381
+ "node_modules/source-map-js": {
1382
+ "version": "1.0.2",
1383
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1384
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1385
+ "dev": true,
1386
+ "engines": {
1387
+ "node": ">=0.10.0"
1388
+ }
1389
+ },
1390
+ "node_modules/statuses": {
1391
+ "version": "2.0.1",
1392
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1393
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1394
+ "engines": {
1395
+ "node": ">= 0.8"
1396
+ }
1397
+ },
1398
+ "node_modules/toidentifier": {
1399
+ "version": "1.0.1",
1400
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1401
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1402
+ "engines": {
1403
+ "node": ">=0.6"
1404
+ }
1405
+ },
1406
+ "node_modules/type-is": {
1407
+ "version": "1.6.18",
1408
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1409
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1410
+ "dependencies": {
1411
+ "media-typer": "0.3.0",
1412
+ "mime-types": "~2.1.24"
1413
+ },
1414
+ "engines": {
1415
+ "node": ">= 0.6"
1416
+ }
1417
+ },
1418
+ "node_modules/unpipe": {
1419
+ "version": "1.0.0",
1420
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1421
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1422
+ "engines": {
1423
+ "node": ">= 0.8"
1424
+ }
1425
+ },
1426
+ "node_modules/utils-merge": {
1427
+ "version": "1.0.1",
1428
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1429
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1430
+ "engines": {
1431
+ "node": ">= 0.4.0"
1432
+ }
1433
+ },
1434
+ "node_modules/vary": {
1435
+ "version": "1.1.2",
1436
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1437
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1438
+ "engines": {
1439
+ "node": ">= 0.8"
1440
+ }
1441
+ },
1442
+ "node_modules/vite": {
1443
+ "version": "5.1.3",
1444
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.3.tgz",
1445
+ "integrity": "sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==",
1446
+ "dev": true,
1447
+ "dependencies": {
1448
+ "esbuild": "^0.19.3",
1449
+ "postcss": "^8.4.35",
1450
+ "rollup": "^4.2.0"
1451
+ },
1452
+ "bin": {
1453
+ "vite": "bin/vite.js"
1454
+ },
1455
+ "engines": {
1456
+ "node": "^18.0.0 || >=20.0.0"
1457
+ },
1458
+ "funding": {
1459
+ "url": "https://github.com/vitejs/vite?sponsor=1"
1460
+ },
1461
+ "optionalDependencies": {
1462
+ "fsevents": "~2.3.3"
1463
+ },
1464
+ "peerDependencies": {
1465
+ "@types/node": "^18.0.0 || >=20.0.0",
1466
+ "less": "*",
1467
+ "lightningcss": "^1.21.0",
1468
+ "sass": "*",
1469
+ "stylus": "*",
1470
+ "sugarss": "*",
1471
+ "terser": "^5.4.0"
1472
+ },
1473
+ "peerDependenciesMeta": {
1474
+ "@types/node": {
1475
+ "optional": true
1476
+ },
1477
+ "less": {
1478
+ "optional": true
1479
+ },
1480
+ "lightningcss": {
1481
+ "optional": true
1482
+ },
1483
+ "sass": {
1484
+ "optional": true
1485
+ },
1486
+ "stylus": {
1487
+ "optional": true
1488
+ },
1489
+ "sugarss": {
1490
+ "optional": true
1491
+ },
1492
+ "terser": {
1493
+ "optional": true
1494
+ }
1495
+ }
1496
+ }
1497
+ }
1498
+ }
package.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "vite-prod",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "devDependencies": {
12
+ "vite": "^5.1.0"
13
+ },
14
+ "dependencies": {
15
+ "body-parser": "^1.20.2",
16
+ "cors": "^2.8.5",
17
+ "express": "^4.18.2"
18
+ }
19
+ }
public/vite.svg ADDED
server.js ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ import bodyParser from 'body-parser';
4
+
5
+ const app = express();
6
+ const port = process.env.PORT_NUM || 7860;
7
+ const apiToken = process.env.REPLICATE_API_TOKEN;
8
+ const imgHostKey = process.env.IMAGE_HOST_KEY;
9
+
10
+ // Enable CORS.
11
+ app.use(cors()); // Enable all routes
12
+
13
+ // Parse req.body in POST, GET, etc.
14
+ app.use(bodyParser.json({ limit: '50mb' }));
15
+
16
+ // Proxy for API call
17
+ app.get('/api/predictions/:predictionUrl', async (req, res) => {
18
+ try {
19
+ const { predictionUrl } = req.params;
20
+ const apiUrl = decodeURIComponent(predictionUrl);
21
+ const response = await fetch(apiUrl, {
22
+ headers: {
23
+ 'Authorization': `Token ${apiToken}`
24
+ }
25
+ });
26
+ const data = await response.json();
27
+ res.json(data);
28
+ } catch (error) {
29
+ console.error('Error:', error);
30
+ res.status(500).json({ error: 'Internal server error' });
31
+ }
32
+ });
33
+ // Handle POST requests to /api/predictions
34
+ app.post('/api/predictions', async (req, res) => {
35
+ try {
36
+ const apiUrl = 'https://api.replicate.com/v1/predictions';
37
+ const response = await fetch(apiUrl, {
38
+ method: 'POST',
39
+ headers: {
40
+ 'Authorization': `Token ${apiToken}`,
41
+ 'Content-Type': 'application/json'
42
+ },
43
+ body: JSON.stringify(req.body) // Forward request body to external API
44
+ });
45
+ const data = await response.json();
46
+ res.json(data);
47
+ } catch (error) {
48
+ console.error('Error:', error);
49
+ res.status(500).json({ error: 'Internal server error' });
50
+ }
51
+ });
52
+ // Handle POST requests for image hosting
53
+ app.post('/imagehosting/upload', async (req, res) => {
54
+ try {
55
+ const imgSource = req.body.source;
56
+ console.log(`imgSource.length: ${imgSource.length}`);
57
+ const fd = new FormData();
58
+ fd.append("image", imgSource);
59
+ fd.append("name", "temp_image");
60
+ //console.log('imgSource:');
61
+ //console.log(imgSource);
62
+ //const hostUrl = `https://freeimage.host/api/1/upload?key=${imgHostKey}&source=${imgSource}`;
63
+ const hostUrl = `https://api.imgbb.com/1/upload?expiration=600&key=${imgHostKey}`;
64
+ const response = await fetch(hostUrl, {
65
+ method: 'POST',
66
+ body: fd
67
+ });
68
+ //body: JSON.stringify({ image: imgSource })
69
+ const data = await response.json();
70
+ res.json(data);
71
+ } catch (error) {
72
+ console.error('Error:', error);
73
+ res.status(500).json({ error: 'Internal server error' });
74
+ }
75
+ });
76
+
77
+ // Serve your Vite project's static files
78
+ app.use(express.static('dist'));
79
+
80
+ // Start the server
81
+ app.listen(port, () => {
82
+ console.log(`Server is running at http://localhost:${port}`);
83
+ });
style.css ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+ line-height: 1.5;
4
+ font-weight: 400;
5
+
6
+ color-scheme: light dark;
7
+ color: rgba(255, 255, 255, 0.87);
8
+ background-color: #242424;
9
+
10
+ font-synthesis: none;
11
+ text-rendering: optimizeLegibility;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ }
15
+
16
+ a {
17
+ font-weight: 500;
18
+ color: #646cff;
19
+ text-decoration: inherit;
20
+ }
21
+ a:hover {
22
+ color: #535bf2;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ display: flex;
28
+ place-items: center;
29
+ min-width: 320px;
30
+ min-height: 100vh;
31
+ }
32
+
33
+ h1 {
34
+ font-size: 3.2em;
35
+ line-height: 1.1;
36
+ }
37
+
38
+ #app {
39
+ max-width: 1280px;
40
+ margin: 0 auto;
41
+ padding: 2rem;
42
+ text-align: center;
43
+ }
44
+
45
+ .logo {
46
+ height: 6em;
47
+ padding: 1.5em;
48
+ will-change: filter;
49
+ transition: filter 300ms;
50
+ }
51
+ .logo:hover {
52
+ filter: drop-shadow(0 0 2em #646cffaa);
53
+ }
54
+ .logo.vanilla:hover {
55
+ filter: drop-shadow(0 0 2em #f7df1eaa);
56
+ }
57
+
58
+ .card {
59
+ padding: 2em;
60
+ }
61
+
62
+ .read-the-docs {
63
+ color: #888;
64
+ }
65
+
66
+ button {
67
+ border-radius: 8px;
68
+ border: 1px solid transparent;
69
+ padding: 0.6em 1.2em;
70
+ font-size: 1em;
71
+ font-weight: 500;
72
+ font-family: inherit;
73
+ background-color: #1a1a1a;
74
+ cursor: pointer;
75
+ transition: border-color 0.25s;
76
+ }
77
+ button:hover {
78
+ border-color: #646cff;
79
+ }
80
+ button:focus,
81
+ button:focus-visible {
82
+ outline: 4px auto -webkit-focus-ring-color;
83
+ }
84
+
85
+ @media (prefers-color-scheme: light) {
86
+ :root {
87
+ color: #213547;
88
+ background-color: #ffffff;
89
+ }
90
+ a:hover {
91
+ color: #747bff;
92
+ }
93
+ button {
94
+ background-color: #f9f9f9;
95
+ }
96
+ }