jbilcke-hf HF staff commited on
Commit
6a2e106
·
1 Parent(s): 5b3357c

update VideoChain API.. it has been a long time

Browse files
.nvmrc CHANGED
@@ -1 +1 @@
1
- v18.16.0
 
1
+ v20.10.0
package-lock.json CHANGED
@@ -38,11 +38,11 @@
38
  }
39
  },
40
  "node_modules/@babel/code-frame": {
41
- "version": "7.22.13",
42
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
43
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
44
  "dependencies": {
45
- "@babel/highlight": "^7.22.13",
46
  "chalk": "^2.4.2"
47
  },
48
  "engines": {
@@ -58,9 +58,9 @@
58
  }
59
  },
60
  "node_modules/@babel/highlight": {
61
- "version": "7.22.20",
62
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
63
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
64
  "dependencies": {
65
  "@babel/helper-validator-identifier": "^7.22.20",
66
  "chalk": "^2.4.2",
@@ -215,9 +215,9 @@
215
  }
216
  },
217
  "node_modules/@npmcli/fs/node_modules/semver": {
218
- "version": "7.5.4",
219
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
220
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
221
  "dependencies": {
222
  "lru-cache": "^6.0.0"
223
  },
@@ -242,9 +242,9 @@
242
  }
243
  },
244
  "node_modules/@puppeteer/browsers": {
245
- "version": "1.8.0",
246
- "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.8.0.tgz",
247
- "integrity": "sha512-TkRHIV6k2D8OlUe8RtG+5jgOF/H98Myx0M6AOafC8DdNVOFiBSFa5cpRDtpm8LXOa9sVwe0+e6Q3FC56X/DZfg==",
248
  "dependencies": {
249
  "debug": "4.3.4",
250
  "extract-zip": "2.0.1",
@@ -293,9 +293,9 @@
293
  }
294
  },
295
  "node_modules/@puppeteer/browsers/node_modules/tar-stream": {
296
- "version": "3.1.6",
297
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
298
- "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
299
  "dependencies": {
300
  "b4a": "^1.6.4",
301
  "fast-fifo": "^1.2.0",
@@ -364,9 +364,9 @@
364
  }
365
  },
366
  "node_modules/@types/express-serve-static-core": {
367
- "version": "4.17.41",
368
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
369
- "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
370
  "dependencies": {
371
  "@types/node": "*",
372
  "@types/qs": "*",
@@ -375,9 +375,9 @@
375
  }
376
  },
377
  "node_modules/@types/ffmpeg-concat": {
378
- "version": "1.1.5",
379
- "resolved": "https://registry.npmjs.org/@types/ffmpeg-concat/-/ffmpeg-concat-1.1.5.tgz",
380
- "integrity": "sha512-9GQwccHuX6yqmnetlMU6DbYDsw1QeCPjaF8SlpS41OEnxPuRmsvT7oEY0/21Dk+irNegt6Xuaqwu/jgRfbeHTQ=="
381
  },
382
  "node_modules/@types/http-errors": {
383
  "version": "2.0.4",
@@ -390,26 +390,26 @@
390
  "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
391
  },
392
  "node_modules/@types/node": {
393
- "version": "20.9.0",
394
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
395
- "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
396
  "dependencies": {
397
  "undici-types": "~5.26.4"
398
  }
399
  },
400
  "node_modules/@types/node-fetch": {
401
- "version": "2.6.9",
402
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz",
403
- "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==",
404
  "dependencies": {
405
  "@types/node": "*",
406
  "form-data": "^4.0.0"
407
  }
408
  },
409
  "node_modules/@types/qs": {
410
- "version": "6.9.10",
411
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
412
- "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw=="
413
  },
414
  "node_modules/@types/range-parser": {
415
  "version": "1.2.7",
@@ -436,9 +436,9 @@
436
  }
437
  },
438
  "node_modules/@types/uuid": {
439
- "version": "9.0.7",
440
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz",
441
- "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g=="
442
  },
443
  "node_modules/@types/yauzl": {
444
  "version": "2.10.3",
@@ -478,9 +478,9 @@
478
  }
479
  },
480
  "node_modules/acorn": {
481
- "version": "8.11.2",
482
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
483
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
484
  "bin": {
485
  "acorn": "bin/acorn"
486
  },
@@ -489,9 +489,9 @@
489
  }
490
  },
491
  "node_modules/acorn-walk": {
492
- "version": "8.3.0",
493
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
494
- "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
495
  "engines": {
496
  "node": ">=0.4.0"
497
  }
@@ -708,15 +708,48 @@
708
  }
709
  },
710
  "node_modules/b4a": {
711
- "version": "1.6.4",
712
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
713
- "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="
714
  },
715
  "node_modules/balanced-match": {
716
  "version": "1.0.2",
717
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
718
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
719
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
720
  "node_modules/base-64": {
721
  "version": "0.1.0",
722
  "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
@@ -742,9 +775,9 @@
742
  ]
743
  },
744
  "node_modules/basic-ftp": {
745
- "version": "5.0.3",
746
- "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz",
747
- "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==",
748
  "engines": {
749
  "node": ">=10.0.0"
750
  }
@@ -964,13 +997,17 @@
964
  }
965
  },
966
  "node_modules/call-bind": {
967
- "version": "1.0.5",
968
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
969
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
970
  "dependencies": {
 
971
  "function-bind": "^1.1.2",
972
- "get-intrinsic": "^1.2.1",
973
- "set-function-length": "^1.1.1"
 
 
 
974
  },
975
  "funding": {
976
  "url": "https://github.com/sponsors/ljharb"
@@ -1019,12 +1056,12 @@
1019
  }
1020
  },
1021
  "node_modules/chromium-bidi": {
1022
- "version": "0.4.33",
1023
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.33.tgz",
1024
- "integrity": "sha512-IxoFM5WGQOIAd95qrSXzJUv4eXIrh+RvU3rwwqIiwYuvfE7U/Llj4fejbsJnjJMUYCuGtVQsY2gv7oGl4aTNSQ==",
1025
  "dependencies": {
1026
  "mitt": "3.0.1",
1027
- "urlpattern-polyfill": "9.0.0"
1028
  },
1029
  "peerDependencies": {
1030
  "devtools-protocol": "*"
@@ -1187,14 +1224,14 @@
1187
  "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
1188
  },
1189
  "node_modules/cosmiconfig": {
1190
- "version": "8.3.6",
1191
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
1192
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
1193
  "dependencies": {
 
1194
  "import-fresh": "^3.3.0",
1195
  "js-yaml": "^4.1.0",
1196
- "parse-json": "^5.2.0",
1197
- "path-type": "^4.0.0"
1198
  },
1199
  "engines": {
1200
  "node": ">=14"
@@ -1371,13 +1408,14 @@
1371
  }
1372
  },
1373
  "node_modules/define-data-property": {
1374
- "version": "1.1.1",
1375
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
1376
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
1377
  "dependencies": {
1378
- "get-intrinsic": "^1.2.1",
 
1379
  "gopd": "^1.0.1",
1380
- "has-property-descriptors": "^1.0.0"
1381
  },
1382
  "engines": {
1383
  "node": ">= 0.4"
@@ -1435,9 +1473,9 @@
1435
  }
1436
  },
1437
  "node_modules/devtools-protocol": {
1438
- "version": "0.0.1203626",
1439
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1203626.tgz",
1440
- "integrity": "sha512-nEzHZteIUZfGCZtTiS1fRpC8UZmsfD1SiyPvaUNvS13dvKf666OAm8YTi0+Ca3n1nLEyu49Cy4+dPWpaHFJk9g=="
1441
  },
1442
  "node_modules/diff": {
1443
  "version": "4.0.2",
@@ -1457,14 +1495,14 @@
1457
  }
1458
  },
1459
  "node_modules/dotenv": {
1460
- "version": "16.3.1",
1461
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
1462
- "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
1463
  "engines": {
1464
  "node": ">=12"
1465
  },
1466
  "funding": {
1467
- "url": "https://github.com/motdotla/dotenv?sponsor=1"
1468
  }
1469
  },
1470
  "node_modules/dup": {
@@ -1481,6 +1519,11 @@
1481
  "safer-buffer": "^2.1.0"
1482
  }
1483
  },
 
 
 
 
 
