, document.getElementById(\"app\"));"
97 | }
98 | ```
99 |
100 | The REPL endpoint supports authenticated REPL and anonymous creation. Since anonymous REPLs have no user associated this API issues a special token keyed to the REPL record. This token is only issued on record creation and can never be retrieved afterwards. The token is to be supplied during update/patching of the REPL record in the future.
101 |
102 | #### List [GET] /repl?{&limit}{&offset}{&asc}
103 |
104 | #### List User REPLs [GET] /repl/[:githubHandle]/?{&limit}{&offset}{&asc}
105 |
106 | Returns a list of REPLs owned by the current user. The endpoint is paginated and can potentially support filters. The List and List User REPLs endpoints work the same. If the user requests/repl/davedbase it will show only that users public list.
107 |
108 | ```json
109 | {
110 | "total": 1,
111 | "list": [
112 | {
113 | "id": "77aa5eec-19bd-471c-8b49-bd11a07c6544",
114 | "title": "Counter Example",
115 | "labels": ["examples", "basic"],
116 | "files": [],
117 | "version": "1.0",
118 | "public": true,
119 | "size": 54,
120 | "created_at": "2022-04-13T15:09:54.671307+00:00",
121 | "updated_at": null
122 | }
123 | ]
124 | }
125 | ```
126 |
127 | #### Create [POST] /repl
128 |
129 | Creates a new REPL record for the user. The REPL creation endpoint supports anonymous content as well. When a user token isn't supplied the service will create the record without any user association and return a `write_token` property. This may be used in place of the Bearer token in the `PATCH` and `PUT` endpoints.
130 |
131 | Request:
132 |
133 | ```json
134 | {
135 | "title": "Counter Example",
136 | "version": "1.0",
137 | "public": true,
138 | "labels": ["examples", "basic"],
139 | "files": []
140 | }
141 | ```
142 |
143 | Response:
144 |
145 | ```json
146 | {
147 | "id": "77aa5eec-19bd-471c-8b49-bd11a07c6547"
148 | }
149 | ```
150 |
151 | #### Transfer [POST] /repl/[:id]/transfer
152 |
153 | Transfers a REPL from one user to another. Transfers of anonymous REPLs are also by supplying a write_token. The following example shows a request with a token.
154 |
155 | Request:
156 |
157 | ```json
158 | {
159 | "write_token": "...."
160 | }
161 | ```
162 |
163 | Response:
164 |
165 | ```json
166 | {}
167 | ```
168 |
169 | #### Update [PUT] /repl/[:id]
170 |
171 | Update a new REPL record for the user. This endpoint accepts `write_token` in the body in place of the Bearer token if an anonymous REPL is to be edited. This token is issued on REPL creation.
172 |
173 | Request:
174 |
175 | ```json
176 | {
177 | "title": "Counter Example",
178 | "version": "1.0",
179 | "public": true,
180 | "labels": ["examples", "basic"],
181 | "files": []
182 | }
183 | ```
184 |
185 | Response:
186 |
187 | ```json
188 | {
189 | "id": "77aa5eec-19bd-471c-8b49-bd11a07c6547"
190 | }
191 | ```
192 |
193 | #### Retrieve [GET] /repl/[:id]
194 |
195 | Retrieves a REPL based on the UUID.
196 |
197 | ```json
198 | {
199 | "title": "Counter Example",
200 | "user_id": "DDQ6VDKNlcjExNjgzOTc=",
201 | "version": "1.0",
202 | "labels": ["examples", "basic"],
203 | "public": true,
204 | "files": [],
205 | "created_at": "2022-04-15T16:41:24.918092+00:00",
206 | "updated_at": null
207 | }
208 | ```
209 |
210 | #### Delete [DELETE] /repl/[:id]
211 |
212 | Delets a REPL based on the UUID. Successful deletions will return a status 200. Note that the service uses soft deletes. They are not retrievable via the API but are marked in the database itself.
213 |
214 | ### Solidex
215 |
216 | #### List [GET] /solidex/[:type]
217 |
218 | Retrieves a full list of Solid ecosystem packages. The type property can currently be `packages` or `resources`.
219 |
220 | ```json
221 | [
222 | {
223 | "author": "Maksim Ivanov",
224 | "author_url": "https://www.youtube.com/user/satansdeer1",
225 | "categories": ["educational"],
226 | "description": "Maksim Ivanov walks us through Solid.js and how to use it.",
227 | "keywords": [""],
228 | "link": "https://www.youtube.com/watch?v=wu6HvLoi9VQ",
229 | "published_at": 1628532062000,
230 | "title": "How To Convert React Application To SolidJS",
231 | "type": "video"
232 | }
233 | ]
234 | ```
235 |
236 | #### Submit [GET] /solidex
237 |
238 | Allows an external user to submit a new Solidex entry for approval. This endpoint is not fully complete and will return only dummy data. It's request body looks like the following, it's return result should be a record UUID.
239 |
240 | ```json
241 | {
242 | "author": "Maksim Ivanov",
243 | "author_url": "https://www.youtube.com/user/satansdeer1",
244 | "categories": ["educational"],
245 | "description": "Maksim Ivanov walks us through Solid.js and how to use it.",
246 | "keywords": [""],
247 | "link": "https://www.youtube.com/watch?v=wu6HvLoi9VQ",
248 | "published_at": 1628532062000,
249 | "title": "How To Convert React Application To SolidJS",
250 | "type": "video"
251 | }
252 | ```
253 |
254 | ## Changelog
255 |
256 | ### Version 1.0.1 (April 15, 2022)
257 |
258 | - Ability to have public/private REPL storage
259 | - Added validation for REPL file format (based on our original .json structure)
260 | - Adjusted get endpoint to return public REPL without auth token
261 |
262 | ### Version 1.0.9 (October 6, 2022)
263 |
264 | - Added anonymous REPL creation + write_token for patch and update
265 |
266 | ### Version 1.0.10 (October 15, 2022)
267 |
268 | - Improved error responses for invalid token/user on write update/patch
269 | - Added REPL transfer mechanism
270 |
271 | ## TO-Do & Ideas
272 |
273 | - [x] Add better validation for certain endpoints
274 | - [x] Parse and validate REPLs with more granular detail (refer to Solid REPL output)
275 | - [x] Private/public mode for REPL
276 | - [x] Retrieve public REPLs
277 | - [x] Add endpoint for requesting other user REPLs
278 | - [x] Anonymous REPL creation
279 | - [x] Transfer REPLs between users
280 | - [ ] Handle request where application/json isn't sent as body type
281 | - [ ] Make REPL searchable
282 | - [ ] Add revision history and ability to retrieve
283 | - [ ] Add ability to fork a REPL
284 | - [ ] Enable user blocking options
285 | - [ ] Add ability to save REPL to a gist
286 | - [ ] Add ability to create a repository of an example
287 | - [ ] Move REPL packaging and zipping to the API
288 |
289 | ## Contributors
290 |
291 | A special thank you to to Christian Hansen [ch99q](https://github.com/ch99q) for initially setting up the foundations of this project and sorting out the Stytch integration. A big thank you to M. Bagher Abiat [Aslemammad](https://github.com/Aslemammad) who made vite-plugin-cloudflare which is one of the best utilities we've seen for working with Cloudflare.
292 |
--------------------------------------------------------------------------------
/api.postman_collection.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "_postman_id": "d8e46ece-6e20-4114-a9d7-bfbb42801d00",
4 | "name": "Solid Services API",
5 | "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
6 | "_exporter_id": "19697305"
7 | },
8 | "item": [
9 | {
10 | "name": "Get Profile",
11 | "request": {
12 | "method": "GET",
13 | "header": [
14 | {
15 | "key": "Authorization",
16 | "value": "Bearer {{token}}",
17 | "type": "text"
18 | }
19 | ],
20 | "url": {
21 | "raw": "localhost:8787/profile",
22 | "host": [
23 | "localhost"
24 | ],
25 | "port": "8787",
26 | "path": [
27 | "profile"
28 | ]
29 | }
30 | },
31 | "response": []
32 | },
33 | {
34 | "name": "Create REPL",
35 | "request": {
36 | "method": "POST",
37 | "header": [
38 | {
39 | "key": "Authorization",
40 | "value": "Bearer {{token}}",
41 | "type": "text"
42 | },
43 | {
44 | "key": "Content-Type",
45 | "value": "application/json",
46 | "type": "text"
47 | }
48 | ],
49 | "body": {
50 | "mode": "raw",
51 | "raw": "{\n \"title\": \"Counting Component\",\n \"version\": \"1.0\",\n \"public\": true,\n \"labels\": [\n \"counting\",\n \"example\"\n ],\n \"files\": [\n {\n \"name\": \"main.tsx\",\n \"content\": \"import { createSignal, onCleanup } from \\\"solid-js\\\";\\r\\nimport { render } from \\\"solid-js\\/web\\\";\\r\\n\\r\\nconst CountingComponent = () => {\\r\\n\\tconst [count, setCount] = createSignal(0);\\r\\n\\tconst interval = setInterval(\\r\\n\\t\\t() => setCount(c => c + 1),\\r\\n\\t\\t1000\\r\\n\\t);\\r\\n\\tonCleanup(() => clearInterval(interval));\\r\\n\\treturn
Count value is {count()}<\\/div>;\\r\\n};\\r\\n\\r\\nrender(() =>
, document.getElementById(\\\"app\\\"));\"\n \n }\n ]\n}",
52 | "options": {
53 | "raw": {
54 | "language": "json"
55 | }
56 | }
57 | },
58 | "url": {
59 | "raw": "localhost:8787/repl",
60 | "host": [
61 | "localhost"
62 | ],
63 | "port": "8787",
64 | "path": [
65 | "repl"
66 | ]
67 | }
68 | },
69 | "response": []
70 | },
71 | {
72 | "name": "List REPLs",
73 | "protocolProfileBehavior": {
74 | "disableBodyPruning": true
75 | },
76 | "request": {
77 | "method": "GET",
78 | "header": [
79 | {
80 | "key": "Authorization",
81 | "value": "Bearer {{token}}",
82 | "type": "text"
83 | },
84 | {
85 | "key": "Content-Type",
86 | "value": "application/json",
87 | "type": "text"
88 | }
89 | ],
90 | "body": {
91 | "mode": "raw",
92 | "raw": "{\n \"title\": \"My repl name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
93 | "options": {
94 | "raw": {
95 | "language": "json"
96 | }
97 | }
98 | },
99 | "url": {
100 | "raw": "localhost:8787/repl",
101 | "host": [
102 | "localhost"
103 | ],
104 | "port": "8787",
105 | "path": [
106 | "repl"
107 | ]
108 | }
109 | },
110 | "response": []
111 | },
112 | {
113 | "name": "List Public User REPLs",
114 | "protocolProfileBehavior": {
115 | "disableBodyPruning": true
116 | },
117 | "request": {
118 | "method": "GET",
119 | "header": [
120 | {
121 | "key": "Content-Type",
122 | "value": "application/json",
123 | "type": "text"
124 | }
125 | ],
126 | "body": {
127 | "mode": "raw",
128 | "raw": "{\n \"title\": \"My repl name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
129 | "options": {
130 | "raw": {
131 | "language": "json"
132 | }
133 | }
134 | },
135 | "url": {
136 | "raw": "localhost:8787/repl/davedbase/list",
137 | "host": [
138 | "localhost"
139 | ],
140 | "port": "8787",
141 | "path": [
142 | "repl",
143 | "davedbase",
144 | "list"
145 | ]
146 | }
147 | },
148 | "response": []
149 | },
150 | {
151 | "name": "Put REPLs",
152 | "request": {
153 | "method": "PUT",
154 | "header": [
155 | {
156 | "key": "Authorization",
157 | "value": "Bearer {{token}}",
158 | "type": "text"
159 | },
160 | {
161 | "key": "Content-Type",
162 | "value": "application/json",
163 | "type": "text"
164 | }
165 | ],
166 | "body": {
167 | "mode": "raw",
168 | "raw": "{\n \"title\": \"Counting Component\",\n \"version\": \"1.0\",\n \"public\": true,\n \"labels\": [\n \"counting\",\n \"example\"\n ],\n \"files\": [\n {\n \"name\": \"main.tsx\",\n \"content\": [\n \"import { createSignal, onCleanup } from \\\"solid-js\\\";\",\n \"import { render } from \\\"solid-js/web\\\";\",\n \"\",\n \"const CountingComponent = () => {\",\n \"\\tconst [count, setCount] = createSignal(0);\",\n \"\\tconst interval = setInterval(\",\n \"\\t\\t() => setCount(c => c + 1),\",\n \"\\t\\t1000\",\n \"\\t);\",\n \"\\tonCleanup(() => clearInterval(interval));\",\n \"\\treturn
Count value is {count()}
;\",\n \"};\",\n \"\",\n \"render(() =>
, document.getElementById(\\\"app\\\"));\"\n ]\n }\n ]\n}",
169 | "options": {
170 | "raw": {
171 | "language": "json"
172 | }
173 | }
174 | },
175 | "url": {
176 | "raw": "localhost:8787/repl/ae7ad0bc-3fc1-4eb8-bdf7-a024aa5a1e80",
177 | "host": [
178 | "localhost"
179 | ],
180 | "port": "8787",
181 | "path": [
182 | "repl",
183 | "ae7ad0bc-3fc1-4eb8-bdf7-a024aa5a1e80"
184 | ]
185 | }
186 | },
187 | "response": []
188 | },
189 | {
190 | "name": "Delete REPL",
191 | "request": {
192 | "method": "DELETE",
193 | "header": [
194 | {
195 | "key": "Authorization",
196 | "value": "Bearer {{token}}",
197 | "type": "text"
198 | },
199 | {
200 | "key": "Content-Type",
201 | "value": "application/json",
202 | "type": "text"
203 | }
204 | ],
205 | "body": {
206 | "mode": "raw",
207 | "raw": "{\n \"title\": \"My repl Create a new name name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
208 | "options": {
209 | "raw": {
210 | "language": "json"
211 | }
212 | }
213 | },
214 | "url": {
215 | "raw": "localhost:8787/repl/d5943629-3fcc-4984-9fa7-f273d766f847",
216 | "host": [
217 | "localhost"
218 | ],
219 | "port": "8787",
220 | "path": [
221 | "repl",
222 | "d5943629-3fcc-4984-9fa7-f273d766f847"
223 | ]
224 | }
225 | },
226 | "response": []
227 | },
228 | {
229 | "name": "Get REPL",
230 | "protocolProfileBehavior": {
231 | "disableBodyPruning": true
232 | },
233 | "request": {
234 | "method": "GET",
235 | "header": [
236 | {
237 | "key": "Authorization",
238 | "value": "Bearer {{token}}",
239 | "type": "text"
240 | },
241 | {
242 | "key": "Content-Type",
243 | "value": "application/json",
244 | "type": "text"
245 | }
246 | ],
247 | "body": {
248 | "mode": "raw",
249 | "raw": "{\n \"title\": \"My repl Create a new name name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
250 | "options": {
251 | "raw": {
252 | "language": "json"
253 | }
254 | }
255 | },
256 | "url": {
257 | "raw": "localhost:8787/repl/ae7ad0bc-3fc1-4eb8-bdf7-a024aa5a1e80",
258 | "host": [
259 | "localhost"
260 | ],
261 | "port": "8787",
262 | "path": [
263 | "repl",
264 | "ae7ad0bc-3fc1-4eb8-bdf7-a024aa5a1e80"
265 | ]
266 | }
267 | },
268 | "response": []
269 | },
270 | {
271 | "name": "Get Public REPL",
272 | "protocolProfileBehavior": {
273 | "disableBodyPruning": true
274 | },
275 | "request": {
276 | "method": "GET",
277 | "header": [
278 | {
279 | "key": "Content-Type",
280 | "value": "application/json",
281 | "type": "text"
282 | }
283 | ],
284 | "body": {
285 | "mode": "raw",
286 | "raw": "{\n \"title\": \"My repl Create a new name name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
287 | "options": {
288 | "raw": {
289 | "language": "json"
290 | }
291 | }
292 | },
293 | "url": {
294 | "raw": "localhost:8787/repl/ae7ad0bc-3fc1-4eb8-bdf7-a024aa5a1e80",
295 | "host": [
296 | "localhost"
297 | ],
298 | "port": "8787",
299 | "path": [
300 | "repl",
301 | "ae7ad0bc-3fc1-4eb8-bdf7-a024aa5a1e80"
302 | ]
303 | }
304 | },
305 | "response": []
306 | },
307 | {
308 | "name": "Status",
309 | "protocolProfileBehavior": {
310 | "disableBodyPruning": true
311 | },
312 | "request": {
313 | "method": "GET",
314 | "header": [
315 | {
316 | "key": "Authorization",
317 | "value": "Bearer {{token}}",
318 | "type": "text"
319 | },
320 | {
321 | "key": "Content-Type",
322 | "value": "application/json",
323 | "type": "text"
324 | }
325 | ],
326 | "body": {
327 | "mode": "raw",
328 | "raw": "{\n \"title\": \"My repl Create a new name name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
329 | "options": {
330 | "raw": {
331 | "language": "json"
332 | }
333 | }
334 | },
335 | "url": {
336 | "raw": "localhost:8787/status",
337 | "host": [
338 | "localhost"
339 | ],
340 | "port": "8787",
341 | "path": [
342 | "status"
343 | ]
344 | }
345 | },
346 | "response": []
347 | },
348 | {
349 | "name": "Solidex Links",
350 | "protocolProfileBehavior": {
351 | "disableBodyPruning": true
352 | },
353 | "request": {
354 | "method": "GET",
355 | "header": [
356 | {
357 | "key": "Authorization",
358 | "value": "Bearer {{token}}",
359 | "type": "text"
360 | },
361 | {
362 | "key": "Content-Type",
363 | "value": "application/json",
364 | "type": "text"
365 | }
366 | ],
367 | "body": {
368 | "mode": "raw",
369 | "raw": "{\n \"title\": \"My repl name\",\n \"labels\": [\"test\", \"test\", \"test\"],\n \"data\": \"sdfkshjdfkjshdfkjhsdkjfhskjdfhskjdhfksjdhfkjsdhfkjshdf\"\n}",
370 | "options": {
371 | "raw": {
372 | "language": "json"
373 | }
374 | }
375 | },
376 | "url": {
377 | "raw": "localhost:8787/solidex/links?url=https://dev.to/this-is-learning/patterns-for-building-javascript-websites-in-2022-5a93",
378 | "host": [
379 | "localhost"
380 | ],
381 | "port": "8787",
382 | "path": [
383 | "solidex",
384 | "links"
385 | ],
386 | "query": [
387 | {
388 | "key": "url",
389 | "value": "https://dev.to/this-is-learning/patterns-for-building-javascript-websites-in-2022-5a93"
390 | }
391 | ]
392 | }
393 | },
394 | "response": []
395 | },
396 | {
397 | "name": "Solidex Submit",
398 | "request": {
399 | "method": "POST",
400 | "header": [
401 | {
402 | "key": "Authorization",
403 | "value": "Bearer {{token}}",
404 | "type": "text"
405 | },
406 | {
407 | "key": "Content-Type",
408 | "value": "application/json",
409 | "type": "text"
410 | }
411 | ],
412 | "body": {
413 | "mode": "raw",
414 | "raw": "{\n \"title\": \"Test\",\n \"link\": \"https://www.youtube.com\",\n \"author\": \"David\",\n \"author_url\": \"https://www.david.com\",\n \"description\": \"Hello\",\n \"type\": \"article\",\n \"categories\": [\"starters\"],\n \"keywords\": [\"test\"],\n \"official\": false,\n \"published_at\": 1654926042000\n}",
415 | "options": {
416 | "raw": {
417 | "language": "json"
418 | }
419 | }
420 | },
421 | "url": {
422 | "raw": "localhost:8787/solidex",
423 | "host": [
424 | "localhost"
425 | ],
426 | "port": "8787",
427 | "path": [
428 | "solidex"
429 | ]
430 | }
431 | },
432 | "response": []
433 | }
434 | ]
435 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "solid-service-api",
3 | "version": "1.0.5",
4 | "main": "dist/worker.js",
5 | "description": "Source code that powers api.solidjs.com.",
6 | "private": true,
7 | "contributors": [
8 | {
9 | "name": "David Di Biase (davedbase)",
10 | "url": "https://github.com/davedbase"
11 | },
12 | {
13 | "name": "Christian Hansen (ch99q)",
14 | "url": "https://github.com/ch99q"
15 | }
16 | ],
17 | "scripts": {
18 | "dev": "miniflare --live-reload --watch --verbose",
19 | "build": "tsc && vpc build -m src/worker.ts dist/worker.js",
20 | "test": "echo \"Error: no test specified\" && exit 1",
21 | "format": "prettier --write '**/*.{ts,css,json,md}'",
22 | "deploy": "wrangler publish dist/worker.js"
23 | },
24 | "devDependencies": {
25 | "@cloudflare/workers-types": "^3.11.0",
26 | "@miniflare/kv": "^2.5.0",
27 | "@types/cookie": "^0.5.1",
28 | "@types/itty-router-extras": "^0.4.0",
29 | "@types/jsonwebtoken": "^8.5.8",
30 | "@types/uuid": "^8.3.4",
31 | "miniflare": "^2.5.0",
32 | "prettier": "^2.6.2",
33 | "typescript": "^4.7.3",
34 | "vite": "^2.9.12",
35 | "vite-plugin-cloudflare": "^0.1.3"
36 | },
37 | "dependencies": {
38 | "@amoutonbrady/lz-string": "^0.0.1",
39 | "@octokit/core": "^3.6.0",
40 | "@solid.js/solidex": "^1.0.0",
41 | "@supabase/supabase-js": "^1.35.3",
42 | "@tsndr/cloudflare-worker-jwt": "^1.4.2",
43 | "cheerio": "^1.0.0-rc.11",
44 | "cookie": "^0.5.0",
45 | "fetch": "^1.1.0",
46 | "itty-router": "^2.6.6",
47 | "itty-router-extras": "^0.4.2",
48 | "metascraper": "^5.29.8",
49 | "octokit-plugin-create-pull-request": "^3.11.0",
50 | "uuid": "^8.3.2",
51 | "wrangler": "^2.1.10",
52 | "zod": "^3.17.3"
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@amoutonbrady/lz-string': ^0.0.1
5 | '@cloudflare/workers-types': ^3.11.0
6 | '@miniflare/kv': ^2.5.0
7 | '@octokit/core': ^3.6.0
8 | '@solid.js/solidex': ^1.0.0
9 | '@supabase/supabase-js': ^1.35.3
10 | '@tsndr/cloudflare-worker-jwt': ^1.4.2
11 | '@types/cookie': ^0.5.1
12 | '@types/itty-router-extras': ^0.4.0
13 | '@types/jsonwebtoken': ^8.5.8
14 | '@types/uuid': ^8.3.4
15 | cheerio: ^1.0.0-rc.11
16 | cookie: ^0.5.0
17 | fetch: ^1.1.0
18 | itty-router: ^2.6.6
19 | itty-router-extras: ^0.4.2
20 | metascraper: ^5.29.8
21 | miniflare: ^2.5.0
22 | octokit-plugin-create-pull-request: ^3.11.0
23 | prettier: ^2.6.2
24 | typescript: ^4.7.3
25 | uuid: ^8.3.2
26 | vite: ^2.9.12
27 | vite-plugin-cloudflare: ^0.1.3
28 | wrangler: ^2.1.10
29 | zod: ^3.17.3
30 |
31 | dependencies:
32 | '@amoutonbrady/lz-string': 0.0.1
33 | '@octokit/core': 3.6.0
34 | '@solid.js/solidex': 1.0.0
35 | '@supabase/supabase-js': 1.35.7
36 | '@tsndr/cloudflare-worker-jwt': 1.4.4
37 | cheerio: 1.0.0-rc.12
38 | cookie: 0.5.0
39 | fetch: 1.1.0
40 | itty-router: 2.6.6
41 | itty-router-extras: 0.4.2
42 | metascraper: 5.31.1
43 | octokit-plugin-create-pull-request: 3.13.1
44 | uuid: 8.3.2
45 | wrangler: 2.1.11
46 | zod: 3.19.1
47 |
48 | devDependencies:
49 | '@cloudflare/workers-types': 3.17.0
50 | '@miniflare/kv': 2.10.0
51 | '@types/cookie': 0.5.1
52 | '@types/itty-router-extras': 0.4.0
53 | '@types/jsonwebtoken': 8.5.9
54 | '@types/uuid': 8.3.4
55 | miniflare: 2.10.0
56 | prettier: 2.7.1
57 | typescript: 4.8.4
58 | vite: 2.9.15
59 | vite-plugin-cloudflare: 0.1.3_avsti35k5pvcdqpmrtlurw25nu
60 |
61 | packages:
62 |
63 | /@amoutonbrady/lz-string/0.0.1:
64 | resolution: {integrity: sha512-crH4ovRiiTg9y1lDTEtMwTdD4s/aYoz4EemUD3p+9GvHMOeJ3tUXQ/DQM1Mw9/wc9Od4jG97w0m9+gZmLysGFQ==}
65 | dev: false
66 |
67 | /@cloudflare/kv-asset-handler/0.2.0:
68 | resolution: {integrity: sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==}
69 | dependencies:
70 | mime: 3.0.0
71 | dev: false
72 |
73 | /@cloudflare/workers-types/3.17.0:
74 | resolution: {integrity: sha512-u0cUQ4ntWFFwn5jx0ETa2ItvwvfOMjyaKF2fX2vFVujrSgNES/PnvRzPAhdt9CMYAMidInm0MGkIjxHRsFBaeg==}
75 | dev: true
76 |
77 | /@esbuild-plugins/node-globals-polyfill/0.1.1_esbuild@0.14.51:
78 | resolution: {integrity: sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==}
79 | peerDependencies:
80 | esbuild: '*'
81 | dependencies:
82 | esbuild: 0.14.51
83 | dev: false
84 |
85 | /@esbuild-plugins/node-modules-polyfill/0.1.4_esbuild@0.14.51:
86 | resolution: {integrity: sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==}
87 | peerDependencies:
88 | esbuild: '*'
89 | dependencies:
90 | esbuild: 0.14.51
91 | escape-string-regexp: 4.0.0
92 | rollup-plugin-node-polyfills: 0.2.1
93 | dev: false
94 |
95 | /@esbuild/linux-loong64/0.14.54:
96 | resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
97 | engines: {node: '>=12'}
98 | cpu: [loong64]
99 | os: [linux]
100 | requiresBuild: true
101 | dev: true
102 | optional: true
103 |
104 | /@gar/promisify/1.1.3:
105 | resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
106 | dev: false
107 |
108 | /@iarna/toml/2.2.5:
109 | resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
110 |
111 | /@metascraper/helpers/5.31.1:
112 | resolution: {integrity: sha512-sf38YSf8HL41+7hzvMJM+fzUeoZabpBSNEKD6qnyGh8RNZs59pqLbsT2aNEOpYdaGrej+nlpNTyjQGFH3ViimQ==}
113 | engines: {node: '>= 12'}
114 | dependencies:
115 | audio-extensions: 0.0.0
116 | chrono-node: 2.4.1
117 | condense-whitespace: 2.0.0
118 | entities: 4.4.0
119 | file-extension: 4.0.5
120 | has-values: 2.0.1
121 | image-extensions: 1.1.0
122 | is-relative-url: 3.0.0
123 | is-uri: 1.2.4
124 | iso-639-3: 2.2.0
125 | isostring: 0.0.1
126 | jsdom: 20.0.1
127 | lodash: 4.17.21
128 | memoize-one: 6.0.0
129 | microsoft-capitalize: 1.0.5
130 | mime: 3.0.0
131 | normalize-url: 6.1.0
132 | re2: 1.17.7
133 | smartquotes: 2.3.2
134 | url-regex-safe: 3.0.0_re2@1.17.7
135 | video-extensions: 1.2.0
136 | transitivePeerDependencies:
137 | - bluebird
138 | - bufferutil
139 | - canvas
140 | - supports-color
141 | - utf-8-validate
142 | dev: false
143 |
144 | /@miniflare/cache/2.10.0:
145 | resolution: {integrity: sha512-nzEqFVPnD7Yf0HMDv7gCPpf4NSXfjhc+zg3gSwUS4Dad5bWV10B1ujTZW6HxQulW3CBHIg616mTjXIiaimVuEQ==}
146 | engines: {node: '>=16.13'}
147 | dependencies:
148 | '@miniflare/core': 2.10.0
149 | '@miniflare/shared': 2.10.0
150 | http-cache-semantics: 4.1.0
151 | undici: 5.9.1
152 | dev: true
153 |
154 | /@miniflare/cache/2.9.0:
155 | resolution: {integrity: sha512-lriPxUEva9TJ01vU9P7pI60s3SsFnb4apWkNwZ+D7CRqyXPipSbapY8BWI2FUIwkEG7xap6UhzeTS76NettCXQ==}
156 | engines: {node: '>=16.13'}
157 | dependencies:
158 | '@miniflare/core': 2.9.0
159 | '@miniflare/shared': 2.9.0
160 | http-cache-semantics: 4.1.0
161 | undici: 5.9.1
162 | dev: false
163 |
164 | /@miniflare/cli-parser/2.10.0:
165 | resolution: {integrity: sha512-NAiCtqlHTUKCmV+Jl9af+ixGmMhiGhIyIfr/vCdbismNEBxEsrQGg3sQYTNfvCkdHtODurQqayQreFq21OuEow==}
166 | engines: {node: '>=16.13'}
167 | dependencies:
168 | '@miniflare/shared': 2.10.0
169 | kleur: 4.1.5
170 | dev: true
171 |
172 | /@miniflare/cli-parser/2.9.0:
173 | resolution: {integrity: sha512-gu8Z7NWNcYw6514/yOvajaj3GmebRucx+EEt3p1vKirO+gvFgKAt/puyUN3p7u8ZZmLuLF/B+wVnH3lj8BWKlg==}
174 | engines: {node: '>=16.13'}
175 | dependencies:
176 | '@miniflare/shared': 2.9.0
177 | kleur: 4.1.5
178 | dev: false
179 |
180 | /@miniflare/core/2.10.0:
181 | resolution: {integrity: sha512-Jx1M5oXQua0jzsJVdZSq07baVRmGC/6JkglrPQGAlZ7gQ1sunVZzq9fjxFqj0bqfEuYS0Wy6+lvK4rOAHISIjw==}
182 | engines: {node: '>=16.13'}
183 | dependencies:
184 | '@iarna/toml': 2.2.5
185 | '@miniflare/queues': 2.10.0
186 | '@miniflare/shared': 2.10.0
187 | '@miniflare/watcher': 2.10.0
188 | busboy: 1.6.0
189 | dotenv: 10.0.0
190 | kleur: 4.1.5
191 | set-cookie-parser: 2.5.1
192 | undici: 5.9.1
193 | urlpattern-polyfill: 4.0.3
194 | dev: true
195 |
196 | /@miniflare/core/2.9.0:
197 | resolution: {integrity: sha512-QqSwF6oHvgrFvN5lnrLc6EEagFlZWW+UMU8QdrE8305cNGHrIOxKCA2nte4PVFZUVw/Ts13a0tVhUk3a2fAyxQ==}
198 | engines: {node: '>=16.13'}
199 | dependencies:
200 | '@iarna/toml': 2.2.5
201 | '@miniflare/queues': 2.9.0
202 | '@miniflare/shared': 2.9.0
203 | '@miniflare/watcher': 2.9.0
204 | busboy: 1.6.0
205 | dotenv: 10.0.0
206 | kleur: 4.1.5
207 | set-cookie-parser: 2.5.1
208 | undici: 5.9.1
209 | urlpattern-polyfill: 4.0.3
210 | dev: false
211 |
212 | /@miniflare/d1/2.10.0:
213 | resolution: {integrity: sha512-mOYZSmpTthH0tmFTQ+O9G0Q+iDAd7oiUtoIBianlKa9QiqYAoO7EBUPy6kUgDHXapOcN5Ri1u3J5UTpxXvw3qg==}
214 | engines: {node: '>=16.7'}
215 | dependencies:
216 | '@miniflare/core': 2.10.0
217 | '@miniflare/shared': 2.10.0
218 | dev: true
219 |
220 | /@miniflare/d1/2.9.0:
221 | resolution: {integrity: sha512-swK9nzxw1SvVh/4cH3bRR1SBuHQU/YsB8WvuHojxufmgviAD1xhms3XO3rkpAzfKoGM5Oy6DovMe0xUXV/GS0w==}
222 | engines: {node: '>=16.7'}
223 | dependencies:
224 | '@miniflare/core': 2.9.0
225 | '@miniflare/shared': 2.9.0
226 | dev: false
227 |
228 | /@miniflare/durable-objects/2.10.0:
229 | resolution: {integrity: sha512-gU45f52gveFtCasm0ixYnt0mHI1lHrPomtmF+89oZGKBzOqUfO5diDs6wmoRSnovOWZCwtmwQGRoorAQN7AmoA==}
230 | engines: {node: '>=16.13'}
231 | dependencies:
232 | '@miniflare/core': 2.10.0
233 | '@miniflare/shared': 2.10.0
234 | '@miniflare/storage-memory': 2.10.0
235 | undici: 5.9.1
236 | dev: true
237 |
238 | /@miniflare/durable-objects/2.9.0:
239 | resolution: {integrity: sha512-7uTvfEUXS7xqwrsWOwWrFUuKc4EiMpVkAWPeYGLB/0TJaJ6N+sZMpYYymdW79TQwPIDfgtpfkIy93MRydqpnrw==}
240 | engines: {node: '>=16.13'}
241 | dependencies:
242 | '@miniflare/core': 2.9.0
243 | '@miniflare/shared': 2.9.0
244 | '@miniflare/storage-memory': 2.9.0
245 | undici: 5.9.1
246 | dev: false
247 |
248 | /@miniflare/html-rewriter/2.10.0:
249 | resolution: {integrity: sha512-hCdG99L8+Ros4dn3B5H37PlQPBH0859EoRslzNTd4jzGIkwdiawpJvrvesL8056GjbUjeJN1zh7OPBRuMgyGLw==}
250 | engines: {node: '>=16.13'}
251 | dependencies:
252 | '@miniflare/core': 2.10.0
253 | '@miniflare/shared': 2.10.0
254 | html-rewriter-wasm: 0.4.1
255 | undici: 5.9.1
256 | dev: true
257 |
258 | /@miniflare/html-rewriter/2.9.0:
259 | resolution: {integrity: sha512-K5OB70PtkMo7M+tU46s/cX/j/qtjD9AlJ0hecYswrxVsfrT/YWyrCQJevmShFfJ92h7jPNigbeC3Od3JiVb6QA==}
260 | engines: {node: '>=16.13'}
261 | dependencies:
262 | '@miniflare/core': 2.9.0
263 | '@miniflare/shared': 2.9.0
264 | html-rewriter-wasm: 0.4.1
265 | undici: 5.9.1
266 | dev: false
267 |
268 | /@miniflare/http-server/2.10.0:
269 | resolution: {integrity: sha512-cm6hwkONucll93yoY8dteMp//Knvmb7n6zAgeHrtuNYKn//lAL6bRY//VLTttrMmfWxZFi1C7WpOeCv8Mn6/ug==}
270 | engines: {node: '>=16.13'}
271 | dependencies:
272 | '@miniflare/core': 2.10.0
273 | '@miniflare/shared': 2.10.0
274 | '@miniflare/web-sockets': 2.10.0
275 | kleur: 4.1.5
276 | selfsigned: 2.1.1
277 | undici: 5.9.1
278 | ws: 8.9.0
279 | youch: 2.2.2
280 | transitivePeerDependencies:
281 | - bufferutil
282 | - utf-8-validate
283 | dev: true
284 |
285 | /@miniflare/http-server/2.9.0:
286 | resolution: {integrity: sha512-IVJMkFfMpecq9WiCTvATEKhMuKPK9fMs2E6zmgexaefr3u1VlNtj2QxBxoPUXkT9xMJQlT5sSKstlRR1XKDz9Q==}
287 | engines: {node: '>=16.13'}
288 | dependencies:
289 | '@miniflare/core': 2.9.0
290 | '@miniflare/shared': 2.9.0
291 | '@miniflare/web-sockets': 2.9.0
292 | kleur: 4.1.5
293 | selfsigned: 2.1.1
294 | undici: 5.9.1
295 | ws: 8.9.0
296 | youch: 2.2.2
297 | transitivePeerDependencies:
298 | - bufferutil
299 | - utf-8-validate
300 | dev: false
301 |
302 | /@miniflare/kv/2.10.0:
303 | resolution: {integrity: sha512-3+u1lO77FnlS0lQ6b1VgM1E/ZgQ/zy/FU+SdBG5LUOIiv3x522VYHOApeJLnSEo0KtZUB22Ni0fWQM6DgpaREg==}
304 | engines: {node: '>=16.13'}
305 | dependencies:
306 | '@miniflare/shared': 2.10.0
307 | dev: true
308 |
309 | /@miniflare/kv/2.9.0:
310 | resolution: {integrity: sha512-EqG51okY5rDtgjYs2Ny6j6IUVdTlJzDjwBKBIuW+wOV9NsAAzEchKVdYAXc8CyxvkggpYX481HydTD2OzK3INQ==}
311 | engines: {node: '>=16.13'}
312 | dependencies:
313 | '@miniflare/shared': 2.9.0
314 | dev: false
315 |
316 | /@miniflare/queues/2.10.0:
317 | resolution: {integrity: sha512-WKdO6qI9rfS96KlCjazzPFf+qj6DPov4vONyf18+jzbRjRJh/xwWSk1/1h5A+gDPwVNG8TsNRPh9DW5OKBGNjw==}
318 | engines: {node: '>=16.7'}
319 | dependencies:
320 | '@miniflare/shared': 2.10.0
321 | dev: true
322 |
323 | /@miniflare/queues/2.9.0:
324 | resolution: {integrity: sha512-cAHWIlLF57rxQaJl19AzXw1k0SOM/uLTlx8r2PylHajZ/RRSs7CkCox3oKA6E5zKyfyxk2M64bmsAFZ9RCA0gw==}
325 | engines: {node: '>=16.7'}
326 | dependencies:
327 | '@miniflare/shared': 2.9.0
328 | dev: false
329 |
330 | /@miniflare/r2/2.10.0:
331 | resolution: {integrity: sha512-uC1CCWbwM1t8DdpZgrveg6+CkZLfTq+wUMqs20BC5rCT8u8UyRv6ZVRQ7pTPiswLyt1oYDTXsZJK7tjV0U0zew==}
332 | engines: {node: '>=16.13'}
333 | dependencies:
334 | '@miniflare/shared': 2.10.0
335 | undici: 5.9.1
336 | dev: true
337 |
338 | /@miniflare/r2/2.9.0:
339 | resolution: {integrity: sha512-aMFWxxciAE3YsVok2OLy3A7hP5+2j/NaK7txmadgoe1CA8HYZyNuvv7v6bn8HKM5gWnJdT8sk4yEbMbBQ7Jv/A==}
340 | engines: {node: '>=16.13'}
341 | dependencies:
342 | '@miniflare/shared': 2.9.0
343 | undici: 5.9.1
344 | dev: false
345 |
346 | /@miniflare/runner-vm/2.10.0:
347 | resolution: {integrity: sha512-oTsHitQdQ1B1kT3G/6n9AEXsMd/sT1D8tLGzc7Xr79ZrxYxwRO0ATF3cdkxk4dUjUqg/RUqvOJV4YjJGyqvctg==}
348 | engines: {node: '>=16.13'}
349 | dependencies:
350 | '@miniflare/shared': 2.10.0
351 | dev: true
352 |
353 | /@miniflare/runner-vm/2.9.0:
354 | resolution: {integrity: sha512-vewP+Fy7Czb261GmB9x/YtQkoDs/QP9B5LbP0YfJ35bI2C2j940eJLm8JP72IHV7ILtWNOqMc3Ure8uAbpf9NQ==}
355 | engines: {node: '>=16.13'}
356 | dependencies:
357 | '@miniflare/shared': 2.9.0
358 | dev: false
359 |
360 | /@miniflare/scheduler/2.10.0:
361 | resolution: {integrity: sha512-eGt2cZFE/yo585nT8xINQwdbTotZfeRIh6FUWmZkbva1i5SW0zTiOojr5a95vAGBF3TzwWGsUuzJpLhBB69a/g==}
362 | engines: {node: '>=16.13'}
363 | dependencies:
364 | '@miniflare/core': 2.10.0
365 | '@miniflare/shared': 2.10.0
366 | cron-schedule: 3.0.6
367 | dev: true
368 |
369 | /@miniflare/scheduler/2.9.0:
370 | resolution: {integrity: sha512-eodSCGkJYi4Z+Imbx/bNScDfDSt5HOypVSYjbFHj+hA2aNOdkGw6a1b6mzwx49jJD3GadIkonZAKD0S114yWMA==}
371 | engines: {node: '>=16.13'}
372 | dependencies:
373 | '@miniflare/core': 2.9.0
374 | '@miniflare/shared': 2.9.0
375 | cron-schedule: 3.0.6
376 | dev: false
377 |
378 | /@miniflare/shared/2.10.0:
379 | resolution: {integrity: sha512-GDSweEhJ3nNtStGm6taZGUNytM0QTQ/sjZSedAKyF1/aHRaZUcD9cuKAMgIbSpKfvgGdLMNS7Bhd8jb249TO7g==}
380 | engines: {node: '>=16.13'}
381 | dependencies:
382 | '@types/better-sqlite3': 7.6.2
383 | kleur: 4.1.5
384 | npx-import: 1.1.4
385 | picomatch: 2.3.1
386 | dev: true
387 |
388 | /@miniflare/shared/2.9.0:
389 | resolution: {integrity: sha512-5Ew/Ph0cHDQqKvOlmN70kz+qZW0hdgE9fQBStKLY3vDYhnBEhopbCUChSS+FCcL7WtxVJJVE7iB6J09NQTnQ/A==}
390 | engines: {node: '>=16.13'}
391 | dependencies:
392 | '@types/better-sqlite3': 7.6.2
393 | kleur: 4.1.5
394 | npx-import: 1.1.4
395 | picomatch: 2.3.1
396 | dev: false
397 |
398 | /@miniflare/sites/2.10.0:
399 | resolution: {integrity: sha512-1NVAT6+JS2OubL+pOOR5E/6MMddxQHWMi/yIDSumyyfXmj7Sm7n5dE1FvNPetggMP4f8+AjoyT9AYvdd1wkspQ==}
400 | engines: {node: '>=16.13'}
401 | dependencies:
402 | '@miniflare/kv': 2.10.0
403 | '@miniflare/shared': 2.10.0
404 | '@miniflare/storage-file': 2.10.0
405 | dev: true
406 |
407 | /@miniflare/sites/2.9.0:
408 | resolution: {integrity: sha512-+tWf7znxSQqXWGzPup8Xqkl8EmLmx+HaLC+UBtWPNnaJZrsjbbVxKwHpmGIdm+wZasEGfQk/82R21gUs9wdZnw==}
409 | engines: {node: '>=16.13'}
410 | dependencies:
411 | '@miniflare/kv': 2.9.0
412 | '@miniflare/shared': 2.9.0
413 | '@miniflare/storage-file': 2.9.0
414 | dev: false
415 |
416 | /@miniflare/storage-file/2.10.0:
417 | resolution: {integrity: sha512-K/cRIWiTl4+Z+VO6tl4VfuYXA3NLJgvGPV+BCRYD7uTKuPYHqDMErtD1BI1I7nc3WJhwIXfzJrAR3XXhSKKWQQ==}
418 | engines: {node: '>=16.13'}
419 | dependencies:
420 | '@miniflare/shared': 2.10.0
421 | '@miniflare/storage-memory': 2.10.0
422 | dev: true
423 |
424 | /@miniflare/storage-file/2.9.0:
425 | resolution: {integrity: sha512-HZHtHfJaLoDzQFddoIMcDGgAJ3/Nee98gwUYusQam7rj9pbEXnWmk54dzjzsDlkQpB/3MBFQNbtN5Bj1NIt0pg==}
426 | engines: {node: '>=16.13'}
427 | dependencies:
428 | '@miniflare/shared': 2.9.0
429 | '@miniflare/storage-memory': 2.9.0
430 | dev: false
431 |
432 | /@miniflare/storage-memory/2.10.0:
433 | resolution: {integrity: sha512-ZATU+qZtJ9yG0umgTrOEUi9SU//YyDb8nYXMgqT4JHODYA3RTz1SyyiQSOOz589upJPdu1LN+0j8W24WGRwwxQ==}
434 | engines: {node: '>=16.13'}
435 | dependencies:
436 | '@miniflare/shared': 2.10.0
437 | dev: true
438 |
439 | /@miniflare/storage-memory/2.9.0:
440 | resolution: {integrity: sha512-p2yrr0omQhv6teDbdzhdBKzoQAFmUBMLEx+PtrO7CJHX15ICD08/pFAFAp96IcljNwZZDchU20Z3AcbldMj6Tw==}
441 | engines: {node: '>=16.13'}
442 | dependencies:
443 | '@miniflare/shared': 2.9.0
444 | dev: false
445 |
446 | /@miniflare/watcher/2.10.0:
447 | resolution: {integrity: sha512-X9CFYYyszfSYDzs07KhbWC2i08Dpyh3D60fPonYZcoZAfa5h9eATHUdRGvNCdax7awYp4b8bvU8upAI//OPlMg==}
448 | engines: {node: '>=16.13'}
449 | dependencies:
450 | '@miniflare/shared': 2.10.0
451 | dev: true
452 |
453 | /@miniflare/watcher/2.9.0:
454 | resolution: {integrity: sha512-Yqz8Q1He/2chebXvmCft8sMamuUiDQ4FIn0bwiF0+GBP2vvGCmy6SejXZY4ZD4REluPqQSis3CLKcIOWlHnIsw==}
455 | engines: {node: '>=16.13'}
456 | dependencies:
457 | '@miniflare/shared': 2.9.0
458 | dev: false
459 |
460 | /@miniflare/web-sockets/2.10.0:
461 | resolution: {integrity: sha512-W+PrapdQqNEEFeD+amENgPQWcETGDp7OEh6JAoSzCRhHA0OoMe8DG0xb5a5+2FjGW/J7FFKsv84wkURpmFT4dQ==}
462 | engines: {node: '>=16.13'}
463 | dependencies:
464 | '@miniflare/core': 2.10.0
465 | '@miniflare/shared': 2.10.0
466 | undici: 5.9.1
467 | ws: 8.9.0
468 | transitivePeerDependencies:
469 | - bufferutil
470 | - utf-8-validate
471 | dev: true
472 |
473 | /@miniflare/web-sockets/2.9.0:
474 | resolution: {integrity: sha512-Nob9e84m78qeQCka6OQf/JdNOmMkKCkX+i3rg+TYKSSITiMVuyzWp3vz3Ma184lAZiLg44lxBF4ZzENEdi99Kg==}
475 | engines: {node: '>=16.13'}
476 | dependencies:
477 | '@miniflare/core': 2.9.0
478 | '@miniflare/shared': 2.9.0
479 | undici: 5.9.1
480 | ws: 8.9.0
481 | transitivePeerDependencies:
482 | - bufferutil
483 | - utf-8-validate
484 | dev: false
485 |
486 | /@npmcli/fs/2.1.2:
487 | resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==}
488 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
489 | dependencies:
490 | '@gar/promisify': 1.1.3
491 | semver: 7.3.8
492 | dev: false
493 |
494 | /@npmcli/move-file/2.0.1:
495 | resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==}
496 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
497 | dependencies:
498 | mkdirp: 1.0.4
499 | rimraf: 3.0.2
500 | dev: false
501 |
502 | /@octokit/auth-token/2.5.0:
503 | resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==}
504 | dependencies:
505 | '@octokit/types': 6.41.0
506 | dev: false
507 |
508 | /@octokit/core/3.6.0:
509 | resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==}
510 | dependencies:
511 | '@octokit/auth-token': 2.5.0
512 | '@octokit/graphql': 4.8.0
513 | '@octokit/request': 5.6.3
514 | '@octokit/request-error': 2.1.0
515 | '@octokit/types': 6.41.0
516 | before-after-hook: 2.2.3
517 | universal-user-agent: 6.0.0
518 | transitivePeerDependencies:
519 | - encoding
520 | dev: false
521 |
522 | /@octokit/endpoint/6.0.12:
523 | resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==}
524 | dependencies:
525 | '@octokit/types': 6.41.0
526 | is-plain-object: 5.0.0
527 | universal-user-agent: 6.0.0
528 | dev: false
529 |
530 | /@octokit/graphql/4.8.0:
531 | resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==}
532 | dependencies:
533 | '@octokit/request': 5.6.3
534 | '@octokit/types': 6.41.0
535 | universal-user-agent: 6.0.0
536 | transitivePeerDependencies:
537 | - encoding
538 | dev: false
539 |
540 | /@octokit/openapi-types/12.11.0:
541 | resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==}
542 | dev: false
543 |
544 | /@octokit/request-error/2.1.0:
545 | resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==}
546 | dependencies:
547 | '@octokit/types': 6.41.0
548 | deprecation: 2.3.1
549 | once: 1.4.0
550 | dev: false
551 |
552 | /@octokit/request/5.6.3:
553 | resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==}
554 | dependencies:
555 | '@octokit/endpoint': 6.0.12
556 | '@octokit/request-error': 2.1.0
557 | '@octokit/types': 6.41.0
558 | is-plain-object: 5.0.0
559 | node-fetch: 2.6.7
560 | universal-user-agent: 6.0.0
561 | transitivePeerDependencies:
562 | - encoding
563 | dev: false
564 |
565 | /@octokit/types/6.41.0:
566 | resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==}
567 | dependencies:
568 | '@octokit/openapi-types': 12.11.0
569 | dev: false
570 |
571 | /@solid.js/solidex/1.0.0:
572 | resolution: {integrity: sha512-XinpUK6UImdNT1bkd3FneWd2hsEBDkmRS4J8erSwGKfq4JuPucpgM0sprVrM1ZRUasbn2ZkACAZS+vneipBzLg==}
573 | dependencies:
574 | global: 4.4.0
575 | dev: false
576 |
577 | /@supabase/functions-js/1.3.4:
578 | resolution: {integrity: sha512-yYVgkECjv7IZEBKBI3EB5Q7R1p0FJ10g8Q9N7SWKIHUU6i6DnbEGHIMFLyQRm1hmiNWD8fL7bRVEYacmTRJhHw==}
579 | dependencies:
580 | cross-fetch: 3.1.5
581 | transitivePeerDependencies:
582 | - encoding
583 | dev: false
584 |
585 | /@supabase/gotrue-js/1.24.0:
586 | resolution: {integrity: sha512-6PVv7mHCFOxLm6TSBfR7hsq/y3CMKpvzePVR+ZWtlFBTjJ2J87g2OYE9bgC61P5TNeZopUXKw93H92yz0MTALw==}
587 | dependencies:
588 | cross-fetch: 3.1.5
589 | transitivePeerDependencies:
590 | - encoding
591 | dev: false
592 |
593 | /@supabase/postgrest-js/0.37.4:
594 | resolution: {integrity: sha512-x+c2rk1fz9s6f1PrGxCJ0QTUgXPDI0G3ngIqD5sSiXhhCyfl8Q5V92mXl2EYtlDhkiUkjFNrOZFhXVbXOHgvDw==}
595 | dependencies:
596 | cross-fetch: 3.1.5
597 | transitivePeerDependencies:
598 | - encoding
599 | dev: false
600 |
601 | /@supabase/realtime-js/1.7.5:
602 | resolution: {integrity: sha512-nXuoxt7NE1NTI+G8WBim1K2gkUC8YE3e9evBUG+t6xwd9Sq+sSOrjcE0qJ8/Y631BCnLzlhX6yhFYQFh1oQDOg==}
603 | dependencies:
604 | '@types/phoenix': 1.5.4
605 | websocket: 1.0.34
606 | transitivePeerDependencies:
607 | - supports-color
608 | dev: false
609 |
610 | /@supabase/storage-js/1.7.3:
611 | resolution: {integrity: sha512-jnIZWqOc9TGclOozgX9v/RWGFCgJAyW/yvmauexgRZhWknUXoA4b2i8tj7vfwE0WTvNRuA5JpXID98rfJeSG7Q==}
612 | dependencies:
613 | cross-fetch: 3.1.5
614 | transitivePeerDependencies:
615 | - encoding
616 | dev: false
617 |
618 | /@supabase/supabase-js/1.35.7:
619 | resolution: {integrity: sha512-X+qCzmj5sH0dozagbLoK7LzysBaWoivO0gsAUAPPBQkQupQWuBfaOqG18gKhlfL0wp2PL888QzhQNScp/IwUfA==}
620 | dependencies:
621 | '@supabase/functions-js': 1.3.4
622 | '@supabase/gotrue-js': 1.24.0
623 | '@supabase/postgrest-js': 0.37.4
624 | '@supabase/realtime-js': 1.7.5
625 | '@supabase/storage-js': 1.7.3
626 | transitivePeerDependencies:
627 | - encoding
628 | - supports-color
629 | dev: false
630 |
631 | /@tootallnate/once/2.0.0:
632 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
633 | engines: {node: '>= 10'}
634 | dev: false
635 |
636 | /@tsndr/cloudflare-worker-jwt/1.4.4:
637 | resolution: {integrity: sha512-6mIfAsB06bw1ittXsXgluXExcOqWyB6IsPg36rsrTWjwcudLnXXgVaxgdZ8SEGDO6sZ+lhTtD6JRiTU7O+yIKA==}
638 | dev: false
639 |
640 | /@types/better-sqlite3/7.6.2:
641 | resolution: {integrity: sha512-RgmaapusqTq6IMAr4McMyAsC6RshYTCjXCnzwVV59WctUxC8bNPyUfT9t5F81lKcU41lLurhjqjoMHfauzfqGg==}
642 | dependencies:
643 | '@types/node': 18.11.0
644 |
645 | /@types/cookie/0.5.1:
646 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
647 | dev: true
648 |
649 | /@types/itty-router-extras/0.4.0:
650 | resolution: {integrity: sha512-IcXmXB8vVbjWy4McZjKzo+3sdQyzMpyHi5mQ4iViu6yX9cS/SVlGR+6H/AgzfG32svaQJeOhl2gfXYwf1AKEgg==}
651 | dependencies:
652 | itty-router: 2.6.6
653 | dev: true
654 |
655 | /@types/jsonwebtoken/8.5.9:
656 | resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==}
657 | dependencies:
658 | '@types/node': 18.11.0
659 | dev: true
660 |
661 | /@types/node/18.11.0:
662 | resolution: {integrity: sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w==}
663 |
664 | /@types/phoenix/1.5.4:
665 | resolution: {integrity: sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==}
666 | dev: false
667 |
668 | /@types/stack-trace/0.0.29:
669 | resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==}
670 |
671 | /@types/uuid/8.3.4:
672 | resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
673 | dev: true
674 |
675 | /abab/2.0.6:
676 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
677 | dev: false
678 |
679 | /abbrev/1.1.1:
680 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
681 | dev: false
682 |
683 | /abstract-leveldown/0.12.4:
684 | resolution: {integrity: sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==}
685 | dependencies:
686 | xtend: 3.0.0
687 | dev: true
688 |
689 | /acorn-globals/7.0.1:
690 | resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
691 | dependencies:
692 | acorn: 8.8.0
693 | acorn-walk: 8.2.0
694 | dev: false
695 |
696 | /acorn-walk/8.2.0:
697 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
698 | engines: {node: '>=0.4.0'}
699 | dev: false
700 |
701 | /acorn/5.7.4:
702 | resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==}
703 | engines: {node: '>=0.4.0'}
704 | hasBin: true
705 | dev: true
706 |
707 | /acorn/8.8.0:
708 | resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==}
709 | engines: {node: '>=0.4.0'}
710 | hasBin: true
711 | dev: false
712 |
713 | /agent-base/6.0.2:
714 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
715 | engines: {node: '>= 6.0.0'}
716 | dependencies:
717 | debug: 4.3.4
718 | transitivePeerDependencies:
719 | - supports-color
720 | dev: false
721 |
722 | /agentkeepalive/4.2.1:
723 | resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==}
724 | engines: {node: '>= 8.0.0'}
725 | dependencies:
726 | debug: 4.3.4
727 | depd: 1.1.2
728 | humanize-ms: 1.2.1
729 | transitivePeerDependencies:
730 | - supports-color
731 | dev: false
732 |
733 | /aggregate-error/3.1.0:
734 | resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
735 | engines: {node: '>=8'}
736 | dependencies:
737 | clean-stack: 2.2.0
738 | indent-string: 4.0.0
739 | dev: false
740 |
741 | /ansi-regex/5.0.1:
742 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
743 | engines: {node: '>=8'}
744 | dev: false
745 |
746 | /anymatch/3.1.2:
747 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
748 | engines: {node: '>= 8'}
749 | dependencies:
750 | normalize-path: 3.0.0
751 | picomatch: 2.3.1
752 | dev: false
753 |
754 | /aproba/2.0.0:
755 | resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
756 | dev: false
757 |
758 | /are-we-there-yet/3.0.1:
759 | resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
760 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
761 | dependencies:
762 | delegates: 1.0.0
763 | readable-stream: 3.6.0
764 | dev: false
765 |
766 | /asn1.js/5.4.1:
767 | resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
768 | dependencies:
769 | bn.js: 4.12.0
770 | inherits: 2.0.4
771 | minimalistic-assert: 1.0.1
772 | safer-buffer: 2.1.2
773 | dev: true
774 |
775 | /asynckit/0.4.0:
776 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
777 | dev: false
778 |
779 | /audio-extensions/0.0.0:
780 | resolution: {integrity: sha512-yj9C819u3ED3/OyRd9mLKMXGy8wsElaf6bkkv6OqZEKrNAT461TjiznS4IfPBy8Mmh6DWaXCQCVYSq3+VHkpjQ==}
781 | engines: {node: '>=0.10.0'}
782 | dev: false
783 |
784 | /balanced-match/1.0.2:
785 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
786 | dev: false
787 |
788 | /before-after-hook/2.2.3:
789 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
790 | dev: false
791 |
792 | /binary-extensions/2.2.0:
793 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
794 | engines: {node: '>=8'}
795 | dev: false
796 |
797 | /biskviit/1.0.1:
798 | resolution: {integrity: sha512-VGCXdHbdbpEkFgtjkeoBN8vRlbj1ZRX2/mxhE8asCCRalUx2nBzOomLJv8Aw/nRt5+ccDb+tPKidg4XxcfGW4w==}
799 | engines: {node: '>=1.0.0'}
800 | dependencies:
801 | psl: 1.9.0
802 | dev: false
803 |
804 | /bl/0.8.2:
805 | resolution: {integrity: sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==}
806 | dependencies:
807 | readable-stream: 1.0.34
808 | dev: true
809 |
810 | /blake3-wasm/2.1.5:
811 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
812 | dev: false
813 |
814 | /bn.js/4.12.0:
815 | resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
816 | dev: true
817 |
818 | /bn.js/5.2.1:
819 | resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
820 | dev: true
821 |
822 | /boolbase/1.0.0:
823 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
824 | dev: false
825 |
826 | /brace-expansion/1.1.11:
827 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
828 | dependencies:
829 | balanced-match: 1.0.2
830 | concat-map: 0.0.1
831 | dev: false
832 |
833 | /brace-expansion/2.0.1:
834 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
835 | dependencies:
836 | balanced-match: 1.0.2
837 | dev: false
838 |
839 | /braces/3.0.2:
840 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
841 | engines: {node: '>=8'}
842 | dependencies:
843 | fill-range: 7.0.1
844 | dev: false
845 |
846 | /brorand/1.1.0:
847 | resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
848 | dev: true
849 |
850 | /browserify-aes/1.2.0:
851 | resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
852 | dependencies:
853 | buffer-xor: 1.0.3
854 | cipher-base: 1.0.4
855 | create-hash: 1.2.0
856 | evp_bytestokey: 1.0.3
857 | inherits: 2.0.4
858 | safe-buffer: 5.2.1
859 | dev: true
860 |
861 | /browserify-cipher/1.0.1:
862 | resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
863 | dependencies:
864 | browserify-aes: 1.2.0
865 | browserify-des: 1.0.2
866 | evp_bytestokey: 1.0.3
867 | dev: true
868 |
869 | /browserify-des/1.0.2:
870 | resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
871 | dependencies:
872 | cipher-base: 1.0.4
873 | des.js: 1.0.1
874 | inherits: 2.0.4
875 | safe-buffer: 5.2.1
876 | dev: true
877 |
878 | /browserify-fs/1.0.0:
879 | resolution: {integrity: sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==}
880 | dependencies:
881 | level-filesystem: 1.2.0
882 | level-js: 2.2.4
883 | levelup: 0.18.6
884 | dev: true
885 |
886 | /browserify-rsa/4.1.0:
887 | resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==}
888 | dependencies:
889 | bn.js: 5.2.1
890 | randombytes: 2.1.0
891 | dev: true
892 |
893 | /browserify-sign/4.2.1:
894 | resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==}
895 | dependencies:
896 | bn.js: 5.2.1
897 | browserify-rsa: 4.1.0
898 | create-hash: 1.2.0
899 | create-hmac: 1.1.7
900 | elliptic: 6.5.4
901 | inherits: 2.0.4
902 | parse-asn1: 5.1.6
903 | readable-stream: 3.6.0
904 | safe-buffer: 5.2.1
905 | dev: true
906 |
907 | /buffer-es6/4.9.3:
908 | resolution: {integrity: sha512-Ibt+oXxhmeYJSsCkODPqNpPmyegefiD8rfutH1NYGhMZQhSp95Rz7haemgnJ6dxa6LT+JLLbtgOMORRluwKktw==}
909 | dev: true
910 |
911 | /buffer-from/1.1.2:
912 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
913 |
914 | /buffer-xor/1.0.3:
915 | resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
916 | dev: true
917 |
918 | /bufferutil/4.0.6:
919 | resolution: {integrity: sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==}
920 | engines: {node: '>=6.14.2'}
921 | requiresBuild: true
922 | dependencies:
923 | node-gyp-build: 4.5.0
924 | dev: false
925 |
926 | /builtin-status-codes/3.0.0:
927 | resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
928 | dev: true
929 |
930 | /builtins/5.0.1:
931 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
932 | dependencies:
933 | semver: 7.3.8
934 |
935 | /busboy/1.6.0:
936 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
937 | engines: {node: '>=10.16.0'}
938 | dependencies:
939 | streamsearch: 1.1.0
940 |
941 | /cac/6.7.14:
942 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
943 | engines: {node: '>=8'}
944 | dev: true
945 |
946 | /cacache/16.1.3:
947 | resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==}
948 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
949 | dependencies:
950 | '@npmcli/fs': 2.1.2
951 | '@npmcli/move-file': 2.0.1
952 | chownr: 2.0.0
953 | fs-minipass: 2.1.0
954 | glob: 8.0.3
955 | infer-owner: 1.0.4
956 | lru-cache: 7.14.0
957 | minipass: 3.3.4
958 | minipass-collect: 1.0.2
959 | minipass-flush: 1.0.5
960 | minipass-pipeline: 1.2.4
961 | mkdirp: 1.0.4
962 | p-map: 4.0.0
963 | promise-inflight: 1.0.1
964 | rimraf: 3.0.2
965 | ssri: 9.0.1
966 | tar: 6.1.11
967 | unique-filename: 2.0.1
968 | transitivePeerDependencies:
969 | - bluebird
970 | dev: false
971 |
972 | /cheerio-select/2.1.0:
973 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
974 | dependencies:
975 | boolbase: 1.0.0
976 | css-select: 5.1.0
977 | css-what: 6.1.0
978 | domelementtype: 2.3.0
979 | domhandler: 5.0.3
980 | domutils: 3.0.1
981 | dev: false
982 |
983 | /cheerio/1.0.0-rc.12:
984 | resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
985 | engines: {node: '>= 6'}
986 | dependencies:
987 | cheerio-select: 2.1.0
988 | dom-serializer: 2.0.0
989 | domhandler: 5.0.3
990 | domutils: 3.0.1
991 | htmlparser2: 8.0.1
992 | parse5: 7.1.1
993 | parse5-htmlparser2-tree-adapter: 7.0.0
994 | dev: false
995 |
996 | /chokidar/3.5.3:
997 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
998 | engines: {node: '>= 8.10.0'}
999 | dependencies:
1000 | anymatch: 3.1.2
1001 | braces: 3.0.2
1002 | glob-parent: 5.1.2
1003 | is-binary-path: 2.1.0
1004 | is-glob: 4.0.3
1005 | normalize-path: 3.0.0
1006 | readdirp: 3.6.0
1007 | optionalDependencies:
1008 | fsevents: 2.3.2
1009 | dev: false
1010 |
1011 | /chownr/2.0.0:
1012 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
1013 | engines: {node: '>=10'}
1014 | dev: false
1015 |
1016 | /chrono-node/2.4.1:
1017 | resolution: {integrity: sha512-23lqpMF2i0lr6dAVpVyYmvVGgX/EtkHBEIgFUd6LQiP7CHLzYeROYvl5X59ZBK73KAV+FGPo4rQv0Fym8CIktw==}
1018 | dependencies:
1019 | dayjs: 1.11.5
1020 | dev: false
1021 |
1022 | /cipher-base/1.0.4:
1023 | resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
1024 | dependencies:
1025 | inherits: 2.0.4
1026 | safe-buffer: 5.2.1
1027 | dev: true
1028 |
1029 | /clean-stack/2.2.0:
1030 | resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
1031 | engines: {node: '>=6'}
1032 | dev: false
1033 |
1034 | /clean-stack/3.0.1:
1035 | resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==}
1036 | engines: {node: '>=10'}
1037 | dependencies:
1038 | escape-string-regexp: 4.0.0
1039 | dev: false
1040 |
1041 | /clone/0.1.19:
1042 | resolution: {integrity: sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==}
1043 | dev: true
1044 |
1045 | /color-support/1.1.3:
1046 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
1047 | hasBin: true
1048 | dev: false
1049 |
1050 | /combined-stream/1.0.8:
1051 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
1052 | engines: {node: '>= 0.8'}
1053 | dependencies:
1054 | delayed-stream: 1.0.0
1055 | dev: false
1056 |
1057 | /concat-map/0.0.1:
1058 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1059 | dev: false
1060 |
1061 | /concat-stream/1.6.2:
1062 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
1063 | engines: {'0': node >= 0.8}
1064 | dependencies:
1065 | buffer-from: 1.1.2
1066 | inherits: 2.0.4
1067 | readable-stream: 2.3.7
1068 | typedarray: 0.0.6
1069 | dev: true
1070 |
1071 | /condense-whitespace/2.0.0:
1072 | resolution: {integrity: sha512-Ath9o58/0rxZXbyoy3zZgrVMoIemi30sukG/btuMKCLyqfQt3dNOWc9N3EHEMa2Q3i0tXQPDJluYFLwy7pJuQw==}
1073 | engines: {node: '>=8'}
1074 | dev: false
1075 |
1076 | /console-control-strings/1.1.0:
1077 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
1078 | dev: false
1079 |
1080 | /cookie/0.4.2:
1081 | resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
1082 | engines: {node: '>= 0.6'}
1083 |
1084 | /cookie/0.5.0:
1085 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
1086 | engines: {node: '>= 0.6'}
1087 | dev: false
1088 |
1089 | /core-util-is/1.0.3:
1090 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
1091 | dev: true
1092 |
1093 | /create-ecdh/4.0.4:
1094 | resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
1095 | dependencies:
1096 | bn.js: 4.12.0
1097 | elliptic: 6.5.4
1098 | dev: true
1099 |
1100 | /create-hash/1.2.0:
1101 | resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
1102 | dependencies:
1103 | cipher-base: 1.0.4
1104 | inherits: 2.0.4
1105 | md5.js: 1.3.5
1106 | ripemd160: 2.0.2
1107 | sha.js: 2.4.11
1108 | dev: true
1109 |
1110 | /create-hmac/1.1.7:
1111 | resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
1112 | dependencies:
1113 | cipher-base: 1.0.4
1114 | create-hash: 1.2.0
1115 | inherits: 2.0.4
1116 | ripemd160: 2.0.2
1117 | safe-buffer: 5.2.1
1118 | sha.js: 2.4.11
1119 | dev: true
1120 |
1121 | /cron-schedule/3.0.6:
1122 | resolution: {integrity: sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==}
1123 |
1124 | /cross-fetch/3.1.5:
1125 | resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==}
1126 | dependencies:
1127 | node-fetch: 2.6.7
1128 | transitivePeerDependencies:
1129 | - encoding
1130 | dev: false
1131 |
1132 | /cross-spawn/7.0.3:
1133 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1134 | engines: {node: '>= 8'}
1135 | dependencies:
1136 | path-key: 3.1.1
1137 | shebang-command: 2.0.0
1138 | which: 2.0.2
1139 |
1140 | /crypto-browserify/3.12.0:
1141 | resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
1142 | dependencies:
1143 | browserify-cipher: 1.0.1
1144 | browserify-sign: 4.2.1
1145 | create-ecdh: 4.0.4
1146 | create-hash: 1.2.0
1147 | create-hmac: 1.1.7
1148 | diffie-hellman: 5.0.3
1149 | inherits: 2.0.4
1150 | pbkdf2: 3.1.2
1151 | public-encrypt: 4.0.3
1152 | randombytes: 2.1.0
1153 | randomfill: 1.0.4
1154 | dev: true
1155 |
1156 | /css-select/5.1.0:
1157 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
1158 | dependencies:
1159 | boolbase: 1.0.0
1160 | css-what: 6.1.0
1161 | domhandler: 5.0.3
1162 | domutils: 3.0.1
1163 | nth-check: 2.1.1
1164 | dev: false
1165 |
1166 | /css-what/6.1.0:
1167 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
1168 | engines: {node: '>= 6'}
1169 | dev: false
1170 |
1171 | /cssom/0.3.8:
1172 | resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
1173 | dev: false
1174 |
1175 | /cssom/0.5.0:
1176 | resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
1177 | dev: false
1178 |
1179 | /cssstyle/2.3.0:
1180 | resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
1181 | engines: {node: '>=8'}
1182 | dependencies:
1183 | cssom: 0.3.8
1184 | dev: false
1185 |
1186 | /d/1.0.1:
1187 | resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
1188 | dependencies:
1189 | es5-ext: 0.10.62
1190 | type: 1.2.0
1191 | dev: false
1192 |
1193 | /data-urls/3.0.2:
1194 | resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
1195 | engines: {node: '>=12'}
1196 | dependencies:
1197 | abab: 2.0.6
1198 | whatwg-mimetype: 3.0.0
1199 | whatwg-url: 11.0.0
1200 | dev: false
1201 |
1202 | /dayjs/1.11.5:
1203 | resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==}
1204 | dev: false
1205 |
1206 | /debug/2.6.9:
1207 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
1208 | peerDependencies:
1209 | supports-color: '*'
1210 | peerDependenciesMeta:
1211 | supports-color:
1212 | optional: true
1213 | dependencies:
1214 | ms: 2.0.0
1215 | dev: false
1216 |
1217 | /debug/4.3.4:
1218 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1219 | engines: {node: '>=6.0'}
1220 | peerDependencies:
1221 | supports-color: '*'
1222 | peerDependenciesMeta:
1223 | supports-color:
1224 | optional: true
1225 | dependencies:
1226 | ms: 2.1.2
1227 | dev: false
1228 |
1229 | /decimal.js/10.4.2:
1230 | resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==}
1231 | dev: false
1232 |
1233 | /deep-is/0.1.4:
1234 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1235 | dev: false
1236 |
1237 | /deferred-leveldown/0.2.0:
1238 | resolution: {integrity: sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==}
1239 | dependencies:
1240 | abstract-leveldown: 0.12.4
1241 | dev: true
1242 |
1243 | /delayed-stream/1.0.0:
1244 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
1245 | engines: {node: '>=0.4.0'}
1246 | dev: false
1247 |
1248 | /delegates/1.0.0:
1249 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
1250 | dev: false
1251 |
1252 | /depd/1.1.2:
1253 | resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
1254 | engines: {node: '>= 0.6'}
1255 | dev: false
1256 |
1257 | /deprecation/2.3.1:
1258 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
1259 | dev: false
1260 |
1261 | /des.js/1.0.1:
1262 | resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==}
1263 | dependencies:
1264 | inherits: 2.0.4
1265 | minimalistic-assert: 1.0.1
1266 | dev: true
1267 |
1268 | /diffie-hellman/5.0.3:
1269 | resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
1270 | dependencies:
1271 | bn.js: 4.12.0
1272 | miller-rabin: 4.0.1
1273 | randombytes: 2.1.0
1274 | dev: true
1275 |
1276 | /dom-serializer/2.0.0:
1277 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
1278 | dependencies:
1279 | domelementtype: 2.3.0
1280 | domhandler: 5.0.3
1281 | entities: 4.4.0
1282 | dev: false
1283 |
1284 | /dom-walk/0.1.2:
1285 | resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
1286 | dev: false
1287 |
1288 | /domelementtype/2.3.0:
1289 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
1290 | dev: false
1291 |
1292 | /domexception/4.0.0:
1293 | resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
1294 | engines: {node: '>=12'}
1295 | dependencies:
1296 | webidl-conversions: 7.0.0
1297 | dev: false
1298 |
1299 | /domhandler/5.0.3:
1300 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
1301 | engines: {node: '>= 4'}
1302 | dependencies:
1303 | domelementtype: 2.3.0
1304 | dev: false
1305 |
1306 | /domutils/3.0.1:
1307 | resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==}
1308 | dependencies:
1309 | dom-serializer: 2.0.0
1310 | domelementtype: 2.3.0
1311 | domhandler: 5.0.3
1312 | dev: false
1313 |
1314 | /dotenv/10.0.0:
1315 | resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==}
1316 | engines: {node: '>=10'}
1317 |
1318 | /elliptic/6.5.4:
1319 | resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
1320 | dependencies:
1321 | bn.js: 4.12.0
1322 | brorand: 1.1.0
1323 | hash.js: 1.1.7
1324 | hmac-drbg: 1.0.1
1325 | inherits: 2.0.4
1326 | minimalistic-assert: 1.0.1
1327 | minimalistic-crypto-utils: 1.0.1
1328 | dev: true
1329 |
1330 | /emoji-regex/8.0.0:
1331 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1332 | dev: false
1333 |
1334 | /encoding/0.1.12:
1335 | resolution: {integrity: sha512-bl1LAgiQc4ZWr++pNYUdRe/alecaHFeHxIJ/pNciqGdKXghaTCOwKkbKp6ye7pKZGu/GcaSXFk8PBVhgs+dJdA==}
1336 | dependencies:
1337 | iconv-lite: 0.4.24
1338 | dev: false
1339 |
1340 | /encoding/0.1.13:
1341 | resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
1342 | requiresBuild: true
1343 | dependencies:
1344 | iconv-lite: 0.6.3
1345 | dev: false
1346 | optional: true
1347 |
1348 | /entities/4.4.0:
1349 | resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
1350 | engines: {node: '>=0.12'}
1351 | dev: false
1352 |
1353 | /env-paths/2.2.1:
1354 | resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
1355 | engines: {node: '>=6'}
1356 | dev: false
1357 |
1358 | /err-code/2.0.3:
1359 | resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
1360 | dev: false
1361 |
1362 | /errno/0.1.8:
1363 | resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
1364 | hasBin: true
1365 | dependencies:
1366 | prr: 1.0.1
1367 | dev: true
1368 |
1369 | /es5-ext/0.10.62:
1370 | resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==}
1371 | engines: {node: '>=0.10'}
1372 | requiresBuild: true
1373 | dependencies:
1374 | es6-iterator: 2.0.3
1375 | es6-symbol: 3.1.3
1376 | next-tick: 1.1.0
1377 | dev: false
1378 |
1379 | /es6-iterator/2.0.3:
1380 | resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
1381 | dependencies:
1382 | d: 1.0.1
1383 | es5-ext: 0.10.62
1384 | es6-symbol: 3.1.3
1385 | dev: false
1386 |
1387 | /es6-symbol/3.1.3:
1388 | resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==}
1389 | dependencies:
1390 | d: 1.0.1
1391 | ext: 1.7.0
1392 | dev: false
1393 |
1394 | /esbuild-android-64/0.14.51:
1395 | resolution: {integrity: sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==}
1396 | engines: {node: '>=12'}
1397 | cpu: [x64]
1398 | os: [android]
1399 | requiresBuild: true
1400 | dev: false
1401 | optional: true
1402 |
1403 | /esbuild-android-64/0.14.54:
1404 | resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
1405 | engines: {node: '>=12'}
1406 | cpu: [x64]
1407 | os: [android]
1408 | requiresBuild: true
1409 | dev: true
1410 | optional: true
1411 |
1412 | /esbuild-android-arm64/0.14.51:
1413 | resolution: {integrity: sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==}
1414 | engines: {node: '>=12'}
1415 | cpu: [arm64]
1416 | os: [android]
1417 | requiresBuild: true
1418 | dev: false
1419 | optional: true
1420 |
1421 | /esbuild-android-arm64/0.14.54:
1422 | resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
1423 | engines: {node: '>=12'}
1424 | cpu: [arm64]
1425 | os: [android]
1426 | requiresBuild: true
1427 | dev: true
1428 | optional: true
1429 |
1430 | /esbuild-darwin-64/0.14.51:
1431 | resolution: {integrity: sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==}
1432 | engines: {node: '>=12'}
1433 | cpu: [x64]
1434 | os: [darwin]
1435 | requiresBuild: true
1436 | dev: false
1437 | optional: true
1438 |
1439 | /esbuild-darwin-64/0.14.54:
1440 | resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
1441 | engines: {node: '>=12'}
1442 | cpu: [x64]
1443 | os: [darwin]
1444 | requiresBuild: true
1445 | dev: true
1446 | optional: true
1447 |
1448 | /esbuild-darwin-arm64/0.14.51:
1449 | resolution: {integrity: sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==}
1450 | engines: {node: '>=12'}
1451 | cpu: [arm64]
1452 | os: [darwin]
1453 | requiresBuild: true
1454 | dev: false
1455 | optional: true
1456 |
1457 | /esbuild-darwin-arm64/0.14.54:
1458 | resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
1459 | engines: {node: '>=12'}
1460 | cpu: [arm64]
1461 | os: [darwin]
1462 | requiresBuild: true
1463 | dev: true
1464 | optional: true
1465 |
1466 | /esbuild-freebsd-64/0.14.51:
1467 | resolution: {integrity: sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==}
1468 | engines: {node: '>=12'}
1469 | cpu: [x64]
1470 | os: [freebsd]
1471 | requiresBuild: true
1472 | dev: false
1473 | optional: true
1474 |
1475 | /esbuild-freebsd-64/0.14.54:
1476 | resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
1477 | engines: {node: '>=12'}
1478 | cpu: [x64]
1479 | os: [freebsd]
1480 | requiresBuild: true
1481 | dev: true
1482 | optional: true
1483 |
1484 | /esbuild-freebsd-arm64/0.14.51:
1485 | resolution: {integrity: sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==}
1486 | engines: {node: '>=12'}
1487 | cpu: [arm64]
1488 | os: [freebsd]
1489 | requiresBuild: true
1490 | dev: false
1491 | optional: true
1492 |
1493 | /esbuild-freebsd-arm64/0.14.54:
1494 | resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
1495 | engines: {node: '>=12'}
1496 | cpu: [arm64]
1497 | os: [freebsd]
1498 | requiresBuild: true
1499 | dev: true
1500 | optional: true
1501 |
1502 | /esbuild-linux-32/0.14.51:
1503 | resolution: {integrity: sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==}
1504 | engines: {node: '>=12'}
1505 | cpu: [ia32]
1506 | os: [linux]
1507 | requiresBuild: true
1508 | dev: false
1509 | optional: true
1510 |
1511 | /esbuild-linux-32/0.14.54:
1512 | resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
1513 | engines: {node: '>=12'}
1514 | cpu: [ia32]
1515 | os: [linux]
1516 | requiresBuild: true
1517 | dev: true
1518 | optional: true
1519 |
1520 | /esbuild-linux-64/0.14.51:
1521 | resolution: {integrity: sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==}
1522 | engines: {node: '>=12'}
1523 | cpu: [x64]
1524 | os: [linux]
1525 | requiresBuild: true
1526 | dev: false
1527 | optional: true
1528 |
1529 | /esbuild-linux-64/0.14.54:
1530 | resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
1531 | engines: {node: '>=12'}
1532 | cpu: [x64]
1533 | os: [linux]
1534 | requiresBuild: true
1535 | dev: true
1536 | optional: true
1537 |
1538 | /esbuild-linux-arm/0.14.51:
1539 | resolution: {integrity: sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==}
1540 | engines: {node: '>=12'}
1541 | cpu: [arm]
1542 | os: [linux]
1543 | requiresBuild: true
1544 | dev: false
1545 | optional: true
1546 |
1547 | /esbuild-linux-arm/0.14.54:
1548 | resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
1549 | engines: {node: '>=12'}
1550 | cpu: [arm]
1551 | os: [linux]
1552 | requiresBuild: true
1553 | dev: true
1554 | optional: true
1555 |
1556 | /esbuild-linux-arm64/0.14.51:
1557 | resolution: {integrity: sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==}
1558 | engines: {node: '>=12'}
1559 | cpu: [arm64]
1560 | os: [linux]
1561 | requiresBuild: true
1562 | dev: false
1563 | optional: true
1564 |
1565 | /esbuild-linux-arm64/0.14.54:
1566 | resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
1567 | engines: {node: '>=12'}
1568 | cpu: [arm64]
1569 | os: [linux]
1570 | requiresBuild: true
1571 | dev: true
1572 | optional: true
1573 |
1574 | /esbuild-linux-mips64le/0.14.51:
1575 | resolution: {integrity: sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==}
1576 | engines: {node: '>=12'}
1577 | cpu: [mips64el]
1578 | os: [linux]
1579 | requiresBuild: true
1580 | dev: false
1581 | optional: true
1582 |
1583 | /esbuild-linux-mips64le/0.14.54:
1584 | resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
1585 | engines: {node: '>=12'}
1586 | cpu: [mips64el]
1587 | os: [linux]
1588 | requiresBuild: true
1589 | dev: true
1590 | optional: true
1591 |
1592 | /esbuild-linux-ppc64le/0.14.51:
1593 | resolution: {integrity: sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==}
1594 | engines: {node: '>=12'}
1595 | cpu: [ppc64]
1596 | os: [linux]
1597 | requiresBuild: true
1598 | dev: false
1599 | optional: true
1600 |
1601 | /esbuild-linux-ppc64le/0.14.54:
1602 | resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
1603 | engines: {node: '>=12'}
1604 | cpu: [ppc64]
1605 | os: [linux]
1606 | requiresBuild: true
1607 | dev: true
1608 | optional: true
1609 |
1610 | /esbuild-linux-riscv64/0.14.51:
1611 | resolution: {integrity: sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==}
1612 | engines: {node: '>=12'}
1613 | cpu: [riscv64]
1614 | os: [linux]
1615 | requiresBuild: true
1616 | dev: false
1617 | optional: true
1618 |
1619 | /esbuild-linux-riscv64/0.14.54:
1620 | resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
1621 | engines: {node: '>=12'}
1622 | cpu: [riscv64]
1623 | os: [linux]
1624 | requiresBuild: true
1625 | dev: true
1626 | optional: true
1627 |
1628 | /esbuild-linux-s390x/0.14.51:
1629 | resolution: {integrity: sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==}
1630 | engines: {node: '>=12'}
1631 | cpu: [s390x]
1632 | os: [linux]
1633 | requiresBuild: true
1634 | dev: false
1635 | optional: true
1636 |
1637 | /esbuild-linux-s390x/0.14.54:
1638 | resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
1639 | engines: {node: '>=12'}
1640 | cpu: [s390x]
1641 | os: [linux]
1642 | requiresBuild: true
1643 | dev: true
1644 | optional: true
1645 |
1646 | /esbuild-netbsd-64/0.14.51:
1647 | resolution: {integrity: sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==}
1648 | engines: {node: '>=12'}
1649 | cpu: [x64]
1650 | os: [netbsd]
1651 | requiresBuild: true
1652 | dev: false
1653 | optional: true
1654 |
1655 | /esbuild-netbsd-64/0.14.54:
1656 | resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
1657 | engines: {node: '>=12'}
1658 | cpu: [x64]
1659 | os: [netbsd]
1660 | requiresBuild: true
1661 | dev: true
1662 | optional: true
1663 |
1664 | /esbuild-openbsd-64/0.14.51:
1665 | resolution: {integrity: sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==}
1666 | engines: {node: '>=12'}
1667 | cpu: [x64]
1668 | os: [openbsd]
1669 | requiresBuild: true
1670 | dev: false
1671 | optional: true
1672 |
1673 | /esbuild-openbsd-64/0.14.54:
1674 | resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
1675 | engines: {node: '>=12'}
1676 | cpu: [x64]
1677 | os: [openbsd]
1678 | requiresBuild: true
1679 | dev: true
1680 | optional: true
1681 |
1682 | /esbuild-sunos-64/0.14.51:
1683 | resolution: {integrity: sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==}
1684 | engines: {node: '>=12'}
1685 | cpu: [x64]
1686 | os: [sunos]
1687 | requiresBuild: true
1688 | dev: false
1689 | optional: true
1690 |
1691 | /esbuild-sunos-64/0.14.54:
1692 | resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
1693 | engines: {node: '>=12'}
1694 | cpu: [x64]
1695 | os: [sunos]
1696 | requiresBuild: true
1697 | dev: true
1698 | optional: true
1699 |
1700 | /esbuild-windows-32/0.14.51:
1701 | resolution: {integrity: sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==}
1702 | engines: {node: '>=12'}
1703 | cpu: [ia32]
1704 | os: [win32]
1705 | requiresBuild: true
1706 | dev: false
1707 | optional: true
1708 |
1709 | /esbuild-windows-32/0.14.54:
1710 | resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
1711 | engines: {node: '>=12'}
1712 | cpu: [ia32]
1713 | os: [win32]
1714 | requiresBuild: true
1715 | dev: true
1716 | optional: true
1717 |
1718 | /esbuild-windows-64/0.14.51:
1719 | resolution: {integrity: sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==}
1720 | engines: {node: '>=12'}
1721 | cpu: [x64]
1722 | os: [win32]
1723 | requiresBuild: true
1724 | dev: false
1725 | optional: true
1726 |
1727 | /esbuild-windows-64/0.14.54:
1728 | resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
1729 | engines: {node: '>=12'}
1730 | cpu: [x64]
1731 | os: [win32]
1732 | requiresBuild: true
1733 | dev: true
1734 | optional: true
1735 |
1736 | /esbuild-windows-arm64/0.14.51:
1737 | resolution: {integrity: sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==}
1738 | engines: {node: '>=12'}
1739 | cpu: [arm64]
1740 | os: [win32]
1741 | requiresBuild: true
1742 | dev: false
1743 | optional: true
1744 |
1745 | /esbuild-windows-arm64/0.14.54:
1746 | resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
1747 | engines: {node: '>=12'}
1748 | cpu: [arm64]
1749 | os: [win32]
1750 | requiresBuild: true
1751 | dev: true
1752 | optional: true
1753 |
1754 | /esbuild/0.14.51:
1755 | resolution: {integrity: sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==}
1756 | engines: {node: '>=12'}
1757 | hasBin: true
1758 | requiresBuild: true
1759 | optionalDependencies:
1760 | esbuild-android-64: 0.14.51
1761 | esbuild-android-arm64: 0.14.51
1762 | esbuild-darwin-64: 0.14.51
1763 | esbuild-darwin-arm64: 0.14.51
1764 | esbuild-freebsd-64: 0.14.51
1765 | esbuild-freebsd-arm64: 0.14.51
1766 | esbuild-linux-32: 0.14.51
1767 | esbuild-linux-64: 0.14.51
1768 | esbuild-linux-arm: 0.14.51
1769 | esbuild-linux-arm64: 0.14.51
1770 | esbuild-linux-mips64le: 0.14.51
1771 | esbuild-linux-ppc64le: 0.14.51
1772 | esbuild-linux-riscv64: 0.14.51
1773 | esbuild-linux-s390x: 0.14.51
1774 | esbuild-netbsd-64: 0.14.51
1775 | esbuild-openbsd-64: 0.14.51
1776 | esbuild-sunos-64: 0.14.51
1777 | esbuild-windows-32: 0.14.51
1778 | esbuild-windows-64: 0.14.51
1779 | esbuild-windows-arm64: 0.14.51
1780 | dev: false
1781 |
1782 | /esbuild/0.14.54:
1783 | resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
1784 | engines: {node: '>=12'}
1785 | hasBin: true
1786 | requiresBuild: true
1787 | optionalDependencies:
1788 | '@esbuild/linux-loong64': 0.14.54
1789 | esbuild-android-64: 0.14.54
1790 | esbuild-android-arm64: 0.14.54
1791 | esbuild-darwin-64: 0.14.54
1792 | esbuild-darwin-arm64: 0.14.54
1793 | esbuild-freebsd-64: 0.14.54
1794 | esbuild-freebsd-arm64: 0.14.54
1795 | esbuild-linux-32: 0.14.54
1796 | esbuild-linux-64: 0.14.54
1797 | esbuild-linux-arm: 0.14.54
1798 | esbuild-linux-arm64: 0.14.54
1799 | esbuild-linux-mips64le: 0.14.54
1800 | esbuild-linux-ppc64le: 0.14.54
1801 | esbuild-linux-riscv64: 0.14.54
1802 | esbuild-linux-s390x: 0.14.54
1803 | esbuild-netbsd-64: 0.14.54
1804 | esbuild-openbsd-64: 0.14.54
1805 | esbuild-sunos-64: 0.14.54
1806 | esbuild-windows-32: 0.14.54
1807 | esbuild-windows-64: 0.14.54
1808 | esbuild-windows-arm64: 0.14.54
1809 | dev: true
1810 |
1811 | /escape-string-regexp/4.0.0:
1812 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1813 | engines: {node: '>=10'}
1814 | dev: false
1815 |
1816 | /escodegen/2.0.0:
1817 | resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
1818 | engines: {node: '>=6.0'}
1819 | hasBin: true
1820 | dependencies:
1821 | esprima: 4.0.1
1822 | estraverse: 5.3.0
1823 | esutils: 2.0.3
1824 | optionator: 0.8.3
1825 | optionalDependencies:
1826 | source-map: 0.6.1
1827 | dev: false
1828 |
1829 | /esprima/4.0.1:
1830 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1831 | engines: {node: '>=4'}
1832 | hasBin: true
1833 | dev: false
1834 |
1835 | /estraverse/5.3.0:
1836 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1837 | engines: {node: '>=4.0'}
1838 | dev: false
1839 |
1840 | /estree-walker/0.5.2:
1841 | resolution: {integrity: sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==}
1842 | dev: true
1843 |
1844 | /estree-walker/0.6.1:
1845 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
1846 |
1847 | /esutils/2.0.3:
1848 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1849 | engines: {node: '>=0.10.0'}
1850 | dev: false
1851 |
1852 | /evp_bytestokey/1.0.3:
1853 | resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
1854 | dependencies:
1855 | md5.js: 1.3.5
1856 | safe-buffer: 5.2.1
1857 | dev: true
1858 |
1859 | /execa/6.1.0:
1860 | resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
1861 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1862 | dependencies:
1863 | cross-spawn: 7.0.3
1864 | get-stream: 6.0.1
1865 | human-signals: 3.0.1
1866 | is-stream: 3.0.0
1867 | merge-stream: 2.0.0
1868 | npm-run-path: 5.1.0
1869 | onetime: 6.0.0
1870 | signal-exit: 3.0.7
1871 | strip-final-newline: 3.0.0
1872 |
1873 | /ext/1.7.0:
1874 | resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
1875 | dependencies:
1876 | type: 2.7.2
1877 | dev: false
1878 |
1879 | /fast-levenshtein/2.0.6:
1880 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1881 | dev: false
1882 |
1883 | /fetch/1.1.0:
1884 | resolution: {integrity: sha512-5O8TwrGzoNblBG/jtK4NFuZwNCkZX6s5GfRNOaGtm+QGJEuNakSC/i2RW0R93KX6E0jVjNXm6O3CRN4Ql3K+yA==}
1885 | dependencies:
1886 | biskviit: 1.0.1
1887 | encoding: 0.1.12
1888 | dev: false
1889 |
1890 | /file-extension/4.0.5:
1891 | resolution: {integrity: sha512-l0rOL3aKkoi6ea7MNZe6OHgqYYpn48Qfflr8Pe9G9JPPTx5A+sfboK91ZufzIs59/lPqh351l0eb6iKU9J5oGg==}
1892 | engines: {node: '>=4'}
1893 | dev: false
1894 |
1895 | /fill-range/7.0.1:
1896 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1897 | engines: {node: '>=8'}
1898 | dependencies:
1899 | to-regex-range: 5.0.1
1900 | dev: false
1901 |
1902 | /foreach/2.0.6:
1903 | resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==}
1904 | dev: true
1905 |
1906 | /form-data/4.0.0:
1907 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
1908 | engines: {node: '>= 6'}
1909 | dependencies:
1910 | asynckit: 0.4.0
1911 | combined-stream: 1.0.8
1912 | mime-types: 2.1.35
1913 | dev: false
1914 |
1915 | /fs-minipass/2.1.0:
1916 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
1917 | engines: {node: '>= 8'}
1918 | dependencies:
1919 | minipass: 3.3.4
1920 | dev: false
1921 |
1922 | /fs.realpath/1.0.0:
1923 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1924 | dev: false
1925 |
1926 | /fsevents/2.3.2:
1927 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1928 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1929 | os: [darwin]
1930 | requiresBuild: true
1931 | optional: true
1932 |
1933 | /function-bind/1.1.1:
1934 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1935 | dev: true
1936 |
1937 | /fwd-stream/1.0.4:
1938 | resolution: {integrity: sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==}
1939 | dependencies:
1940 | readable-stream: 1.0.34
1941 | dev: true
1942 |
1943 | /gauge/4.0.4:
1944 | resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
1945 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
1946 | dependencies:
1947 | aproba: 2.0.0
1948 | color-support: 1.1.3
1949 | console-control-strings: 1.1.0
1950 | has-unicode: 2.0.1
1951 | signal-exit: 3.0.7
1952 | string-width: 4.2.3
1953 | strip-ansi: 6.0.1
1954 | wide-align: 1.1.5
1955 | dev: false
1956 |
1957 | /get-stream/6.0.1:
1958 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1959 | engines: {node: '>=10'}
1960 |
1961 | /glob-parent/5.1.2:
1962 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1963 | engines: {node: '>= 6'}
1964 | dependencies:
1965 | is-glob: 4.0.3
1966 | dev: false
1967 |
1968 | /glob/7.2.3:
1969 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1970 | dependencies:
1971 | fs.realpath: 1.0.0
1972 | inflight: 1.0.6
1973 | inherits: 2.0.4
1974 | minimatch: 3.1.2
1975 | once: 1.4.0
1976 | path-is-absolute: 1.0.1
1977 | dev: false
1978 |
1979 | /glob/8.0.3:
1980 | resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==}
1981 | engines: {node: '>=12'}
1982 | dependencies:
1983 | fs.realpath: 1.0.0
1984 | inflight: 1.0.6
1985 | inherits: 2.0.4
1986 | minimatch: 5.1.0
1987 | once: 1.4.0
1988 | dev: false
1989 |
1990 | /global/4.4.0:
1991 | resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
1992 | dependencies:
1993 | min-document: 2.19.0
1994 | process: 0.11.10
1995 | dev: false
1996 |
1997 | /graceful-fs/4.2.10:
1998 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
1999 | dev: false
2000 |
2001 | /has-unicode/2.0.1:
2002 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
2003 | dev: false
2004 |
2005 | /has-values/2.0.1:
2006 | resolution: {integrity: sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==}
2007 | engines: {node: '>=6'}
2008 | dependencies:
2009 | kind-of: 6.0.3
2010 | dev: false
2011 |
2012 | /has/1.0.3:
2013 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
2014 | engines: {node: '>= 0.4.0'}
2015 | dependencies:
2016 | function-bind: 1.1.1
2017 | dev: true
2018 |
2019 | /hash-base/3.1.0:
2020 | resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
2021 | engines: {node: '>=4'}
2022 | dependencies:
2023 | inherits: 2.0.4
2024 | readable-stream: 3.6.0
2025 | safe-buffer: 5.2.1
2026 | dev: true
2027 |
2028 | /hash.js/1.1.7:
2029 | resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
2030 | dependencies:
2031 | inherits: 2.0.4
2032 | minimalistic-assert: 1.0.1
2033 | dev: true
2034 |
2035 | /hmac-drbg/1.0.1:
2036 | resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
2037 | dependencies:
2038 | hash.js: 1.1.7
2039 | minimalistic-assert: 1.0.1
2040 | minimalistic-crypto-utils: 1.0.1
2041 | dev: true
2042 |
2043 | /html-encoding-sniffer/3.0.0:
2044 | resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
2045 | engines: {node: '>=12'}
2046 | dependencies:
2047 | whatwg-encoding: 2.0.0
2048 | dev: false
2049 |
2050 | /html-rewriter-wasm/0.4.1:
2051 | resolution: {integrity: sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==}
2052 |
2053 | /htmlparser2/8.0.1:
2054 | resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==}
2055 | dependencies:
2056 | domelementtype: 2.3.0
2057 | domhandler: 5.0.3
2058 | domutils: 3.0.1
2059 | entities: 4.4.0
2060 | dev: false
2061 |
2062 | /http-cache-semantics/4.1.0:
2063 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
2064 |
2065 | /http-proxy-agent/5.0.0:
2066 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
2067 | engines: {node: '>= 6'}
2068 | dependencies:
2069 | '@tootallnate/once': 2.0.0
2070 | agent-base: 6.0.2
2071 | debug: 4.3.4
2072 | transitivePeerDependencies:
2073 | - supports-color
2074 | dev: false
2075 |
2076 | /https-proxy-agent/5.0.1:
2077 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
2078 | engines: {node: '>= 6'}
2079 | dependencies:
2080 | agent-base: 6.0.2
2081 | debug: 4.3.4
2082 | transitivePeerDependencies:
2083 | - supports-color
2084 | dev: false
2085 |
2086 | /human-signals/3.0.1:
2087 | resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==}
2088 | engines: {node: '>=12.20.0'}
2089 |
2090 | /humanize-ms/1.2.1:
2091 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
2092 | dependencies:
2093 | ms: 2.1.3
2094 | dev: false
2095 |
2096 | /iconv-lite/0.4.24:
2097 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
2098 | engines: {node: '>=0.10.0'}
2099 | dependencies:
2100 | safer-buffer: 2.1.2
2101 | dev: false
2102 |
2103 | /iconv-lite/0.6.3:
2104 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
2105 | engines: {node: '>=0.10.0'}
2106 | dependencies:
2107 | safer-buffer: 2.1.2
2108 | dev: false
2109 |
2110 | /idb-wrapper/1.7.2:
2111 | resolution: {integrity: sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==}
2112 | dev: true
2113 |
2114 | /image-extensions/1.1.0:
2115 | resolution: {integrity: sha512-P0t7ByhK8Jk9TU05ct/7+f7h8dNuXq5OY4m0IO/T+1aga/qHkpC0Wf472x3FLdq/zFDG17pgapCM3JDTxwZzow==}
2116 | engines: {node: '>=0.10.0'}
2117 | dev: false
2118 |
2119 | /imurmurhash/0.1.4:
2120 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
2121 | engines: {node: '>=0.8.19'}
2122 | dev: false
2123 |
2124 | /indent-string/4.0.0:
2125 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
2126 | engines: {node: '>=8'}
2127 | dev: false
2128 |
2129 | /indexof/0.0.1:
2130 | resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==}
2131 | dev: true
2132 |
2133 | /infer-owner/1.0.4:
2134 | resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
2135 | dev: false
2136 |
2137 | /inflight/1.0.6:
2138 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
2139 | dependencies:
2140 | once: 1.4.0
2141 | wrappy: 1.0.2
2142 | dev: false
2143 |
2144 | /inherits/2.0.4:
2145 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
2146 |
2147 | /install-artifact-from-github/1.3.1:
2148 | resolution: {integrity: sha512-3l3Bymg2eKDsN5wQuMfgGEj2x6l5MCAv0zPL6rxHESufFVlEAKW/6oY9F1aGgvY/EgWm5+eWGRjINveL4X7Hgg==}
2149 | hasBin: true
2150 | dev: false
2151 |
2152 | /ip-regex/4.3.0:
2153 | resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
2154 | engines: {node: '>=8'}
2155 | dev: false
2156 |
2157 | /ip/2.0.0:
2158 | resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
2159 | dev: false
2160 |
2161 | /is-absolute-url/3.0.3:
2162 | resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
2163 | engines: {node: '>=8'}
2164 | dev: false
2165 |
2166 | /is-binary-path/2.1.0:
2167 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
2168 | engines: {node: '>=8'}
2169 | dependencies:
2170 | binary-extensions: 2.2.0
2171 | dev: false
2172 |
2173 | /is-core-module/2.10.0:
2174 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
2175 | dependencies:
2176 | has: 1.0.3
2177 | dev: true
2178 |
2179 | /is-extglob/2.1.1:
2180 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
2181 | engines: {node: '>=0.10.0'}
2182 | dev: false
2183 |
2184 | /is-fullwidth-code-point/3.0.0:
2185 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
2186 | engines: {node: '>=8'}
2187 | dev: false
2188 |
2189 | /is-glob/4.0.3:
2190 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
2191 | engines: {node: '>=0.10.0'}
2192 | dependencies:
2193 | is-extglob: 2.1.1
2194 | dev: false
2195 |
2196 | /is-lambda/1.0.1:
2197 | resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
2198 | dev: false
2199 |
2200 | /is-number/7.0.0:
2201 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
2202 | engines: {node: '>=0.12.0'}
2203 | dev: false
2204 |
2205 | /is-object/0.1.2:
2206 | resolution: {integrity: sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==}
2207 | dev: true
2208 |
2209 | /is-plain-object/5.0.0:
2210 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
2211 | engines: {node: '>=0.10.0'}
2212 | dev: false
2213 |
2214 | /is-potential-custom-element-name/1.0.1:
2215 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
2216 | dev: false
2217 |
2218 | /is-relative-url/3.0.0:
2219 | resolution: {integrity: sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==}
2220 | engines: {node: '>=8'}
2221 | dependencies:
2222 | is-absolute-url: 3.0.3
2223 | dev: false
2224 |
2225 | /is-stream/3.0.0:
2226 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
2227 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2228 |
2229 | /is-typedarray/1.0.0:
2230 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
2231 | dev: false
2232 |
2233 | /is-uri/1.2.4:
2234 | resolution: {integrity: sha512-8sHi5gEARwpMYwJD9uSAkU9Bb7YkSagcM10EYqSe+osqOErXln4VL+EgLSG40e9lVTpcpygpvb9Z6ohZpECDGA==}
2235 | engines: {node: '>= 4'}
2236 | dependencies:
2237 | parse-uri: 1.0.7
2238 | punycode2: 1.0.1
2239 | dev: false
2240 |
2241 | /is/0.2.7:
2242 | resolution: {integrity: sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==}
2243 | dev: true
2244 |
2245 | /isarray/0.0.1:
2246 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
2247 | dev: true
2248 |
2249 | /isarray/1.0.0:
2250 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
2251 | dev: true
2252 |
2253 | /isbuffer/0.0.0:
2254 | resolution: {integrity: sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==}
2255 | dev: true
2256 |
2257 | /isexe/2.0.0:
2258 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
2259 |
2260 | /iso-639-3/2.2.0:
2261 | resolution: {integrity: sha512-v9w/U4XDSfXCrXxf4E6ertGC/lTRX8MLLv7XC1j6N5oL3ympe38jp77zgeyMsn3MbufuAAoGeVzDJbOXnPTMhQ==}
2262 | dev: false
2263 |
2264 | /isostring/0.0.1:
2265 | resolution: {integrity: sha512-wRcdJtXCe2LGtXnD14fXMkduWVdbeGkzBIKg8WcKeEOi6SIc+hRjYYw76WNx3v5FebhUWZrBTWB0NOl3/sagdQ==}
2266 | dev: false
2267 |
2268 | /itty-router-extras/0.4.2:
2269 | resolution: {integrity: sha512-ppHaBzcTXs7idFSDISehG+8kif2/4aqLCfyY/Y/uIZv79sfEfNmTq9G+rDeqblun/VZRBiXZD8ztYmMS8EOsKw==}
2270 | dev: false
2271 |
2272 | /itty-router/2.6.6:
2273 | resolution: {integrity: sha512-hIPHtXGymCX7Lzb2I4G6JgZFE4QEEQwst9GORK7sMYUpJvLfy4yZJr95r04e8DzoAnj6HcxM2m4TbK+juu+18g==}
2274 |
2275 | /jsdom/20.0.1:
2276 | resolution: {integrity: sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A==}
2277 | engines: {node: '>=14'}
2278 | peerDependencies:
2279 | canvas: ^2.5.0
2280 | peerDependenciesMeta:
2281 | canvas:
2282 | optional: true
2283 | dependencies:
2284 | abab: 2.0.6
2285 | acorn: 8.8.0
2286 | acorn-globals: 7.0.1
2287 | cssom: 0.5.0
2288 | cssstyle: 2.3.0
2289 | data-urls: 3.0.2
2290 | decimal.js: 10.4.2
2291 | domexception: 4.0.0
2292 | escodegen: 2.0.0
2293 | form-data: 4.0.0
2294 | html-encoding-sniffer: 3.0.0
2295 | http-proxy-agent: 5.0.0
2296 | https-proxy-agent: 5.0.1
2297 | is-potential-custom-element-name: 1.0.1
2298 | nwsapi: 2.2.2
2299 | parse5: 7.1.1
2300 | saxes: 6.0.0
2301 | symbol-tree: 3.2.4
2302 | tough-cookie: 4.1.2
2303 | w3c-xmlserializer: 3.0.0
2304 | webidl-conversions: 7.0.0
2305 | whatwg-encoding: 2.0.0
2306 | whatwg-mimetype: 3.0.0
2307 | whatwg-url: 11.0.0
2308 | ws: 8.9.0
2309 | xml-name-validator: 4.0.0
2310 | transitivePeerDependencies:
2311 | - bufferutil
2312 | - supports-color
2313 | - utf-8-validate
2314 | dev: false
2315 |
2316 | /kind-of/6.0.3:
2317 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
2318 | engines: {node: '>=0.10.0'}
2319 | dev: false
2320 |
2321 | /kleur/4.1.5:
2322 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
2323 | engines: {node: '>=6'}
2324 |
2325 | /level-blobs/0.1.7:
2326 | resolution: {integrity: sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==}
2327 | dependencies:
2328 | level-peek: 1.0.6
2329 | once: 1.4.0
2330 | readable-stream: 1.1.14
2331 | dev: true
2332 |
2333 | /level-filesystem/1.2.0:
2334 | resolution: {integrity: sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==}
2335 | dependencies:
2336 | concat-stream: 1.6.2
2337 | errno: 0.1.8
2338 | fwd-stream: 1.0.4
2339 | level-blobs: 0.1.7
2340 | level-peek: 1.0.6
2341 | level-sublevel: 5.2.3
2342 | octal: 1.0.0
2343 | once: 1.4.0
2344 | xtend: 2.2.0
2345 | dev: true
2346 |
2347 | /level-fix-range/1.0.2:
2348 | resolution: {integrity: sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==}
2349 | dev: true
2350 |
2351 | /level-fix-range/2.0.0:
2352 | resolution: {integrity: sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==}
2353 | dependencies:
2354 | clone: 0.1.19
2355 | dev: true
2356 |
2357 | /level-hooks/4.5.0:
2358 | resolution: {integrity: sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==}
2359 | dependencies:
2360 | string-range: 1.2.2
2361 | dev: true
2362 |
2363 | /level-js/2.2.4:
2364 | resolution: {integrity: sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==}
2365 | dependencies:
2366 | abstract-leveldown: 0.12.4
2367 | idb-wrapper: 1.7.2
2368 | isbuffer: 0.0.0
2369 | ltgt: 2.2.1
2370 | typedarray-to-buffer: 1.0.4
2371 | xtend: 2.1.2
2372 | dev: true
2373 |
2374 | /level-peek/1.0.6:
2375 | resolution: {integrity: sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==}
2376 | dependencies:
2377 | level-fix-range: 1.0.2
2378 | dev: true
2379 |
2380 | /level-sublevel/5.2.3:
2381 | resolution: {integrity: sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==}
2382 | dependencies:
2383 | level-fix-range: 2.0.0
2384 | level-hooks: 4.5.0
2385 | string-range: 1.2.2
2386 | xtend: 2.0.6
2387 | dev: true
2388 |
2389 | /levelup/0.18.6:
2390 | resolution: {integrity: sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==}
2391 | dependencies:
2392 | bl: 0.8.2
2393 | deferred-leveldown: 0.2.0
2394 | errno: 0.1.8
2395 | prr: 0.0.0
2396 | readable-stream: 1.0.34
2397 | semver: 2.3.2
2398 | xtend: 3.0.0
2399 | dev: true
2400 |
2401 | /levn/0.3.0:
2402 | resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
2403 | engines: {node: '>= 0.8.0'}
2404 | dependencies:
2405 | prelude-ls: 1.1.2
2406 | type-check: 0.3.2
2407 | dev: false
2408 |
2409 | /lodash/4.17.21:
2410 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2411 | dev: false
2412 |
2413 | /lru-cache/6.0.0:
2414 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2415 | engines: {node: '>=10'}
2416 | dependencies:
2417 | yallist: 4.0.0
2418 |
2419 | /lru-cache/7.14.0:
2420 | resolution: {integrity: sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==}
2421 | engines: {node: '>=12'}
2422 | dev: false
2423 |
2424 | /ltgt/2.2.1:
2425 | resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==}
2426 | dev: true
2427 |
2428 | /magic-string/0.22.5:
2429 | resolution: {integrity: sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==}
2430 | dependencies:
2431 | vlq: 0.2.3
2432 | dev: true
2433 |
2434 | /magic-string/0.25.9:
2435 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
2436 | dependencies:
2437 | sourcemap-codec: 1.4.8
2438 | dev: false
2439 |
2440 | /make-fetch-happen/10.2.1:
2441 | resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==}
2442 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2443 | dependencies:
2444 | agentkeepalive: 4.2.1
2445 | cacache: 16.1.3
2446 | http-cache-semantics: 4.1.0
2447 | http-proxy-agent: 5.0.0
2448 | https-proxy-agent: 5.0.1
2449 | is-lambda: 1.0.1
2450 | lru-cache: 7.14.0
2451 | minipass: 3.3.4
2452 | minipass-collect: 1.0.2
2453 | minipass-fetch: 2.1.2
2454 | minipass-flush: 1.0.5
2455 | minipass-pipeline: 1.2.4
2456 | negotiator: 0.6.3
2457 | promise-retry: 2.0.1
2458 | socks-proxy-agent: 7.0.0
2459 | ssri: 9.0.1
2460 | transitivePeerDependencies:
2461 | - bluebird
2462 | - supports-color
2463 | dev: false
2464 |
2465 | /md5.js/1.3.5:
2466 | resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
2467 | dependencies:
2468 | hash-base: 3.1.0
2469 | inherits: 2.0.4
2470 | safe-buffer: 5.2.1
2471 | dev: true
2472 |
2473 | /memoize-one/6.0.0:
2474 | resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
2475 | dev: false
2476 |
2477 | /merge-stream/2.0.0:
2478 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2479 |
2480 | /metascraper/5.31.1:
2481 | resolution: {integrity: sha512-x3yOXOcoe4A0Xab7HvNTLfk+kw4j0PA/MtjQ64UGZNNdHAxBzsrUWCber6G/iwPjrvkIp/V9DPhtICAsF+DTFQ==}
2482 | engines: {node: '>= 12'}
2483 | dependencies:
2484 | '@metascraper/helpers': 5.31.1
2485 | cheerio: 1.0.0-rc.12
2486 | lodash: 4.17.21
2487 | whoops: 4.1.2
2488 | transitivePeerDependencies:
2489 | - bluebird
2490 | - bufferutil
2491 | - canvas
2492 | - supports-color
2493 | - utf-8-validate
2494 | dev: false
2495 |
2496 | /microsoft-capitalize/1.0.5:
2497 | resolution: {integrity: sha512-iqDMU9J643BHg8Zp7EMZNLTp6Pgs2f1S2SMnCW2VlUqMs17xCZ5vwVjalBJEGVcUfG+/1ePqeEGcMW3VfzHK5A==}
2498 | engines: {node: '>= 10'}
2499 | dev: false
2500 |
2501 | /miller-rabin/4.0.1:
2502 | resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
2503 | hasBin: true
2504 | dependencies:
2505 | bn.js: 4.12.0
2506 | brorand: 1.1.0
2507 | dev: true
2508 |
2509 | /mime-db/1.52.0:
2510 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
2511 | engines: {node: '>= 0.6'}
2512 | dev: false
2513 |
2514 | /mime-types/2.1.35:
2515 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
2516 | engines: {node: '>= 0.6'}
2517 | dependencies:
2518 | mime-db: 1.52.0
2519 | dev: false
2520 |
2521 | /mime/3.0.0:
2522 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
2523 | engines: {node: '>=10.0.0'}
2524 | hasBin: true
2525 | dev: false
2526 |
2527 | /mimic-fn/3.1.0:
2528 | resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==}
2529 | engines: {node: '>=8'}
2530 | dev: false
2531 |
2532 | /mimic-fn/4.0.0:
2533 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
2534 | engines: {node: '>=12'}
2535 |
2536 | /min-document/2.19.0:
2537 | resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
2538 | dependencies:
2539 | dom-walk: 0.1.2
2540 | dev: false
2541 |
2542 | /miniflare/2.10.0:
2543 | resolution: {integrity: sha512-WPveqChVDdmDGv+wFqXjFqEZlZ5/aBlAKX37h/e4TAjl2XsK5nPfQATP8jZXwNDEC5iE29bYZymOqeZkp+t7OA==}
2544 | engines: {node: '>=16.13'}
2545 | hasBin: true
2546 | peerDependencies:
2547 | '@miniflare/storage-redis': 2.10.0
2548 | cron-schedule: ^3.0.4
2549 | ioredis: ^4.27.9
2550 | peerDependenciesMeta:
2551 | '@miniflare/storage-redis':
2552 | optional: true
2553 | cron-schedule:
2554 | optional: true
2555 | ioredis:
2556 | optional: true
2557 | dependencies:
2558 | '@miniflare/cache': 2.10.0
2559 | '@miniflare/cli-parser': 2.10.0
2560 | '@miniflare/core': 2.10.0
2561 | '@miniflare/d1': 2.10.0
2562 | '@miniflare/durable-objects': 2.10.0
2563 | '@miniflare/html-rewriter': 2.10.0
2564 | '@miniflare/http-server': 2.10.0
2565 | '@miniflare/kv': 2.10.0
2566 | '@miniflare/queues': 2.10.0
2567 | '@miniflare/r2': 2.10.0
2568 | '@miniflare/runner-vm': 2.10.0
2569 | '@miniflare/scheduler': 2.10.0
2570 | '@miniflare/shared': 2.10.0
2571 | '@miniflare/sites': 2.10.0
2572 | '@miniflare/storage-file': 2.10.0
2573 | '@miniflare/storage-memory': 2.10.0
2574 | '@miniflare/web-sockets': 2.10.0
2575 | kleur: 4.1.5
2576 | semiver: 1.1.0
2577 | source-map-support: 0.5.21
2578 | undici: 5.9.1
2579 | transitivePeerDependencies:
2580 | - bufferutil
2581 | - utf-8-validate
2582 | dev: true
2583 |
2584 | /miniflare/2.9.0:
2585 | resolution: {integrity: sha512-HBGQ5Jj6sMU1B1hX6G3ML46ThtUvu1nvxgXjDDmhp2RhWKYj0XvcohW/nPPL/MTP1gpvfT880De9EHmobVsDsw==}
2586 | engines: {node: '>=16.13'}
2587 | hasBin: true
2588 | peerDependencies:
2589 | '@miniflare/storage-redis': 2.9.0
2590 | cron-schedule: ^3.0.4
2591 | ioredis: ^4.27.9
2592 | peerDependenciesMeta:
2593 | '@miniflare/storage-redis':
2594 | optional: true
2595 | cron-schedule:
2596 | optional: true
2597 | ioredis:
2598 | optional: true
2599 | dependencies:
2600 | '@miniflare/cache': 2.9.0
2601 | '@miniflare/cli-parser': 2.9.0
2602 | '@miniflare/core': 2.9.0
2603 | '@miniflare/d1': 2.9.0
2604 | '@miniflare/durable-objects': 2.9.0
2605 | '@miniflare/html-rewriter': 2.9.0
2606 | '@miniflare/http-server': 2.9.0
2607 | '@miniflare/kv': 2.9.0
2608 | '@miniflare/queues': 2.9.0
2609 | '@miniflare/r2': 2.9.0
2610 | '@miniflare/runner-vm': 2.9.0
2611 | '@miniflare/scheduler': 2.9.0
2612 | '@miniflare/shared': 2.9.0
2613 | '@miniflare/sites': 2.9.0
2614 | '@miniflare/storage-file': 2.9.0
2615 | '@miniflare/storage-memory': 2.9.0
2616 | '@miniflare/web-sockets': 2.9.0
2617 | kleur: 4.1.5
2618 | semiver: 1.1.0
2619 | source-map-support: 0.5.21
2620 | undici: 5.9.1
2621 | transitivePeerDependencies:
2622 | - bufferutil
2623 | - utf-8-validate
2624 | dev: false
2625 |
2626 | /minimalistic-assert/1.0.1:
2627 | resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
2628 | dev: true
2629 |
2630 | /minimalistic-crypto-utils/1.0.1:
2631 | resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
2632 | dev: true
2633 |
2634 | /minimatch/3.1.2:
2635 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2636 | dependencies:
2637 | brace-expansion: 1.1.11
2638 | dev: false
2639 |
2640 | /minimatch/5.1.0:
2641 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
2642 | engines: {node: '>=10'}
2643 | dependencies:
2644 | brace-expansion: 2.0.1
2645 | dev: false
2646 |
2647 | /minipass-collect/1.0.2:
2648 | resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
2649 | engines: {node: '>= 8'}
2650 | dependencies:
2651 | minipass: 3.3.4
2652 | dev: false
2653 |
2654 | /minipass-fetch/2.1.2:
2655 | resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==}
2656 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2657 | dependencies:
2658 | minipass: 3.3.4
2659 | minipass-sized: 1.0.3
2660 | minizlib: 2.1.2
2661 | optionalDependencies:
2662 | encoding: 0.1.13
2663 | dev: false
2664 |
2665 | /minipass-flush/1.0.5:
2666 | resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
2667 | engines: {node: '>= 8'}
2668 | dependencies:
2669 | minipass: 3.3.4
2670 | dev: false
2671 |
2672 | /minipass-pipeline/1.2.4:
2673 | resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
2674 | engines: {node: '>=8'}
2675 | dependencies:
2676 | minipass: 3.3.4
2677 | dev: false
2678 |
2679 | /minipass-sized/1.0.3:
2680 | resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
2681 | engines: {node: '>=8'}
2682 | dependencies:
2683 | minipass: 3.3.4
2684 | dev: false
2685 |
2686 | /minipass/3.3.4:
2687 | resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==}
2688 | engines: {node: '>=8'}
2689 | dependencies:
2690 | yallist: 4.0.0
2691 | dev: false
2692 |
2693 | /minizlib/2.1.2:
2694 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
2695 | engines: {node: '>= 8'}
2696 | dependencies:
2697 | minipass: 3.3.4
2698 | yallist: 4.0.0
2699 | dev: false
2700 |
2701 | /mkdirp/1.0.4:
2702 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
2703 | engines: {node: '>=10'}
2704 | hasBin: true
2705 | dev: false
2706 |
2707 | /mlly/0.3.19:
2708 | resolution: {integrity: sha512-zMq5n3cOf4fOzA4WoeulxagbAgMChdev3MgP6K51k7M0u2whTXxupfIY4VVzws4vxkiWhwH1rVQcsw7zDGfRhA==}
2709 | dev: true
2710 |
2711 | /ms/2.0.0:
2712 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
2713 | dev: false
2714 |
2715 | /ms/2.1.2:
2716 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2717 | dev: false
2718 |
2719 | /ms/2.1.3:
2720 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2721 | dev: false
2722 |
2723 | /mustache/4.2.0:
2724 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
2725 | hasBin: true
2726 |
2727 | /nan/2.17.0:
2728 | resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==}
2729 | dev: false
2730 |
2731 | /nanoid/3.3.4:
2732 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
2733 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2734 | hasBin: true
2735 |
2736 | /negotiator/0.6.3:
2737 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
2738 | engines: {node: '>= 0.6'}
2739 | dev: false
2740 |
2741 | /next-tick/1.1.0:
2742 | resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
2743 | dev: false
2744 |
2745 | /node-fetch/2.6.7:
2746 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
2747 | engines: {node: 4.x || >=6.0.0}
2748 | peerDependencies:
2749 | encoding: ^0.1.0
2750 | peerDependenciesMeta:
2751 | encoding:
2752 | optional: true
2753 | dependencies:
2754 | whatwg-url: 5.0.0
2755 | dev: false
2756 |
2757 | /node-forge/1.3.1:
2758 | resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
2759 | engines: {node: '>= 6.13.0'}
2760 |
2761 | /node-gyp-build/4.5.0:
2762 | resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==}
2763 | hasBin: true
2764 | dev: false
2765 |
2766 | /node-gyp/9.3.0:
2767 | resolution: {integrity: sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==}
2768 | engines: {node: ^12.22 || ^14.13 || >=16}
2769 | hasBin: true
2770 | dependencies:
2771 | env-paths: 2.2.1
2772 | glob: 7.2.3
2773 | graceful-fs: 4.2.10
2774 | make-fetch-happen: 10.2.1
2775 | nopt: 6.0.0
2776 | npmlog: 6.0.2
2777 | rimraf: 3.0.2
2778 | semver: 7.3.8
2779 | tar: 6.1.11
2780 | which: 2.0.2
2781 | transitivePeerDependencies:
2782 | - bluebird
2783 | - supports-color
2784 | dev: false
2785 |
2786 | /nopt/6.0.0:
2787 | resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
2788 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2789 | hasBin: true
2790 | dependencies:
2791 | abbrev: 1.1.1
2792 | dev: false
2793 |
2794 | /normalize-path/3.0.0:
2795 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2796 | engines: {node: '>=0.10.0'}
2797 | dev: false
2798 |
2799 | /normalize-url/6.1.0:
2800 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
2801 | engines: {node: '>=10'}
2802 | dev: false
2803 |
2804 | /npm-run-path/5.1.0:
2805 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
2806 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2807 | dependencies:
2808 | path-key: 4.0.0
2809 |
2810 | /npmlog/6.0.2:
2811 | resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
2812 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
2813 | dependencies:
2814 | are-we-there-yet: 3.0.1
2815 | console-control-strings: 1.1.0
2816 | gauge: 4.0.4
2817 | set-blocking: 2.0.0
2818 | dev: false
2819 |
2820 | /npx-import/1.1.4:
2821 | resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==}
2822 | dependencies:
2823 | execa: 6.1.0
2824 | parse-package-name: 1.0.0
2825 | semver: 7.3.8
2826 | validate-npm-package-name: 4.0.0
2827 |
2828 | /nth-check/2.1.1:
2829 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
2830 | dependencies:
2831 | boolbase: 1.0.0
2832 | dev: false
2833 |
2834 | /nwsapi/2.2.2:
2835 | resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==}
2836 | dev: false
2837 |
2838 | /object-keys/0.2.0:
2839 | resolution: {integrity: sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==}
2840 | deprecated: Please update to the latest object-keys
2841 | dependencies:
2842 | foreach: 2.0.6
2843 | indexof: 0.0.1
2844 | is: 0.2.7
2845 | dev: true
2846 |
2847 | /object-keys/0.4.0:
2848 | resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==}
2849 | dev: true
2850 |
2851 | /octal/1.0.0:
2852 | resolution: {integrity: sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==}
2853 | dev: true
2854 |
2855 | /octokit-plugin-create-pull-request/3.13.1:
2856 | resolution: {integrity: sha512-nsWZRn7NrqZvqGl3E0VcDDyyS/4xbNNvwWM2yk65TViLdEBoOhIU5SqKdfqANa+WPwv5DwHsO3T10DK1qMg72w==}
2857 | dependencies:
2858 | '@octokit/types': 6.41.0
2859 | dev: false
2860 |
2861 | /once/1.4.0:
2862 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2863 | dependencies:
2864 | wrappy: 1.0.2
2865 |
2866 | /onetime/6.0.0:
2867 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
2868 | engines: {node: '>=12'}
2869 | dependencies:
2870 | mimic-fn: 4.0.0
2871 |
2872 | /optionator/0.8.3:
2873 | resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
2874 | engines: {node: '>= 0.8.0'}
2875 | dependencies:
2876 | deep-is: 0.1.4
2877 | fast-levenshtein: 2.0.6
2878 | levn: 0.3.0
2879 | prelude-ls: 1.1.2
2880 | type-check: 0.3.2
2881 | word-wrap: 1.2.3
2882 | dev: false
2883 |
2884 | /p-map/4.0.0:
2885 | resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
2886 | engines: {node: '>=10'}
2887 | dependencies:
2888 | aggregate-error: 3.1.0
2889 | dev: false
2890 |
2891 | /parse-asn1/5.1.6:
2892 | resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==}
2893 | dependencies:
2894 | asn1.js: 5.4.1
2895 | browserify-aes: 1.2.0
2896 | evp_bytestokey: 1.0.3
2897 | pbkdf2: 3.1.2
2898 | safe-buffer: 5.2.1
2899 | dev: true
2900 |
2901 | /parse-package-name/1.0.0:
2902 | resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==}
2903 |
2904 | /parse-uri/1.0.7:
2905 | resolution: {integrity: sha512-eWuZCMKNlVkXrEoANdXxbmqhu2SQO9jUMCSpdbJDObin0JxISn6e400EWsSRbr/czdKvWKkhZnMKEGUwf/Plmg==}
2906 | engines: {node: '>= 0.10'}
2907 | dev: false
2908 |
2909 | /parse5-htmlparser2-tree-adapter/7.0.0:
2910 | resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
2911 | dependencies:
2912 | domhandler: 5.0.3
2913 | parse5: 7.1.1
2914 | dev: false
2915 |
2916 | /parse5/7.1.1:
2917 | resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==}
2918 | dependencies:
2919 | entities: 4.4.0
2920 | dev: false
2921 |
2922 | /path-is-absolute/1.0.1:
2923 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2924 | engines: {node: '>=0.10.0'}
2925 | dev: false
2926 |
2927 | /path-key/3.1.1:
2928 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2929 | engines: {node: '>=8'}
2930 |
2931 | /path-key/4.0.0:
2932 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
2933 | engines: {node: '>=12'}
2934 |
2935 | /path-parse/1.0.7:
2936 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2937 | dev: true
2938 |
2939 | /path-to-regexp/6.2.1:
2940 | resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
2941 | dev: false
2942 |
2943 | /pbkdf2/3.1.2:
2944 | resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
2945 | engines: {node: '>=0.12'}
2946 | dependencies:
2947 | create-hash: 1.2.0
2948 | create-hmac: 1.1.7
2949 | ripemd160: 2.0.2
2950 | safe-buffer: 5.2.1
2951 | sha.js: 2.4.11
2952 | dev: true
2953 |
2954 | /picocolors/1.0.0:
2955 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2956 | dev: true
2957 |
2958 | /picomatch/2.3.1:
2959 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2960 | engines: {node: '>=8.6'}
2961 |
2962 | /postcss/8.4.18:
2963 | resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==}
2964 | engines: {node: ^10 || ^12 || >=14}
2965 | dependencies:
2966 | nanoid: 3.3.4
2967 | picocolors: 1.0.0
2968 | source-map-js: 1.0.2
2969 | dev: true
2970 |
2971 | /prelude-ls/1.1.2:
2972 | resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
2973 | engines: {node: '>= 0.8.0'}
2974 | dev: false
2975 |
2976 | /prettier/2.7.1:
2977 | resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==}
2978 | engines: {node: '>=10.13.0'}
2979 | hasBin: true
2980 | dev: true
2981 |
2982 | /process-es6/0.11.6:
2983 | resolution: {integrity: sha512-GYBRQtL4v3wgigq10Pv58jmTbFXlIiTbSfgnNqZLY0ldUPqy1rRxDI5fCjoCpnM6TqmHQI8ydzTBXW86OYc0gA==}
2984 | dev: true
2985 |
2986 | /process-nextick-args/2.0.1:
2987 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
2988 | dev: true
2989 |
2990 | /process/0.11.10:
2991 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
2992 | engines: {node: '>= 0.6.0'}
2993 | dev: false
2994 |
2995 | /promise-inflight/1.0.1:
2996 | resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
2997 | peerDependencies:
2998 | bluebird: '*'
2999 | peerDependenciesMeta:
3000 | bluebird:
3001 | optional: true
3002 | dev: false
3003 |
3004 | /promise-retry/2.0.1:
3005 | resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
3006 | engines: {node: '>=10'}
3007 | dependencies:
3008 | err-code: 2.0.3
3009 | retry: 0.12.0
3010 | dev: false
3011 |
3012 | /prr/0.0.0:
3013 | resolution: {integrity: sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==}
3014 | dev: true
3015 |
3016 | /prr/1.0.1:
3017 | resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
3018 | dev: true
3019 |
3020 | /psl/1.9.0:
3021 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
3022 | dev: false
3023 |
3024 | /public-encrypt/4.0.3:
3025 | resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
3026 | dependencies:
3027 | bn.js: 4.12.0
3028 | browserify-rsa: 4.1.0
3029 | create-hash: 1.2.0
3030 | parse-asn1: 5.1.6
3031 | randombytes: 2.1.0
3032 | safe-buffer: 5.2.1
3033 | dev: true
3034 |
3035 | /punycode/2.1.1:
3036 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
3037 | engines: {node: '>=6'}
3038 | dev: false
3039 |
3040 | /punycode2/1.0.1:
3041 | resolution: {integrity: sha512-+TXpd9YRW4YUZZPoRHJ3DILtWwootGc2DsgvfHmklQ8It1skINAuqSdqizt5nlTaBmwrYACHkHApCXjc9gHk2Q==}
3042 | engines: {node: '>=0.10'}
3043 | dev: false
3044 |
3045 | /querystringify/2.2.0:
3046 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
3047 | dev: false
3048 |
3049 | /randombytes/2.1.0:
3050 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
3051 | dependencies:
3052 | safe-buffer: 5.2.1
3053 | dev: true
3054 |
3055 | /randomfill/1.0.4:
3056 | resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
3057 | dependencies:
3058 | randombytes: 2.1.0
3059 | safe-buffer: 5.2.1
3060 | dev: true
3061 |
3062 | /re2/1.17.7:
3063 | resolution: {integrity: sha512-X8GSuiBoVWwcjuppqSjsIkRxNUKDdjhkO9SBekQbZ2ksqWUReCy7DQPWOVpoTnpdtdz5PIpTTxTFzvJv5UMfjA==}
3064 | requiresBuild: true
3065 | dependencies:
3066 | install-artifact-from-github: 1.3.1
3067 | nan: 2.17.0
3068 | node-gyp: 9.3.0
3069 | transitivePeerDependencies:
3070 | - bluebird
3071 | - supports-color
3072 | dev: false
3073 |
3074 | /readable-stream/1.0.34:
3075 | resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==}
3076 | dependencies:
3077 | core-util-is: 1.0.3
3078 | inherits: 2.0.4
3079 | isarray: 0.0.1
3080 | string_decoder: 0.10.31
3081 | dev: true
3082 |
3083 | /readable-stream/1.1.14:
3084 | resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
3085 | dependencies:
3086 | core-util-is: 1.0.3
3087 | inherits: 2.0.4
3088 | isarray: 0.0.1
3089 | string_decoder: 0.10.31
3090 | dev: true
3091 |
3092 | /readable-stream/2.3.7:
3093 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
3094 | dependencies:
3095 | core-util-is: 1.0.3
3096 | inherits: 2.0.4
3097 | isarray: 1.0.0
3098 | process-nextick-args: 2.0.1
3099 | safe-buffer: 5.1.2
3100 | string_decoder: 1.1.1
3101 | util-deprecate: 1.0.2
3102 | dev: true
3103 |
3104 | /readable-stream/3.6.0:
3105 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
3106 | engines: {node: '>= 6'}
3107 | dependencies:
3108 | inherits: 2.0.4
3109 | string_decoder: 1.3.0
3110 | util-deprecate: 1.0.2
3111 |
3112 | /readdirp/3.6.0:
3113 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
3114 | engines: {node: '>=8.10.0'}
3115 | dependencies:
3116 | picomatch: 2.3.1
3117 | dev: false
3118 |
3119 | /requires-port/1.0.0:
3120 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
3121 | dev: false
3122 |
3123 | /resolve/1.22.1:
3124 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
3125 | hasBin: true
3126 | dependencies:
3127 | is-core-module: 2.10.0
3128 | path-parse: 1.0.7
3129 | supports-preserve-symlinks-flag: 1.0.0
3130 | dev: true
3131 |
3132 | /retry/0.12.0:
3133 | resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
3134 | engines: {node: '>= 4'}
3135 | dev: false
3136 |
3137 | /rimraf/3.0.2:
3138 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
3139 | hasBin: true
3140 | dependencies:
3141 | glob: 7.2.3
3142 | dev: false
3143 |
3144 | /ripemd160/2.0.2:
3145 | resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
3146 | dependencies:
3147 | hash-base: 3.1.0
3148 | inherits: 2.0.4
3149 | dev: true
3150 |
3151 | /rollup-plugin-inject/3.0.2:
3152 | resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
3153 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
3154 | dependencies:
3155 | estree-walker: 0.6.1
3156 | magic-string: 0.25.9
3157 | rollup-pluginutils: 2.8.2
3158 | dev: false
3159 |
3160 | /rollup-plugin-node-builtins/2.1.2:
3161 | resolution: {integrity: sha512-bxdnJw8jIivr2yEyt8IZSGqZkygIJOGAWypXvHXnwKAbUcN4Q/dGTx7K0oAJryC/m6aq6tKutltSeXtuogU6sw==}
3162 | dependencies:
3163 | browserify-fs: 1.0.0
3164 | buffer-es6: 4.9.3
3165 | crypto-browserify: 3.12.0
3166 | process-es6: 0.11.6
3167 | dev: true
3168 |
3169 | /rollup-plugin-node-globals/1.4.0:
3170 | resolution: {integrity: sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==}
3171 | dependencies:
3172 | acorn: 5.7.4
3173 | buffer-es6: 4.9.3
3174 | estree-walker: 0.5.2
3175 | magic-string: 0.22.5
3176 | process-es6: 0.11.6
3177 | rollup-pluginutils: 2.8.2
3178 | dev: true
3179 |
3180 | /rollup-plugin-node-polyfills/0.2.1:
3181 | resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==}
3182 | dependencies:
3183 | rollup-plugin-inject: 3.0.2
3184 | dev: false
3185 |
3186 | /rollup-pluginutils/2.8.2:
3187 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
3188 | dependencies:
3189 | estree-walker: 0.6.1
3190 |
3191 | /rollup/2.77.3:
3192 | resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==}
3193 | engines: {node: '>=10.0.0'}
3194 | hasBin: true
3195 | optionalDependencies:
3196 | fsevents: 2.3.2
3197 | dev: true
3198 |
3199 | /safe-buffer/5.1.2:
3200 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
3201 | dev: true
3202 |
3203 | /safe-buffer/5.2.1:
3204 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
3205 |
3206 | /safer-buffer/2.1.2:
3207 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
3208 |
3209 | /saxes/6.0.0:
3210 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
3211 | engines: {node: '>=v12.22.7'}
3212 | dependencies:
3213 | xmlchars: 2.2.0
3214 | dev: false
3215 |
3216 | /selfsigned/2.1.1:
3217 | resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==}
3218 | engines: {node: '>=10'}
3219 | dependencies:
3220 | node-forge: 1.3.1
3221 |
3222 | /semiver/1.1.0:
3223 | resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==}
3224 | engines: {node: '>=6'}
3225 |
3226 | /semver/2.3.2:
3227 | resolution: {integrity: sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==}
3228 | hasBin: true
3229 | dev: true
3230 |
3231 | /semver/7.3.8:
3232 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
3233 | engines: {node: '>=10'}
3234 | hasBin: true
3235 | dependencies:
3236 | lru-cache: 6.0.0
3237 |
3238 | /set-blocking/2.0.0:
3239 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
3240 | dev: false
3241 |
3242 | /set-cookie-parser/2.5.1:
3243 | resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
3244 |
3245 | /sha.js/2.4.11:
3246 | resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
3247 | hasBin: true
3248 | dependencies:
3249 | inherits: 2.0.4
3250 | safe-buffer: 5.2.1
3251 | dev: true
3252 |
3253 | /shebang-command/2.0.0:
3254 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
3255 | engines: {node: '>=8'}
3256 | dependencies:
3257 | shebang-regex: 3.0.0
3258 |
3259 | /shebang-regex/3.0.0:
3260 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
3261 | engines: {node: '>=8'}
3262 |
3263 | /signal-exit/3.0.7:
3264 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
3265 |
3266 | /smart-buffer/4.2.0:
3267 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
3268 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
3269 | dev: false
3270 |
3271 | /smartquotes/2.3.2:
3272 | resolution: {integrity: sha512-0R6YJ5hLpDH4mZR7N5eZ12oCMLspvGOHL9A9SEm2e3b/CQmQidekW4SWSKEmor/3x6m3NCBBEqLzikcZC9VJNQ==}
3273 | engines: {node: '>=4.0.0'}
3274 | dev: false
3275 |
3276 | /socks-proxy-agent/7.0.0:
3277 | resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==}
3278 | engines: {node: '>= 10'}
3279 | dependencies:
3280 | agent-base: 6.0.2
3281 | debug: 4.3.4
3282 | socks: 2.7.1
3283 | transitivePeerDependencies:
3284 | - supports-color
3285 | dev: false
3286 |
3287 | /socks/2.7.1:
3288 | resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
3289 | engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
3290 | dependencies:
3291 | ip: 2.0.0
3292 | smart-buffer: 4.2.0
3293 | dev: false
3294 |
3295 | /source-map-js/1.0.2:
3296 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
3297 | engines: {node: '>=0.10.0'}
3298 | dev: true
3299 |
3300 | /source-map-support/0.5.21:
3301 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
3302 | dependencies:
3303 | buffer-from: 1.1.2
3304 | source-map: 0.6.1
3305 |
3306 | /source-map/0.6.1:
3307 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
3308 | engines: {node: '>=0.10.0'}
3309 |
3310 | /source-map/0.7.4:
3311 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
3312 | engines: {node: '>= 8'}
3313 | dev: false
3314 |
3315 | /sourcemap-codec/1.4.8:
3316 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
3317 | dev: false
3318 |
3319 | /ssri/9.0.1:
3320 | resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==}
3321 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
3322 | dependencies:
3323 | minipass: 3.3.4
3324 | dev: false
3325 |
3326 | /stack-trace/0.0.10:
3327 | resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
3328 |
3329 | /stream-http/3.2.0:
3330 | resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==}
3331 | dependencies:
3332 | builtin-status-codes: 3.0.0
3333 | inherits: 2.0.4
3334 | readable-stream: 3.6.0
3335 | xtend: 4.0.2
3336 | dev: true
3337 |
3338 | /streamsearch/1.1.0:
3339 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
3340 | engines: {node: '>=10.0.0'}
3341 |
3342 | /string-range/1.2.2:
3343 | resolution: {integrity: sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==}
3344 | dev: true
3345 |
3346 | /string-width/4.2.3:
3347 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
3348 | engines: {node: '>=8'}
3349 | dependencies:
3350 | emoji-regex: 8.0.0
3351 | is-fullwidth-code-point: 3.0.0
3352 | strip-ansi: 6.0.1
3353 | dev: false
3354 |
3355 | /string_decoder/0.10.31:
3356 | resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
3357 | dev: true
3358 |
3359 | /string_decoder/1.1.1:
3360 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
3361 | dependencies:
3362 | safe-buffer: 5.1.2
3363 | dev: true
3364 |
3365 | /string_decoder/1.3.0:
3366 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
3367 | dependencies:
3368 | safe-buffer: 5.2.1
3369 |
3370 | /strip-ansi/6.0.1:
3371 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
3372 | engines: {node: '>=8'}
3373 | dependencies:
3374 | ansi-regex: 5.0.1
3375 | dev: false
3376 |
3377 | /strip-final-newline/3.0.0:
3378 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
3379 | engines: {node: '>=12'}
3380 |
3381 | /supports-preserve-symlinks-flag/1.0.0:
3382 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
3383 | engines: {node: '>= 0.4'}
3384 | dev: true
3385 |
3386 | /symbol-tree/3.2.4:
3387 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
3388 | dev: false
3389 |
3390 | /tar/6.1.11:
3391 | resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==}
3392 | engines: {node: '>= 10'}
3393 | dependencies:
3394 | chownr: 2.0.0
3395 | fs-minipass: 2.1.0
3396 | minipass: 3.3.4
3397 | minizlib: 2.1.2
3398 | mkdirp: 1.0.4
3399 | yallist: 4.0.0
3400 | dev: false
3401 |
3402 | /tlds/1.233.0:
3403 | resolution: {integrity: sha512-K05dY1r4lkXk+eE/j2UqHhGWp1bFn+17eYcJP7OepkmI3obLOgan3ZIpmml++wZ4LTIx4r9var373ztO2xb27A==}
3404 | hasBin: true
3405 | dev: false
3406 |
3407 | /to-regex-range/5.0.1:
3408 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3409 | engines: {node: '>=8.0'}
3410 | dependencies:
3411 | is-number: 7.0.0
3412 | dev: false
3413 |
3414 | /tough-cookie/4.1.2:
3415 | resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
3416 | engines: {node: '>=6'}
3417 | dependencies:
3418 | psl: 1.9.0
3419 | punycode: 2.1.1
3420 | universalify: 0.2.0
3421 | url-parse: 1.5.10
3422 | dev: false
3423 |
3424 | /tr46/0.0.3:
3425 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
3426 | dev: false
3427 |
3428 | /tr46/3.0.0:
3429 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
3430 | engines: {node: '>=12'}
3431 | dependencies:
3432 | punycode: 2.1.1
3433 | dev: false
3434 |
3435 | /type-check/0.3.2:
3436 | resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
3437 | engines: {node: '>= 0.8.0'}
3438 | dependencies:
3439 | prelude-ls: 1.1.2
3440 | dev: false
3441 |
3442 | /type/1.2.0:
3443 | resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
3444 | dev: false
3445 |
3446 | /type/2.7.2:
3447 | resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
3448 | dev: false
3449 |
3450 | /typedarray-to-buffer/1.0.4:
3451 | resolution: {integrity: sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==}
3452 | dev: true
3453 |
3454 | /typedarray-to-buffer/3.1.5:
3455 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
3456 | dependencies:
3457 | is-typedarray: 1.0.0
3458 | dev: false
3459 |
3460 | /typedarray/0.0.6:
3461 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
3462 | dev: true
3463 |
3464 | /typescript/4.8.4:
3465 | resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
3466 | engines: {node: '>=4.2.0'}
3467 | hasBin: true
3468 | dev: true
3469 |
3470 | /undici/5.9.1:
3471 | resolution: {integrity: sha512-6fB3a+SNnWEm4CJbgo0/CWR8RGcOCQP68SF4X0mxtYTq2VNN8T88NYrWVBAeSX+zb7bny2dx2iYhP3XHi00omg==}
3472 | engines: {node: '>=12.18'}
3473 |
3474 | /unique-filename/2.0.1:
3475 | resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==}
3476 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
3477 | dependencies:
3478 | unique-slug: 3.0.0
3479 | dev: false
3480 |
3481 | /unique-slug/3.0.0:
3482 | resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==}
3483 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
3484 | dependencies:
3485 | imurmurhash: 0.1.4
3486 | dev: false
3487 |
3488 | /universal-user-agent/6.0.0:
3489 | resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
3490 | dev: false
3491 |
3492 | /universalify/0.2.0:
3493 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
3494 | engines: {node: '>= 4.0.0'}
3495 | dev: false
3496 |
3497 | /url-parse/1.5.10:
3498 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
3499 | dependencies:
3500 | querystringify: 2.2.0
3501 | requires-port: 1.0.0
3502 | dev: false
3503 |
3504 | /url-regex-safe/3.0.0_re2@1.17.7:
3505 | resolution: {integrity: sha512-+2U40NrcmtWFVjuxXVt9bGRw6c7/MgkGKN9xIfPrT/2RX0LTkkae6CCEDp93xqUN0UKm/rr821QnHd2dHQmN3A==}
3506 | engines: {node: '>= 10.12.0'}
3507 | peerDependencies:
3508 | re2: ^1.17.2
3509 | peerDependenciesMeta:
3510 | re2:
3511 | optional: true
3512 | dependencies:
3513 | ip-regex: 4.3.0
3514 | re2: 1.17.7
3515 | tlds: 1.233.0
3516 | dev: false
3517 |
3518 | /urlpattern-polyfill/4.0.3:
3519 | resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==}
3520 |
3521 | /utf-8-validate/5.0.9:
3522 | resolution: {integrity: sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==}
3523 | engines: {node: '>=6.14.2'}
3524 | requiresBuild: true
3525 | dependencies:
3526 | node-gyp-build: 4.5.0
3527 | dev: false
3528 |
3529 | /util-deprecate/1.0.2:
3530 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
3531 |
3532 | /uuid/8.3.2:
3533 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
3534 | hasBin: true
3535 | dev: false
3536 |
3537 | /validate-npm-package-name/4.0.0:
3538 | resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==}
3539 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
3540 | dependencies:
3541 | builtins: 5.0.1
3542 |
3543 | /video-extensions/1.2.0:
3544 | resolution: {integrity: sha512-TriMl18BHEsh2KuuSA065tbu4SNAC9fge7k8uKoTTofTq89+Xsg4K1BGbmSVETwUZhqSjd9KwRCNwXAW/buXMg==}
3545 | engines: {node: '>=0.10.0'}
3546 | dev: false
3547 |
3548 | /vite-plugin-cloudflare/0.1.3_avsti35k5pvcdqpmrtlurw25nu:
3549 | resolution: {integrity: sha512-w74aqMK4Ikk+guV50fJqIc+aL2EegF18j9lz8jdrNAiXjo6JhTcmI7Qt15HYbHvSux/vW2Zm8ENfvfjjCmx6Fw==}
3550 | engines: {node: '>=14.0.0'}
3551 | hasBin: true
3552 | peerDependencies:
3553 | miniflare: '*'
3554 | vite: '*'
3555 | dependencies:
3556 | buffer-es6: 4.9.3
3557 | cac: 6.7.14
3558 | esbuild: 0.14.54
3559 | miniflare: 2.10.0
3560 | mlly: 0.3.19
3561 | picocolors: 1.0.0
3562 | process-es6: 0.11.6
3563 | rollup-plugin-node-builtins: 2.1.2
3564 | rollup-plugin-node-globals: 1.4.0
3565 | stream-http: 3.2.0
3566 | vite: 2.9.15
3567 | xhr2: 0.2.1
3568 | dev: true
3569 |
3570 | /vite/2.9.15:
3571 | resolution: {integrity: sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==}
3572 | engines: {node: '>=12.2.0'}
3573 | hasBin: true
3574 | peerDependencies:
3575 | less: '*'
3576 | sass: '*'
3577 | stylus: '*'
3578 | peerDependenciesMeta:
3579 | less:
3580 | optional: true
3581 | sass:
3582 | optional: true
3583 | stylus:
3584 | optional: true
3585 | dependencies:
3586 | esbuild: 0.14.54
3587 | postcss: 8.4.18
3588 | resolve: 1.22.1
3589 | rollup: 2.77.3
3590 | optionalDependencies:
3591 | fsevents: 2.3.2
3592 | dev: true
3593 |
3594 | /vlq/0.2.3:
3595 | resolution: {integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==}
3596 | dev: true
3597 |
3598 | /w3c-xmlserializer/3.0.0:
3599 | resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==}
3600 | engines: {node: '>=12'}
3601 | dependencies:
3602 | xml-name-validator: 4.0.0
3603 | dev: false
3604 |
3605 | /webidl-conversions/3.0.1:
3606 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
3607 | dev: false
3608 |
3609 | /webidl-conversions/7.0.0:
3610 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
3611 | engines: {node: '>=12'}
3612 | dev: false
3613 |
3614 | /websocket/1.0.34:
3615 | resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==}
3616 | engines: {node: '>=4.0.0'}
3617 | dependencies:
3618 | bufferutil: 4.0.6
3619 | debug: 2.6.9
3620 | es5-ext: 0.10.62
3621 | typedarray-to-buffer: 3.1.5
3622 | utf-8-validate: 5.0.9
3623 | yaeti: 0.0.6
3624 | transitivePeerDependencies:
3625 | - supports-color
3626 | dev: false
3627 |
3628 | /whatwg-encoding/2.0.0:
3629 | resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
3630 | engines: {node: '>=12'}
3631 | dependencies:
3632 | iconv-lite: 0.6.3
3633 | dev: false
3634 |
3635 | /whatwg-mimetype/3.0.0:
3636 | resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
3637 | engines: {node: '>=12'}
3638 | dev: false
3639 |
3640 | /whatwg-url/11.0.0:
3641 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
3642 | engines: {node: '>=12'}
3643 | dependencies:
3644 | tr46: 3.0.0
3645 | webidl-conversions: 7.0.0
3646 | dev: false
3647 |
3648 | /whatwg-url/5.0.0:
3649 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
3650 | dependencies:
3651 | tr46: 0.0.3
3652 | webidl-conversions: 3.0.1
3653 | dev: false
3654 |
3655 | /which/2.0.2:
3656 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3657 | engines: {node: '>= 8'}
3658 | hasBin: true
3659 | dependencies:
3660 | isexe: 2.0.0
3661 |
3662 | /whoops/4.1.2:
3663 | resolution: {integrity: sha512-QITkghBnjbKGOtOrJOGrHnupWDX/AHFlcTXL3/A0B5rx2DacLrpuIpcFVmwYb0IOWZ0G3sxYkS8LBSZ4J/ezng==}
3664 | engines: {node: '>= 8'}
3665 | dependencies:
3666 | clean-stack: 3.0.1
3667 | mimic-fn: 3.1.0
3668 | dev: false
3669 |
3670 | /wide-align/1.1.5:
3671 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
3672 | dependencies:
3673 | string-width: 4.2.3
3674 | dev: false
3675 |
3676 | /word-wrap/1.2.3:
3677 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
3678 | engines: {node: '>=0.10.0'}
3679 | dev: false
3680 |
3681 | /wrangler/2.1.11:
3682 | resolution: {integrity: sha512-zXydDzU+KKOwYDD9IX+XdSZMFEPWTghzTN/CiZc+pxHGIjTuQBtbk97trY3i9YKeih/QOSlo+H7Clfoq+6rZLw==}
3683 | engines: {node: '>=16.13.0'}
3684 | hasBin: true
3685 | dependencies:
3686 | '@cloudflare/kv-asset-handler': 0.2.0
3687 | '@esbuild-plugins/node-globals-polyfill': 0.1.1_esbuild@0.14.51
3688 | '@esbuild-plugins/node-modules-polyfill': 0.1.4_esbuild@0.14.51
3689 | '@miniflare/core': 2.9.0
3690 | '@miniflare/d1': 2.9.0
3691 | '@miniflare/durable-objects': 2.9.0
3692 | blake3-wasm: 2.1.5
3693 | chokidar: 3.5.3
3694 | esbuild: 0.14.51
3695 | miniflare: 2.9.0
3696 | nanoid: 3.3.4
3697 | path-to-regexp: 6.2.1
3698 | selfsigned: 2.1.1
3699 | source-map: 0.7.4
3700 | xxhash-wasm: 1.0.1
3701 | optionalDependencies:
3702 | fsevents: 2.3.2
3703 | transitivePeerDependencies:
3704 | - '@miniflare/storage-redis'
3705 | - bufferutil
3706 | - cron-schedule
3707 | - ioredis
3708 | - utf-8-validate
3709 | dev: false
3710 |
3711 | /wrappy/1.0.2:
3712 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3713 |
3714 | /ws/8.9.0:
3715 | resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==}
3716 | engines: {node: '>=10.0.0'}
3717 | peerDependencies:
3718 | bufferutil: ^4.0.1
3719 | utf-8-validate: ^5.0.2
3720 | peerDependenciesMeta:
3721 | bufferutil:
3722 | optional: true
3723 | utf-8-validate:
3724 | optional: true
3725 |
3726 | /xhr2/0.2.1:
3727 | resolution: {integrity: sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==}
3728 | engines: {node: '>= 6'}
3729 | dev: true
3730 |
3731 | /xml-name-validator/4.0.0:
3732 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
3733 | engines: {node: '>=12'}
3734 | dev: false
3735 |
3736 | /xmlchars/2.2.0:
3737 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
3738 | dev: false
3739 |
3740 | /xtend/2.0.6:
3741 | resolution: {integrity: sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==}
3742 | engines: {node: '>=0.4'}
3743 | dependencies:
3744 | is-object: 0.1.2
3745 | object-keys: 0.2.0
3746 | dev: true
3747 |
3748 | /xtend/2.1.2:
3749 | resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==}
3750 | engines: {node: '>=0.4'}
3751 | dependencies:
3752 | object-keys: 0.4.0
3753 | dev: true
3754 |
3755 | /xtend/2.2.0:
3756 | resolution: {integrity: sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==}
3757 | engines: {node: '>=0.4'}
3758 | dev: true
3759 |
3760 | /xtend/3.0.0:
3761 | resolution: {integrity: sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==}
3762 | engines: {node: '>=0.4'}
3763 | dev: true
3764 |
3765 | /xtend/4.0.2:
3766 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
3767 | engines: {node: '>=0.4'}
3768 | dev: true
3769 |
3770 | /xxhash-wasm/1.0.1:
3771 | resolution: {integrity: sha512-Lc9CTvDrH2vRoiaUzz25q7lRaviMhz90pkx6YxR9EPYtF99yOJnv2cB+CQ0hp/TLoqrUsk8z/W2EN31T568Azw==}
3772 | dev: false
3773 |
3774 | /yaeti/0.0.6:
3775 | resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==}
3776 | engines: {node: '>=0.10.32'}
3777 | dev: false
3778 |
3779 | /yallist/4.0.0:
3780 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3781 |
3782 | /youch/2.2.2:
3783 | resolution: {integrity: sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==}
3784 | dependencies:
3785 | '@types/stack-trace': 0.0.29
3786 | cookie: 0.4.2
3787 | mustache: 4.2.0
3788 | stack-trace: 0.0.10
3789 |
3790 | /zod/3.19.1:
3791 | resolution: {integrity: sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==}
3792 | dev: false
3793 |
--------------------------------------------------------------------------------
/src/routes/auth/authorize.ts:
--------------------------------------------------------------------------------
1 | import { parse } from "cookie";
2 | import {
3 | failure,
4 | cors,
5 | request,
6 | createSupabase,
7 | createSession,
8 | } from "../../util/util";
9 |
10 | const DEFAULT_REDIRECT = "https://www.solidjs.com";
11 |
12 | // Validates the Stytch token and redirects the user to their intended path
13 | export default async function (req: Request) {
14 | const url = new URL(req.url);
15 | const token = url.searchParams.get("token") || "";
16 | const {
17 | status_code,
18 | error_message,
19 | session: { idp } = { idp: undefined },
20 | } = await request("/oauth/authenticate", {
21 | body: JSON.stringify({
22 | token,
23 | session_management_type: "idp",
24 | }),
25 | });
26 | if (status_code !== 200) {
27 | return failure(status_code, error_message);
28 | }
29 | // Collect the profile information
30 | let profile: Profile;
31 | try {
32 | profile = await fetch("https://api.github.com/user", {
33 | headers: {
34 | "User-Agent": "api.solidjs.com",
35 | Authorization: `token ${idp?.access_token}`,
36 | },
37 | }).then((res) => res.json());
38 | } catch (error) {
39 | return failure(500, "Couldn't fetch profile information");
40 | }
41 | // Create the session
42 | const session = await createSession
(req, "session");
43 | // Populate the session
44 | session.data = {
45 | id: profile.node_id,
46 | display: profile.login,
47 | avatar: profile.avatar_url,
48 | github_register: profile.created_at,
49 | };
50 | const redirect = parse(req.headers.get("cookie") || "");
51 | const expires_at = Date.now() + 1000 * 60 * 60 * 24 * 90; // 90 days
52 | const jwt = await session.commit(session, expires_at);
53 |
54 | // Upsert the user in the dataaset
55 | const db = createSupabase();
56 | await db.from("users").insert(
57 | [
58 | {
59 | id: profile.node_id,
60 | handle: profile.name,
61 | profile,
62 | provider: "github",
63 | lastlogin_at: "NOW()",
64 | },
65 | ],
66 | { upsert: true }
67 | );
68 |
69 | return new Response(null, {
70 | status: 302,
71 | headers: {
72 | ...cors(req),
73 | Location: (redirect.redirect || DEFAULT_REDIRECT) + `&token=${jwt}`,
74 | },
75 | });
76 | }
77 |
--------------------------------------------------------------------------------
/src/routes/auth/login.ts:
--------------------------------------------------------------------------------
1 | import { serialize } from "cookie";
2 | import { success, failure } from "../../util/util";
3 |
4 | /**
5 | * Sets the redirect cookie and directs the user to the top of authentication process.
6 | */
7 | export default async function (request: Request) {
8 | const { searchParams } = new URL(request.url);
9 | if (!searchParams.has("redirect")) {
10 | return failure(401, "Redirect not supplied");
11 | }
12 | const maxAge = (Date.now() + 1000 * 60 * 60 * 24 * 1 - Date.now()) / 1000;
13 | return success(null, {
14 | status: 302,
15 | headers: {
16 | "Set-Cookie": serialize("redirect", searchParams.get("redirect")!, {
17 | httpOnly: true,
18 | sameSite: "lax",
19 | path: "/",
20 | maxAge, // 1 day expiry
21 | }),
22 | Location: STYTCH_URL,
23 | },
24 | });
25 | }
26 |
--------------------------------------------------------------------------------
/src/routes/auth/profile.ts:
--------------------------------------------------------------------------------
1 | import { failure, success } from "../../util/util";
2 |
3 | /**
4 | * Decodes session information and replies with current user's profile.
5 | */
6 | export default async function (request: AuthenticatedRequest) {
7 | // Verify the session
8 | if (!(await request.session.verify())) {
9 | return failure(401, "Unauthenticated request, please supply a valid user token.", "UNAUTHORIZED_ACCESS");
10 | }
11 | const registered = new Date(request.session.data.github_register);
12 | const max = new Date("2022-01-07T00:00:42Z");
13 | return success({
14 | id: request.session.data.id,
15 | display: request.session.data.display,
16 | avatar: request.session.data.avatar,
17 | github_register: request.session.data.github_register,
18 | allowed: registered < max,
19 | });
20 | }
21 |
--------------------------------------------------------------------------------
/src/routes/hack/adjustvote.ts:
--------------------------------------------------------------------------------
1 | import { failure, success, createSupabase } from "../../util/util";
2 | import { queryVoteCount } from "./votes";
3 | import z from "zod";
4 |
5 | const validate = z.object({
6 | category: z.enum(["best_app", "best_ecosystem", "best_student_project"]),
7 | selection: z.string().max(200).min(3),
8 | });
9 |
10 | /**
11 | * An endpoint allowing users to adjust their hackathon votes
12 | */
13 | export default async function (
14 | request: AuthenticatedRequest & {
15 | content: {
16 | category: string;
17 | selection: string;
18 | };
19 | }
20 | ) {
21 | const content = request.content;
22 | // Validate the incoming request
23 | try {
24 | validate.parse(content);
25 | } catch (err) {
26 | return failure(400, "Invalid content supplied");
27 | }
28 | const registered = new Date(request.session.data.github_register);
29 | const max = new Date("2022-01-07T00:00:42Z");
30 |
31 | // Disallow users registered after the competition start
32 | if (registered > max) {
33 | return failure(400, "Registration date.");
34 | }
35 |
36 | // Toggle the vote in the database
37 | const db = createSupabase();
38 | const votes = await queryVoteCount(request.session.data.id, db);
39 | // Insert the vote
40 | if (!votes[content.category].selections.includes(content.selection)) {
41 | // Ensure the user isn't over voting
42 | if (
43 | votes[content.category].selections.length >= votes[content.category].total
44 | ) {
45 | return failure(400, "Maximum votes reached.");
46 | }
47 | await db.from("solidhack_votes").insert([
48 | {
49 | user_id: request.session.data.id,
50 | category: content.category,
51 | selection: content.selection,
52 | },
53 | ]);
54 | votes[content.category].selections.push(content.selection);
55 | // Remove the vote
56 | } else {
57 | await db
58 | .from("solidhack_votes")
59 | .delete()
60 | .eq("user_id", request.session.data.id)
61 | .eq("category", content.category)
62 | .eq("selection", content.selection);
63 | const position = votes[content.category].selections.indexOf(
64 | content.category
65 | );
66 | votes[content.category].selections.splice(position);
67 | }
68 | return success(votes);
69 | }
70 |
--------------------------------------------------------------------------------
/src/routes/hack/votes.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSession,
5 | createSupabase,
6 | } from "../../util/util";
7 | import { SupabaseClient } from "@supabase/supabase-js";
8 |
9 | /**
10 | * Determines the vote count for the current user.
11 | *
12 | * @param user_id {string} User identifier
13 | * @param db {SupebaseClient} Database client to use
14 | * @returns {object} Structured vote information
15 | */
16 | export async function queryVoteCount(user_id: string, db: SupabaseClient) {
17 | const { data } = await db
18 | .from("solidhack_votes")
19 | .select("category,selection")
20 | .eq("user_id", user_id);
21 |
22 | return data?.reduce(
23 | (memo, row) => {
24 | memo[row.category].selections.push(row.selection);
25 | return memo;
26 | },
27 | {
28 | best_student_project: {
29 | total: 3,
30 | selections: [],
31 | },
32 | best_app: {
33 | total: 3,
34 | selections: [],
35 | },
36 | best_ecosystem: {
37 | total: 3,
38 | selections: [],
39 | },
40 | }
41 | );
42 | }
43 |
44 | /**
45 | * Queries the users current vote count.
46 | */
47 | export default async function votes(request: Request) {
48 | const session = await createSession(request, "session");
49 | // Verify the session
50 | if (!(await session.verify())) {
51 | return failure(401, "Unauthenticated");
52 | }
53 | const votes = await queryVoteCount(session.data.id, createSupabase());
54 | return success(votes);
55 | }
56 |
--------------------------------------------------------------------------------
/src/routes/repl/create.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSupabase,
5 | lengthInUtf8Bytes,
6 | } from "../../util/util";
7 | import { validateREPLFiles } from ".";
8 | import generateToken from "../../util/token";
9 |
10 | /**
11 | * Creates a new REPL for the user and replies with the ID.
12 | */
13 | export default async function (
14 | request: AuthenticatedRequest & {
15 | content: {
16 | title: string;
17 | labels: string[];
18 | version: string;
19 | public: boolean;
20 | files: REPLFile[];
21 | };
22 | params: {
23 | id: string;
24 | };
25 | }
26 | ) {
27 | const anonymous = request.session ? true : false;
28 | let write_token;
29 | let user_id;
30 | // Set user value or lookup token if anonymous REPL
31 | if (anonymous) {
32 | user_id = request.session.data.id;
33 | } else {
34 | write_token = generateToken(100);
35 | }
36 | const content = request.content;
37 | // Basic file validation
38 | const fileErrors = validateREPLFiles(content.files);
39 | if (fileErrors !== null) {
40 | return failure(404, fileErrors, "FILE_FORMAT_ERROR");
41 | }
42 | const db = createSupabase();
43 | const { data: repls, error } = await db.from("repls").insert([
44 | {
45 | user_id,
46 | title: content.title,
47 | version: content.version,
48 | labels: content.labels,
49 | public: content.public,
50 | files: content.files,
51 | write_token,
52 | size: lengthInUtf8Bytes(JSON.stringify(content.files)),
53 | },
54 | ]);
55 | if (error !== null) {
56 | console.log(error);
57 | return failure(404, "Internal or unknown error detected", "INTERNAL_ERROR");
58 | }
59 | return success({ id: repls[0].id, write_token });
60 | }
61 |
--------------------------------------------------------------------------------
/src/routes/repl/delete.ts:
--------------------------------------------------------------------------------
1 | import { failure, success, createSupabase } from "../../util/util";
2 |
3 | /**
4 | * Soft deletes a users REPL
5 | */
6 | export default async function (
7 | request: AuthenticatedRequest & {
8 | params: {
9 | id: string;
10 | };
11 | }
12 | ) {
13 | // Check if the record exists
14 | const db = createSupabase();
15 | const { count, error } = await db
16 | .from("repls")
17 | .select("*", { count: "exact" })
18 | .eq("id", request.params.id)
19 | .eq("user_id", request.session.data.id)
20 | .is("deleted_at", null);
21 |
22 | if (error !== null) {
23 | return failure(404, "Internal or unknown error detected", "INTERNAL_ERROR");
24 | }
25 | if (count == 0) {
26 | return failure(
27 | 404,
28 | "An invalid or unowned REPL ID was supplied",
29 | "INVALID_REPL_ID"
30 | );
31 | }
32 | // Soft delete the record
33 | await db
34 | .from("repls")
35 | .update({ deleted_at: "NOW()" })
36 | .eq("id", request.params.id);
37 |
38 | return success({});
39 | }
40 |
--------------------------------------------------------------------------------
/src/routes/repl/get.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSupabase,
5 | lengthInUtf8Bytes,
6 | internalError,
7 | } from "../../util/util";
8 | import { decompressFromURL } from "@amoutonbrady/lz-string";
9 | import { v4 as uuid } from "uuid";
10 | import z from "zod";
11 |
12 | const ID = z.string().uuid();
13 |
14 | // Build the invalid resposnse message
15 | const invalidItem = () =>
16 | failure(404, "An invalid or unowned REPL ID was supplied", "INVALID_REPL_ID");
17 |
18 | /**
19 | * Retrieves a users REPL from the database.
20 | */
21 | export default async function (
22 | request: AuthenticatedRequest & {
23 | params: {
24 | id: string;
25 | };
26 | }
27 | ) {
28 | // If the ID is not a UUID then it's likely a legacy hash, attempt
29 | // to request from legacy worker, parse and output it.
30 | const parseUuid = ID.safeParse(request.params.id);
31 | if (!parseUuid.success) {
32 | return await handleLegacyRepl(request.params.id);
33 | }
34 | const db = createSupabase();
35 | const user_id = request.session ? request.session.data.id : "null";
36 | const { data: repls, error } = await db
37 | .from("repls")
38 | .select(
39 | "id,user_id,title,labels,public,version,size,files,created_at,updated_at"
40 | )
41 | .eq("id", request.params.id)
42 | .is("deleted_at", null)
43 | .or(`public.eq.true,user_id.eq.${user_id}`);
44 |
45 | if (error !== null) return internalError();
46 | if (repls.length == 0 || repls === null) return invalidItem();
47 | return success(repls[0]);
48 | }
49 |
50 | // Handles requesting legacy REPL values from the proxy and merging into
51 | // new Supabase dataset. Note that this method is meant to be removed within
52 | // 6 months. This is a temporary stop-gap solution between KV and Supabase.
53 | const handleLegacyRepl = async (id: string) => {
54 | // Find related REPL before proxying to the user
55 | const db = createSupabase();
56 | const { data: repls, error } = await db
57 | .from("repls")
58 | .select(
59 | "id,user_id,title,labels,public,version,size,files,created_at,updated_at"
60 | )
61 | .eq("guid", id)
62 | .is("deleted_at", null)
63 | .or(`public.eq.true`);
64 |
65 | if (error === null && repls.length !== 0) {
66 | return success(repls[0]);
67 | }
68 |
69 | // Retrieve REPL from legacy worker cache
70 | const body = await fetch(
71 | `https://workers-kv-migrate.pilotio.workers.dev?id=${id}`
72 | );
73 | if (body.status !== 200) {
74 | return invalidItem();
75 | }
76 | const json: { version: string; data: string } = await body.json();
77 | const decompressed = JSON.parse(decompressFromURL(json.data)!);
78 | const files = (decompressed || []).map(
79 | (file: { name: string; source: string, type: string }) => {
80 | return {
81 | name: `${file.name}.${file.type}`,
82 | content: file.source,
83 | };
84 | }
85 | );
86 | let payload = {
87 | id: uuid(),
88 | title: "Imported legacy REPL",
89 | guid: id,
90 | labels: ["legacy"],
91 | user_id: null,
92 | public: true,
93 | version: json.version,
94 | size: lengthInUtf8Bytes(JSON.stringify(json.data)),
95 | files,
96 | created_at: new Date(),
97 | updated_at: null,
98 | };
99 | // Load the record into the cache
100 | const { error: insertError } = await db.from("repls").insert([payload]);
101 | if (insertError !== null) return internalError();
102 | return success(payload);
103 | };
104 |
--------------------------------------------------------------------------------
/src/routes/repl/index.ts:
--------------------------------------------------------------------------------
1 | import { SupabaseClient } from "@supabase/supabase-js";
2 | import z, { ZodIssue } from "zod";
3 | import { APIError } from "../../util/util";
4 |
5 | const File = z.array(
6 | z.object({
7 | name: z.string().min(3).max(50),
8 | content: z.string(),
9 | })
10 | );
11 |
12 | /**
13 | * Parses a list of incoming REPL files if they are valid or not.
14 | *
15 | * @param files {Array} A list of REPL files.
16 | * @returns Returns a list of Zod formatted issues
17 | */
18 | export function validateREPLFiles(files: REPLFile[]): ZodIssue[] | null {
19 | const data = File.safeParse(files);
20 | if (!data.success) {
21 | return data.error.issues;
22 | }
23 | return null;
24 | }
25 |
26 | /**
27 | * Validates REPL ownership based on incoming values.
28 | *
29 | * @param id {string} UUID of the REPL to validate.
30 | * @param user_id {string} Identifier of the owning user.
31 | * @param write_token {string} One off write token of the user.
32 | * @returns Returns true of ownership can be confirmed
33 | */
34 | export async function validateREPLOwnership(
35 | db: SupabaseClient,
36 | id: string,
37 | user_id?: string | null,
38 | write_token? : string,
39 | ): Promise {
40 | console.log(user_id, write_token);
41 | if (!user_id && !write_token) {
42 | throw new APIError("Write token or user auth token required", "AUTHORIZATION_ERROR", 403);
43 | }
44 | const { data: repl, error } = await db
45 | .from("repls")
46 | .select("user_id, write_token")
47 | .eq("id", id);
48 | if (error !== null || repl.length == 0) {
49 | throw new APIError("Referenced REPL does not exist", "INVALID_REPL", 400);
50 | } else if (write_token && repl[0].write_token !== write_token) {
51 | throw new APIError("An invalid write token was supplied", "INVALID_WRITE_TOKEN", 401);
52 | } else if (user_id && repl[0].user_id !== user_id) {
53 | throw new APIError("Identified user does not own REPL", "INVALID_OWNER", 403);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/routes/repl/list.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSupabase,
5 | internalError,
6 | } from "../../util/util";
7 |
8 | type CreateREPL = {
9 | title: string;
10 | labels: string[];
11 | data: string;
12 | };
13 |
14 | // Lists all available repls
15 | export default async function (
16 | request: AuthenticatedRequest & {
17 | content: CreateREPL;
18 | params?: {
19 | user?: string;
20 | };
21 | }
22 | ) {
23 | let id;
24 | let publicValues = "(true,false)";
25 | const url = new URL(request.url);
26 | const limit = url.searchParams.get("limit");
27 | const offset = url.searchParams.get("offset");
28 | const ascending = url.searchParams.get("asc");
29 | const userHandle = request?.params?.user;
30 |
31 | // Count the listings
32 | const db = createSupabase();
33 |
34 | // Handle the case where a user param is supplied
35 | if (userHandle) {
36 | const { data: users, error } = await db
37 | .from("users")
38 | .select("id")
39 | .eq("profile->>login", userHandle);
40 | if (error || users.length == 0) {
41 | return failure(404, "Invalid user specified", "INVALID_USER");
42 | }
43 | id = users[0].id;
44 | publicValues = "(true)";
45 | } else {
46 | id = request.session.data.id;
47 | }
48 |
49 | const { count } = await db
50 | .from("repls")
51 | .select("*", { count: "exact" })
52 | .eq("user_id", id)
53 | .is("deleted_at", null)
54 | .filter("public", "in", publicValues);
55 |
56 | const { data: repls, error } = await db
57 | .from("repls")
58 | .select("id,title,public,labels,version,size,created_at,updated_at")
59 | .eq("user_id", id)
60 | .range(offset ? parseInt(offset) : 0, limit ? parseInt(limit) : 25)
61 | .order("created_at", { ascending: ascending ? true : false })
62 | .is("deleted_at", null)
63 | .filter("public", "in", publicValues);
64 |
65 | if (error !== null) return internalError();
66 | return success({
67 | total: count,
68 | list: repls,
69 | });
70 | }
71 |
--------------------------------------------------------------------------------
/src/routes/repl/patch.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSupabase,
5 | lengthInUtf8Bytes,
6 | internalError,
7 | } from "../../util/util";
8 | import { validateREPLOwnership, validateREPLFiles } from ".";
9 |
10 | /**
11 | * Updates the REPL with newly supplied information.
12 | */
13 | export default async function (
14 | request: AuthenticatedRequest & {
15 | content: {
16 | write_token?: string;
17 | title?: string;
18 | labels?: string[];
19 | version?: string;
20 | public?: boolean;
21 | files?: REPLFile[];
22 | };
23 | params: {
24 | id: string;
25 | };
26 | }
27 | ) {
28 | const content = request.content;
29 | const db = createSupabase();
30 | // Check ownership of the REPL
31 | try {
32 | await validateREPLOwnership(
33 | db,
34 | request.params.id,
35 | request.session?.data?.id,
36 | content.write_token,
37 | );
38 | } catch (error: any) {
39 | return failure(
40 | error.status_code,
41 | error.message,
42 | error.status,
43 | );
44 | }
45 | // Validate REPL structure
46 | if (content.files) {
47 | const fileErrors = validateREPLFiles(content.files);
48 | if (fileErrors !== null) {
49 | return failure(404, fileErrors, "FILE_FORMAT_ERROR");
50 | }
51 | }
52 | // If an ID param is supplied then ensure it exists
53 | const { data } = await db
54 | .from("repls")
55 | .select("*")
56 | .eq("id", request.params.id);
57 |
58 | if (data == null) {
59 | return failure(
60 | 404,
61 | "An invalid or unowned REPL ID was supplied",
62 | "INVALID_REPL_ID"
63 | );
64 | }
65 | const { error } = await db
66 | .from("repls")
67 | .update({
68 | title: content.title ?? data[0].title,
69 | version: content.version ?? data[0].version,
70 | user_id: request.session.data.id ?? data[0].user_id,
71 | labels: content.labels ?? data[0].labels,
72 | public: content.public ?? data[0].public,
73 | files: content.files ?? data[0].files,
74 | updated_at: "NOW()",
75 | size: content.files
76 | ? lengthInUtf8Bytes(JSON.stringify(content.files))
77 | : data[0].size,
78 | })
79 | .match({ id: request.params.id });
80 |
81 | if (error !== null) return internalError();
82 | return success({});
83 | }
84 |
--------------------------------------------------------------------------------
/src/routes/repl/transfer.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSupabase,
5 | internalError,
6 | } from "../../util/util";
7 | import { validateREPLOwnership } from ".";
8 |
9 | /**
10 | * Transfers a REPL to a user.
11 | */
12 | export default async function (
13 | request: AuthenticatedRequest & {
14 | content: {
15 | write_token?: string;
16 | };
17 | params: {
18 | id: string;
19 | };
20 | }
21 | ) {
22 | const content = request.content;
23 | const db = createSupabase();
24 | // Check ownership of the REPL
25 | try {
26 | await validateREPLOwnership(
27 | db,
28 | request.params.id,
29 | null,
30 | content.write_token,
31 | );
32 | } catch (error: any) {
33 | return failure(
34 | error.status_code,
35 | error.message,
36 | error.status,
37 | );
38 | }
39 | const { error } = await db
40 | .from("repls")
41 | .update({
42 | user_id: request.session.data.id,
43 | transferred_at: new Date()
44 | })
45 | .match({ id: request.params.id });
46 |
47 | if (error !== null) return internalError();
48 | return success({});
49 | }
50 |
--------------------------------------------------------------------------------
/src/routes/repl/update.ts:
--------------------------------------------------------------------------------
1 | import {
2 | failure,
3 | success,
4 | createSupabase,
5 | lengthInUtf8Bytes,
6 | internalError,
7 | } from "../../util/util";
8 | import { validateREPLOwnership, validateREPLFiles } from ".";
9 |
10 | /**
11 | * Updates the REPL with newly supplied information.
12 | */
13 | export default async function (
14 | request: AuthenticatedRequest & {
15 | content: {
16 | write_token?: string;
17 | title: string;
18 | labels: string[];
19 | version: string;
20 | public: boolean;
21 | files: REPLFile[];
22 | };
23 | params: {
24 | id: string;
25 | };
26 | }
27 | ) {
28 | // Basic file validation
29 | const content = request.content;
30 | const db = createSupabase();
31 | // Check ownership of the REPL
32 | try {
33 | await validateREPLOwnership(
34 | db,
35 | request.params.id,
36 | request.session?.data?.id,
37 | content.write_token,
38 | );
39 | } catch (error: any) {
40 | return failure(
41 | error.status_code,
42 | error.message,
43 | error.status,
44 | );
45 | }
46 | // Validate REPL structure
47 | const fileErrors = validateREPLFiles(content.files);
48 | if (fileErrors !== null) {
49 | return failure(404, fileErrors, "FILE_FORMAT_ERROR");
50 | }
51 | const { error } = await db
52 | .from("repls")
53 | .update({
54 | title: content.title,
55 | version: content.version,
56 | labels: content.labels,
57 | public: content.public,
58 | files: content.files,
59 | updated_at: "NOW()",
60 | size: lengthInUtf8Bytes(JSON.stringify(content.files)),
61 | })
62 | .match({ id: request.params.id });
63 |
64 | if (error !== null) internalError();
65 | return success({});
66 | }
67 |
--------------------------------------------------------------------------------
/src/routes/solidex/links.ts:
--------------------------------------------------------------------------------
1 | import { failure, success } from "../../util/util";
2 | import getMetaTags from "../../util/metadata";
3 |
4 | // Validates and collects OpenGraph data of a URL for use in a submission
5 | export default async function (request: AuthenticatedRequest) {
6 | const urlParse = new URL(request.url);
7 | const link = urlParse.searchParams.get("url") || "";
8 | if (link == "") {
9 | return failure(
10 | 404,
11 | "You must supply a URL in the url query string to parse",
12 | "MISSING_URL"
13 | );
14 | }
15 | // Typical browser headers should be set else sites such as dev.to wont reply at all
16 | try {
17 | const { meta, og, links, $ } = await getMetaTags(link, {
18 | headers: {
19 | "user-agent":
20 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
21 | "accept-encoding": "gzip, deflate, br",
22 | referer: "https://www.solidjs.com/",
23 | accept:
24 | "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
25 | "accept-language": "en-US;q=0.8",
26 | },
27 | });
28 | // Sanitize and standardize the response body
29 | let response = {
30 | title: og?.title || meta?.title || null,
31 | site_name: og?.site_name || null,
32 | type: og?.type || null,
33 | url: og?.url || meta?.url || null,
34 | description: og?.description || meta?.description || null,
35 | image: og?.image || null,
36 | author: links?.name || null,
37 | author_url: links?.url || null,
38 | published_at: meta?.startDate || meta?.datePublished || null,
39 | };
40 | // dev.to
41 | if ($ && link.includes("dev.to/")) {
42 | response["published_at"] = $("time").attr("datetime") || null;
43 | const article = $("article");
44 | response["author"] = article.attr("data-author-name") || null;
45 | }
46 | // github.com
47 | if (link.includes("github.com/")) {
48 | const path = link.replace("https://", "");
49 | response["author"] = path.split("/")[1];
50 | response["author_url"] = `https://www.github.com/${response["author"]}`;
51 | }
52 | return success(response);
53 | } catch (err) {
54 | return failure(
55 | 404,
56 | "Failed to parse the supplied URL, sorry",
57 | "INTERNAL_ERROR"
58 | );
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/routes/solidex/list.ts:
--------------------------------------------------------------------------------
1 | import { success } from "../../util/util";
2 | import { Resource } from "./types";
3 | import videos from "@solid.js/solidex/dist/videos.json";
4 | import podcasts from "@solid.js/solidex/dist/podcasts.json";
5 | import articles from "@solid.js/solidex/dist/articles.json";
6 | import packages from "@solid.js/solidex/dist/packages.json";
7 |
8 | // Lists all available repls
9 | export default async function (
10 | request: AuthenticatedRequest & {
11 | params: {
12 | type: string;
13 | };
14 | }
15 | ) {
16 | let list: Array = [];
17 | switch (request.params.type) {
18 | case "resources":
19 | list = [...videos, ...articles, ...podcasts];
20 | break;
21 | case "packages":
22 | list = packages;
23 | break;
24 | }
25 | return success(list);
26 | }
27 |
--------------------------------------------------------------------------------
/src/routes/solidex/submit.ts:
--------------------------------------------------------------------------------
1 | import { failure, success } from "../../util/util";
2 | import { z } from "zod";
3 | import { Octokit } from "@octokit/core";
4 | import { ResourceType, ResourceCategory } from "./types";
5 | import { createPullRequest } from "octokit-plugin-create-pull-request";
6 |
7 | interface GithubFileStructure {
8 | content: string;
9 | encoding: BufferEncoding;
10 | }
11 |
12 | // Add the PR plugin to Octokit
13 | const OctokitWithPlugin = Octokit.plugin(createPullRequest);
14 |
15 | // Validation sets
16 | const submission = z.object({
17 | link: z.string().url(),
18 | title: z.string().max(200),
19 | description: z.string(),
20 | author: z.string().max(100),
21 | author_url: z.string().url().optional(),
22 | keywords: z.array(z.string()).max(10).min(3),
23 | type: z.enum(["article", "video", "podcast", "package"]),
24 | official: z.boolean(),
25 | categories: z.array(
26 | z.enum([
27 | "primitive",
28 | "router",
29 | "data",
30 | "ui",
31 | "plugin",
32 | "starters",
33 | "build_utility",
34 | "add_on",
35 | "testing",
36 | "educational",
37 | ])
38 | ),
39 | published_at: z.number(),
40 | });
41 |
42 | // Lists all available repls
43 | export default async function (
44 | request: AuthenticatedRequest & {
45 | content: {
46 | title: string;
47 | link: string;
48 | author: string;
49 | author_url: string;
50 | description: string;
51 | type: typeof ResourceType;
52 | categories: typeof ResourceCategory[];
53 | keywords: string[];
54 | official: boolean;
55 | published_at: number;
56 | };
57 | }
58 | ) {
59 | // Perform validations
60 | try {
61 | submission.parse(request.content);
62 | } catch (err) {
63 | if (err instanceof z.ZodError) {
64 | return failure(404, err.issues, "VALIDATION_ERROR");
65 | }
66 | }
67 | // Handle inserting the submission
68 | const files = {
69 | [`resources/${request.content.type}s.ts`]: (file: GithubFileStructure) => {
70 | // @TODO: Determine a safe way to add the submission to the TS file
71 | const content = file.content;
72 | return Buffer.from(content, file.encoding)
73 | .toString("utf-8")
74 | .toUpperCase();
75 | },
76 | };
77 | const octokit = new OctokitWithPlugin({
78 | auth: GITHUB_TOKEN,
79 | });
80 | const pr = await octokit.createPullRequest({
81 | owner: "solidjs",
82 | repo: "solidex",
83 | title: `${request.content.type} Submission: ${request.content.title}`,
84 | body: "This pull request was submitted via the Solid Site request form.",
85 | base: "main",
86 | head: "pull-request-branch-name",
87 | changes: [
88 | {
89 | files,
90 | commit: `Adding ${request.content.title} submission to filesets`,
91 | },
92 | ],
93 | });
94 | if (pr == null) {
95 | return failure(
96 | 404,
97 | "Could not complete sending your submission",
98 | "INTERNAL_ERROR"
99 | );
100 | }
101 | return success(pr);
102 | }
103 |
--------------------------------------------------------------------------------
/src/routes/solidex/types.ts:
--------------------------------------------------------------------------------
1 | export interface Resource {
2 | title: string;
3 | link: string;
4 | author?: string;
5 | author_url?: string;
6 | description?: string;
7 | type: string;
8 | categories: string[];
9 | official?: boolean; // If the resource is an official Solid resource
10 | keywords?: string[];
11 | published_at?: number;
12 | }
13 |
14 | export const ResourceType = {
15 | Article: "article",
16 | Video: "video",
17 | Podcast: "podcast",
18 | Library: "library",
19 | Package: "package",
20 | };
21 | export const ResourceCategory = {
22 | Primitives: "primitive",
23 | Routers: "router",
24 | Data: "data",
25 | UI: "ui",
26 | Plugins: "plugin",
27 | Starters: "starters",
28 | BuildUtilities: "build_utility",
29 | AddOn: "add_on",
30 | Testing: "testing",
31 | Educational: "educational",
32 | };
33 |
--------------------------------------------------------------------------------
/src/routes/status.ts:
--------------------------------------------------------------------------------
1 | import { success } from "../util/util";
2 |
3 | /**
4 | * Queries the users current vote count.
5 | */
6 | export default async function votes() {
7 | return success({
8 | version: "1.0.11",
9 | available: true,
10 | message: null,
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/src/util/metadata.ts:
--------------------------------------------------------------------------------
1 | import * as cheerio from "cheerio/lib/slim";
2 |
3 | type Meta = { [key: string]: string | undefined };
4 |
5 | const readMetatag = (el: any, name: string) => {
6 | const prop = el.attr("name") || el.attr("property") || el.attr("itemprop");
7 | return prop == name ? el.attr("content") : null;
8 | };
9 |
10 | const readLink = (el: any, name: string) => {
11 | const prop = el.attr("name") || el.attr("property") || el.attr("itemprop");
12 | if (prop == name) {
13 | if (el.attr("content")) {
14 | return el.attr("content");
15 | }
16 | if (el.attr("href")) {
17 | return el.attr("href");
18 | }
19 | }
20 | return null;
21 | };
22 |
23 | const getMetaTags = async (
24 | url: string,
25 | requestInit?: Request | RequestInit | undefined
26 | ) => {
27 | if (!/(^http(s?):\/\/[^\s$.?#].[^\s]*)/i.test(url)) return {};
28 | const response = await fetch(url, requestInit);
29 | const body = await response.text();
30 | const $ = cheerio.load(body);
31 | const title = $("title");
32 | let og: Meta = {},
33 | meta: Meta = {},
34 | links: Meta = {};
35 | if (title) meta.title = $(title).text();
36 | const canonical = $("link[rel=canonical]");
37 | if (canonical) meta.url = canonical.attr("href");
38 | // Parse meta tag values
39 | const metas = $("meta");
40 | for (let i = 0; i < metas.length; i++) {
41 | const el = metas[i];
42 | [
43 | "title",
44 | "description",
45 | "image",
46 | "datePublished",
47 | "genre",
48 | "startDate",
49 | ].forEach((s) => {
50 | const val = readMetatag($(el), s);
51 | if (val) meta[s] = val;
52 | });
53 | [
54 | "og:title",
55 | "og:description",
56 | "og:image",
57 | "og:url",
58 | "og:site_name",
59 | "og:type",
60 | ].forEach((s) => {
61 | const val = readMetatag($(el), s);
62 | if (val) og[s.split(":")[1]] = val;
63 | });
64 | }
65 | // Parse link values
66 | const link = $("link");
67 | for (let i = 0; i < link.length; i++) {
68 | const el = link[i];
69 | ["name", "url"].forEach((s) => {
70 | const val = readLink($(el), s);
71 | if (val) links[s] = val;
72 | });
73 | }
74 | return { meta, og, links, $ };
75 | };
76 |
77 | export default getMetaTags;
78 |
--------------------------------------------------------------------------------
/src/util/token.ts:
--------------------------------------------------------------------------------
1 |
2 | const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
3 |
4 | export default function generateToken(n: number) {
5 | let token = '';
6 | for(var i = 0; i < n; i++) {
7 | token += chars[Math.floor(Math.random() * chars.length)];
8 | }
9 | return token;
10 | }
11 |
--------------------------------------------------------------------------------
/src/util/util.ts:
--------------------------------------------------------------------------------
1 | import * as jwt from "@tsndr/cloudflare-worker-jwt";
2 | import { createClient } from "@supabase/supabase-js";
3 |
4 | /**
5 | * Creates a new database client
6 | *
7 | * @returns Returns a new initialized Supabase client
8 | */
9 | export function createSupabase() {
10 | return createClient(SUPABASE_URL, SUPABASE_KEY, {
11 | fetch,
12 | });
13 | }
14 |
15 | /**
16 | * Sends a structured success response to the user.
17 | *
18 | * @param data {object|string} Data to send back as serialized response
19 | * @param init {object} Response initialization values
20 | * @returns Response object to send back
21 | */
22 | export function success(data: object | string | null, init?: ResponseInit) {
23 | return new Response(data ? JSON.stringify(data) : null, {
24 | ...init,
25 | headers: {
26 | ...cors(),
27 | ...init?.headers,
28 | },
29 | });
30 | }
31 |
32 | /**
33 | * Sends a failure response to the user.
34 | *
35 | * @param code {number} HTTP Status code
36 | * @param message {string} Message of the error
37 | * @returns Response object to send back
38 | */
39 | export function failure(
40 | code: number,
41 | message: string | object,
42 | status_code: string | undefined = undefined
43 | ) {
44 | return new Response(
45 | JSON.stringify({
46 | status_code,
47 | status_message: message,
48 | }),
49 | {
50 | status: code,
51 | statusText: typeof message === "string" ? message : "ERROR",
52 | headers: {
53 | ...cors(),
54 | },
55 | }
56 | );
57 | }
58 |
59 | /**
60 | * Handles preflight OPTION requests.
61 | *
62 | * @param request {Request} Request object
63 | * @returns Properly structured preflight response
64 | */
65 | export function handleOptions(request: Request) {
66 | let headers = request.headers;
67 | if (
68 | headers.get("Origin") !== null &&
69 | headers.get("Access-Control-Request-Method") !== null &&
70 | headers.get("Access-Control-Request-Headers") !== null
71 | ) {
72 | return new Response(null, {
73 | headers: {
74 | ...cors(request),
75 | },
76 | });
77 | } else {
78 | return new Response(null, {
79 | headers: {
80 | Allow: "GET, HEAD, POST, OPTIONS, PUT, DELETE, PATCH",
81 | },
82 | });
83 | }
84 | }
85 |
86 | /**
87 | * CORs output generator based on dynamic request.
88 | *
89 | * @param _request {Request} Incoming request object
90 | * @returns A set of default cors headers to reply with.
91 | */
92 | export function cors(_request?: Request) {
93 | return {
94 | "Content-Type": "application/json",
95 | "Access-Control-Allow-Origin": "*",
96 | "Access-Control-Allow-Credentials": "true",
97 | "Access-Control-Allow-Headers": "Content-Type, Authorization",
98 | "Access-Control-Allow-Methods": "GET,HEAD,POST,PUT,OPTIONS,DELETE,PATCH",
99 | "Access-Control-Max-Age": "86400",
100 | };
101 | }
102 |
103 | // Helpful request function
104 | export function request(url: string, options: any): Promise {
105 | return fetch(`${STYTCH_API}${url}`, {
106 | ...options,
107 | method: options.method || "POST",
108 | headers: {
109 | Authorization: "Basic " + btoa(`${STYTCH_PROJECT_ID}:${STYTCH_SECRET}`),
110 | "Content-Type": "application/json",
111 | ...options.headers,
112 | },
113 | }).then((res) => res.json());
114 | }
115 |
116 | /**
117 | * General session management utility for handling JWTs.
118 | *
119 | * @param request {Request} The incoming request object
120 | * @param session_id {string} Session identifier
121 | * @param initial_data {object} Initial data for the session
122 | * @returns {object.id} Session identifier
123 | * @returns {object.data} Session data object
124 | * @returns {object.commit} Function for commiting/serializing the session
125 | * @returns {object.verify} Helper function to verify the session
126 | */
127 | export async function createSession(
128 | request: Request,
129 | session_id: string,
130 | initial_data: T = {} as T
131 | ): Promise> {
132 | let session_token = request.headers.get("authorization");
133 | if (session_token) {
134 | session_token = session_token.substring(7);
135 | }
136 | const token_data: any | undefined = session_token
137 | ? jwt.decode(session_token)?.payload
138 | : undefined;
139 | const session_data: T = Object.assign(
140 | {},
141 | initial_data,
142 | token_data?.payload ?? {}
143 | );
144 | const commit = async (session: Session, expires_at: number) => {
145 | return await jwt.sign(
146 | {
147 | payload: session.data,
148 | exp: expires_at,
149 | },
150 | STYTCH_SECRET
151 | );
152 | };
153 | const verify = async (): Promise => {
154 | return (
155 | typeof session_token === "string" &&
156 | (await jwt.verify(session_token, STYTCH_SECRET)) &&
157 | (jwt.decode(session_token).payload as any).exp > Date.now()
158 | );
159 | };
160 | return {
161 | id: session_id,
162 | data: session_data,
163 | commit,
164 | verify,
165 | ...(session_token ? { expires_at: token_data?.exp } : {}),
166 | };
167 | }
168 |
169 | /**
170 | * String size calculator that returns length in bytes.
171 | *
172 | * @param str {string} String to be measured
173 | * @returns {number} Size of the string in bytes
174 | */
175 | export function lengthInUtf8Bytes(str: string): number {
176 | // Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence.
177 | var m = encodeURIComponent(str).match(/%[89ABab]/g);
178 | return str.length + (m ? m.length : 0);
179 | }
180 |
181 | /**
182 | * Authentication middleware to validate the incoming user.
183 | *
184 | * @param request {Request} Request coming into the API.
185 | */
186 | export async function withAuth(request: AuthenticatedRequest) {
187 | try {
188 | const session = await createSession(request, "session");
189 | if (!(await session.verify())) {
190 | return failure(
191 | 401,
192 | "Your request could not be properly authenticated.",
193 | "AUTHORIZATION_FAILURE"
194 | );
195 | }
196 | request.session = session;
197 | } catch (err) {
198 | return failure(
199 | 401,
200 | "Your request could not be properly authenticated.",
201 | "UNAUTHENTICATED"
202 | );
203 | }
204 | return undefined;
205 | }
206 |
207 | /**
208 | * Authentication middleware to validate the incoming user.
209 | *
210 | * @param request {Request} Request coming into the API.
211 | */
212 | export async function withOptionalAuth(request: AuthenticatedRequest) {
213 | if (
214 | request.headers.get("authorization") &&
215 | request.headers.get("authorization") !== ""
216 | ) {
217 | return withAuth(request);
218 | }
219 | return undefined;
220 | }
221 |
222 | /**
223 | * Returns a failure notice as a standard internal error message.
224 | */
225 | export const internalError = () =>
226 | failure(404, "Internal or unknown error detected", "INTERNAL_ERROR");
227 |
228 | /**
229 | * API specific error message.
230 | */
231 | export class APIError extends Error {
232 | public status: string;
233 | public status_code: number;
234 | constructor(message: string, status: string, status_code: number) {
235 | super(message);
236 | this.status_code = status_code;
237 | this.status = status;
238 | this.name = "ValidationError";
239 | }
240 | }
241 |
--------------------------------------------------------------------------------
/src/worker.ts:
--------------------------------------------------------------------------------
1 | import { Router } from "itty-router";
2 | import { withContent } from "itty-router-extras";
3 | import { handleOptions, withAuth, withOptionalAuth } from "./util/util";
4 |
5 | import login from "./routes/auth/login";
6 | import profile from "./routes/auth/profile";
7 | import authorize from "./routes/auth/authorize";
8 |
9 | // import votes from "./routes/hack/votes";
10 | // import adjustvote from "./routes/hack/adjustvote";
11 |
12 | import createRepl from "./routes/repl/create";
13 | import updateRepl from "./routes/repl/update";
14 | import listRepls from "./routes/repl/list";
15 | import deleteRepl from "./routes/repl/delete";
16 | import transferRepl from "./routes/repl/transfer";
17 | import getRepl from "./routes/repl/get";
18 | import patchRepl from "./routes/repl/patch";
19 | import listSolidex from "./routes/solidex/list";
20 | import linksSolidex from "./routes/solidex/links";
21 | import submitSolidex from "./routes/solidex/submit";
22 |
23 | import status from "./routes/status";
24 |
25 | const router = Router();
26 |
27 | // Routes
28 | router.get("/profile", withAuth, profile);
29 | router.get("/auth/login", login);
30 | router.get("/auth/callback", authorize);
31 |
32 | // REPL
33 | router.get("/repl/:id", withOptionalAuth, withContent, getRepl);
34 | router.get("/repl/:user/list", listRepls);
35 | router.get("/repl", withAuth, listRepls);
36 | router.put("/repl/:id", withOptionalAuth, withContent, updateRepl);
37 | router.post("/repl/:id/transfer", withAuth, withContent, transferRepl);
38 | router.patch("/repl/:id", withOptionalAuth, withContent, patchRepl);
39 | router.post("/repl", withOptionalAuth, withContent, createRepl);
40 | router.delete("/repl/:id", withAuth, deleteRepl);
41 |
42 | // Solidex
43 | router.get("/solidex/links", linksSolidex);
44 | router.get("/solidex/:type", listSolidex);
45 | router.post("/solidex", withContent, submitSolidex);
46 |
47 | // SolidHack
48 | // router.get("/hack/votes", withAuth, votes);
49 | // router.post("/hack/votes", withAuth, withContent, adjustvote);
50 |
51 | router.get("/status", status);
52 | router.all("*", status);
53 |
54 | addEventListener("fetch", (event: FetchEvent) => {
55 | if (event.request.method === "OPTIONS") {
56 | return event.respondWith(handleOptions(event.request));
57 | }
58 | return event.respondWith(router.handle(event.request));
59 | });
60 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "allowSyntheticDefaultImports": true,
6 | "module": "CommonJS",
7 | "lib": ["ES2020"],
8 | "moduleResolution": "Node",
9 | "skipLibCheck": true,
10 | "strict": true,
11 | "sourceMap": true,
12 | "resolveJsonModule": true,
13 | "esModuleInterop": true,
14 | "noEmit": true,
15 | "noUnusedLocals": true,
16 | "noUnusedParameters": true,
17 | "noImplicitReturns": true,
18 | "types": ["vite/client", "@cloudflare/workers-types"]
19 | },
20 | "include": ["src", "types.d.ts"],
21 | "exclude": ["node_modules"]
22 | }
23 |
--------------------------------------------------------------------------------
/types.d.ts:
--------------------------------------------------------------------------------
1 | declare;
2 | {
3 | var ENVIRONMENT: "production" | "development";
4 | var STYTCH_PROJECT_ID: string;
5 | var STYTCH_SECRET: string;
6 | var STYTCH_API: string;
7 | var STYTCH_URL: string;
8 | var SUPABASE_URL: string;
9 | var SUPABASE_KEY: string;
10 | var GITHUB_TOKEN: string;
11 | }
12 |
13 | type Profile = {
14 | id: number;
15 | login: string;
16 | node_id: string;
17 | avatar_url: string;
18 | gravatar_id: string;
19 | url: string;
20 | html_url: string;
21 | followers_url: string;
22 | following_url: string;
23 | gists_url: string;
24 | starred_url: string;
25 | subscriptions_url: string;
26 | organizations_url: string;
27 | repos_url: string;
28 | events_url: string;
29 | received_events_url: string;
30 | type: string;
31 | site_admin: boolean;
32 | name: string;
33 | company: string;
34 | blog: string;
35 | location: string;
36 | email: string;
37 | hireable: boolean;
38 | bio: string;
39 | twitter_username: string;
40 | public_repos: number;
41 | public_gists: number;
42 | followers: number;
43 | following: number;
44 | created_at: string;
45 | updated_at: string;
46 | };
47 |
48 | type REPLFile = {
49 | main: string;
50 | content: string[];
51 | };
52 |
53 | interface AuthenticatedRequest extends Request {
54 | session: Session;
55 | }
56 |
57 | type AuthSession = {
58 | id: string;
59 | display: string;
60 | avatar: string;
61 | github_register: string;
62 | };
63 |
64 | type Session = {
65 | readonly id: string;
66 | readonly expires_at?: number;
67 | data: T;
68 | commit(session: Session, expires_at: number): Promise;
69 | verify(): Promise;
70 | };
71 |
--------------------------------------------------------------------------------
/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "solid-api"
2 | workers_dev = true
3 | account_id = "fa2a5e3787deead800c822a0e1171763"
4 | compatibility_date = "2022-04-05"
5 |
6 | [build]
7 | command = "npm run build"
8 |
9 | [vars]
10 | ENVIORNMENT = "production"
11 | STYTCH_PROJECT_ID = ""
12 | STYTCH_SECRET = ""
13 | STYTCH_URL = ""
14 | STYTCH_API = ""
15 | SUPABASE_URL = ""
16 | SUPABASE_KEY = ""
17 |
--------------------------------------------------------------------------------