ShieldX commited on
Commit
61652e4
·
verified ·
1 Parent(s): 8ac2a88

Upload 4 files

Browse files
Files changed (4) hide show
  1. Dockerfile +28 -0
  2. index.js +61 -0
  3. package-lock.json +1176 -0
  4. package.json +19 -0
Dockerfile ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use a lightweight Node.js image
2
+ FROM node:22-alpine
3
+
4
+ # Hugging Face Spaces requires apps to run under a non-root user (UID 1000)
5
+ # The 'node' user is built into this image with UID 1000
6
+ WORKDIR /app
7
+
8
+ # Copy package files first to leverage Docker cache
9
+ COPY package*.json ./
10
+
11
+ # Install dependencies
12
+ RUN npm install
13
+
14
+ # Copy the rest of your application code
15
+ COPY . .
16
+
17
+ # Grant the 'node' user ownership of the /app directory
18
+ RUN chown -R node:node /app
19
+
20
+ # Switch to the non-root user
21
+ USER node
22
+
23
+ # Hugging Face Spaces route traffic to port 7860 by default
24
+ ENV PORT=7860
25
+ EXPOSE 7860
26
+
27
+ # Start the RollyBeans engine
28
+ CMD ["node", "index.js"]
index.js ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ require('dotenv').config();
2
+ const express = require('express');
3
+ const cors = require('cors');
4
+ const { GoogleSpreadsheet } = require('google-spreadsheet');
5
+ const { JWT } = require('google-auth-library');
6
+
7
+ const app = express();
8
+ app.use(cors());
9
+ app.use(express.json());
10
+
11
+ // Initialize Google Sheets Auth
12
+ const serviceAccountAuth = new JWT({
13
+ email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
14
+ key: process.env.GOOGLE_PRIVATE_KEY.replace(/\\n/g, '\n'),
15
+ scopes: ['https://www.googleapis.com/auth/spreadsheets'],
16
+ });
17
+
18
+ const doc = new GoogleSpreadsheet(process.env.GOOGLE_SHEET_ID, serviceAccountAuth);
19
+
20
+ // ROUTE 1: The Keep-Alive Ping (For cron-job.org)
21
+ app.get('/ping', (req, res) => {
22
+ res.status(200).json({ status: 'awake', message: 'RollyBeans Backend is live.' });
23
+ });
24
+
25
+ // ROUTE 2: Handle Application Submissions
26
+ app.post('/api/apply', async (req, res) => {
27
+ try {
28
+ const { name, role, phone, email, portfolio, whyJoin, agreed } = req.body;
29
+
30
+ // Basic Validation
31
+ if (!name || !role || !phone || !email || !agreed) {
32
+ return res.status(400).json({ error: 'Missing required fields or terms not accepted.' });
33
+ }
34
+
35
+ await doc.loadInfo();
36
+ const sheet = doc.sheetsByIndex[0]; // Gets the first tab in your sheet
37
+
38
+ // Append the new row
39
+ await sheet.addRow({
40
+ 'Timestamp': new Date().toLocaleString('en-IN', { timeZone: 'Asia/Kolkata' }),
41
+ 'Name': name,
42
+ 'Role': role,
43
+ 'Phone': phone,
44
+ 'Email': email,
45
+ 'Portfolio Link': portfolio || 'N/A',
46
+ 'Why RollyBeans?': whyJoin,
47
+ 'Agreed to Terms': agreed ? 'YES' : 'NO'
48
+ });
49
+
50
+ res.status(200).json({ success: true, message: 'Application submitted successfully.' });
51
+
52
+ } catch (error) {
53
+ console.error('Error saving application:', error);
54
+ res.status(500).json({ success: false, error: 'Failed to submit application. Try again.' });
55
+ }
56
+ });
57
+
58
+ const PORT = process.env.PORT || 3000;
59
+ app.listen(PORT, () => {
60
+ console.log(`RollyBeans Engine running on port ${PORT}`);
61
+ });
package-lock.json ADDED
@@ -0,0 +1,1176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "rollybeans-backend",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "rollybeans-backend",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "cors": "^2.8.6",
13
+ "dotenv": "^17.3.1",
14
+ "express": "^5.2.1",
15
+ "google-auth-library": "^10.6.2",
16
+ "google-spreadsheet": "^5.2.0"
17
+ }
18
+ },
19
+ "node_modules/accepts": {
20
+ "version": "2.0.0",
21
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
22
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "mime-types": "^3.0.0",
26
+ "negotiator": "^1.0.0"
27
+ },
28
+ "engines": {
29
+ "node": ">= 0.6"
30
+ }
31
+ },
32
+ "node_modules/agent-base": {
33
+ "version": "7.1.4",
34
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
35
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
36
+ "license": "MIT",
37
+ "engines": {
38
+ "node": ">= 14"
39
+ }
40
+ },
41
+ "node_modules/base64-js": {
42
+ "version": "1.5.1",
43
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
44
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
45
+ "funding": [
46
+ {
47
+ "type": "github",
48
+ "url": "https://github.com/sponsors/feross"
49
+ },
50
+ {
51
+ "type": "patreon",
52
+ "url": "https://www.patreon.com/feross"
53
+ },
54
+ {
55
+ "type": "consulting",
56
+ "url": "https://feross.org/support"
57
+ }
58
+ ],
59
+ "license": "MIT"
60
+ },
61
+ "node_modules/bignumber.js": {
62
+ "version": "9.3.1",
63
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
64
+ "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
65
+ "license": "MIT",
66
+ "engines": {
67
+ "node": "*"
68
+ }
69
+ },
70
+ "node_modules/body-parser": {
71
+ "version": "2.2.2",
72
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
73
+ "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
74
+ "license": "MIT",
75
+ "dependencies": {
76
+ "bytes": "^3.1.2",
77
+ "content-type": "^1.0.5",
78
+ "debug": "^4.4.3",
79
+ "http-errors": "^2.0.0",
80
+ "iconv-lite": "^0.7.0",
81
+ "on-finished": "^2.4.1",
82
+ "qs": "^6.14.1",
83
+ "raw-body": "^3.0.1",
84
+ "type-is": "^2.0.1"
85
+ },
86
+ "engines": {
87
+ "node": ">=18"
88
+ },
89
+ "funding": {
90
+ "type": "opencollective",
91
+ "url": "https://opencollective.com/express"
92
+ }
93
+ },
94
+ "node_modules/buffer-equal-constant-time": {
95
+ "version": "1.0.1",
96
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
97
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
98
+ "license": "BSD-3-Clause"
99
+ },
100
+ "node_modules/bytes": {
101
+ "version": "3.1.2",
102
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
103
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
104
+ "license": "MIT",
105
+ "engines": {
106
+ "node": ">= 0.8"
107
+ }
108
+ },
109
+ "node_modules/call-bind-apply-helpers": {
110
+ "version": "1.0.2",
111
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
112
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
113
+ "license": "MIT",
114
+ "dependencies": {
115
+ "es-errors": "^1.3.0",
116
+ "function-bind": "^1.1.2"
117
+ },
118
+ "engines": {
119
+ "node": ">= 0.4"
120
+ }
121
+ },
122
+ "node_modules/call-bound": {
123
+ "version": "1.0.4",
124
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
125
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
126
+ "license": "MIT",
127
+ "dependencies": {
128
+ "call-bind-apply-helpers": "^1.0.2",
129
+ "get-intrinsic": "^1.3.0"
130
+ },
131
+ "engines": {
132
+ "node": ">= 0.4"
133
+ },
134
+ "funding": {
135
+ "url": "https://github.com/sponsors/ljharb"
136
+ }
137
+ },
138
+ "node_modules/content-disposition": {
139
+ "version": "1.0.1",
140
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
141
+ "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
142
+ "license": "MIT",
143
+ "engines": {
144
+ "node": ">=18"
145
+ },
146
+ "funding": {
147
+ "type": "opencollective",
148
+ "url": "https://opencollective.com/express"
149
+ }
150
+ },
151
+ "node_modules/content-type": {
152
+ "version": "1.0.5",
153
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
154
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
155
+ "license": "MIT",
156
+ "engines": {
157
+ "node": ">= 0.6"
158
+ }
159
+ },
160
+ "node_modules/cookie": {
161
+ "version": "0.7.2",
162
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
163
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
164
+ "license": "MIT",
165
+ "engines": {
166
+ "node": ">= 0.6"
167
+ }
168
+ },
169
+ "node_modules/cookie-signature": {
170
+ "version": "1.2.2",
171
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
172
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
173
+ "license": "MIT",
174
+ "engines": {
175
+ "node": ">=6.6.0"
176
+ }
177
+ },
178
+ "node_modules/cors": {
179
+ "version": "2.8.6",
180
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
181
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
182
+ "license": "MIT",
183
+ "dependencies": {
184
+ "object-assign": "^4",
185
+ "vary": "^1"
186
+ },
187
+ "engines": {
188
+ "node": ">= 0.10"
189
+ },
190
+ "funding": {
191
+ "type": "opencollective",
192
+ "url": "https://opencollective.com/express"
193
+ }
194
+ },
195
+ "node_modules/data-uri-to-buffer": {
196
+ "version": "4.0.1",
197
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
198
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
199
+ "license": "MIT",
200
+ "engines": {
201
+ "node": ">= 12"
202
+ }
203
+ },
204
+ "node_modules/debug": {
205
+ "version": "4.4.3",
206
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
207
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
208
+ "license": "MIT",
209
+ "dependencies": {
210
+ "ms": "^2.1.3"
211
+ },
212
+ "engines": {
213
+ "node": ">=6.0"
214
+ },
215
+ "peerDependenciesMeta": {
216
+ "supports-color": {
217
+ "optional": true
218
+ }
219
+ }
220
+ },
221
+ "node_modules/depd": {
222
+ "version": "2.0.0",
223
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
224
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
225
+ "license": "MIT",
226
+ "engines": {
227
+ "node": ">= 0.8"
228
+ }
229
+ },
230
+ "node_modules/dotenv": {
231
+ "version": "17.3.1",
232
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz",
233
+ "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==",
234
+ "license": "BSD-2-Clause",
235
+ "engines": {
236
+ "node": ">=12"
237
+ },
238
+ "funding": {
239
+ "url": "https://dotenvx.com"
240
+ }
241
+ },
242
+ "node_modules/dunder-proto": {
243
+ "version": "1.0.1",
244
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
245
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
246
+ "license": "MIT",
247
+ "dependencies": {
248
+ "call-bind-apply-helpers": "^1.0.1",
249
+ "es-errors": "^1.3.0",
250
+ "gopd": "^1.2.0"
251
+ },
252
+ "engines": {
253
+ "node": ">= 0.4"
254
+ }
255
+ },
256
+ "node_modules/ecdsa-sig-formatter": {
257
+ "version": "1.0.11",
258
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
259
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
260
+ "license": "Apache-2.0",
261
+ "dependencies": {
262
+ "safe-buffer": "^5.0.1"
263
+ }
264
+ },
265
+ "node_modules/ee-first": {
266
+ "version": "1.1.1",
267
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
268
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
269
+ "license": "MIT"
270
+ },
271
+ "node_modules/encodeurl": {
272
+ "version": "2.0.0",
273
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
274
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
275
+ "license": "MIT",
276
+ "engines": {
277
+ "node": ">= 0.8"
278
+ }
279
+ },
280
+ "node_modules/es-define-property": {
281
+ "version": "1.0.1",
282
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
283
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
284
+ "license": "MIT",
285
+ "engines": {
286
+ "node": ">= 0.4"
287
+ }
288
+ },
289
+ "node_modules/es-errors": {
290
+ "version": "1.3.0",
291
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
292
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
293
+ "license": "MIT",
294
+ "engines": {
295
+ "node": ">= 0.4"
296
+ }
297
+ },
298
+ "node_modules/es-object-atoms": {
299
+ "version": "1.1.1",
300
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
301
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
302
+ "license": "MIT",
303
+ "dependencies": {
304
+ "es-errors": "^1.3.0"
305
+ },
306
+ "engines": {
307
+ "node": ">= 0.4"
308
+ }
309
+ },
310
+ "node_modules/es-toolkit": {
311
+ "version": "1.45.1",
312
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz",
313
+ "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==",
314
+ "license": "MIT",
315
+ "workspaces": [
316
+ "docs",
317
+ "benchmarks"
318
+ ]
319
+ },
320
+ "node_modules/escape-html": {
321
+ "version": "1.0.3",
322
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
323
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
324
+ "license": "MIT"
325
+ },
326
+ "node_modules/etag": {
327
+ "version": "1.8.1",
328
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
329
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
330
+ "license": "MIT",
331
+ "engines": {
332
+ "node": ">= 0.6"
333
+ }
334
+ },
335
+ "node_modules/express": {
336
+ "version": "5.2.1",
337
+ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
338
+ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
339
+ "license": "MIT",
340
+ "dependencies": {
341
+ "accepts": "^2.0.0",
342
+ "body-parser": "^2.2.1",
343
+ "content-disposition": "^1.0.0",
344
+ "content-type": "^1.0.5",
345
+ "cookie": "^0.7.1",
346
+ "cookie-signature": "^1.2.1",
347
+ "debug": "^4.4.0",
348
+ "depd": "^2.0.0",
349
+ "encodeurl": "^2.0.0",
350
+ "escape-html": "^1.0.3",
351
+ "etag": "^1.8.1",
352
+ "finalhandler": "^2.1.0",
353
+ "fresh": "^2.0.0",
354
+ "http-errors": "^2.0.0",
355
+ "merge-descriptors": "^2.0.0",
356
+ "mime-types": "^3.0.0",
357
+ "on-finished": "^2.4.1",
358
+ "once": "^1.4.0",
359
+ "parseurl": "^1.3.3",
360
+ "proxy-addr": "^2.0.7",
361
+ "qs": "^6.14.0",
362
+ "range-parser": "^1.2.1",
363
+ "router": "^2.2.0",
364
+ "send": "^1.1.0",
365
+ "serve-static": "^2.2.0",
366
+ "statuses": "^2.0.1",
367
+ "type-is": "^2.0.1",
368
+ "vary": "^1.1.2"
369
+ },
370
+ "engines": {
371
+ "node": ">= 18"
372
+ },
373
+ "funding": {
374
+ "type": "opencollective",
375
+ "url": "https://opencollective.com/express"
376
+ }
377
+ },
378
+ "node_modules/extend": {
379
+ "version": "3.0.2",
380
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
381
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
382
+ "license": "MIT"
383
+ },
384
+ "node_modules/fetch-blob": {
385
+ "version": "3.2.0",
386
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
387
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
388
+ "funding": [
389
+ {
390
+ "type": "github",
391
+ "url": "https://github.com/sponsors/jimmywarting"
392
+ },
393
+ {
394
+ "type": "paypal",
395
+ "url": "https://paypal.me/jimmywarting"
396
+ }
397
+ ],
398
+ "license": "MIT",
399
+ "dependencies": {
400
+ "node-domexception": "^1.0.0",
401
+ "web-streams-polyfill": "^3.0.3"
402
+ },
403
+ "engines": {
404
+ "node": "^12.20 || >= 14.13"
405
+ }
406
+ },
407
+ "node_modules/finalhandler": {
408
+ "version": "2.1.1",
409
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
410
+ "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
411
+ "license": "MIT",
412
+ "dependencies": {
413
+ "debug": "^4.4.0",
414
+ "encodeurl": "^2.0.0",
415
+ "escape-html": "^1.0.3",
416
+ "on-finished": "^2.4.1",
417
+ "parseurl": "^1.3.3",
418
+ "statuses": "^2.0.1"
419
+ },
420
+ "engines": {
421
+ "node": ">= 18.0.0"
422
+ },
423
+ "funding": {
424
+ "type": "opencollective",
425
+ "url": "https://opencollective.com/express"
426
+ }
427
+ },
428
+ "node_modules/formdata-polyfill": {
429
+ "version": "4.0.10",
430
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
431
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
432
+ "license": "MIT",
433
+ "dependencies": {
434
+ "fetch-blob": "^3.1.2"
435
+ },
436
+ "engines": {
437
+ "node": ">=12.20.0"
438
+ }
439
+ },
440
+ "node_modules/forwarded": {
441
+ "version": "0.2.0",
442
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
443
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
444
+ "license": "MIT",
445
+ "engines": {
446
+ "node": ">= 0.6"
447
+ }
448
+ },
449
+ "node_modules/fresh": {
450
+ "version": "2.0.0",
451
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
452
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
453
+ "license": "MIT",
454
+ "engines": {
455
+ "node": ">= 0.8"
456
+ }
457
+ },
458
+ "node_modules/function-bind": {
459
+ "version": "1.1.2",
460
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
461
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
462
+ "license": "MIT",
463
+ "funding": {
464
+ "url": "https://github.com/sponsors/ljharb"
465
+ }
466
+ },
467
+ "node_modules/gaxios": {
468
+ "version": "7.1.4",
469
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz",
470
+ "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==",
471
+ "license": "Apache-2.0",
472
+ "dependencies": {
473
+ "extend": "^3.0.2",
474
+ "https-proxy-agent": "^7.0.1",
475
+ "node-fetch": "^3.3.2"
476
+ },
477
+ "engines": {
478
+ "node": ">=18"
479
+ }
480
+ },
481
+ "node_modules/gcp-metadata": {
482
+ "version": "8.1.2",
483
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz",
484
+ "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==",
485
+ "license": "Apache-2.0",
486
+ "dependencies": {
487
+ "gaxios": "^7.0.0",
488
+ "google-logging-utils": "^1.0.0",
489
+ "json-bigint": "^1.0.0"
490
+ },
491
+ "engines": {
492
+ "node": ">=18"
493
+ }
494
+ },
495
+ "node_modules/get-intrinsic": {
496
+ "version": "1.3.0",
497
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
498
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
499
+ "license": "MIT",
500
+ "dependencies": {
501
+ "call-bind-apply-helpers": "^1.0.2",
502
+ "es-define-property": "^1.0.1",
503
+ "es-errors": "^1.3.0",
504
+ "es-object-atoms": "^1.1.1",
505
+ "function-bind": "^1.1.2",
506
+ "get-proto": "^1.0.1",
507
+ "gopd": "^1.2.0",
508
+ "has-symbols": "^1.1.0",
509
+ "hasown": "^2.0.2",
510
+ "math-intrinsics": "^1.1.0"
511
+ },
512
+ "engines": {
513
+ "node": ">= 0.4"
514
+ },
515
+ "funding": {
516
+ "url": "https://github.com/sponsors/ljharb"
517
+ }
518
+ },
519
+ "node_modules/get-proto": {
520
+ "version": "1.0.1",
521
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
522
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
523
+ "license": "MIT",
524
+ "dependencies": {
525
+ "dunder-proto": "^1.0.1",
526
+ "es-object-atoms": "^1.0.0"
527
+ },
528
+ "engines": {
529
+ "node": ">= 0.4"
530
+ }
531
+ },
532
+ "node_modules/google-auth-library": {
533
+ "version": "10.6.2",
534
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz",
535
+ "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==",
536
+ "license": "Apache-2.0",
537
+ "dependencies": {
538
+ "base64-js": "^1.3.0",
539
+ "ecdsa-sig-formatter": "^1.0.11",
540
+ "gaxios": "^7.1.4",
541
+ "gcp-metadata": "8.1.2",
542
+ "google-logging-utils": "1.1.3",
543
+ "jws": "^4.0.0"
544
+ },
545
+ "engines": {
546
+ "node": ">=18"
547
+ }
548
+ },
549
+ "node_modules/google-logging-utils": {
550
+ "version": "1.1.3",
551
+ "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz",
552
+ "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==",
553
+ "license": "Apache-2.0",
554
+ "engines": {
555
+ "node": ">=14"
556
+ }
557
+ },
558
+ "node_modules/google-spreadsheet": {
559
+ "version": "5.2.0",
560
+ "resolved": "https://registry.npmjs.org/google-spreadsheet/-/google-spreadsheet-5.2.0.tgz",
561
+ "integrity": "sha512-sqQN+o0fxR5tfjFYKOuqgNFYKI/3uYT1TjLVUnN5SRckcR931szYjmvRvgN1QJ8VE2R6TlDuiFZ7LmfXvEKTyA==",
562
+ "license": "MIT",
563
+ "dependencies": {
564
+ "es-toolkit": "^1.44.0",
565
+ "ky": "^1.14.3"
566
+ },
567
+ "peerDependencies": {
568
+ "google-auth-library": ">=8.8.0"
569
+ },
570
+ "peerDependenciesMeta": {
571
+ "google-auth-library": {
572
+ "optional": true
573
+ }
574
+ }
575
+ },
576
+ "node_modules/gopd": {
577
+ "version": "1.2.0",
578
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
579
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
580
+ "license": "MIT",
581
+ "engines": {
582
+ "node": ">= 0.4"
583
+ },
584
+ "funding": {
585
+ "url": "https://github.com/sponsors/ljharb"
586
+ }
587
+ },
588
+ "node_modules/has-symbols": {
589
+ "version": "1.1.0",
590
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
591
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
592
+ "license": "MIT",
593
+ "engines": {
594
+ "node": ">= 0.4"
595
+ },
596
+ "funding": {
597
+ "url": "https://github.com/sponsors/ljharb"
598
+ }
599
+ },
600
+ "node_modules/hasown": {
601
+ "version": "2.0.2",
602
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
603
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
604
+ "license": "MIT",
605
+ "dependencies": {
606
+ "function-bind": "^1.1.2"
607
+ },
608
+ "engines": {
609
+ "node": ">= 0.4"
610
+ }
611
+ },
612
+ "node_modules/http-errors": {
613
+ "version": "2.0.1",
614
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
615
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
616
+ "license": "MIT",
617
+ "dependencies": {
618
+ "depd": "~2.0.0",
619
+ "inherits": "~2.0.4",
620
+ "setprototypeof": "~1.2.0",
621
+ "statuses": "~2.0.2",
622
+ "toidentifier": "~1.0.1"
623
+ },
624
+ "engines": {
625
+ "node": ">= 0.8"
626
+ },
627
+ "funding": {
628
+ "type": "opencollective",
629
+ "url": "https://opencollective.com/express"
630
+ }
631
+ },
632
+ "node_modules/https-proxy-agent": {
633
+ "version": "7.0.6",
634
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
635
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
636
+ "license": "MIT",
637
+ "dependencies": {
638
+ "agent-base": "^7.1.2",
639
+ "debug": "4"
640
+ },
641
+ "engines": {
642
+ "node": ">= 14"
643
+ }
644
+ },
645
+ "node_modules/iconv-lite": {
646
+ "version": "0.7.2",
647
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
648
+ "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
649
+ "license": "MIT",
650
+ "dependencies": {
651
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
652
+ },
653
+ "engines": {
654
+ "node": ">=0.10.0"
655
+ },
656
+ "funding": {
657
+ "type": "opencollective",
658
+ "url": "https://opencollective.com/express"
659
+ }
660
+ },
661
+ "node_modules/inherits": {
662
+ "version": "2.0.4",
663
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
664
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
665
+ "license": "ISC"
666
+ },
667
+ "node_modules/ipaddr.js": {
668
+ "version": "1.9.1",
669
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
670
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
671
+ "license": "MIT",
672
+ "engines": {
673
+ "node": ">= 0.10"
674
+ }
675
+ },
676
+ "node_modules/is-promise": {
677
+ "version": "4.0.0",
678
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
679
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
680
+ "license": "MIT"
681
+ },
682
+ "node_modules/json-bigint": {
683
+ "version": "1.0.0",
684
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
685
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
686
+ "license": "MIT",
687
+ "dependencies": {
688
+ "bignumber.js": "^9.0.0"
689
+ }
690
+ },
691
+ "node_modules/jwa": {
692
+ "version": "2.0.1",
693
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
694
+ "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
695
+ "license": "MIT",
696
+ "dependencies": {
697
+ "buffer-equal-constant-time": "^1.0.1",
698
+ "ecdsa-sig-formatter": "1.0.11",
699
+ "safe-buffer": "^5.0.1"
700
+ }
701
+ },
702
+ "node_modules/jws": {
703
+ "version": "4.0.1",
704
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
705
+ "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
706
+ "license": "MIT",
707
+ "dependencies": {
708
+ "jwa": "^2.0.1",
709
+ "safe-buffer": "^5.0.1"
710
+ }
711
+ },
712
+ "node_modules/ky": {
713
+ "version": "1.14.3",
714
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
715
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
716
+ "license": "MIT",
717
+ "engines": {
718
+ "node": ">=18"
719
+ },
720
+ "funding": {
721
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
722
+ }
723
+ },
724
+ "node_modules/math-intrinsics": {
725
+ "version": "1.1.0",
726
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
727
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
728
+ "license": "MIT",
729
+ "engines": {
730
+ "node": ">= 0.4"
731
+ }
732
+ },
733
+ "node_modules/media-typer": {
734
+ "version": "1.1.0",
735
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
736
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
737
+ "license": "MIT",
738
+ "engines": {
739
+ "node": ">= 0.8"
740
+ }
741
+ },
742
+ "node_modules/merge-descriptors": {
743
+ "version": "2.0.0",
744
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
745
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
746
+ "license": "MIT",
747
+ "engines": {
748
+ "node": ">=18"
749
+ },
750
+ "funding": {
751
+ "url": "https://github.com/sponsors/sindresorhus"
752
+ }
753
+ },
754
+ "node_modules/mime-db": {
755
+ "version": "1.54.0",
756
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
757
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
758
+ "license": "MIT",
759
+ "engines": {
760
+ "node": ">= 0.6"
761
+ }
762
+ },
763
+ "node_modules/mime-types": {
764
+ "version": "3.0.2",
765
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
766
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
767
+ "license": "MIT",
768
+ "dependencies": {
769
+ "mime-db": "^1.54.0"
770
+ },
771
+ "engines": {
772
+ "node": ">=18"
773
+ },
774
+ "funding": {
775
+ "type": "opencollective",
776
+ "url": "https://opencollective.com/express"
777
+ }
778
+ },
779
+ "node_modules/ms": {
780
+ "version": "2.1.3",
781
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
782
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
783
+ "license": "MIT"
784
+ },
785
+ "node_modules/negotiator": {
786
+ "version": "1.0.0",
787
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
788
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
789
+ "license": "MIT",
790
+ "engines": {
791
+ "node": ">= 0.6"
792
+ }
793
+ },
794
+ "node_modules/node-domexception": {
795
+ "version": "1.0.0",
796
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
797
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
798
+ "deprecated": "Use your platform's native DOMException instead",
799
+ "funding": [
800
+ {
801
+ "type": "github",
802
+ "url": "https://github.com/sponsors/jimmywarting"
803
+ },
804
+ {
805
+ "type": "github",
806
+ "url": "https://paypal.me/jimmywarting"
807
+ }
808
+ ],
809
+ "license": "MIT",
810
+ "engines": {
811
+ "node": ">=10.5.0"
812
+ }
813
+ },
814
+ "node_modules/node-fetch": {
815
+ "version": "3.3.2",
816
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
817
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
818
+ "license": "MIT",
819
+ "dependencies": {
820
+ "data-uri-to-buffer": "^4.0.0",
821
+ "fetch-blob": "^3.1.4",
822
+ "formdata-polyfill": "^4.0.10"
823
+ },
824
+ "engines": {
825
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
826
+ },
827
+ "funding": {
828
+ "type": "opencollective",
829
+ "url": "https://opencollective.com/node-fetch"
830
+ }
831
+ },
832
+ "node_modules/object-assign": {
833
+ "version": "4.1.1",
834
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
835
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
836
+ "license": "MIT",
837
+ "engines": {
838
+ "node": ">=0.10.0"
839
+ }
840
+ },
841
+ "node_modules/object-inspect": {
842
+ "version": "1.13.4",
843
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
844
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
845
+ "license": "MIT",
846
+ "engines": {
847
+ "node": ">= 0.4"
848
+ },
849
+ "funding": {
850
+ "url": "https://github.com/sponsors/ljharb"
851
+ }
852
+ },
853
+ "node_modules/on-finished": {
854
+ "version": "2.4.1",
855
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
856
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
857
+ "license": "MIT",
858
+ "dependencies": {
859
+ "ee-first": "1.1.1"
860
+ },
861
+ "engines": {
862
+ "node": ">= 0.8"
863
+ }
864
+ },
865
+ "node_modules/once": {
866
+ "version": "1.4.0",
867
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
868
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
869
+ "license": "ISC",
870
+ "dependencies": {
871
+ "wrappy": "1"
872
+ }
873
+ },
874
+ "node_modules/parseurl": {
875
+ "version": "1.3.3",
876
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
877
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
878
+ "license": "MIT",
879
+ "engines": {
880
+ "node": ">= 0.8"
881
+ }
882
+ },
883
+ "node_modules/path-to-regexp": {
884
+ "version": "8.4.1",
885
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.1.tgz",
886
+ "integrity": "sha512-fvU78fIjZ+SBM9YwCknCvKOUKkLVqtWDVctl0s7xIqfmfb38t2TT4ZU2gHm+Z8xGwgW+QWEU3oQSAzIbo89Ggw==",
887
+ "license": "MIT",
888
+ "funding": {
889
+ "type": "opencollective",
890
+ "url": "https://opencollective.com/express"
891
+ }
892
+ },
893
+ "node_modules/proxy-addr": {
894
+ "version": "2.0.7",
895
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
896
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
897
+ "license": "MIT",
898
+ "dependencies": {
899
+ "forwarded": "0.2.0",
900
+ "ipaddr.js": "1.9.1"
901
+ },
902
+ "engines": {
903
+ "node": ">= 0.10"
904
+ }
905
+ },
906
+ "node_modules/qs": {
907
+ "version": "6.15.0",
908
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
909
+ "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
910
+ "license": "BSD-3-Clause",
911
+ "dependencies": {
912
+ "side-channel": "^1.1.0"
913
+ },
914
+ "engines": {
915
+ "node": ">=0.6"
916
+ },
917
+ "funding": {
918
+ "url": "https://github.com/sponsors/ljharb"
919
+ }
920
+ },
921
+ "node_modules/range-parser": {
922
+ "version": "1.2.1",
923
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
924
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
925
+ "license": "MIT",
926
+ "engines": {
927
+ "node": ">= 0.6"
928
+ }
929
+ },
930
+ "node_modules/raw-body": {
931
+ "version": "3.0.2",
932
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
933
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
934
+ "license": "MIT",
935
+ "dependencies": {
936
+ "bytes": "~3.1.2",
937
+ "http-errors": "~2.0.1",
938
+ "iconv-lite": "~0.7.0",
939
+ "unpipe": "~1.0.0"
940
+ },
941
+ "engines": {
942
+ "node": ">= 0.10"
943
+ }
944
+ },
945
+ "node_modules/router": {
946
+ "version": "2.2.0",
947
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
948
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
949
+ "license": "MIT",
950
+ "dependencies": {
951
+ "debug": "^4.4.0",
952
+ "depd": "^2.0.0",
953
+ "is-promise": "^4.0.0",
954
+ "parseurl": "^1.3.3",
955
+ "path-to-regexp": "^8.0.0"
956
+ },
957
+ "engines": {
958
+ "node": ">= 18"
959
+ }
960
+ },
961
+ "node_modules/safe-buffer": {
962
+ "version": "5.2.1",
963
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
964
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
965
+ "funding": [
966
+ {
967
+ "type": "github",
968
+ "url": "https://github.com/sponsors/feross"
969
+ },
970
+ {
971
+ "type": "patreon",
972
+ "url": "https://www.patreon.com/feross"
973
+ },
974
+ {
975
+ "type": "consulting",
976
+ "url": "https://feross.org/support"
977
+ }
978
+ ],
979
+ "license": "MIT"
980
+ },
981
+ "node_modules/safer-buffer": {
982
+ "version": "2.1.2",
983
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
984
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
985
+ "license": "MIT"
986
+ },
987
+ "node_modules/send": {
988
+ "version": "1.2.1",
989
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
990
+ "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
991
+ "license": "MIT",
992
+ "dependencies": {
993
+ "debug": "^4.4.3",
994
+ "encodeurl": "^2.0.0",
995
+ "escape-html": "^1.0.3",
996
+ "etag": "^1.8.1",
997
+ "fresh": "^2.0.0",
998
+ "http-errors": "^2.0.1",
999
+ "mime-types": "^3.0.2",
1000
+ "ms": "^2.1.3",
1001
+ "on-finished": "^2.4.1",
1002
+ "range-parser": "^1.2.1",
1003
+ "statuses": "^2.0.2"
1004
+ },
1005
+ "engines": {
1006
+ "node": ">= 18"
1007
+ },
1008
+ "funding": {
1009
+ "type": "opencollective",
1010
+ "url": "https://opencollective.com/express"
1011
+ }
1012
+ },
1013
+ "node_modules/serve-static": {
1014
+ "version": "2.2.1",
1015
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
1016
+ "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
1017
+ "license": "MIT",
1018
+ "dependencies": {
1019
+ "encodeurl": "^2.0.0",
1020
+ "escape-html": "^1.0.3",
1021
+ "parseurl": "^1.3.3",
1022
+ "send": "^1.2.0"
1023
+ },
1024
+ "engines": {
1025
+ "node": ">= 18"
1026
+ },
1027
+ "funding": {
1028
+ "type": "opencollective",
1029
+ "url": "https://opencollective.com/express"
1030
+ }
1031
+ },
1032
+ "node_modules/setprototypeof": {
1033
+ "version": "1.2.0",
1034
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1035
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
1036
+ "license": "ISC"
1037
+ },
1038
+ "node_modules/side-channel": {
1039
+ "version": "1.1.0",
1040
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
1041
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
1042
+ "license": "MIT",
1043
+ "dependencies": {
1044
+ "es-errors": "^1.3.0",
1045
+ "object-inspect": "^1.13.3",
1046
+ "side-channel-list": "^1.0.0",
1047
+ "side-channel-map": "^1.0.1",
1048
+ "side-channel-weakmap": "^1.0.2"
1049
+ },
1050
+ "engines": {
1051
+ "node": ">= 0.4"
1052
+ },
1053
+ "funding": {
1054
+ "url": "https://github.com/sponsors/ljharb"
1055
+ }
1056
+ },
1057
+ "node_modules/side-channel-list": {
1058
+ "version": "1.0.0",
1059
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
1060
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
1061
+ "license": "MIT",
1062
+ "dependencies": {
1063
+ "es-errors": "^1.3.0",
1064
+ "object-inspect": "^1.13.3"
1065
+ },
1066
+ "engines": {
1067
+ "node": ">= 0.4"
1068
+ },
1069
+ "funding": {
1070
+ "url": "https://github.com/sponsors/ljharb"
1071
+ }
1072
+ },
1073
+ "node_modules/side-channel-map": {
1074
+ "version": "1.0.1",
1075
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
1076
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
1077
+ "license": "MIT",
1078
+ "dependencies": {
1079
+ "call-bound": "^1.0.2",
1080
+ "es-errors": "^1.3.0",
1081
+ "get-intrinsic": "^1.2.5",
1082
+ "object-inspect": "^1.13.3"
1083
+ },
1084
+ "engines": {
1085
+ "node": ">= 0.4"
1086
+ },
1087
+ "funding": {
1088
+ "url": "https://github.com/sponsors/ljharb"
1089
+ }
1090
+ },
1091
+ "node_modules/side-channel-weakmap": {
1092
+ "version": "1.0.2",
1093
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
1094
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
1095
+ "license": "MIT",
1096
+ "dependencies": {
1097
+ "call-bound": "^1.0.2",
1098
+ "es-errors": "^1.3.0",
1099
+ "get-intrinsic": "^1.2.5",
1100
+ "object-inspect": "^1.13.3",
1101
+ "side-channel-map": "^1.0.1"
1102
+ },
1103
+ "engines": {
1104
+ "node": ">= 0.4"
1105
+ },
1106
+ "funding": {
1107
+ "url": "https://github.com/sponsors/ljharb"
1108
+ }
1109
+ },
1110
+ "node_modules/statuses": {
1111
+ "version": "2.0.2",
1112
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
1113
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
1114
+ "license": "MIT",
1115
+ "engines": {
1116
+ "node": ">= 0.8"
1117
+ }
1118
+ },
1119
+ "node_modules/toidentifier": {
1120
+ "version": "1.0.1",
1121
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1122
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1123
+ "license": "MIT",
1124
+ "engines": {
1125
+ "node": ">=0.6"
1126
+ }
1127
+ },
1128
+ "node_modules/type-is": {
1129
+ "version": "2.0.1",
1130
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
1131
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
1132
+ "license": "MIT",
1133
+ "dependencies": {
1134
+ "content-type": "^1.0.5",
1135
+ "media-typer": "^1.1.0",
1136
+ "mime-types": "^3.0.0"
1137
+ },
1138
+ "engines": {
1139
+ "node": ">= 0.6"
1140
+ }
1141
+ },
1142
+ "node_modules/unpipe": {
1143
+ "version": "1.0.0",
1144
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1145
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1146
+ "license": "MIT",
1147
+ "engines": {
1148
+ "node": ">= 0.8"
1149
+ }
1150
+ },
1151
+ "node_modules/vary": {
1152
+ "version": "1.1.2",
1153
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1154
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1155
+ "license": "MIT",
1156
+ "engines": {
1157
+ "node": ">= 0.8"
1158
+ }
1159
+ },
1160
+ "node_modules/web-streams-polyfill": {
1161
+ "version": "3.3.3",
1162
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
1163
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
1164
+ "license": "MIT",
1165
+ "engines": {
1166
+ "node": ">= 8"
1167
+ }
1168
+ },
1169
+ "node_modules/wrappy": {
1170
+ "version": "1.0.2",
1171
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1172
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
1173
+ "license": "ISC"
1174
+ }
1175
+ }
1176
+ }
package.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "rollybeans-backend",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "keywords": [],
9
+ "author": "",
10
+ "license": "ISC",
11
+ "description": "",
12
+ "dependencies": {
13
+ "cors": "^2.8.6",
14
+ "dotenv": "^17.3.1",
15
+ "express": "^5.2.1",
16
+ "google-auth-library": "^10.6.2",
17
+ "google-spreadsheet": "^5.2.0"
18
+ }
19
+ }