1484
  "node_modules/ee-first": {
1485
  "version": "1.1.1",
1486
  "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -1549,10 +1592,18 @@
1549
  "is-arrayish": "^0.2.1"
1550
  }
1551
  },
 
 
 
 
 
 
 
 
1552
  "node_modules/escalade": {
1553
- "version": "3.1.1",
1554
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1555
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1556
  "engines": {
1557
  "node": ">=6"
1558
  }
@@ -1811,9 +1862,9 @@
1811
  "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
1812
  },
1813
  "node_modules/fastq": {
1814
- "version": "1.15.0",
1815
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
1816
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
1817
  "dependencies": {
1818
  "reusify": "^1.0.4"
1819
  }
@@ -1918,9 +1969,9 @@
1918
  "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
1919
  },
1920
  "node_modules/ffmpeg-concat/node_modules/semver": {
1921
- "version": "7.5.4",
1922
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
1923
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
1924
  "dependencies": {
1925
  "lru-cache": "^6.0.0"
1926
  },
@@ -2038,9 +2089,9 @@
2038
  }
2039
  },
2040
  "node_modules/follow-redirects": {
2041
- "version": "1.15.3",
2042
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
2043
- "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
2044
  "funding": [
2045
  {
2046
  "type": "individual",
@@ -2135,9 +2186,9 @@
2135
  "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
2136
  },
2137
  "node_modules/fs-extra": {
2138
- "version": "11.1.1",
2139
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
2140
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
2141
  "dependencies": {
2142
  "graceful-fs": "^4.2.0",
2143
  "jsonfile": "^6.0.1",
@@ -2198,15 +2249,19 @@
2198
  }
2199
  },
2200
  "node_modules/get-intrinsic": {
2201
- "version": "1.2.2",
2202
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
2203
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
2204
  "dependencies": {
 
2205
  "function-bind": "^1.1.2",
2206
  "has-proto": "^1.0.1",
2207
  "has-symbols": "^1.0.3",
2208
  "hasown": "^2.0.0"
2209
  },
 
 
 
2210
  "funding": {
2211
  "url": "https://github.com/sponsors/ljharb"
2212
  }
@@ -2470,19 +2525,20 @@
2470
  }
2471
  },
2472
  "node_modules/gpt-tokens": {
2473
- "version": "1.1.3",
2474
- "resolved": "https://registry.npmjs.org/gpt-tokens/-/gpt-tokens-1.1.3.tgz",
2475
- "integrity": "sha512-WVG8bcsX/dE+IwEqtSQZNw1cbtnnlTeLg0aiP4ZNM/mMJpoV6CwnPYt5YZPdhxFqgMZVapGSsZsRQBrVJp49iQ==",
2476
  "dependencies": {
2477
  "decimal.js": "^10.4.3",
2478
  "js-tiktoken": "^1.0.7",
2479
- "openai": "^4.6.1"
 
2480
  }
2481
  },
2482
  "node_modules/gpt-tokens/node_modules/@types/node": {
2483
- "version": "18.18.9",
2484
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz",
2485
- "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==",
2486
  "dependencies": {
2487
  "undici-types": "~5.26.4"
2488
  }
@@ -2507,9 +2563,9 @@
2507
  }
2508
  },
2509
  "node_modules/gpt-tokens/node_modules/openai": {
2510
- "version": "4.18.0",
2511
- "resolved": "https://registry.npmjs.org/openai/-/openai-4.18.0.tgz",
2512
- "integrity": "sha512-0C+waXoU7mvp/1QZzwnmPCkq4t02VJkjL1EXn0Pd7pFuTA0Y4y1LwzSZSiF/tpxw+Pr7diHVJjbfJ8QbdZnEcA==",
2513
  "dependencies": {
2514
  "@types/node": "^18.11.18",
2515
  "@types/node-fetch": "^2.6.4",
@@ -2598,9 +2654,9 @@
2598
  "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
2599
  },
2600
  "node_modules/hasown": {
2601
- "version": "2.0.0",
2602
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
2603
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
2604
  "dependencies": {
2605
  "function-bind": "^1.1.2"
2606
  },
@@ -2857,6 +2913,18 @@
2857
  "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
2858
  "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
2859
  },
 
 
 
 
 
 
 
 
 
 
 
 
2860
  "node_modules/ipaddr.js": {
2861
  "version": "1.9.1",
2862
  "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -2981,9 +3049,9 @@
2981
  "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="
2982
  },
2983
  "node_modules/js-tiktoken": {
2984
- "version": "1.0.7",
2985
- "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.7.tgz",
2986
- "integrity": "sha512-biba8u/clw7iesNEWLOLwrNGoBP2lA+hTaBLs/D45pJdUPFXyxD6nhcDVtADChghv4GgyAiMKYMiRx7x6h7Biw==",
2987
  "dependencies": {
2988
  "base64-js": "^1.5.1"
2989
  }
@@ -3005,9 +3073,9 @@
3005
  }
3006
  },
3007
  "node_modules/jsbn": {
3008
- "version": "0.1.1",
3009
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
3010
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
3011
  },
3012
  "node_modules/json-parse-even-better-errors": {
3013
  "version": "2.3.1",
@@ -3413,9 +3481,9 @@
3413
  "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
3414
  },
3415
  "node_modules/node-abi": {
3416
- "version": "3.51.0",
3417
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz",
3418
- "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==",
3419
  "dependencies": {
3420
  "semver": "^7.3.5"
3421
  },
@@ -3435,9 +3503,9 @@
3435
  }
3436
  },
3437
  "node_modules/node-abi/node_modules/semver": {
3438
- "version": "7.5.4",
3439
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
3440
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
3441
  "dependencies": {
3442
  "lru-cache": "^6.0.0"
3443
  },
@@ -3529,9 +3597,9 @@
3529
  }
3530
  },
3531
  "node_modules/node-gyp-build": {
3532
- "version": "4.6.1",
3533
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz",
3534
- "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==",
3535
  "bin": {
3536
  "node-gyp-build": "bin.js",
3537
  "node-gyp-build-optional": "optional.js",
@@ -3550,9 +3618,9 @@
3550
  }
3551
  },
3552
  "node_modules/node-gyp/node_modules/semver": {
3553
- "version": "7.5.4",
3554
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
3555
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
3556
  "dependencies": {
3557
  "lru-cache": "^6.0.0"
3558
  },
@@ -3678,6 +3746,14 @@
3678
  "form-data": "^4.0.0"
3679
  }
3680
  },
 
 
 
 
 
 
 
 
3681
  "node_modules/p-finally": {
3682
  "version": "1.0.0",
3683
  "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -3891,14 +3967,6 @@
3891
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
3892
  "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
3893
  },
3894
- "node_modules/path-type": {
3895
- "version": "4.0.0",
3896
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
3897
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
3898
- "engines": {
3899
- "node": ">=8"
3900
- }
3901
- },
3902
  "node_modules/pend": {
3903
  "version": "1.2.0",
3904
  "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -4105,30 +4173,33 @@
4105
  }
4106
  },
4107
  "node_modules/puppeteer": {
4108
- "version": "21.5.2",
4109
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.5.2.tgz",
4110
- "integrity": "sha512-BaAGJOq8Fl6/cck6obmwaNLksuY0Bg/lIahCLhJPGXBFUD2mCffypa4A592MaWnDcye7eaHmSK9yot0pxctY8A==",
4111
  "hasInstallScript": true,
4112
  "dependencies": {
4113
- "@puppeteer/browsers": "1.8.0",
4114
- "cosmiconfig": "8.3.6",
4115
- "puppeteer-core": "21.5.2"
 
 
 
4116
  },
4117
  "engines": {
4118
  "node": ">=16.13.2"
4119
  }
4120
  },
