Vadnir commited on
Commit
d8e09ae
·
1 Parent(s): 8641c82

Upload 3 files

Browse files
Files changed (3) hide show
  1. main.js +166 -0
  2. package-lock.json +823 -0
  3. package.json +22 -0
main.js ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ require("dotenv").config();
2
+
3
+ const express = require('express');
4
+ const axios = require('axios');
5
+ const app = express();
6
+ const bodyParser = require('body-parser');
7
+ app.use(bodyParser.json({ limit: '100mb' }));
8
+ app.use(bodyParser.urlencoded({limit: '100mb', extended: true}));
9
+
10
+ const API_TOKEN = process.env.API_TOKEN;
11
+
12
+ app.post('/v1/complete', async (req, res) => {
13
+ res.setHeader('Content-Type', 'text/event-stream; charset=utf-8');
14
+ res.setHeader('Cache-Control', 'no-cache');
15
+ res.setHeader('Connection', 'keep-alive');
16
+ res.setHeader('Transfer-Encoding', 'chunked');
17
+ res.flushHeaders();
18
+
19
+ //console.log(req.body);
20
+ const model = req.body.model;
21
+ const temp = req.body.temperature || 1.0;
22
+ const top_p = req.body.top_p || null;
23
+ const top_k = req.body.top_k || null;
24
+ const maxTokens = req.body.max_tokens_to_sample;
25
+ const stopSequences = req.body.stop_sequences || null;
26
+ const isStream = req.body.stream || false;
27
+ const prompt = req.body.prompt;
28
+
29
+ console.log(`Doing a request with stream = ${isStream}.`)
30
+
31
+ // Set up axios instance for SSE
32
+ const sourcegraph = axios.create({
33
+ baseURL: 'https://sourcegraph.com/.api/completions/stream',
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ 'Authorization': `token ${API_TOKEN}`
37
+ },
38
+ responseType: 'stream',
39
+ timeout: 180000,
40
+ });
41
+
42
+ let fullContent = "";
43
+
44
+ try {
45
+ let postData = {
46
+ model: model,
47
+ prompt: prompt,
48
+ maxTokensToSample: maxTokens
49
+ };
50
+
51
+ if (temp) postData.temperature = temp;
52
+ if (stopSequences) postData.stop_sequences = stopSequences;
53
+ if (top_p) postData.top_p = top_p;
54
+ if (top_k) postData.top_k = top_k;
55
+ const response = await sourcegraph.post('', postData);
56
+
57
+ let previousCompletion = "";
58
+ let buffer = ""; // Buffer to hold incomplete lines
59
+
60
+ response.data.on('data', (chunk) => {
61
+ buffer += chunk.toString();
62
+ let lines = buffer.split("\n");
63
+ buffer = lines.pop(); // Keep the last (potentially incomplete) line in the buffer
64
+
65
+ const data = lines.filter(line => line.startsWith('data: ')).map(line => line.replace(/^data: /, ''));
66
+
67
+ data.forEach((chunk) => {
68
+ try {
69
+ const parsedData = JSON.parse(chunk);
70
+ if ('completion' in parsedData) {
71
+ //console.log(resp);
72
+ if (isStream) {
73
+ // SourceGraph API always returns the full string, but we need the diff
74
+ const newPart = parsedData.completion.replace(previousCompletion, '');
75
+ previousCompletion = parsedData.completion;
76
+ let resp = { completion: newPart, stop_reason: null };
77
+ res.write(`event: completion\r\ndata: ${JSON.stringify(resp)}\r\n\r\n`);
78
+ }
79
+ else {
80
+ fullContent = parsedData.completion;
81
+ }
82
+ }
83
+ } catch (error) {
84
+ // If an error is thrown, the JSON is not valid
85
+ console.error('Invalid JSON:', chunk);
86
+ }})
87
+ });
88
+
89
+ response.data.on('end', () => {
90
+ if (isStream) {
91
+ let finalResp = {completion: "", stop_reason: "stop_sequence"};
92
+ res.write(`event: completion\r\ndata: ${JSON.stringify(finalResp)}\r\n\r\n`);
93
+ }
94
+ else {
95
+ res.write(JSON.stringify({completion: fullContent, stop_reason: "stop_sequence"}));
96
+ }
97
+ res.end();
98
+ console.log(`Request done.`)
99
+ });
100
+
101
+ } catch (error) {
102
+ console.error("Got an error: ", error);
103
+ res.status(500).send('An error occurred while making the request.');
104
+ }
105
+ });
106
+
107
+ app.use((err, req, res, next) => {
108
+ console.log(err);
109
+ res.status(500).json({"error": true});
110
+ });
111
+
112
+ process.on('uncaughtException', (err) => {
113
+ console.error('Uncaught exception:', err);
114
+ });
115
+
116
+ process.on('unhandledRejection', (reason, promise) => {
117
+ console.error('Unhandled Promise Rejection:', reason);
118
+ });
119
+
120
+ async function checkToken(token) {
121
+ const data = {
122
+ query: 'query { currentUser { username } }'
123
+ };
124
+
125
+ const config = {
126
+ method: 'post',
127
+ url: 'https://sourcegraph.com/.api/graphql',
128
+ headers: {
129
+ 'Authorization': `token ${token}`
130
+ },
131
+ data: data
132
+ };
133
+
134
+ try {
135
+ const response = await axios(config);
136
+ if(response.data && response.data.data && response.data.data.currentUser) {
137
+ console.log(`Token works, username: ${response.data.data.currentUser.username}`);
138
+ return true;
139
+ } else {
140
+ return false;
141
+ }
142
+ } catch (error) {
143
+ return false;
144
+ }
145
+ }
146
+
147
+ // Two basic checks
148
+ if (!API_TOKEN) {
149
+ console.error("SourceGraph API token not found! Create a file named '.env' and put your token there as an API_TOKEN. See .env.example for an example.");
150
+ process.exit(1);
151
+ }
152
+ else if (API_TOKEN.indexOf("sgp_") == -1) {
153
+ console.error("Invalid SourceGraph API token! Make sure you copied the whole token starting with sgp_, like 'sgp_blablabla'.");
154
+ process.exit(1);
155
+ }
156
+
157
+ // Check token validity
158
+ checkToken(API_TOKEN).then(isValid => {
159
+ if (!isValid) {
160
+ console.error("Invalid SourceGraph API token! Make sure you copied the whole token and that the token is not revoked.");
161
+ process.exit(1);
162
+ }
163
+
164
+ const port = process.env.PORT || 3000;
165
+ app.listen(port, () => console.log(`Server listening on port ${port}`));
166
+ });
package-lock.json ADDED
@@ -0,0 +1,823 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "chuiproxy",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "chuiproxy",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "axios": "^1.4.0",
13
+ "body-parser": "^1.20.2",
14
+ "cors": "^2.8.5",
15
+ "dotenv": "^16.3.1",
16
+ "express": "^4.18.2",
17
+ "express-async-errors": "^3.1.1",
18
+ "http": "^0.0.1-security",
19
+ "https": "^1.0.0",
20
+ "openai-billing": "^2.1.0"
21
+ }
22
+ },
23
+ "node_modules/accepts": {
24
+ "version": "1.3.8",
25
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
26
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
27
+ "dependencies": {
28
+ "mime-types": "~2.1.34",
29
+ "negotiator": "0.6.3"
30
+ },
31
+ "engines": {
32
+ "node": ">= 0.6"
33
+ }
34
+ },
35
+ "node_modules/array-flatten": {
36
+ "version": "1.1.1",
37
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
38
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
39
+ },
40
+ "node_modules/asynckit": {
41
+ "version": "0.4.0",
42
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
43
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
44
+ },
45
+ "node_modules/axios": {
46
+ "version": "1.5.0",
47
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
48
+ "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
49
+ "dependencies": {
50
+ "follow-redirects": "^1.15.0",
51
+ "form-data": "^4.0.0",
52
+ "proxy-from-env": "^1.1.0"
53
+ }
54
+ },
55
+ "node_modules/body-parser": {
56
+ "version": "1.20.2",
57
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
58
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
59
+ "dependencies": {
60
+ "bytes": "3.1.2",
61
+ "content-type": "~1.0.5",
62
+ "debug": "2.6.9",
63
+ "depd": "2.0.0",
64
+ "destroy": "1.2.0",
65
+ "http-errors": "2.0.0",
66
+ "iconv-lite": "0.4.24",
67
+ "on-finished": "2.4.1",
68
+ "qs": "6.11.0",
69
+ "raw-body": "2.5.2",
70
+ "type-is": "~1.6.18",
71
+ "unpipe": "1.0.0"
72
+ },
73
+ "engines": {
74
+ "node": ">= 0.8",
75
+ "npm": "1.2.8000 || >= 1.4.16"
76
+ }
77
+ },
78
+ "node_modules/bytes": {
79
+ "version": "3.1.2",
80
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
81
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
82
+ "engines": {
83
+ "node": ">= 0.8"
84
+ }
85
+ },
86
+ "node_modules/call-bind": {
87
+ "version": "1.0.2",
88
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
89
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
90
+ "dependencies": {
91
+ "function-bind": "^1.1.1",
92
+ "get-intrinsic": "^1.0.2"
93
+ },
94
+ "funding": {
95
+ "url": "https://github.com/sponsors/ljharb"
96
+ }
97
+ },
98
+ "node_modules/combined-stream": {
99
+ "version": "1.0.8",
100
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
101
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
102
+ "dependencies": {
103
+ "delayed-stream": "~1.0.0"
104
+ },
105
+ "engines": {
106
+ "node": ">= 0.8"
107
+ }
108
+ },
109
+ "node_modules/content-disposition": {
110
+ "version": "0.5.4",
111
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
112
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
113
+ "dependencies": {
114
+ "safe-buffer": "5.2.1"
115
+ },
116
+ "engines": {
117
+ "node": ">= 0.6"
118
+ }
119
+ },
120
+ "node_modules/content-type": {
121
+ "version": "1.0.5",
122
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
123
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
124
+ "engines": {
125
+ "node": ">= 0.6"
126
+ }
127
+ },
128
+ "node_modules/cookie": {
129
+ "version": "0.5.0",
130
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
131
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
132
+ "engines": {
133
+ "node": ">= 0.6"
134
+ }
135
+ },
136
+ "node_modules/cookie-signature": {
137
+ "version": "1.0.6",
138
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
139
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
140
+ },
141
+ "node_modules/cors": {
142
+ "version": "2.8.5",
143
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
144
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
145
+ "dependencies": {
146
+ "object-assign": "^4",
147
+ "vary": "^1"
148
+ },
149
+ "engines": {
150
+ "node": ">= 0.10"
151
+ }
152
+ },
153
+ "node_modules/cross-fetch": {
154
+ "version": "3.1.8",
155
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
156
+ "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
157
+ "dependencies": {
158
+ "node-fetch": "^2.6.12"
159
+ }
160
+ },
161
+ "node_modules/debug": {
162
+ "version": "2.6.9",
163
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
164
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
165
+ "dependencies": {
166
+ "ms": "2.0.0"
167
+ }
168
+ },
169
+ "node_modules/delayed-stream": {
170
+ "version": "1.0.0",
171
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
172
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
173
+ "engines": {
174
+ "node": ">=0.4.0"
175
+ }
176
+ },
177
+ "node_modules/depd": {
178
+ "version": "2.0.0",
179
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
180
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
181
+ "engines": {
182
+ "node": ">= 0.8"
183
+ }
184
+ },
185
+ "node_modules/destroy": {
186
+ "version": "1.2.0",
187
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
188
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
189
+ "engines": {
190
+ "node": ">= 0.8",
191
+ "npm": "1.2.8000 || >= 1.4.16"
192
+ }
193
+ },
194
+ "node_modules/dotenv": {
195
+ "version": "16.3.1",
196
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
197
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
198
+ "engines": {
199
+ "node": ">=12"
200
+ },
201
+ "funding": {
202
+ "url": "https://github.com/motdotla/dotenv?sponsor=1"
203
+ }
204
+ },
205
+ "node_modules/ee-first": {
206
+ "version": "1.1.1",
207
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
208
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
209
+ },
210
+ "node_modules/encodeurl": {
211
+ "version": "1.0.2",
212
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
213
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
214
+ "engines": {
215
+ "node": ">= 0.8"
216
+ }
217
+ },
218
+ "node_modules/escape-html": {
219
+ "version": "1.0.3",
220
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
221
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
222
+ },
223
+ "node_modules/etag": {
224
+ "version": "1.8.1",
225
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
226
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
227
+ "engines": {
228
+ "node": ">= 0.6"
229
+ }
230
+ },
231
+ "node_modules/express": {
232
+ "version": "4.18.2",
233
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
234
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
235
+ "dependencies": {
236
+ "accepts": "~1.3.8",
237
+ "array-flatten": "1.1.1",
238
+ "body-parser": "1.20.1",
239
+ "content-disposition": "0.5.4",
240
+ "content-type": "~1.0.4",
241
+ "cookie": "0.5.0",
242
+ "cookie-signature": "1.0.6",
243
+ "debug": "2.6.9",
244
+ "depd": "2.0.0",
245
+ "encodeurl": "~1.0.2",
246
+ "escape-html": "~1.0.3",
247
+ "etag": "~1.8.1",
248
+ "finalhandler": "1.2.0",
249
+ "fresh": "0.5.2",
250
+ "http-errors": "2.0.0",
251
+ "merge-descriptors": "1.0.1",
252
+ "methods": "~1.1.2",
253
+ "on-finished": "2.4.1",
254
+ "parseurl": "~1.3.3",
255
+ "path-to-regexp": "0.1.7",
256
+ "proxy-addr": "~2.0.7",
257
+ "qs": "6.11.0",
258
+ "range-parser": "~1.2.1",
259
+ "safe-buffer": "5.2.1",
260
+ "send": "0.18.0",
261
+ "serve-static": "1.15.0",
262
+ "setprototypeof": "1.2.0",
263
+ "statuses": "2.0.1",
264
+ "type-is": "~1.6.18",
265
+ "utils-merge": "1.0.1",
266
+ "vary": "~1.1.2"
267
+ },
268
+ "engines": {
269
+ "node": ">= 0.10.0"
270
+ }
271
+ },
272
+ "node_modules/express-async-errors": {
273
+ "version": "3.1.1",
274
+ "resolved": "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz",
275
+ "integrity": "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==",
276
+ "peerDependencies": {
277
+ "express": "^4.16.2"
278
+ }
279
+ },
280
+ "node_modules/express/node_modules/body-parser": {
281
+ "version": "1.20.1",
282
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
283
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
284
+ "dependencies": {
285
+ "bytes": "3.1.2",
286
+ "content-type": "~1.0.4",
287
+ "debug": "2.6.9",
288
+ "depd": "2.0.0",
289
+ "destroy": "1.2.0",
290
+ "http-errors": "2.0.0",
291
+ "iconv-lite": "0.4.24",
292
+ "on-finished": "2.4.1",
293
+ "qs": "6.11.0",
294
+ "raw-body": "2.5.1",
295
+ "type-is": "~1.6.18",
296
+ "unpipe": "1.0.0"
297
+ },
298
+ "engines": {
299
+ "node": ">= 0.8",
300
+ "npm": "1.2.8000 || >= 1.4.16"
301
+ }
302
+ },
303
+ "node_modules/express/node_modules/raw-body": {
304
+ "version": "2.5.1",
305
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
306
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
307
+ "dependencies": {
308
+ "bytes": "3.1.2",
309
+ "http-errors": "2.0.0",
310
+ "iconv-lite": "0.4.24",
311
+ "unpipe": "1.0.0"
312
+ },
313
+ "engines": {
314
+ "node": ">= 0.8"
315
+ }
316
+ },
317
+ "node_modules/finalhandler": {
318
+ "version": "1.2.0",
319
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
320
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
321
+ "dependencies": {
322
+ "debug": "2.6.9",
323
+ "encodeurl": "~1.0.2",
324
+ "escape-html": "~1.0.3",
325
+ "on-finished": "2.4.1",
326
+ "parseurl": "~1.3.3",
327
+ "statuses": "2.0.1",
328
+ "unpipe": "~1.0.0"
329
+ },
330
+ "engines": {
331
+ "node": ">= 0.8"
332
+ }
333
+ },
334
+ "node_modules/follow-redirects": {
335
+ "version": "1.15.2",
336
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
337
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
338
+ "funding": [
339
+ {
340
+ "type": "individual",
341
+ "url": "https://github.com/sponsors/RubenVerborgh"
342
+ }
343
+ ],
344
+ "engines": {
345
+ "node": ">=4.0"
346
+ },
347
+ "peerDependenciesMeta": {
348
+ "debug": {
349
+ "optional": true
350
+ }
351
+ }
352
+ },
353
+ "node_modules/form-data": {
354
+ "version": "4.0.0",
355
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
356
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
357
+ "dependencies": {
358
+ "asynckit": "^0.4.0",
359
+ "combined-stream": "^1.0.8",
360
+ "mime-types": "^2.1.12"
361
+ },
362
+ "engines": {
363
+ "node": ">= 6"
364
+ }
365
+ },
366
+ "node_modules/forwarded": {
367
+ "version": "0.2.0",
368
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
369
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
370
+ "engines": {
371
+ "node": ">= 0.6"
372
+ }
373
+ },
374
+ "node_modules/fresh": {
375
+ "version": "0.5.2",
376
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
377
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
378
+ "engines": {
379
+ "node": ">= 0.6"
380
+ }
381
+ },
382
+ "node_modules/function-bind": {
383
+ "version": "1.1.1",
384
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
385
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
386
+ },
387
+ "node_modules/get-intrinsic": {
388
+ "version": "1.2.1",
389
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
390
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
391
+ "dependencies": {
392
+ "function-bind": "^1.1.1",
393
+ "has": "^1.0.3",
394
+ "has-proto": "^1.0.1",
395
+ "has-symbols": "^1.0.3"
396
+ },
397
+ "funding": {
398
+ "url": "https://github.com/sponsors/ljharb"
399
+ }
400
+ },
401
+ "node_modules/has": {
402
+ "version": "1.0.3",
403
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
404
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
405
+ "dependencies": {
406
+ "function-bind": "^1.1.1"
407
+ },
408
+ "engines": {
409
+ "node": ">= 0.4.0"
410
+ }
411
+ },
412
+ "node_modules/has-proto": {
413
+ "version": "1.0.1",
414
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
415
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
416
+ "engines": {
417
+ "node": ">= 0.4"
418
+ },
419
+ "funding": {
420
+ "url": "https://github.com/sponsors/ljharb"
421
+ }
422
+ },
423
+ "node_modules/has-symbols": {
424
+ "version": "1.0.3",
425
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
426
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
427
+ "engines": {
428
+ "node": ">= 0.4"
429
+ },
430
+ "funding": {
431
+ "url": "https://github.com/sponsors/ljharb"
432
+ }
433
+ },
434
+ "node_modules/http": {
435
+ "version": "0.0.1-security",
436
+ "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz",
437
+ "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g=="
438
+ },
439
+ "node_modules/http-errors": {
440
+ "version": "2.0.0",
441
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
442
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
443
+ "dependencies": {
444
+ "depd": "2.0.0",
445
+ "inherits": "2.0.4",
446
+ "setprototypeof": "1.2.0",
447
+ "statuses": "2.0.1",
448
+ "toidentifier": "1.0.1"
449
+ },
450
+ "engines": {
451
+ "node": ">= 0.8"
452
+ }
453
+ },
454
+ "node_modules/https": {
455
+ "version": "1.0.0",
456
+ "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz",
457
+ "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg=="
458
+ },
459
+ "node_modules/iconv-lite": {
460
+ "version": "0.4.24",
461
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
462
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
463
+ "dependencies": {
464
+ "safer-buffer": ">= 2.1.2 < 3"
465
+ },
466
+ "engines": {
467
+ "node": ">=0.10.0"
468
+ }
469
+ },
470
+ "node_modules/inherits": {
471
+ "version": "2.0.4",
472
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
473
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
474
+ },
475
+ "node_modules/ipaddr.js": {
476
+ "version": "1.9.1",
477
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
478
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
479
+ "engines": {
480
+ "node": ">= 0.10"
481
+ }
482
+ },
483
+ "node_modules/media-typer": {
484
+ "version": "0.3.0",
485
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
486
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
487
+ "engines": {
488
+ "node": ">= 0.6"
489
+ }
490
+ },
491
+ "node_modules/merge-descriptors": {
492
+ "version": "1.0.1",
493
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
494
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
495
+ },
496
+ "node_modules/methods": {
497
+ "version": "1.1.2",
498
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
499
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
500
+ "engines": {
501
+ "node": ">= 0.6"
502
+ }
503
+ },
504
+ "node_modules/mime": {
505
+ "version": "1.6.0",
506
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
507
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
508
+ "bin": {
509
+ "mime": "cli.js"
510
+ },
511
+ "engines": {
512
+ "node": ">=4"
513
+ }
514
+ },
515
+ "node_modules/mime-db": {
516
+ "version": "1.52.0",
517
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
518
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
519
+ "engines": {
520
+ "node": ">= 0.6"
521
+ }
522
+ },
523
+ "node_modules/mime-types": {
524
+ "version": "2.1.35",
525
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
526
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
527
+ "dependencies": {
528
+ "mime-db": "1.52.0"
529
+ },
530
+ "engines": {
531
+ "node": ">= 0.6"
532
+ }
533
+ },
534
+ "node_modules/ms": {
535
+ "version": "2.0.0",
536
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
537
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
538
+ },
539
+ "node_modules/negotiator": {
540
+ "version": "0.6.3",
541
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
542
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
543
+ "engines": {
544
+ "node": ">= 0.6"
545
+ }
546
+ },
547
+ "node_modules/node-fetch": {
548
+ "version": "2.7.0",
549
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
550
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
551
+ "dependencies": {
552
+ "whatwg-url": "^5.0.0"
553
+ },
554
+ "engines": {
555
+ "node": "4.x || >=6.0.0"
556
+ },
557
+ "peerDependencies": {
558
+ "encoding": "^0.1.0"
559
+ },
560
+ "peerDependenciesMeta": {
561
+ "encoding": {
562
+ "optional": true
563
+ }
564
+ }
565
+ },
566
+ "node_modules/object-assign": {
567
+ "version": "4.1.1",
568
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
569
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
570
+ "engines": {
571
+ "node": ">=0.10.0"
572
+ }
573
+ },
574
+ "node_modules/object-inspect": {
575
+ "version": "1.12.3",
576
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
577
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
578
+ "funding": {
579
+ "url": "https://github.com/sponsors/ljharb"
580
+ }
581
+ },
582
+ "node_modules/on-finished": {
583
+ "version": "2.4.1",
584
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
585
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
586
+ "dependencies": {
587
+ "ee-first": "1.1.1"
588
+ },
589
+ "engines": {
590
+ "node": ">= 0.8"
591
+ }
592
+ },
593
+ "node_modules/openai-billing": {
594
+ "version": "2.1.0",
595
+ "resolved": "https://registry.npmjs.org/openai-billing/-/openai-billing-2.1.0.tgz",
596
+ "integrity": "sha512-fzXLt2HSlS3FbJneiScZhiBe1GGikXOcqkdj+X9REWYbrWuatNhTT+wzEBb/F2v7nGvi5PuGFwBU9rEVkgyzOg==",
597
+ "dependencies": {
598
+ "cross-fetch": "^3.1.5"
599
+ }
600
+ },
601
+ "node_modules/parseurl": {
602
+ "version": "1.3.3",
603
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
604
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
605
+ "engines": {
606
+ "node": ">= 0.8"
607
+ }
608
+ },
609
+ "node_modules/path-to-regexp": {
610
+ "version": "0.1.7",
611
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
612
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
613
+ },
614
+ "node_modules/proxy-addr": {
615
+ "version": "2.0.7",
616
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
617
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
618
+ "dependencies": {
619
+ "forwarded": "0.2.0",
620
+ "ipaddr.js": "1.9.1"
621
+ },
622
+ "engines": {
623
+ "node": ">= 0.10"
624
+ }
625
+ },
626
+ "node_modules/proxy-from-env": {
627
+ "version": "1.1.0",
628
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
629
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
630
+ },
631
+ "node_modules/qs": {
632
+ "version": "6.11.0",
633
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
634
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
635
+ "dependencies": {
636
+ "side-channel": "^1.0.4"
637
+ },
638
+ "engines": {
639
+ "node": ">=0.6"
640
+ },
641
+ "funding": {
642
+ "url": "https://github.com/sponsors/ljharb"
643
+ }
644
+ },
645
+ "node_modules/range-parser": {
646
+ "version": "1.2.1",
647
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
648
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
649
+ "engines": {
650
+ "node": ">= 0.6"
651
+ }
652
+ },
653
+ "node_modules/raw-body": {
654
+ "version": "2.5.2",
655
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
656
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
657
+ "dependencies": {
658
+ "bytes": "3.1.2",
659
+ "http-errors": "2.0.0",
660
+ "iconv-lite": "0.4.24",
661
+ "unpipe": "1.0.0"
662
+ },
663
+ "engines": {
664
+ "node": ">= 0.8"
665
+ }
666
+ },
667
+ "node_modules/safe-buffer": {
668
+ "version": "5.2.1",
669
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
670
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
671
+ "funding": [
672
+ {
673
+ "type": "github",
674
+ "url": "https://github.com/sponsors/feross"
675
+ },
676
+ {
677
+ "type": "patreon",
678
+ "url": "https://www.patreon.com/feross"
679
+ },
680
+ {
681
+ "type": "consulting",
682
+ "url": "https://feross.org/support"
683
+ }
684
+ ]
685
+ },
686
+ "node_modules/safer-buffer": {
687
+ "version": "2.1.2",
688
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
689
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
690
+ },
691
+ "node_modules/send": {
692
+ "version": "0.18.0",
693
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
694
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
695
+ "dependencies": {
696
+ "debug": "2.6.9",
697
+ "depd": "2.0.0",
698
+ "destroy": "1.2.0",
699
+ "encodeurl": "~1.0.2",
700
+ "escape-html": "~1.0.3",
701
+ "etag": "~1.8.1",
702
+ "fresh": "0.5.2",
703
+ "http-errors": "2.0.0",
704
+ "mime": "1.6.0",
705
+ "ms": "2.1.3",
706
+ "on-finished": "2.4.1",
707
+ "range-parser": "~1.2.1",
708
+ "statuses": "2.0.1"
709
+ },
710
+ "engines": {
711
+ "node": ">= 0.8.0"
712
+ }
713
+ },
714
+ "node_modules/send/node_modules/ms": {
715
+ "version": "2.1.3",
716
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
717
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
718
+ },
719
+ "node_modules/serve-static": {
720
+ "version": "1.15.0",
721
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
722
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
723
+ "dependencies": {
724
+ "encodeurl": "~1.0.2",
725
+ "escape-html": "~1.0.3",
726
+ "parseurl": "~1.3.3",
727
+ "send": "0.18.0"
728
+ },
729
+ "engines": {
730
+ "node": ">= 0.8.0"
731
+ }
732
+ },
733
+ "node_modules/setprototypeof": {
734
+ "version": "1.2.0",
735
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
736
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
737
+ },
738
+ "node_modules/side-channel": {
739
+ "version": "1.0.4",
740
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
741
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
742
+ "dependencies": {
743
+ "call-bind": "^1.0.0",
744
+ "get-intrinsic": "^1.0.2",
745
+ "object-inspect": "^1.9.0"
746
+ },
747
+ "funding": {
748
+ "url": "https://github.com/sponsors/ljharb"
749
+ }
750
+ },
751
+ "node_modules/statuses": {
752
+ "version": "2.0.1",
753
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
754
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
755
+ "engines": {
756
+ "node": ">= 0.8"
757
+ }
758
+ },
759
+ "node_modules/toidentifier": {
760
+ "version": "1.0.1",
761
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
762
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
763
+ "engines": {
764
+ "node": ">=0.6"
765
+ }
766
+ },
767
+ "node_modules/tr46": {
768
+ "version": "0.0.3",
769
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
770
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
771
+ },
772
+ "node_modules/type-is": {
773
+ "version": "1.6.18",
774
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
775
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
776
+ "dependencies": {
777
+ "media-typer": "0.3.0",
778
+ "mime-types": "~2.1.24"
779
+ },
780
+ "engines": {
781
+ "node": ">= 0.6"
782
+ }
783
+ },
784
+ "node_modules/unpipe": {
785
+ "version": "1.0.0",
786
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
787
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
788
+ "engines": {
789
+ "node": ">= 0.8"
790
+ }
791
+ },
792
+ "node_modules/utils-merge": {
793
+ "version": "1.0.1",
794
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
795
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
796
+ "engines": {
797
+ "node": ">= 0.4.0"
798
+ }
799
+ },
800
+ "node_modules/vary": {
801
+ "version": "1.1.2",
802
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
803
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
804
+ "engines": {
805
+ "node": ">= 0.8"
806
+ }
807
+ },
808
+ "node_modules/webidl-conversions": {
809
+ "version": "3.0.1",
810
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
811
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
812
+ },
813
+ "node_modules/whatwg-url": {
814
+ "version": "5.0.0",
815
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
816
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
817
+ "dependencies": {
818
+ "tr46": "~0.0.3",
819
+ "webidl-conversions": "^3.0.0"
820
+ }
821
+ }
822
+ }
823
+ }
package.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "chuiproxy",
3
+ "version": "1.0.0",
4
+ "main": "main.js",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "author": "",
9
+ "license": "ISC",
10
+ "description": "",
11
+ "dependencies": {
12
+ "axios": "^1.4.0",
13
+ "body-parser": "^1.20.2",
14
+ "cors": "^2.8.5",
15
+ "dotenv": "^16.3.1",
16
+ "express": "^4.18.2",
17
+ "express-async-errors": "^3.1.1",
18
+ "http": "^0.0.1-security",
19
+ "https": "^1.0.0",
20
+ "openai-billing": "^2.1.0"
21
+ }
22
+ }