4121
  "node_modules/puppeteer-core": {
4122
- "version": "21.5.2",
4123
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.5.2.tgz",
4124
- "integrity": "sha512-v4T0cWnujSKs+iEfmb8ccd7u4/x8oblEyKqplqKnJ582Kw8PewYAWvkH4qUWhitN3O2q9RF7dzkvjyK5HbzjLA==",
4125
  "dependencies": {
4126
- "@puppeteer/browsers": "1.8.0",
4127
- "chromium-bidi": "0.4.33",
4128
  "cross-fetch": "4.0.0",
4129
  "debug": "4.3.4",
4130
- "devtools-protocol": "0.0.1203626",
4131
- "ws": "8.14.2"
4132
  },
4133
  "engines": {
4134
  "node": ">=16.13.2"
@@ -4597,14 +4668,16 @@
4597
  "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
4598
  },
4599
  "node_modules/set-function-length": {
4600
- "version": "1.1.1",
4601
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
4602
- "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
4603
  "dependencies": {
4604
- "define-data-property": "^1.1.1",
4605
- "get-intrinsic": "^1.2.1",
 
 
4606
  "gopd": "^1.0.1",
4607
- "has-property-descriptors": "^1.0.0"
4608
  },
4609
  "engines": {
4610
  "node": ">= 0.4"
@@ -4649,9 +4722,9 @@
4649
  }
4650
  },
4651
  "node_modules/sharp/node_modules/semver": {
4652
- "version": "7.5.4",
4653
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
4654
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
4655
  "dependencies": {
4656
  "lru-cache": "^6.0.0"
4657
  },
@@ -4663,19 +4736,22 @@
4663
  }
4664
  },
4665
  "node_modules/sharp/node_modules/tar-fs": {
4666
- "version": "3.0.4",
4667
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
4668
- "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==",
4669
  "dependencies": {
4670
- "mkdirp-classic": "^0.5.2",
4671
  "pump": "^3.0.0",
4672
  "tar-stream": "^3.1.5"
 
 
 
 
4673
  }
4674
  },
4675
  "node_modules/sharp/node_modules/tar-stream": {
4676
- "version": "3.1.6",
4677
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
4678
- "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
4679
  "dependencies": {
4680
  "b4a": "^1.6.4",
4681
  "fast-fifo": "^1.2.0",
@@ -4718,13 +4794,17 @@
4718
  }
4719
  },
4720
  "node_modules/side-channel": {
4721
- "version": "1.0.4",
4722
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
4723
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
4724
  "dependencies": {
4725
- "call-bind": "^1.0.0",
4726
- "get-intrinsic": "^1.0.2",
4727
- "object-inspect": "^1.9.0"
 
 
 
 
4728
  },
4729
  "funding": {
4730
  "url": "https://github.com/sponsors/ljharb"
@@ -4801,15 +4881,15 @@
4801
  }
4802
  },
4803
  "node_modules/socks": {
4804
- "version": "2.7.1",
4805
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
4806
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
4807
  "dependencies": {
4808
- "ip": "^2.0.0",
4809
  "smart-buffer": "^4.2.0"
4810
  },
4811
  "engines": {
4812
- "node": ">= 10.13.0",
4813
  "npm": ">= 3.0.0"
4814
  }
4815
  },
@@ -4847,11 +4927,6 @@
4847
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4848
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4849
  },
4850
- "node_modules/socks/node_modules/ip": {
4851
- "version": "2.0.0",
4852
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
4853
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
4854
- },
4855
  "node_modules/source-map": {
4856
  "version": "0.6.1",
4857
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -4890,6 +4965,11 @@
4890
  "node": ">=0.10.0"
4891
  }
4892
  },
 
 
 
 
 
4893
  "node_modules/ssri": {
4894
  "version": "9.0.1",
4895
  "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz",
@@ -4910,12 +4990,15 @@
4910
  }
4911
  },
4912
  "node_modules/streamx": {
4913
- "version": "2.15.5",
4914
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz",
4915
- "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==",
4916
  "dependencies": {
4917
  "fast-fifo": "^1.1.0",
4918
  "queue-tick": "^1.0.1"
 
 
 
4919
  }
4920
  },
4921
  "node_modules/string_decoder": {
@@ -5138,9 +5221,9 @@
5138
  "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
5139
  },
5140
  "node_modules/ts-node": {
5141
- "version": "10.9.1",
5142
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
5143
- "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
5144
  "dependencies": {
5145
  "@cspotcode/source-map-support": "^0.8.0",
5146
  "@tsconfig/node10": "^1.0.7",
@@ -5185,9 +5268,9 @@
5185
  "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
5186
  },
5187
  "node_modules/tts-react": {
5188
- "version": "3.0.2",
5189
- "resolved": "https://registry.npmjs.org/tts-react/-/tts-react-3.0.2.tgz",
5190
- "integrity": "sha512-jxtSMP1kSSbaM1YFmeL72vNYu1hoXrrarD2ueXhWFmHrLMK2TEQk9bCogH7ec+EjKJsNNgpDcS3j+uZqCKNZ+A==",
5191
  "engines": {
5192
  "node": ">=18.16.0",
5193
  "npm": ">=9.5.1"
@@ -5240,9 +5323,9 @@
5240
  }
5241
  },
5242
  "node_modules/typescript": {
5243
- "version": "5.2.2",
5244
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
5245
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
5246
  "peer": true,
5247
  "bin": {
5248
  "tsc": "bin/tsc",
@@ -5338,9 +5421,9 @@
5338
  }
5339
  },
5340
  "node_modules/urlpattern-polyfill": {
5341
- "version": "9.0.0",
5342
- "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz",
5343
- "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="
5344
  },
5345
  "node_modules/util-deprecate": {
5346
  "version": "1.0.2",
@@ -5410,9 +5493,9 @@
5410
  "integrity": "sha512-/wNyG+1FpiHhnfQo+TuA/XAUpvOOkKVl0A4qpT+oGcj5SlZCLmM+M1Py/3Sj8sy+YrEauCVITOxCsZKo6sPbQg=="
5411
  },
5412
  "node_modules/web-streams-polyfill": {
5413
- "version": "3.2.1",
5414
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
5415
- "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
5416
  "engines": {
5417
  "node": ">= 8"
5418
  }
@@ -5502,9 +5585,9 @@
5502
  "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
5503
  },
5504
  "node_modules/ws": {
5505
- "version": "8.14.2",
5506
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
5507
- "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
5508
  "engines": {
5509
  "node": ">=10.0.0"
5510
  },
 
38
  }
39
  },
40
  "node_modules/@babel/code-frame": {
41
+ "version": "7.23.5",
42
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
43
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
44
  "dependencies": {
45
+ "@babel/highlight": "^7.23.4",
46
  "chalk": "^2.4.2"
47
  },
48
  "engines": {
 
58
  }
59
  },
60
  "node_modules/@babel/highlight": {
61
+ "version": "7.23.4",
62
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
63
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
64
  "dependencies": {
65
  "@babel/helper-validator-identifier": "^7.22.20",
66
  "chalk": "^2.4.2",
 
215
  }
216
  },
217
  "node_modules/@npmcli/fs/node_modules/semver": {
218
+ "version": "7.6.0",
219
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
220
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
221
  "dependencies": {
222
  "lru-cache": "^6.0.0"
223
  },
 
242
  }
243
  },
244
  "node_modules/@puppeteer/browsers": {
245
+ "version": "1.9.1",
246
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz",
247
+ "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==",
248
  "dependencies": {
249
  "debug": "4.3.4",
250
  "extract-zip": "2.0.1",
 
293
  }
294
  },
295
  "node_modules/@puppeteer/browsers/node_modules/tar-stream": {
296
+ "version": "3.1.7",
297
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
298
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
299
  "dependencies": {
300
  "b4a": "^1.6.4",
301
  "fast-fifo": "^1.2.0",
 
364
  }
365
  },
366
  "node_modules/@types/express-serve-static-core": {
367
+ "version": "4.17.43",
368
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz",
369
+ "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==",
370
  "dependencies": {
371
  "@types/node": "*",
372
  "@types/qs": "*",
 
375
  }
376
  },
377
  "node_modules/@types/ffmpeg-concat": {
378
+ "version": "1.1.6",
379
+ "resolved": "https://registry.npmjs.org/@types/ffmpeg-concat/-/ffmpeg-concat-1.1.6.tgz",
380
+ "integrity": "sha512-DnKd2ZnW+NUdgvgBGQ4T7ndcApN3sIQxcQiDDDYlWutfxUAs/SldWiMtLh5W9UxGTOrXVIk9mHkobfnjOEEFTw=="
381
  },
382
  "node_modules/@types/http-errors": {
383
  "version": "2.0.4",
 
390
  "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
391
  },
392
  "node_modules/@types/node": {
393
+ "version": "20.11.17",
394
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz",
395
+ "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==",
396
  "dependencies": {
397
  "undici-types": "~5.26.4"
398
  }
399
  },
400
  "node_modules/@types/node-fetch": {
401
+ "version": "2.6.11",
402
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
403
+ "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
404
  "dependencies": {
405
  "@types/node": "*",
406
  "form-data": "^4.0.0"
407
  }
408
  },
409
  "node_modules/@types/qs": {
410
+ "version": "6.9.11",
411
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
412
+ "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ=="
413
  },
414
  "node_modules/@types/range-parser": {
415
  "version": "1.2.7",
 
436
  }
437
  },
438
  "node_modules/@types/uuid": {
439
+ "version": "9.0.8",
440
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz",
441
+ "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA=="
442
  },
443
  "node_modules/@types/yauzl": {
444
  "version": "2.10.3",
 
478
  }
479
  },
480
  "node_modules/acorn": {
481
+ "version": "8.11.3",
482
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
483
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
484
  "bin": {
485
  "acorn": "bin/acorn"
486
  },
 
489
  }
490
  },
491
  "node_modules/acorn-walk": {
492
+ "version": "8.3.2",
493
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
494
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
495
  "engines": {
496
  "node": ">=0.4.0"
497
  }
 
708
  }
709
  },
710
  "node_modules/b4a": {
711
+ "version": "1.6.6",
712
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
713
+ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
714
  },
715
  "node_modules/balanced-match": {
716
  "version": "1.0.2",
717
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
718
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
719
  },
720
+ "node_modules/bare-events": {
721
+ "version": "2.2.0",
722
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz",
723
+ "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==",
724
+ "optional": true
725
+ },
726
+ "node_modules/bare-fs": {
727
+ "version": "2.1.3",
728
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.1.3.tgz",
729
+ "integrity": "sha512-Oa7F0QJV7We0mtKq7Tk246uiBrl7vun64cPEsJOEwv2vHjnVL9yO7aH3643aSrd4rXfVe7yhJ9LHZywQQAXKFQ==",
730
+ "optional": true,
731
+ "dependencies": {
732
+ "bare-events": "^2.0.0",
733
+ "bare-os": "^2.0.0",
734
+ "bare-path": "^2.0.0",
735
+ "streamx": "^2.13.0"
736
+ }
737
+ },
738
+ "node_modules/bare-os": {
739
+ "version": "2.1.2",
740
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.1.2.tgz",
741
+ "integrity": "sha512-slQjOn78Q8itnzomNAamiKo5MDpEpV3JnoNZ93lyynaFh6paWcU+5c0GVcZ7EYIJC2unN2JGdF1qupdscYl0Yg==",
742
+ "optional": true
743
+ },
744
+ "node_modules/bare-path": {
745
+ "version": "2.1.0",
746
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz",
747
+ "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==",
748
+ "optional": true,
749
+ "dependencies": {
750
+ "bare-os": "^2.1.0"
751
+ }
752
+ },
753
  "node_modules/base-64": {
754
  "version": "0.1.0",
755
  "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
 
775
  ]
776
  },
777
  "node_modules/basic-ftp": {
778
+ "version": "5.0.4",
779
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz",
780
+ "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==",
781
  "engines": {
782
  "node": ">=10.0.0"
783
  }
 
997
  }
998
  },
999
  "node_modules/call-bind": {
1000
+ "version": "1.0.6",
1001
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz",
1002
+ "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==",
1003
  "dependencies": {
1004
+ "es-errors": "^1.3.0",
1005
  "function-bind": "^1.1.2",
1006
+ "get-intrinsic": "^1.2.3",
1007
+ "set-function-length": "^1.2.0"
1008
+ },
1009
+ "engines": {
1010
+ "node": ">= 0.4"
1011
  },
1012
  "funding": {
1013
  "url": "https://github.com/sponsors/ljharb"
 
1056
  }
1057
  },
1058
  "node_modules/chromium-bidi": {
1059
+ "version": "0.5.8",
1060
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.8.tgz",
1061
+ "integrity": "sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==",
1062
  "dependencies": {
1063
  "mitt": "3.0.1",
1064
+ "urlpattern-polyfill": "10.0.0"
1065
  },
1066
  "peerDependencies": {
1067
  "devtools-protocol": "*"
 
1224
  "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
1225
  },
1226
  "node_modules/cosmiconfig": {
1227
+ "version": "9.0.0",
1228
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
1229
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
1230
  "dependencies": {
1231
+ "env-paths": "^2.2.1",
1232
  "import-fresh": "^3.3.0",
1233
  "js-yaml": "^4.1.0",
1234
+ "parse-json": "^5.2.0"
 
1235
  },
1236
  "engines": {
1237
  "node": ">=14"
 
1408
  }
1409
  },
1410
  "node_modules/define-data-property": {
1411
+ "version": "1.1.2",
1412
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz",
1413
+ "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==",
1414
  "dependencies": {
1415
+ "es-errors": "^1.3.0",
1416
+ "get-intrinsic": "^1.2.2",
1417
  "gopd": "^1.0.1",
1418
+ "has-property-descriptors": "^1.0.1"
1419
  },
1420
  "engines": {
1421
  "node": ">= 0.4"
 
1473
  }
1474
  },
1475
  "node_modules/devtools-protocol": {
1476
+ "version": "0.0.1232444",
1477
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz",
1478
+ "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg=="
1479
  },
1480
  "node_modules/diff": {
1481
  "version": "4.0.2",
 
1495
  }
1496
  },
1497
  "node_modules/dotenv": {
1498
+ "version": "16.4.2",
1499
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.2.tgz",
1500
+ "integrity": "sha512-rZSSFxke7d9nYQ5NeMIwp5PP+f8wXgKNljpOb7KtH6SKW1cEqcXAz9VSJYVLKe7Jhup/gUYOkaeSVyK8GJ+nBg==",
1501
  "engines": {
1502
  "node": ">=12"
1503
  },
1504
  "funding": {
1505
+ "url": "https://dotenvx.com"
1506
  }
1507
  },
1508
  "node_modules/dup": {
 
1519
  "safer-buffer": "^2.1.0"
1520
  }
1521
  },
1522
+ "node_modules/ecc-jsbn/node_modules/jsbn": {
1523
+ "version": "0.1.1",
1524
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1525
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
1526
+ },
1527
  "node_modules/ee-first": {
1528
  "version": "1.1.1",
1529
  "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 
1592
  "is-arrayish": "^0.2.1"
1593
  }
1594
  },
1595
+ "node_modules/es-errors": {
1596
+ "version": "1.3.0",
1597
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1598
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1599
+ "engines": {
1600
+ "node": ">= 0.4"
1601
+ }
1602
+ },
1603
  "node_modules/escalade": {
1604
+ "version": "3.1.2",
1605
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
1606
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
1607
  "engines": {
1608
  "node": ">=6"
1609
  }
 
1862
  "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
1863
  },
1864
  "node_modules/fastq": {
1865
+ "version": "1.17.1",
1866
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
1867
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
1868
  "dependencies": {
1869
  "reusify": "^1.0.4"
1870
  }
 
1969
  "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
1970
  },
1971
  "node_modules/ffmpeg-concat/node_modules/semver": {
1972
+ "version": "7.6.0",
1973
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
1974
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
1975
  "dependencies": {
1976
  "lru-cache": "^6.0.0"
1977
  },
 
2089
  }
2090
  },
2091
  "node_modules/follow-redirects": {
2092
+ "version": "1.15.5",
2093
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
2094
+ "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
2095
  "funding": [
2096
  {
2097
  "type": "individual",
 
2186
  "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
2187
  },
2188
  "node_modules/fs-extra": {
2189
+ "version": "11.2.0",
2190
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
2191
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
2192
  "dependencies": {
2193
  "graceful-fs": "^4.2.0",
2194
  "jsonfile": "^6.0.1",
 
2249
  }
2250
  },
2251
  "node_modules/get-intrinsic": {
2252
+ "version": "1.2.4",
2253
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
2254
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
2255
  "dependencies": {
2256
+ "es-errors": "^1.3.0",
2257
  "function-bind": "^1.1.2",
2258
  "has-proto": "^1.0.1",
2259
  "has-symbols": "^1.0.3",
2260
  "hasown": "^2.0.0"
2261
  },
2262
+ "engines": {
2263
+ "node": ">= 0.4"
2264
+ },
2265
  "funding": {
2266
  "url": "https://github.com/sponsors/ljharb"
2267
  }
 
2525
  }
2526
  },
2527
  "node_modules/gpt-tokens": {
2528
+ "version": "1.2.0",
2529
+ "resolved": "https://registry.npmjs.org/gpt-tokens/-/gpt-tokens-1.2.0.tgz",
2530
+ "integrity": "sha512-bi39NLFhuvDo3dZxtyz1ayznwb/bMq+mOrhZ/kK1Jta9+fpou/h3LA7ZtsiZVzlbSEd4oQXrN74yEAyv2F1xuw==",
2531
  "dependencies": {
2532
  "decimal.js": "^10.4.3",
2533
  "js-tiktoken": "^1.0.7",
2534
+ "openai": "^4.6.1",
2535
+ "openai-chat-tokens": "^0.2.8"
2536
  }
2537
  },
2538
  "node_modules/gpt-tokens/node_modules/@types/node": {
2539
+ "version": "18.19.15",
2540
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.15.tgz",
2541
+ "integrity": "sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA==",
2542
  "dependencies": {
2543
  "undici-types": "~5.26.4"
2544
  }
 
2563
  }
2564
  },
2565
  "node_modules/gpt-tokens/node_modules/openai": {
2566
+ "version": "4.27.0",
2567
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.27.0.tgz",
2568
+ "integrity": "sha512-j1ZEx9NiBpm31rxWqQTjQt1QvH/8001xHsc/pRoPjkRDYWONCb+qkR6L9C7Wl6ar72Mz1ybtn1bv6fqAoTPlKw==",
2569
  "dependencies": {
2570
  "@types/node": "^18.11.18",
2571
  "@types/node-fetch": "^2.6.4",
 
2654
  "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
2655
  },
2656
  "node_modules/hasown": {
2657
+ "version": "2.0.1",
2658
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
2659
+ "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
2660
  "dependencies": {
2661
  "function-bind": "^1.1.2"
2662
  },
 
2913
  "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
2914
  "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
2915
  },
2916
+ "node_modules/ip-address": {
2917
+ "version": "9.0.5",
2918
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
2919
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
2920
+ "dependencies": {
2921
+ "jsbn": "1.1.0",
2922
+ "sprintf-js": "^1.1.3"
2923
+ },
2924
+ "engines": {
2925
+ "node": ">= 12"
2926
+ }
2927
+ },
2928
  "node_modules/ipaddr.js": {
2929
  "version": "1.9.1",
2930
  "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
 
3049
  "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="
3050
  },
3051
  "node_modules/js-tiktoken": {
3052
+ "version": "1.0.10",
3053
+ "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.10.tgz",
3054
+ "integrity": "sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA==",
3055
  "dependencies": {
3056
  "base64-js": "^1.5.1"
3057
  }
 
3073
  }
3074
  },
3075
  "node_modules/jsbn": {
3076
+ "version": "1.1.0",
3077
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
3078
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
3079
  },
3080
  "node_modules/json-parse-even-better-errors": {
3081
  "version": "2.3.1",
 
3481
  "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
3482
  },
3483
  "node_modules/node-abi": {
3484
+ "version": "3.54.0",
3485
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz",
3486
+ "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==",
3487
  "dependencies": {
3488
  "semver": "^7.3.5"
3489
  },
 
3503
  }
3504
  },
3505
  "node_modules/node-abi/node_modules/semver": {
3506
+ "version": "7.6.0",
3507
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
3508
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
3509
  "dependencies": {
3510
  "lru-cache": "^6.0.0"
3511
  },
 
3597
  }
3598
  },
3599
  "node_modules/node-gyp-build": {
3600
+ "version": "4.8.0",
3601
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz",
3602
+ "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==",
3603
  "bin": {
3604
  "node-gyp-build": "bin.js",
3605
  "node-gyp-build-optional": "optional.js",
 
3618
  }
3619
  },
3620
  "node_modules/node-gyp/node_modules/semver": {
3621
+ "version": "7.6.0",
3622
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
3623
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
3624
  "dependencies": {
3625
  "lru-cache": "^6.0.0"
3626
  },
 
3746
  "form-data": "^4.0.0"
3747
  }
3748
  },
3749
+ "node_modules/openai-chat-tokens": {
3750
+ "version": "0.2.8",
3751
+ "resolved": "https://registry.npmjs.org/openai-chat-tokens/-/openai-chat-tokens-0.2.8.tgz",
3752
+ "integrity": "sha512-nW7QdFDIZlAYe6jsCT/VPJ/Lam3/w2DX9oxf/5wHpebBT49KI3TN43PPhYlq1klq2ajzXWKNOLY6U4FNZM7AoA==",
3753
+ "dependencies": {
3754
+ "js-tiktoken": "^1.0.7"
3755
+ }
3756
+ },
3757
  "node_modules/p-finally": {
3758
  "version": "1.0.0",
3759
  "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
 
3967
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
3968
  "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
3969
  },
 
 
 
 
 
 
 
 
3970
  "node_modules/pend": {
3971
  "version": "1.2.0",
3972
  "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
 
4173
  }
4174
  },
4175
  "node_modules/puppeteer": {
4176
+ "version": "21.11.0",
4177
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.11.0.tgz",
4178
+ "integrity": "sha512-9jTHuYe22TD3sNxy0nEIzC7ZrlRnDgeX3xPkbS7PnbdwYjl2o/z/YuCrRBwezdKpbTDTJ4VqIggzNyeRcKq3cg==",
4179
  "hasInstallScript": true,
4180
  "dependencies": {
4181
+ "@puppeteer/browsers": "1.9.1",
4182
+ "cosmiconfig": "9.0.0",
4183
+ "puppeteer-core": "21.11.0"
4184
+ },
4185
+ "bin": {
4186
+ "puppeteer": "lib/esm/puppeteer/node/cli.js"
4187
  },
4188
  "engines": {
4189
  "node": ">=16.13.2"
4190
  }
4191
  },
4192
  "node_modules/puppeteer-core": {
4193
+ "version": "21.11.0",
4194
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.11.0.tgz",
4195
+ "integrity": "sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==",
4196
  "dependencies": {
4197
+ "@puppeteer/browsers": "1.9.1",
4198
+ "chromium-bidi": "0.5.8",
4199
  "cross-fetch": "4.0.0",
4200
  "debug": "4.3.4",
4201
+ "devtools-protocol": "0.0.1232444",
4202
+ "ws": "8.16.0"
4203
  },
4204
  "engines": {
4205
  "node": ">=16.13.2"
 
4668
  "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
4669
  },
4670
  "node_modules/set-function-length": {
4671
+ "version": "1.2.1",
4672
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
4673
+ "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
4674
  "dependencies": {
4675
+ "define-data-property": "^1.1.2",
4676
+ "es-errors": "^1.3.0",
4677
+ "function-bind": "^1.1.2",
4678
+ "get-intrinsic": "^1.2.3",
4679
  "gopd": "^1.0.1",
4680
+ "has-property-descriptors": "^1.0.1"
4681
  },
4682
  "engines": {
4683
  "node": ">= 0.4"
 
4722
  }
4723
  },
4724
  "node_modules/sharp/node_modules/semver": {
4725
+ "version": "7.6.0",
4726
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
4727
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
4728
  "dependencies": {
4729
  "lru-cache": "^6.0.0"
4730
  },
 
4736
  }
4737
  },
4738
  "node_modules/sharp/node_modules/tar-fs": {
4739
+ "version": "3.0.5",
4740
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz",
4741
+ "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==",
4742
  "dependencies": {
 
4743
  "pump": "^3.0.0",
4744
  "tar-stream": "^3.1.5"
4745
+ },
4746
+ "optionalDependencies": {
4747
+ "bare-fs": "^2.1.1",
4748
+ "bare-path": "^2.1.0"
4749
  }
4750
  },
4751
  "node_modules/sharp/node_modules/tar-stream": {
4752
+ "version": "3.1.7",
4753
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
4754
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
4755
  "dependencies": {
4756
  "b4a": "^1.6.4",
4757
  "fast-fifo": "^1.2.0",
 
4794
  }
4795
  },
4796
  "node_modules/side-channel": {
4797
+ "version": "1.0.5",
4798
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz",
4799
+ "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
4800
  "dependencies": {
4801
+ "call-bind": "^1.0.6",
4802
+ "es-errors": "^1.3.0",
4803
+ "get-intrinsic": "^1.2.4",
4804
+ "object-inspect": "^1.13.1"
4805
+ },
4806
+ "engines": {
4807
+ "node": ">= 0.4"
4808
  },
4809
  "funding": {
4810
  "url": "https://github.com/sponsors/ljharb"
 
4881
  }
4882
  },
4883
  "node_modules/socks": {
4884
+ "version": "2.7.3",
4885
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz",
4886
+ "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==",
4887
  "dependencies": {
4888
+ "ip-address": "^9.0.5",
4889
  "smart-buffer": "^4.2.0"
4890
  },
4891
  "engines": {
4892
+ "node": ">= 10.0.0",
4893
  "npm": ">= 3.0.0"
4894
  }
4895
  },
 
4927
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4928
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4929
  },
 
 
 
 
 
4930
  "node_modules/source-map": {
4931
  "version": "0.6.1",
4932
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
 
4965
  "node": ">=0.10.0"
4966
  }
4967
  },
4968
+ "node_modules/sshpk/node_modules/jsbn": {
4969
+ "version": "0.1.1",
4970
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
4971
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
4972
+ },
4973
  "node_modules/ssri": {
4974
  "version": "9.0.1",
4975
  "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz",
 
4990
  }
4991
  },
4992
  "node_modules/streamx": {
4993
+ "version": "2.15.8",
4994
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.8.tgz",
4995
+ "integrity": "sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==",
4996
  "dependencies": {
4997
  "fast-fifo": "^1.1.0",
4998
  "queue-tick": "^1.0.1"
4999
+ },
5000
+ "optionalDependencies": {
5001
+ "bare-events": "^2.2.0"
5002
  }
5003
  },
5004
  "node_modules/string_decoder": {
 
5221
  "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
5222
  },
5223
  "node_modules/ts-node": {
5224
+ "version": "10.9.2",
5225
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
5226
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
5227
  "dependencies": {
5228
  "@cspotcode/source-map-support": "^0.8.0",
5229
  "@tsconfig/node10": "^1.0.7",
 
5268
  "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
5269
  },
5270
  "node_modules/tts-react": {
5271
+ "version": "3.0.5",
5272
+ "resolved": "https://registry.npmjs.org/tts-react/-/tts-react-3.0.5.tgz",
5273
+ "integrity": "sha512-K69R/vTCm83UxqiPiARzlx8yXTqYmwHKAyww2OCylh+5BjB+YnGRRbAjVn7+OC2GinocSQhWUw4f+vmiN1+0Cw==",
5274
  "engines": {
5275
  "node": ">=18.16.0",
5276
  "npm": ">=9.5.1"
 
5323
  }
5324
  },
5325
  "node_modules/typescript": {
5326
+ "version": "5.3.3",
5327
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
5328
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
5329
  "peer": true,
5330
  "bin": {
5331
  "tsc": "bin/tsc",
 
5421
  }
5422
  },
5423
  "node_modules/urlpattern-polyfill": {
5424
+ "version": "10.0.0",
5425
+ "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
5426
+ "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="
5427
  },
5428
  "node_modules/util-deprecate": {
5429
  "version": "1.0.2",
 
5493
  "integrity": "sha512-/wNyG+1FpiHhnfQo+TuA/XAUpvOOkKVl0A4qpT+oGcj5SlZCLmM+M1Py/3Sj8sy+YrEauCVITOxCsZKo6sPbQg=="
5494
  },
5495
  "node_modules/web-streams-polyfill": {
5496
+ "version": "3.3.2",
5497
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz",
5498
+ "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==",
5499
  "engines": {
5500
  "node": ">= 8"
5501
  }
 
5585
  "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
5586
  },
5587
  "node_modules/ws": {
5588
+ "version": "8.16.0",
5589
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
5590
+ "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
5591
  "engines": {
5592
  "node": ">=10.0.0"
5593
  },
src/production/renderVideo.mts CHANGED
@@ -1,54 +1,34 @@
1
- import { RenderedScene, RenderRequest } from "../types.mts"
2
 
3
  // import { generateVideo } from "../providers/video-generation/generateVideoWithZeroscope.mts"
4
- import { generateVideo } from "../providers/video-generation/generateVideoWithHotshotGradioAPI.mts"
 
 
5
 
6
  export async function renderVideo(
7
  request: RenderRequest,
8
  response: RenderedScene
9
  ): Promise<RenderedScene> {
10
 
11
- const params = {
12
- positivePrompt: request.prompt,
13
- seed: request.seed,
14
- nbFrames: request.nbFrames,
15
- nbSteps: request.nbSteps,
 
 
 
 
 
 
 
 
 
 
 
16
  }
17
 
18
- try {
19
- response.assetUrl = await generateVideo(params)
20
- // console.log("successfull generation")
21
-
22
- if (!response.assetUrl?.length) {
23
- throw new Error(`url for the generated video is empty`)
24
- }
25
- } catch (err) {
26
- console.error(`failed to render the video scene.. but let's try again!`)
27
-
28
- try {
29
- response.assetUrl = await generateVideo(params)
30
- // console.log("successfull generation")
31
-
32
- if (!response.assetUrl?.length) {
33
- throw new Error(`url for the generated video is empty`)
34
- }
35
-
36
- } catch (err) {
37
- try {
38
- response.assetUrl = await generateVideo(params)
39
- // console.log("successfull generation")
40
-
41
- if (!response.assetUrl?.length) {
42
- throw new Error(`url for the generated video is empty`)
43
- }
44
-
45
- } catch (err) {
46
- console.error(`it failed the video for third time ${err}`)
47
- response.error = `failed to render video scene: ${err}`
48
- response.status = "error"
49
- }
50
- }
51
- }
52
 
53
  return response
54
  }
 
1
+ import { RenderedScene, RenderRequest, VideoGenerationParams } from "../types.mts"
2
 
3
  // import { generateVideo } from "../providers/video-generation/generateVideoWithZeroscope.mts"
4
+ // import { generateVideo } from "../providers/video-generation/generateVideoWithHotshotGradioAPI.mts"
5
+ import { generateVideoWithAnimateLCM } from "../providers/video-generation/generateVideoWithAnimateLCM.mts"
6
+ import { generateSeed } from "../utils/misc/generateSeed.mts"
7
 
8
  export async function renderVideo(
9
  request: RenderRequest,
10
  response: RenderedScene
11
  ): Promise<RenderedScene> {
12
 
13
+ const params: VideoGenerationParams = {
14
+ prompt: request.prompt,
15
+ // image?: undefined, // can be empty (and thus, is empty)
16
+ // lora?: string // hardcoded on "3D render"
17
+ // style?: string // hardcoded on "3D render" for now
18
+ orientation: "landscape",
19
+ projection: "cartesian",
20
+ width: 512,
21
+ height: 256,
22
+
23
+ // ok, now what about those? they are in the gradio, are not exposed yet in the API
24
+ // nbFrames: request.nbFrames,
25
+ // nbSteps: request.nbSteps,
26
+
27
+ seed: request.seed || generateSeed(),
28
+ debug: true,
29
  }
30
 
31
+ response.assetUrl = await generateVideoWithAnimateLCM(params)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  return response
34
  }
src/providers/video-generation/addBase64HeaderToMp4.mts ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export function addBase64HeaderToMp4(base64Data: string) {
2
+ if (typeof base64Data !== "string" || !base64Data) {
3
+ return ""
4
+ }
5
+ if (base64Data.startsWith('data:')) {
6
+ if (base64Data.startsWith('data:video/mp4;base64,')) {
7
+ return base64Data
8
+ } else {
9
+ throw new Error("fatal: the input string is NOT a mp4 video!")
10
+ }
11
+ } else {
12
+ return `data:video/mp4;base64,${base64Data}`
13
+ }
14
+ }
src/providers/video-generation/generateVideoWithAnimateLCM.mts ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { VideoGenerationParams } from "../../types.mts"
2
+ import { generateSeed } from "../../utils/misc/generateSeed.mts"
3
+ import { tryApiCalls } from "../../utils/misc/tryApiCall.mts"
4
+ import { addBase64HeaderToMp4 } from "./addBase64HeaderToMp4.mts"
5
+
6
+ import { getNegativePrompt, getPositivePrompt } from "./defaultPrompts.mts"
7
+
8
+ // const gradioApi = `${process.env.AI_TUBE_MODEL_ANIMATELCM_GRADIO_URL || ""}`
9
+ const gradioApi = "https://jbilcke-hf-ai-tube-model-animatelcm.hf.space"
10
+ const accessToken = `${process.env.VC_MICROSERVICE_SECRET_TOKEN || ""}`
11
+
12
+ export const generateVideoWithAnimateLCM = async ({
13
+ prompt,
14
+ orientation,
15
+ projection,
16
+ width,
17
+ height,
18
+ style = "",
19
+ seed,
20
+ debug,
21
+ }: VideoGenerationParams): Promise<string> => {
22
+
23
+
24
+ const actualFunction = async () => {
25
+ const negPrompt = ""
26
+ prompt = prompt || ""
27
+ seed = seed | generateSeed()
28
+
29
+ // label="Sampling steps", value=6, minimum=1, maximum=25, step=1
30
+ // we wanna keep this one low (this is LCM after all)
31
+ // but values like 10 also give nice results
32
+ const nbSteps = 50
33
+
34
+
35
+ // label="LoRA alpha", value=0.8, minimum=0, maximum=2
36
+ const loraAlpha = 0.8 // lora_alpha_slider,
37
+
38
+
39
+ // label="LCM LoRA alpha", value=0.8, minimum=0.0, maximum=1.0
40
+ const lcmLoraAlpha = 0.8 // spatial_lora_slider,
41
+
42
+ // label="Width", value=512, minimum=256, maximum=1024, step=64)
43
+ const width = 512
44
+
45
+ // label="Animation length", value=16, minimum=12, maximum=20, step=1)
46
+ const nbFrames = 16
47
+
48
+ // label="Height", value=512, minimum=256, maximum=1024, step=64)
49
+ const height = 256
50
+
51
+ // label="CFG Scale", value=1.5, minimum=1, maximum=2)
52
+ const cfgScale = 1.5
53
+
54
+ // pimp the prompt
55
+
56
+ // we put it at the start, to make sure it is always part of the prompt
57
+ const positivePrompt = getPositivePrompt([
58
+ style,
59
+ prompt
60
+ ].map(x => x.trim()).filter(x => x).join(", "))
61
+
62
+ const negativePrompt = getNegativePrompt(negPrompt)
63
+
64
+ try {
65
+ if (debug) {
66
+ console.log(`calling AnimateLCM API with params (some are hidden):`, {
67
+ loraAlpha,
68
+ lcmLoraAlpha,
69
+ positivePrompt,
70
+ negativePrompt,
71
+ width,
72
+ height,
73
+ nbSteps,
74
+ nbFrames,
75
+ cfgScale,
76
+ seed,
77
+ })
78
+ }
79
+
80
+ const res = await fetch(gradioApi + (gradioApi.endsWith("/") ? "" : "/") + "api/predict", {
81
+ method: "POST",
82
+ headers: {
83
+ "Content-Type": "application/json",
84
+ // Authorization: `Bearer ${token}`,
85
+ },
86
+ body: JSON.stringify({
87
+ fn_index: 4, // <- important! it is currently 4, not 1!
88
+ data: [
89
+ accessToken,
90
+
91
+ // label="LoRA alpha", value=0.8, minimum=0, maximum=2
92
+ loraAlpha, // lora_alpha_slider,
93
+
94
+
95
+ // label="LCM LoRA alpha", value=0.8, minimum=0.0, maximum=1.0
96
+ lcmLoraAlpha, // spatial_lora_slider,
97
+
98
+ //
99
+ positivePrompt, // prompt_textbox,
100
+
101
+ negativePrompt, // negative_prompt_textbox,
102
+
103
+ // this is the scheduler
104
+ // so.. LCM, it is
105
+ "LCM", // sampler_dropdown,
106
+
107
+ // label="Sampling steps", value=6, minimum=1, maximum=25, step=1
108
+ // we wanna keep this one low (this is LCM after all)
109
+ // but values like 10 also give nice results
110
+ nbSteps, // sample_step_slider,
111
+
112
+ // label="Width", value=512, minimum=256, maximum=1024, step=64)
113
+ width, // width_slider,
114
+
115
+ // label="Animation length", value=16, minimum=12, maximum=20, step=1)
116
+ nbFrames, // length_slider,
117
+
118
+ // label="Height", value=512, minimum=256, maximum=1024, step=64)
119
+ height, // height_slider,
120
+
121
+ // label="CFG Scale", value=1.5, minimum=1, maximum=2)
122
+ cfgScale, // cfg_scale_slider,
123
+
124
+ seed, // seed_textbox,
125
+ ],
126
+ }),
127
+ cache: "no-store",
128
+ // we can also use this (see https://vercel.com/blog/vercel-cache-api-nextjs-cache)
129
+ // next: { revalidate: 1 }
130
+ })
131
+
132
+
133
+ const { data } = await res.json()
134
+
135
+ // console.log("data:", data)
136
+ // Recommendation: handle errors
137
+ if (res.status !== 200 || !Array.isArray(data)) {
138
+ // This will activate the closest `error.js` Error Boundary
139
+ throw new Error(`Failed to fetch data (status: ${res.status})`)
140
+ }
141
+ // console.log("data:", data.slice(0, 50))
142
+
143
+ const base64Content = (data?.[0] || "") as string
144
+
145
+ if (!base64Content) {
146
+ throw new Error(`invalid response (no content)`)
147
+ }
148
+
149
+ return addBase64HeaderToMp4(base64Content)
150
+ } catch (err) {
151
+ if (debug) {
152
+ console.error(`failed to call the AnimateLCM API:`)
153
+ console.error(err)
154
+ }
155
+ throw err
156
+ }
157
+ }
158
+
159
+ return tryApiCalls({
160
+ func: actualFunction,
161
+ debug,
162
+ failureMessage: "failed to call the AnimateLCM endpoint"
163
+ })
164
+ }
src/types.mts CHANGED
@@ -407,3 +407,25 @@ export type HotshotImageInferenceSize =
407
  | '1024x512' // custom panoramic ratio - this isn't supported / supposed to work properly
408
  | '1024x576' // movie ratio (16:9) this isn't supported / supposed to work properly
409
  | '576x1024' // tiktok ratio (9:16) this isn't supported / supposed to work properly
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  | '1024x512' // custom panoramic ratio - this isn't supported / supposed to work properly
408
  | '1024x576' // movie ratio (16:9) this isn't supported / supposed to work properly
409
  | '576x1024' // tiktok ratio (9:16) this isn't supported / supposed to work properly
410
+
411
+ export type VideoOrientation =
412
+ | "portrait"
413
+ | "landscape"
414
+ | "square"
415
+
416
+ export type VideoProjection =
417
+ | "cartesian" // this is the default
418
+ | "equirectangular"
419
+
420
+ export type VideoGenerationParams = {
421
+ prompt: string // can be empty
422
+ image?: string // can be empty
423
+ lora?: string
424
+ style?: string
425
+ orientation: VideoOrientation
426
+ projection: VideoProjection
427
+ width: number
428
+ height: number
429
+ seed?: number
430
+ debug?: boolean
431
+ }
src/utils/misc/getHuggingFaceSpaceStatus.mts ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /** Actually `hf_${string}`, but for convenience, using the string type */
3
+ type AccessToken = string;
4
+
5
+ interface Credentials {
6
+ accessToken: AccessToken;
7
+ }
8
+
9
+ type SpaceHardwareFlavor =
10
+ | "cpu-basic"
11
+ | "cpu-upgrade"
12
+ | "t4-small"
13
+ | "t4-medium"
14
+ | "a10g-small"
15
+ | "a10g-large"
16
+ | "a100-large";
17
+
18
+ type SpaceSdk = "streamlit" | "gradio" | "docker" | "static";
19
+
20
+ type SpaceStage =
21
+ | "NO_APP_FILE"
22
+ | "CONFIG_ERROR"
23
+ | "BUILDING"
24
+ | "BUILD_ERROR"
25
+ | "RUNNING"
26
+ | "RUNNING_BUILDING"
27
+ | "RUNTIME_ERROR"
28
+ | "DELETING"
29
+ | "PAUSED"
30
+ | "SLEEPING";
31
+
32
+ type AccessTokenRole = "admin" | "write" | "contributor" | "read";
33
+
34
+ type AuthType = "access_token" | "app_token" | "app_token_as_user";
35
+
36
+
37
+ interface SpaceRuntime {
38
+ stage: SpaceStage;
39
+ sdk?: SpaceSdk;
40
+ sdkVersion?: string;
41
+ errorMessage?: string;
42
+ hardware?: {
43
+ current: SpaceHardwareFlavor | null;
44
+ currentPrettyName?: string;
45
+ requested: SpaceHardwareFlavor | null;
46
+ requestedPrettyName?: string;
47
+ };
48
+ /** when calling /spaces, those props are only fetched if ?full=true */
49
+ resources?: SpaceResourceConfig;
50
+ /** in seconds */
51
+ gcTimeout?: number | null;
52
+ }
53
+
54
+ interface SpaceResourceRequirement {
55
+ cpu?: string;
56
+ memory?: string;
57
+ gpu?: string;
58
+ gpuModel?: string;
59
+ ephemeral?: string;
60
+ }
61
+
62
+ interface SpaceResourceConfig {
63
+ requests: SpaceResourceRequirement;
64
+ limits: SpaceResourceRequirement;
65
+ replicas?: number;
66
+ throttled?: boolean;
67
+ is_custom?: boolean;
68
+ }
69
+
70
+ export interface HFSpaceStatus {
71
+ _id: string
72
+ id: string
73
+ author: string
74
+ sha: string
75
+ lastModified: string
76
+ private: boolean
77
+ gated: boolean
78
+ disabled: boolean
79
+ host: string
80
+ subdomain: string
81
+ tags: string[]
82
+ likes: number
83
+ sdk: string
84
+ runtime: SpaceRuntime
85
+ createdAt: string
86
+ }
87
+
88
+ export async function getHuggingFaceSpaceStatus({
89
+ space,
90
+ // userName,
91
+ // spaceName,
92
+ }: {
93
+ space: string // a joined "user_name/space_name"
94
+ // userName: string
95
+ // spaceName: string
96
+ }): Promise<HFSpaceStatus> {
97
+ const res = await fetch(`https://huggingface.co/api/spaces/${space}`, {
98
+ method: "GET",
99
+ headers: {
100
+ Authorization: `Bearer ${process.env.VC_HF_API_TOKEN || ""}`
101
+ }
102
+ })
103
+
104
+ if (res.status !== 200) {
105
+ throw new Error("failed to get the space data")
106
+ }
107
+
108
+ try {
109
+ const data = await res.json() as HFSpaceStatus
110
+ return data
111
+ } catch (err) {
112
+ throw new Error("failed to parse space data", err)
113
+ }
114
+ }
src/utils/misc/makeSureSpaceIsRunning.mts ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import { getHuggingFaceSpaceStatus } from "./getHuggingFaceSpaceStatus.mts"
3
+ import { sleep } from "./sleep.mts"
4
+
5
+ export async function makeSureSpaceIsRunning({
6
+ space,
7
+ maxWaitTimeInSec = 15 * 60, // some spaces are ultra slow to cold boot (eg. data dl at runtime)
8
+ statusUpdateFrequencyInSec = 5,
9
+ // userName,
10
+ // spaceName,
11
+ }: {
12
+ space: string // a joined "user_name/space_name"
13
+
14
+ maxWaitTimeInSec?: number
15
+
16
+ statusUpdateFrequencyInSec?: number
17
+
18
+ // userName: string
19
+ // spaceName: string
20
+ }): Promise<void> {
21
+ if (!space) { return }
22
+
23
+ // process.stdout.write(`trying to restart space "${space}"`)
24
+ try {
25
+ const { runtime: { stage } } = await getHuggingFaceSpaceStatus({ space })
26
+ if (stage === "RUNNING") {
27
+ // process.stdout.write(`: well, it is already ${stage}!\n`)
28
+ return
29
+ }
30
+ } catch (err) {
31
+ }
32
+
33
+ const res = await fetch(`https://huggingface.co/api/spaces/${space}/restart`, {
34
+ method: "POST",
35
+ headers: {
36
+ Authorization: `Bearer ${process.env.VC_HF_API_TOKEN || ""}`
37
+ }
38
+ })
39
+
40
+ if (res.status !== 200) {
41
+ process.stdout.write(`failure!\nwe couldn't trigger the restart of space "${space}"\n`)
42
+
43
+ throw new Error(`failed to trigger the restart of space "${space}" (status is not 200)`)
44
+ }
45
+
46
+ let elapsedTime = 0
47
+
48
+ process.stdout.write(`trying to restart space "${space}"`)
49
+
50
+ while (true) {
51
+ process.stdout.write(".")
52
+ const { runtime: { stage } } = await getHuggingFaceSpaceStatus({ space })
53
+
54
+ if (stage === "RUNNING") {
55
+ process.stdout.write(`success!\nspace "${space}" is ${stage} (took ${elapsedTime} sec)\n`)
56
+ return
57
+ } else if (stage === "BUILDING" || stage === "RUNNING_BUILDING") {
58
+ // let's wait more
59
+ await sleep(statusUpdateFrequencyInSec * 1000)
60
+
61
+ elapsedTime += statusUpdateFrequencyInSec
62
+
63
+ if (elapsedTime >= maxWaitTimeInSec) {
64
+ process.stdout.write(`failure!\nspace "${space}" is still ${stage} (after ${elapsedTime} sec)\n`)
65
+ if (stage === "BUILDING") {
66
+ throw new Error(`failed to start space ${space} (reason: space is ${stage}, but we reached the ${maxWaitTimeInSec} sec timeout)`)
67
+ } else {
68
+ // if we are "RUNNING_BUILDING" we assume it is.. okay? I guess?
69
+ return
70
+ }
71
+ }
72
+ } else {
73
+ process.stdout.write(`failure!\nspace "${space}" is ${stage} (after ${elapsedTime} sec)\n`)
74
+ throw new Error(`failed to build space ${space} (reason: space is ${stage})`)
75
+ }
76
+ }
77
+ }
src/utils/misc/tryApiCall.mts ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // import { Credentials, downloadFile, uploadFile, whoAmI } from "@huggingface/hub"
2
+
3
+ import { makeSureSpaceIsRunning } from "./makeSureSpaceIsRunning.mts"
4
+ import { sleep } from "./sleep.mts"
5
+
6
+ const sec = 1000
7
+ const min = 60 *sec
8
+
9
+ export async function tryApiCalls<T>({
10
+ func,
11
+ huggingFaceSpace,
12
+ debug = false,
13
+ failureMessage = "failed to call the endpoint",
14
+ delays = [
15
+ 5 *sec,
16
+ 15 *sec,
17
+ 40 *sec, // total 1 min wait time
18
+
19
+ //at this stage, if it is so slow it means we are probably waking up a model
20
+ // which is a slow operation (takes ~5 min)
21
+
22
+ 2 *min, // ~ 3 min ~
23
+ 1 *min, // ~ 4 min ~
24
+ 1 *min, // ~ 5 min ~
25
+ ]
26
+ }: {
27
+ func: () => Promise<T>
28
+
29
+ // optional: the name of the hugging face space
30
+ // this will be used to "wake up" the space if necessary
31
+ huggingFaceSpace?: string
32
+
33
+ debug?: boolean
34
+ failureMessage?: string
35
+ delays?: number[]
36
+ }) {
37
+
38
+ for (let i = 0; i < delays.length; i++) {
39
+ try {
40
+ await makeSureSpaceIsRunning({ space: huggingFaceSpace })
41
+ const result = await func()
42
+ return result
43
+ } catch (err) {
44
+ if (debug) { console.error(err) }
45
+ process.stdout.write(".")
46
+
47
+ if (i > 0) {
48
+ await sleep(delays[i])
49
+ }
50
+ }
51
+ }
52
+
53
+ throw new Error(`${failureMessage} after ${delays.length} attempts`)
54
+ }