@nekosuneprojects/gaming-infos 2.4.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (729) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +62 -334
  3. package/index.js +3 -225
  4. package/package.json +53 -58
  5. package/src/providers/vrchat.js +11 -0
  6. package/src/providers/warframe.js +7 -0
  7. package/src/registry.js +23 -0
  8. package/.github/workflows/npm-publish-github-packages.yml +0 -56
  9. package/.github/workflows/npm-publish.yml +0 -71
  10. package/.github/workflows/sync-api-cache.yml +0 -73
  11. package/CACHE_SYNC.md +0 -202
  12. package/CONTRIBUTING.md +0 -217
  13. package/DATA.md +0 -292
  14. package/data/.cache-manifest.json +0 -112
  15. package/data/arknightsendfield/characters/akekuri.json +0 -75
  16. package/data/arknightsendfield/characters/alesh.json +0 -75
  17. package/data/arknightsendfield/characters/antal.json +0 -75
  18. package/data/arknightsendfield/characters/arcane.json +0 -75
  19. package/data/arknightsendfield/characters/arclight.json +0 -75
  20. package/data/arknightsendfield/characters/ardelia.json +0 -75
  21. package/data/arknightsendfield/characters/avywenna.json +0 -76
  22. package/data/arknightsendfield/characters/camille.json +0 -77
  23. package/data/arknightsendfield/characters/catcher.json +0 -76
  24. package/data/arknightsendfield/characters/chenqianyu.json +0 -76
  25. package/data/arknightsendfield/characters/dapan.json +0 -76
  26. package/data/arknightsendfield/characters/ember.json +0 -76
  27. package/data/arknightsendfield/characters/endministrator.json +0 -63
  28. package/data/arknightsendfield/characters/estella.json +0 -76
  29. package/data/arknightsendfield/characters/fluorite.json +0 -75
  30. package/data/arknightsendfield/characters/gilberta.json +0 -76
  31. package/data/arknightsendfield/characters/laevatain.json +0 -76
  32. package/data/arknightsendfield/characters/lastrite.json +0 -76
  33. package/data/arknightsendfield/characters/lifeng.json +0 -75
  34. package/data/arknightsendfield/characters/liino.json +0 -76
  35. package/data/arknightsendfield/characters/mifu.json +0 -75
  36. package/data/arknightsendfield/characters/perlica.json +0 -76
  37. package/data/arknightsendfield/characters/pogranichnik.json +0 -75
  38. package/data/arknightsendfield/characters/purrchena.json +0 -50
  39. package/data/arknightsendfield/characters/rossi.json +0 -77
  40. package/data/arknightsendfield/characters/snowshine.json +0 -75
  41. package/data/arknightsendfield/characters/tangtang.json +0 -76
  42. package/data/arknightsendfield/characters/typhoeus.json +0 -57
  43. package/data/arknightsendfield/characters/wulfgard.json +0 -77
  44. package/data/arknightsendfield/characters/xaihi.json +0 -76
  45. package/data/arknightsendfield/characters/yvonne.json +0 -76
  46. package/data/arknightsendfield/characters/zhuangfangyi.json +0 -76
  47. package/data/arknightsendfield/meta.json +0 -14
  48. package/data/fortnite/characters/agentjones.json +0 -43
  49. package/data/fortnite/characters/agentpeely.json +0 -43
  50. package/data/fortnite/characters/andyfangerson.json +0 -42
  51. package/data/fortnite/characters/antonia.json +0 -43
  52. package/data/fortnite/characters/anwar.json +0 -44
  53. package/data/fortnite/characters/aphrodite.json +0 -43
  54. package/data/fortnite/characters/apollo.json +0 -36
  55. package/data/fortnite/characters/arcticassassin.json +0 -43
  56. package/data/fortnite/characters/artemis.json +0 -36
  57. package/data/fortnite/characters/battlewoodboulevard.json +0 -43
  58. package/data/fortnite/characters/beastmode.json +0 -45
  59. package/data/fortnite/characters/bogstick.json +0 -43
  60. package/data/fortnite/characters/boxy.json +0 -44
  61. package/data/fortnite/characters/bravoleader.json +0 -44
  62. package/data/fortnite/characters/briteraider.json +0 -43
  63. package/data/fortnite/characters/brutalboxcars.json +0 -46
  64. package/data/fortnite/characters/bryne.json +0 -44
  65. package/data/fortnite/characters/buildersbarracks.json +0 -38
  66. package/data/fortnite/characters/bullshark.json +0 -43
  67. package/data/fortnite/characters/bumpybay.json +0 -44
  68. package/data/fortnite/characters/burd.json +0 -44
  69. package/data/fortnite/characters/burdemart.json +0 -39
  70. package/data/fortnite/characters/burdtogo.json +0 -42
  71. package/data/fortnite/characters/busansanctuary.json +0 -39
  72. package/data/fortnite/characters/calamaricanyon.json +0 -41
  73. package/data/fortnite/characters/canyoncrossing.json +0 -45
  74. package/data/fortnite/characters/captainjones.json +0 -40
  75. package/data/fortnite/characters/centurion.json +0 -44
  76. package/data/fortnite/characters/cerberus.json +0 -43
  77. package/data/fortnite/characters/charon.json +0 -43
  78. package/data/fortnite/characters/chiara.json +0 -43
  79. package/data/fortnite/characters/clara.json +0 -43
  80. package/data/fortnite/characters/classifiedcanyon.json +0 -43
  81. package/data/fortnite/characters/clawsylodge.json +0 -41
  82. package/data/fortnite/characters/cletuscornhole.json +0 -43
  83. package/data/fortnite/characters/contractgiller.json +0 -44
  84. package/data/fortnite/characters/corruptioncorners.json +0 -42
  85. package/data/fortnite/characters/countessdaraku.json +0 -45
  86. package/data/fortnite/characters/crackshotscabin.json +0 -40
  87. package/data/fortnite/characters/creepycamps.json +0 -36
  88. package/data/fortnite/characters/crimecity.json +0 -47
  89. package/data/fortnite/characters/dara.json +0 -42
  90. package/data/fortnite/characters/darkruby.json +0 -43
  91. package/data/fortnite/characters/demonsdojo.json +0 -46
  92. package/data/fortnite/characters/diamonddiva.json +0 -43
  93. package/data/fortnite/characters/donutdistrict.json +0 -43
  94. package/data/fortnite/characters/drakonsteelrider.json +0 -43
  95. package/data/fortnite/characters/dummy.json +0 -45
  96. package/data/fortnite/characters/edwardscissorhands.json +0 -39
  97. package/data/fortnite/characters/etheria.json +0 -43
  98. package/data/fortnite/characters/evergreenterrace.json +0 -41
  99. package/data/fortnite/characters/fishmarket.json +0 -39
  100. package/data/fortnite/characters/fishstick.json +0 -45
  101. package/data/fortnite/characters/fishthicc.json +0 -43
  102. package/data/fortnite/characters/fortressofsolitude.json +0 -37
  103. package/data/fortnite/characters/foxyfloodgate.json +0 -43
  104. package/data/fortnite/characters/freakyfields.json +0 -38
  105. package/data/fortnite/characters/goldengrove.json +0 -41
  106. package/data/fortnite/characters/graveheart.json +0 -43
  107. package/data/fortnite/characters/grievouscampsite.json +0 -38
  108. package/data/fortnite/characters/guardianamara.json +0 -44
  109. package/data/fortnite/characters/gwenpool.json +0 -41
  110. package/data/fortnite/characters/hanamuracourtyard.json +0 -27
  111. package/data/fortnite/characters/heartbreakranger.json +0 -42
  112. package/data/fortnite/characters/heatwaveharbor.json +0 -41
  113. package/data/fortnite/characters/heroichope.json +0 -44
  114. package/data/fortnite/characters/hope.json +0 -43
  115. package/data/fortnite/characters/hopefulheights.json +0 -46
  116. package/data/fortnite/characters/humblehills.json +0 -41
  117. package/data/fortnite/characters/innovatorslone.json +0 -43
  118. package/data/fortnite/characters/insight.json +0 -43
  119. package/data/fortnite/characters/ironman.json +0 -40
  120. package/data/fortnite/characters/jittershock.json +0 -44
  121. package/data/fortnite/characters/joeycaliente.json +0 -44
  122. package/data/fortnite/characters/jonithescarlet.json +0 -43
  123. package/data/fortnite/characters/khabylame.json +0 -40
  124. package/data/fortnite/characters/khari.json +0 -44
  125. package/data/fortnite/characters/kitbash.json +0 -44
  126. package/data/fortnite/characters/kitesflight.json +0 -41
  127. package/data/fortnite/characters/knightmare.json +0 -43
  128. package/data/fortnite/characters/laguna.json +0 -43
  129. package/data/fortnite/characters/lakespringfield.json +0 -35
  130. package/data/fortnite/characters/lakespringfieldgasstation.json +0 -39
  131. package/data/fortnite/characters/lanallane.json +0 -42
  132. package/data/fortnite/characters/lattelanding.json +0 -41
  133. package/data/fortnite/characters/lavendra.json +0 -44
  134. package/data/fortnite/characters/leelah.json +0 -45
  135. package/data/fortnite/characters/liftylodge.json +0 -42
  136. package/data/fortnite/characters/lonewolflair.json +0 -42
  137. package/data/fortnite/characters/longshot.json +0 -41
  138. package/data/fortnite/characters/lostlake.json +0 -44
  139. package/data/fortnite/characters/loveranger.json +0 -44
  140. package/data/fortnite/characters/mae.json +0 -43
  141. package/data/fortnite/characters/magicmosses.json +0 -42
  142. package/data/fortnite/characters/maskedmeadows.json +0 -48
  143. package/data/fortnite/characters/mechateamshadow.json +0 -44
  144. package/data/fortnite/characters/medusa.json +0 -43
  145. package/data/fortnite/characters/meowscles.json +0 -42
  146. package/data/fortnite/characters/mephisto.json +0 -41
  147. package/data/fortnite/characters/metalmouth.json +0 -44
  148. package/data/fortnite/characters/mincemeat.json +0 -43
  149. package/data/fortnite/characters/munitionsexpert.json +0 -42
  150. package/data/fortnite/characters/myna.json +0 -42
  151. package/data/fortnite/characters/newsanctuary.json +0 -43
  152. package/data/fortnite/characters/nia.json +0 -42
  153. package/data/fortnite/characters/nightshiftforest.json +0 -43
  154. package/data/fortnite/characters/nisha.json +0 -42
  155. package/data/fortnite/characters/nolanchance.json +0 -43
  156. package/data/fortnite/characters/noorah.json +0 -44
  157. package/data/fortnite/characters/odyssey.json +0 -43
  158. package/data/fortnite/characters/openaironsen.json +0 -40
  159. package/data/fortnite/characters/oscar.json +0 -42
  160. package/data/fortnite/characters/outlawoasis.json +0 -40
  161. package/data/fortnite/characters/outpostenclave.json +0 -27
  162. package/data/fortnite/characters/oxrhq.json +0 -37
  163. package/data/fortnite/characters/paintedpalms.json +0 -41
  164. package/data/fortnite/characters/peabody.json +0 -42
  165. package/data/fortnite/characters/peelosopherbananocrates.json +0 -43
  166. package/data/fortnite/characters/peely.json +0 -41
  167. package/data/fortnite/characters/peelybone.json +0 -43
  168. package/data/fortnite/characters/persephone.json +0 -42
  169. package/data/fortnite/characters/phaedra.json +0 -42
  170. package/data/fortnite/characters/phantommeowscles.json +0 -43
  171. package/data/fortnite/characters/piperpace.json +0 -43
  172. package/data/fortnite/characters/poseidon.json +0 -42
  173. package/data/fortnite/characters/pumpedpower.json +0 -40
  174. package/data/fortnite/characters/pumpinpipes.json +0 -39
  175. package/data/fortnite/characters/pumpkinking.json +0 -40
  176. package/data/fortnite/characters/purradisemeowscles.json +0 -43
  177. package/data/fortnite/characters/rangersrest.json +0 -36
  178. package/data/fortnite/characters/rebeloutpost.json +0 -37
  179. package/data/fortnite/characters/renegadeshadow.json +0 -44
  180. package/data/fortnite/characters/resistancebase.json +0 -27
  181. package/data/fortnite/characters/rippedtides.json +0 -43
  182. package/data/fortnite/characters/rollingblossomsfarm.json +0 -41
  183. package/data/fortnite/characters/royalebomber.json +0 -38
  184. package/data/fortnite/characters/ruckus.json +0 -42
  185. package/data/fortnite/characters/rust.json +0 -41
  186. package/data/fortnite/characters/sakuracircle.json +0 -36
  187. package/data/fortnite/characters/sandystrip.json +0 -44
  188. package/data/fortnite/characters/saskia.json +0 -45
  189. package/data/fortnite/characters/seaportcity.json +0 -48
  190. package/data/fortnite/characters/shakensanctuary.json +0 -42
  191. package/data/fortnite/characters/shimmerdusk.json +0 -41
  192. package/data/fortnite/characters/shinyshafts.json +0 -38
  193. package/data/fortnite/characters/shogunssolitude.json +0 -46
  194. package/data/fortnite/characters/shuri.json +0 -39
  195. package/data/fortnite/characters/silashesk.json +0 -42
  196. package/data/fortnite/characters/slurproom.json +0 -40
  197. package/data/fortnite/characters/snowheart.json +0 -44
  198. package/data/fortnite/characters/snowstriker.json +0 -43
  199. package/data/fortnite/characters/solidsnake.json +0 -39
  200. package/data/fortnite/characters/sonor.json +0 -46
  201. package/data/fortnite/characters/spartanassassin.json +0 -43
  202. package/data/fortnite/characters/spirithuntersaeko.json +0 -41
  203. package/data/fortnite/characters/springfieldnationalparkstore.json +0 -38
  204. package/data/fortnite/characters/springfieldnuclearpowerplant.json +0 -39
  205. package/data/fortnite/characters/springfieldslurpworks.json +0 -40
  206. package/data/fortnite/characters/squibblyshores.json +0 -42
  207. package/data/fortnite/characters/squibblyspointlighthouse.json +0 -37
  208. package/data/fortnite/characters/starroakley.json +0 -45
  209. package/data/fortnite/characters/steelsight.json +0 -43
  210. package/data/fortnite/characters/sticks.json +0 -35
  211. package/data/fortnite/characters/sunkenshores.json +0 -42
  212. package/data/fortnite/characters/sunstrider.json +0 -42
  213. package/data/fortnite/characters/suntanspecialist.json +0 -43
  214. package/data/fortnite/characters/supernovaacademy.json +0 -27
  215. package/data/fortnite/characters/t60powerarmor.json +0 -39
  216. package/data/fortnite/characters/thebattlewoods.json +0 -44
  217. package/data/fortnite/characters/thegreatturtle.json +0 -37
  218. package/data/fortnite/characters/theoperator.json +0 -42
  219. package/data/fortnite/characters/thequackaway.json +0 -39
  220. package/data/fortnite/characters/thestabilizer.json +0 -38
  221. package/data/fortnite/characters/theunderwriter.json +0 -36
  222. package/data/fortnite/characters/toyboxdocks.json +0 -40
  223. package/data/fortnite/characters/trace.json +0 -43
  224. package/data/fortnite/characters/triagetrooper.json +0 -43
  225. package/data/fortnite/characters/triggerfish.json +0 -44
  226. package/data/fortnite/characters/trogscave.json +0 -38
  227. package/data/fortnite/characters/utopiacity.json +0 -27
  228. package/data/fortnite/characters/vengeancejones.json +0 -42
  229. package/data/fortnite/characters/victoriasaint.json +0 -43
  230. package/data/fortnite/characters/vineyshafts.json +0 -35
  231. package/data/fortnite/characters/volpez.json +0 -41
  232. package/data/fortnite/characters/warmachine.json +0 -40
  233. package/data/fortnite/characters/wastelandermagneto.json +0 -40
  234. package/data/fortnite/characters/wonkeeland.json +0 -41
  235. package/data/fortnite/meta.json +0 -14
  236. package/data/game-codes/.cache-manifest.json +0 -148
  237. package/data/game-codes/directory.json +0 -1196
  238. package/data/game-codes/games/arknights-endfield.json +0 -958
  239. package/data/game-codes/games/borderlands-1.json +0 -414
  240. package/data/game-codes/games/borderlands-2.json +0 -340
  241. package/data/game-codes/games/borderlands-3.json +0 -1025
  242. package/data/game-codes/games/borderlands-4.json +0 -3128
  243. package/data/game-codes/games/borderlands-the-pre-sequel.json +0 -599
  244. package/data/game-codes/games/brawl-stars.json +0 -4766
  245. package/data/game-codes/games/clash-of-clans.json +0 -4766
  246. package/data/game-codes/games/clash-royale.json +0 -5
  247. package/data/game-codes/games/cookie-run-kingdom.json +0 -5366
  248. package/data/game-codes/games/fortnite.json +0 -897
  249. package/data/game-codes/games/genshin-impact.json +0 -8520
  250. package/data/game-codes/games/honkai-impact-3rd.json +0 -405
  251. package/data/game-codes/games/honkai-star-rail.json +0 -9863
  252. package/data/game-codes/games/neverness-to-everness.json +0 -1695
  253. package/data/game-codes/games/roblox-doors.json +0 -1842
  254. package/data/game-codes/games/roblox-rivals.json +0 -2919
  255. package/data/game-codes/games/tower-of-fantasy.json +0 -2839
  256. package/data/game-codes/games/warframe.json +0 -20824
  257. package/data/game-codes/games/wuthering-waves.json +0 -2477
  258. package/data/game-codes/games/zenless-zone-zero.json +0 -3681
  259. package/data/game-codes/status.json +0 -580
  260. package/data/genshinimpact/characters/aino.json +0 -34
  261. package/data/genshinimpact/characters/albedo.json +0 -12
  262. package/data/genshinimpact/characters/alhaitham.json +0 -13
  263. package/data/genshinimpact/characters/aloy.json +0 -12
  264. package/data/genshinimpact/characters/alyosha.json +0 -34
  265. package/data/genshinimpact/characters/amber.json +0 -13
  266. package/data/genshinimpact/characters/aratakiitto.json +0 -13
  267. package/data/genshinimpact/characters/arlecchino.json +0 -13
  268. package/data/genshinimpact/characters/baizhu.json +0 -13
  269. package/data/genshinimpact/characters/barbara.json +0 -12
  270. package/data/genshinimpact/characters/beidou.json +0 -13
  271. package/data/genshinimpact/characters/bennett.json +0 -12
  272. package/data/genshinimpact/characters/candace.json +0 -13
  273. package/data/genshinimpact/characters/charlotte.json +0 -12
  274. package/data/genshinimpact/characters/chasca.json +0 -12
  275. package/data/genshinimpact/characters/chevreuse.json +0 -12
  276. package/data/genshinimpact/characters/chiori.json +0 -12
  277. package/data/genshinimpact/characters/chongyun.json +0 -13
  278. package/data/genshinimpact/characters/citlali.json +0 -12
  279. package/data/genshinimpact/characters/clorinde.json +0 -12
  280. package/data/genshinimpact/characters/collei.json +0 -13
  281. package/data/genshinimpact/characters/columbina.json +0 -34
  282. package/data/genshinimpact/characters/cyno.json +0 -13
  283. package/data/genshinimpact/characters/dahlia.json +0 -11
  284. package/data/genshinimpact/characters/dehya.json +0 -12
  285. package/data/genshinimpact/characters/diluc.json +0 -12
  286. package/data/genshinimpact/characters/diona.json +0 -12
  287. package/data/genshinimpact/characters/dori.json +0 -12
  288. package/data/genshinimpact/characters/durin.json +0 -12
  289. package/data/genshinimpact/characters/emilie.json +0 -12
  290. package/data/genshinimpact/characters/escoffier.json +0 -13
  291. package/data/genshinimpact/characters/eula.json +0 -12
  292. package/data/genshinimpact/characters/faruzan.json +0 -13
  293. package/data/genshinimpact/characters/fischl.json +0 -13
  294. package/data/genshinimpact/characters/flins.json +0 -34
  295. package/data/genshinimpact/characters/freminet.json +0 -12
  296. package/data/genshinimpact/characters/furina.json +0 -13
  297. package/data/genshinimpact/characters/gaming.json +0 -12
  298. package/data/genshinimpact/characters/ganyu.json +0 -12
  299. package/data/genshinimpact/characters/gorou.json +0 -13
  300. package/data/genshinimpact/characters/hutao.json +0 -13
  301. package/data/genshinimpact/characters/iansan.json +0 -12
  302. package/data/genshinimpact/characters/ifa.json +0 -34
  303. package/data/genshinimpact/characters/illuga.json +0 -34
  304. package/data/genshinimpact/characters/ineffa.json +0 -12
  305. package/data/genshinimpact/characters/jahoda.json +0 -34
  306. package/data/genshinimpact/characters/jean.json +0 -12
  307. package/data/genshinimpact/characters/kachina.json +0 -12
  308. package/data/genshinimpact/characters/kaedeharakazuha.json +0 -13
  309. package/data/genshinimpact/characters/kaeya.json +0 -12
  310. package/data/genshinimpact/characters/kamisatoayaka.json +0 -12
  311. package/data/genshinimpact/characters/kamisatoayato.json +0 -12
  312. package/data/genshinimpact/characters/kaveh.json +0 -13
  313. package/data/genshinimpact/characters/keqing.json +0 -12
  314. package/data/genshinimpact/characters/kinich.json +0 -12
  315. package/data/genshinimpact/characters/kirara.json +0 -12
  316. package/data/genshinimpact/characters/klee.json +0 -12
  317. package/data/genshinimpact/characters/kujousara.json +0 -12
  318. package/data/genshinimpact/characters/kukishinobu.json +0 -13
  319. package/data/genshinimpact/characters/lanyan.json +0 -12
  320. package/data/genshinimpact/characters/lauma.json +0 -34
  321. package/data/genshinimpact/characters/layla.json +0 -12
  322. package/data/genshinimpact/characters/linnea.json +0 -34
  323. package/data/genshinimpact/characters/lisa.json +0 -13
  324. package/data/genshinimpact/characters/lohen.json +0 -12
  325. package/data/genshinimpact/characters/lynette.json +0 -12
  326. package/data/genshinimpact/characters/lyney.json +0 -12
  327. package/data/genshinimpact/characters/mavuika.json +0 -12
  328. package/data/genshinimpact/characters/mika.json +0 -34
  329. package/data/genshinimpact/characters/mikaschmidt.json +0 -12
  330. package/data/genshinimpact/characters/mona.json +0 -13
  331. package/data/genshinimpact/characters/mualani.json +0 -12
  332. package/data/genshinimpact/characters/nahida.json +0 -13
  333. package/data/genshinimpact/characters/navia.json +0 -12
  334. package/data/genshinimpact/characters/nefer.json +0 -34
  335. package/data/genshinimpact/characters/neuvillette.json +0 -12
  336. package/data/genshinimpact/characters/nicole.json +0 -34
  337. package/data/genshinimpact/characters/nilou.json +0 -12
  338. package/data/genshinimpact/characters/ningguang.json +0 -12
  339. package/data/genshinimpact/characters/noelle.json +0 -13
  340. package/data/genshinimpact/characters/odette.json +0 -34
  341. package/data/genshinimpact/characters/ororon.json +0 -12
  342. package/data/genshinimpact/characters/prune.json +0 -11
  343. package/data/genshinimpact/characters/qiqi.json +0 -13
  344. package/data/genshinimpact/characters/raidenshogun.json +0 -13
  345. package/data/genshinimpact/characters/razor.json +0 -12
  346. package/data/genshinimpact/characters/rosaria.json +0 -13
  347. package/data/genshinimpact/characters/sandrone.json +0 -34
  348. package/data/genshinimpact/characters/sangonomiyakokomi.json +0 -13
  349. package/data/genshinimpact/characters/sayu.json +0 -12
  350. package/data/genshinimpact/characters/sethos.json +0 -12
  351. package/data/genshinimpact/characters/shenhe.json +0 -13
  352. package/data/genshinimpact/characters/shikanoinheizou.json +0 -13
  353. package/data/genshinimpact/characters/sigewinne.json +0 -12
  354. package/data/genshinimpact/characters/skirk.json +0 -12
  355. package/data/genshinimpact/characters/sucrose.json +0 -13
  356. package/data/genshinimpact/characters/tartaglia.json +0 -34
  357. package/data/genshinimpact/characters/thoma.json +0 -12
  358. package/data/genshinimpact/characters/tighnari.json +0 -13
  359. package/data/genshinimpact/characters/traveler.json +0 -34
  360. package/data/genshinimpact/characters/varesa.json +0 -12
  361. package/data/genshinimpact/characters/varka.json +0 -11
  362. package/data/genshinimpact/characters/venti.json +0 -13
  363. package/data/genshinimpact/characters/wanderer.json +0 -12
  364. package/data/genshinimpact/characters/wonderlandmanekin.json +0 -34
  365. package/data/genshinimpact/characters/wriothesley.json +0 -13
  366. package/data/genshinimpact/characters/xiangling.json +0 -13
  367. package/data/genshinimpact/characters/xianyun.json +0 -12
  368. package/data/genshinimpact/characters/xiao.json +0 -12
  369. package/data/genshinimpact/characters/xilonen.json +0 -12
  370. package/data/genshinimpact/characters/xingqiu.json +0 -13
  371. package/data/genshinimpact/characters/xinyan.json +0 -13
  372. package/data/genshinimpact/characters/yaemiko.json +0 -13
  373. package/data/genshinimpact/characters/yanfei.json +0 -13
  374. package/data/genshinimpact/characters/yaoyao.json +0 -13
  375. package/data/genshinimpact/characters/yelan.json +0 -12
  376. package/data/genshinimpact/characters/yoimiya.json +0 -13
  377. package/data/genshinimpact/characters/yumemizukimizuki.json +0 -12
  378. package/data/genshinimpact/characters/yunjin.json +0 -12
  379. package/data/genshinimpact/characters/zhongli.json +0 -12
  380. package/data/genshinimpact/characters/zibai.json +0 -12
  381. package/data/genshinimpact/meta.json +0 -14
  382. package/data/honkaistarrail/characters/acheron.json +0 -13
  383. package/data/honkaistarrail/characters/aglaea.json +0 -13
  384. package/data/honkaistarrail/characters/anaxa.json +0 -13
  385. package/data/honkaistarrail/characters/archer.json +0 -29
  386. package/data/honkaistarrail/characters/argenti.json +0 -13
  387. package/data/honkaistarrail/characters/arlan.json +0 -13
  388. package/data/honkaistarrail/characters/ashveil.json +0 -13
  389. package/data/honkaistarrail/characters/asta.json +0 -13
  390. package/data/honkaistarrail/characters/aventurine.json +0 -13
  391. package/data/honkaistarrail/characters/bailu.json +0 -13
  392. package/data/honkaistarrail/characters/blackswan.json +0 -13
  393. package/data/honkaistarrail/characters/blade.json +0 -13
  394. package/data/honkaistarrail/characters/boothill.json +0 -13
  395. package/data/honkaistarrail/characters/bronya.json +0 -13
  396. package/data/honkaistarrail/characters/castorice.json +0 -13
  397. package/data/honkaistarrail/characters/cerydra.json +0 -13
  398. package/data/honkaistarrail/characters/cipher.json +0 -13
  399. package/data/honkaistarrail/characters/clara.json +0 -13
  400. package/data/honkaistarrail/characters/constance.json +0 -13
  401. package/data/honkaistarrail/characters/cyrene.json +0 -13
  402. package/data/honkaistarrail/characters/danheng.json +0 -13
  403. package/data/honkaistarrail/characters/danhengimbibitorlunae.json +0 -29
  404. package/data/honkaistarrail/characters/danhengpermansorterrae.json +0 -29
  405. package/data/honkaistarrail/characters/drratio.json +0 -13
  406. package/data/honkaistarrail/characters/evanescia.json +0 -29
  407. package/data/honkaistarrail/characters/evernight.json +0 -29
  408. package/data/honkaistarrail/characters/feixiao.json +0 -13
  409. package/data/honkaistarrail/characters/firefly.json +0 -13
  410. package/data/honkaistarrail/characters/fugue.json +0 -29
  411. package/data/honkaistarrail/characters/fuxuan.json +0 -13
  412. package/data/honkaistarrail/characters/gallagher.json +0 -13
  413. package/data/honkaistarrail/characters/gepard.json +0 -13
  414. package/data/honkaistarrail/characters/gilgamesh.json +0 -29
  415. package/data/honkaistarrail/characters/guinaifen.json +0 -13
  416. package/data/honkaistarrail/characters/hanya.json +0 -13
  417. package/data/honkaistarrail/characters/herta.json +0 -13
  418. package/data/honkaistarrail/characters/himeko.json +0 -14
  419. package/data/honkaistarrail/characters/himekonova.json +0 -29
  420. package/data/honkaistarrail/characters/hook.json +0 -13
  421. package/data/honkaistarrail/characters/huohuo.json +0 -13
  422. package/data/honkaistarrail/characters/hyacine.json +0 -13
  423. package/data/honkaistarrail/characters/hysilens.json +0 -13
  424. package/data/honkaistarrail/characters/jade.json +0 -13
  425. package/data/honkaistarrail/characters/jiaoqiu.json +0 -13
  426. package/data/honkaistarrail/characters/jingliu.json +0 -13
  427. package/data/honkaistarrail/characters/jingyuan.json +0 -13
  428. package/data/honkaistarrail/characters/kafka.json +0 -13
  429. package/data/honkaistarrail/characters/lingsha.json +0 -13
  430. package/data/honkaistarrail/characters/lisushang.json +0 -13
  431. package/data/honkaistarrail/characters/luka.json +0 -13
  432. package/data/honkaistarrail/characters/luocha.json +0 -13
  433. package/data/honkaistarrail/characters/lynx.json +0 -13
  434. package/data/honkaistarrail/characters/march7th.json +0 -13
  435. package/data/honkaistarrail/characters/misha.json +0 -13
  436. package/data/honkaistarrail/characters/mortenaxblade.json +0 -29
  437. package/data/honkaistarrail/characters/moze.json +0 -13
  438. package/data/honkaistarrail/characters/mydei.json +0 -13
  439. package/data/honkaistarrail/characters/natasha.json +0 -13
  440. package/data/honkaistarrail/characters/pela.json +0 -13
  441. package/data/honkaistarrail/characters/phainon.json +0 -13
  442. package/data/honkaistarrail/characters/qingque.json +0 -13
  443. package/data/honkaistarrail/characters/rappa.json +0 -13
  444. package/data/honkaistarrail/characters/rintohsaka.json +0 -29
  445. package/data/honkaistarrail/characters/robin.json +0 -13
  446. package/data/honkaistarrail/characters/ruanmei.json +0 -13
  447. package/data/honkaistarrail/characters/saber.json +0 -29
  448. package/data/honkaistarrail/characters/sampo.json +0 -13
  449. package/data/honkaistarrail/characters/seele.json +0 -13
  450. package/data/honkaistarrail/characters/serval.json +0 -13
  451. package/data/honkaistarrail/characters/silverwolf.json +0 -13
  452. package/data/honkaistarrail/characters/silverwolflv999.json +0 -29
  453. package/data/honkaistarrail/characters/sparkle.json +0 -13
  454. package/data/honkaistarrail/characters/sparxie.json +0 -29
  455. package/data/honkaistarrail/characters/sunday.json +0 -29
  456. package/data/honkaistarrail/characters/thedahlia.json +0 -29
  457. package/data/honkaistarrail/characters/theherta.json +0 -29
  458. package/data/honkaistarrail/characters/tingyun.json +0 -13
  459. package/data/honkaistarrail/characters/topaz.json +0 -13
  460. package/data/honkaistarrail/characters/topaznumby.json +0 -29
  461. package/data/honkaistarrail/characters/trailblazer.json +0 -29
  462. package/data/honkaistarrail/characters/tribbie.json +0 -13
  463. package/data/honkaistarrail/characters/welt.json +0 -29
  464. package/data/honkaistarrail/characters/weltyang.json +0 -13
  465. package/data/honkaistarrail/characters/xueyi.json +0 -13
  466. package/data/honkaistarrail/characters/yanqing.json +0 -13
  467. package/data/honkaistarrail/characters/yaoguang.json +0 -13
  468. package/data/honkaistarrail/characters/yukong.json +0 -13
  469. package/data/honkaistarrail/characters/yunli.json +0 -13
  470. package/data/honkaistarrail/meta.json +0 -14
  471. package/data/nte/characters/adler.json +0 -15
  472. package/data/nte/characters/aurelia.json +0 -15
  473. package/data/nte/characters/baicang.json +0 -15
  474. package/data/nte/characters/chaos.json +0 -15
  475. package/data/nte/characters/chiz.json +0 -15
  476. package/data/nte/characters/daffodill.json +0 -15
  477. package/data/nte/characters/edgar.json +0 -15
  478. package/data/nte/characters/esperzero.json +0 -15
  479. package/data/nte/characters/fadia.json +0 -15
  480. package/data/nte/characters/haniel.json +0 -15
  481. package/data/nte/characters/hathor.json +0 -15
  482. package/data/nte/characters/hotori.json +0 -15
  483. package/data/nte/characters/iroi.json +0 -15
  484. package/data/nte/characters/jiuyuan.json +0 -15
  485. package/data/nte/characters/lacrimosa.json +0 -15
  486. package/data/nte/characters/mint.json +0 -15
  487. package/data/nte/characters/nanally.json +0 -15
  488. package/data/nte/characters/sakiri.json +0 -15
  489. package/data/nte/characters/shinku.json +0 -15
  490. package/data/nte/characters/skia.json +0 -15
  491. package/data/nte/characters/zankou.json +0 -51
  492. package/data/nte/meta.json +0 -14
  493. package/data/toweroffantasy/characters/alyss.json +0 -27
  494. package/data/toweroffantasy/characters/annabella.json +0 -23
  495. package/data/toweroffantasy/characters/asuka.json +0 -23
  496. package/data/toweroffantasy/characters/bailing.json +0 -23
  497. package/data/toweroffantasy/characters/brevey.json +0 -23
  498. package/data/toweroffantasy/characters/claudia.json +0 -23
  499. package/data/toweroffantasy/characters/cobaltb.json +0 -23
  500. package/data/toweroffantasy/characters/cocoritter.json +0 -23
  501. package/data/toweroffantasy/characters/crow.json +0 -23
  502. package/data/toweroffantasy/characters/echo.json +0 -23
  503. package/data/toweroffantasy/characters/ene.json +0 -23
  504. package/data/toweroffantasy/characters/feise.json +0 -25
  505. package/data/toweroffantasy/characters/fenrir.json +0 -23
  506. package/data/toweroffantasy/characters/fiona.json +0 -25
  507. package/data/toweroffantasy/characters/frigg.json +0 -23
  508. package/data/toweroffantasy/characters/gnonno.json +0 -23
  509. package/data/toweroffantasy/characters/hilda.json +0 -23
  510. package/data/toweroffantasy/characters/huang.json +0 -25
  511. package/data/toweroffantasy/characters/huma.json +0 -25
  512. package/data/toweroffantasy/characters/icarus.json +0 -23
  513. package/data/toweroffantasy/characters/jiyu.json +0 -25
  514. package/data/toweroffantasy/characters/king.json +0 -23
  515. package/data/toweroffantasy/characters/lan.json +0 -25
  516. package/data/toweroffantasy/characters/lin.json +0 -23
  517. package/data/toweroffantasy/characters/linghan.json +0 -23
  518. package/data/toweroffantasy/characters/liuhuo.json +0 -23
  519. package/data/toweroffantasy/characters/lyra.json +0 -23
  520. package/data/toweroffantasy/characters/meryl.json +0 -23
  521. package/data/toweroffantasy/characters/mingjing.json +0 -27
  522. package/data/toweroffantasy/characters/nanyin.json +0 -25
  523. package/data/toweroffantasy/characters/nemesis.json +0 -25
  524. package/data/toweroffantasy/characters/pepper.json +0 -23
  525. package/data/toweroffantasy/characters/plotti.json +0 -25
  526. package/data/toweroffantasy/characters/roslyn.json +0 -23
  527. package/data/toweroffantasy/characters/rubilia.json +0 -25
  528. package/data/toweroffantasy/characters/ruby.json +0 -25
  529. package/data/toweroffantasy/characters/sakifuwa.json +0 -23
  530. package/data/toweroffantasy/characters/samir.json +0 -23
  531. package/data/toweroffantasy/characters/shiro.json +0 -25
  532. package/data/toweroffantasy/characters/tianlang.json +0 -25
  533. package/data/toweroffantasy/characters/tsubasa.json +0 -23
  534. package/data/toweroffantasy/characters/umi.json +0 -23
  535. package/data/toweroffantasy/characters/yanmiao.json +0 -25
  536. package/data/toweroffantasy/characters/yanuo.json +0 -23
  537. package/data/toweroffantasy/characters/yulan.json +0 -23
  538. package/data/toweroffantasy/characters/zero.json +0 -23
  539. package/data/toweroffantasy/meta.json +0 -14
  540. package/data/vrchat/groups/clubzodiac.json +0 -8
  541. package/data/vrchat/groups/dirtydancers.json +0 -8
  542. package/data/vrchat/groups/drumsynews.json +0 -8
  543. package/data/vrchat/groups/ebola20.json +0 -8
  544. package/data/vrchat/groups/internationaldancersassociation.json +0 -8
  545. package/data/vrchat/groups/kannagang.json +0 -7
  546. package/data/vrchat/groups/lolisquad.json +0 -8
  547. package/data/vrchat/groups/nekonightsnightclub.json +0 -8
  548. package/data/vrchat/groups/nekostudios.json +0 -8
  549. package/data/vrchat/groups/nekosunecommunity.json +0 -8
  550. package/data/vrchat/groups/voidclub.json +0 -8
  551. package/data/vrchat/groups/voltdanceclub.json +0 -8
  552. package/data/vrchat/groups/vrceventsgroup.json +0 -8
  553. package/data/vrchat/groups/vrchatcommunitydiscord.json +0 -7
  554. package/data/vrchat/meta.json +0 -13
  555. package/data/vrchat/players/alto.json +0 -10
  556. package/data/vrchat/players/arcadum.json +0 -11
  557. package/data/vrchat/players/chairhandler.json +0 -10
  558. package/data/vrchat/players/chipz.json +0 -10
  559. package/data/vrchat/players/hikarivr.json +0 -11
  560. package/data/vrchat/players/kimple.json +0 -11
  561. package/data/vrchat/players/linkzr.json +0 -9
  562. package/data/vrchat/players/nagzz21.json +0 -10
  563. package/data/vrchat/players/nebride.json +0 -11
  564. package/data/vrchat/players/nekosunevr.json +0 -11
  565. package/data/vrchat/players/pokelawls.json +0 -10
  566. package/data/vrchat/players/qwonk.json +0 -9
  567. package/data/vrchat/players/roflgator.json +0 -11
  568. package/data/vrchat/players/scifri.json +0 -8
  569. package/data/vrchat/players/sodapoppin.json +0 -10
  570. package/data/vrchat/players/woops.json +0 -10
  571. package/data/vrchat/players/zentreya.json +0 -11
  572. package/data/vrchat/worlds/ascensionacademy.json +0 -8
  573. package/data/vrchat/worlds/clubvgl.json +0 -9
  574. package/data/vrchat/worlds/fightfinder.json +0 -9
  575. package/data/vrchat/worlds/hangouthouse.json +0 -8
  576. package/data/vrchat/worlds/nekostudioshalloween.json +0 -10
  577. package/data/vrchat/worlds/nekostudiosnewyear.json +0 -10
  578. package/data/vrchat/worlds/nekostudiosxmas.json +0 -10
  579. package/data/vrchat/worlds/nekosunevranimations2023.json +0 -10
  580. package/data/vrchat/worlds/nekosunevranimations20232024.json +0 -10
  581. package/data/vrchat/worlds/nekosunevranimations2024.json +0 -10
  582. package/data/vrchat/worlds/nekosunevranimations2025.json +0 -10
  583. package/data/vrchat/worlds/rumhamsavatarworld.json +0 -8
  584. package/data/vrchat/worlds/smewsranch.json +0 -8
  585. package/data/vrchat/worlds/smewsroom.json +0 -8
  586. package/data/vrchat/worlds/sunsetbar.json +0 -8
  587. package/data/vrchat/worlds/theblackcat.json +0 -10
  588. package/data/vrchat/worlds/thegreatpug.json +0 -9
  589. package/data/vrchat/worlds/themidnightbar.json +0 -8
  590. package/data/vrchat/worlds/voidclub.json +0 -8
  591. package/data/vrchat/worlds/voltdanceclub.json +0 -8
  592. package/data/vrchat/worlds/vrchathome.json +0 -9
  593. package/data/vrchat/worlds/whatalegend.json +0 -7
  594. package/data/warframe/characters/amesha.json +0 -226
  595. package/data/warframe/characters/ash.json +0 -1354
  596. package/data/warframe/characters/ashprime.json +0 -1994
  597. package/data/warframe/characters/atlas.json +0 -916
  598. package/data/warframe/characters/atlasprime.json +0 -1632
  599. package/data/warframe/characters/banshee.json +0 -1036
  600. package/data/warframe/characters/bansheeprime.json +0 -1750
  601. package/data/warframe/characters/baruuk.json +0 -555
  602. package/data/warframe/characters/baruukprime.json +0 -1298
  603. package/data/warframe/characters/bonewidow.json +0 -354
  604. package/data/warframe/characters/caliban.json +0 -434
  605. package/data/warframe/characters/calibanprime.json +0 -683
  606. package/data/warframe/characters/chroma.json +0 -1344
  607. package/data/warframe/characters/chromaprime.json +0 -1977
  608. package/data/warframe/characters/citrine.json +0 -220
  609. package/data/warframe/characters/cyte09.json +0 -218
  610. package/data/warframe/characters/dagath.json +0 -194
  611. package/data/warframe/characters/dante.json +0 -223
  612. package/data/warframe/characters/elytron.json +0 -300
  613. package/data/warframe/characters/ember.json +0 -1209
  614. package/data/warframe/characters/emberprime.json +0 -1678
  615. package/data/warframe/characters/equinox.json +0 -958
  616. package/data/warframe/characters/equinoxprime.json +0 -1644
  617. package/data/warframe/characters/excalibur.json +0 -1603
  618. package/data/warframe/characters/excaliburprime.json +0 -1524
  619. package/data/warframe/characters/excaliburumbra.json +0 -397
  620. package/data/warframe/characters/follie.json +0 -246
  621. package/data/warframe/characters/frost.json +0 -1330
  622. package/data/warframe/characters/frostprime.json +0 -1686
  623. package/data/warframe/characters/gara.json +0 -925
  624. package/data/warframe/characters/garaprime.json +0 -1494
  625. package/data/warframe/characters/garuda.json +0 -851
  626. package/data/warframe/characters/garudaprime.json +0 -1449
  627. package/data/warframe/characters/gauss.json +0 -506
  628. package/data/warframe/characters/gaussprime.json +0 -1077
  629. package/data/warframe/characters/grendel.json +0 -463
  630. package/data/warframe/characters/grendelprime.json +0 -772
  631. package/data/warframe/characters/gyre.json +0 -381
  632. package/data/warframe/characters/gyreprime.json +0 -403
  633. package/data/warframe/characters/harrow.json +0 -916
  634. package/data/warframe/characters/harrowprime.json +0 -1700
  635. package/data/warframe/characters/helminth.json +0 -220
  636. package/data/warframe/characters/hildryn.json +0 -627
  637. package/data/warframe/characters/hildrynprime.json +0 -996
  638. package/data/warframe/characters/hydroid.json +0 -1028
  639. package/data/warframe/characters/hydroidprime.json +0 -1621
  640. package/data/warframe/characters/inaros.json +0 -976
  641. package/data/warframe/characters/inarosprime.json +0 -1721
  642. package/data/warframe/characters/itzal.json +0 -465
  643. package/data/warframe/characters/ivara.json +0 -1349
  644. package/data/warframe/characters/ivaraprime.json +0 -1921
  645. package/data/warframe/characters/jade.json +0 -240
  646. package/data/warframe/characters/khora.json +0 -804
  647. package/data/warframe/characters/khoraprime.json +0 -1403
  648. package/data/warframe/characters/koumei.json +0 -221
  649. package/data/warframe/characters/kullervo.json +0 -191
  650. package/data/warframe/characters/lavos.json +0 -511
  651. package/data/warframe/characters/lavosprime.json +0 -711
  652. package/data/warframe/characters/limbo.json +0 -1363
  653. package/data/warframe/characters/limboprime.json +0 -2084
  654. package/data/warframe/characters/loki.json +0 -1209
  655. package/data/warframe/characters/lokiprime.json +0 -1457
  656. package/data/warframe/characters/mag.json +0 -2089
  657. package/data/warframe/characters/magprime.json +0 -2532
  658. package/data/warframe/characters/mesa.json +0 -1195
  659. package/data/warframe/characters/mesaprime.json +0 -2059
  660. package/data/warframe/characters/mirage.json +0 -1561
  661. package/data/warframe/characters/mirageprime.json +0 -2257
  662. package/data/warframe/characters/nekros.json +0 -1235
  663. package/data/warframe/characters/nekrosprime.json +0 -1882
  664. package/data/warframe/characters/nezha.json +0 -868
  665. package/data/warframe/characters/nezhaprime.json +0 -1695
  666. package/data/warframe/characters/nidus.json +0 -1027
  667. package/data/warframe/characters/nidusprime.json +0 -1706
  668. package/data/warframe/characters/nokko.json +0 -308
  669. package/data/warframe/characters/nova.json +0 -1226
  670. package/data/warframe/characters/novaprime.json +0 -1667
  671. package/data/warframe/characters/nyx.json +0 -1610
  672. package/data/warframe/characters/nyxprime.json +0 -1967
  673. package/data/warframe/characters/oberon.json +0 -1249
  674. package/data/warframe/characters/oberonprime.json +0 -1872
  675. package/data/warframe/characters/octavia.json +0 -1049
  676. package/data/warframe/characters/octaviaprime.json +0 -1735
  677. package/data/warframe/characters/odonata.json +0 -336
  678. package/data/warframe/characters/odonataprime.json +0 -787
  679. package/data/warframe/characters/oraxia.json +0 -246
  680. package/data/warframe/characters/orionsirius.json +0 -134
  681. package/data/warframe/characters/protea.json +0 -521
  682. package/data/warframe/characters/proteaprime.json +0 -992
  683. package/data/warframe/characters/qorvex.json +0 -214
  684. package/data/warframe/characters/revenant.json +0 -931
  685. package/data/warframe/characters/revenantprime.json +0 -1494
  686. package/data/warframe/characters/rhino.json +0 -1344
  687. package/data/warframe/characters/rhinoprime.json +0 -1675
  688. package/data/warframe/characters/saryn.json +0 -1210
  689. package/data/warframe/characters/sarynprime.json +0 -2042
  690. package/data/warframe/characters/sevagoth.json +0 -478
  691. package/data/warframe/characters/sevagothprime.json +0 -910
  692. package/data/warframe/characters/siriusorion.json +0 -247
  693. package/data/warframe/characters/styanax.json +0 -320
  694. package/data/warframe/characters/styanaxprime.json +0 -321
  695. package/data/warframe/characters/temple.json +0 -271
  696. package/data/warframe/characters/titania.json +0 -1227
  697. package/data/warframe/characters/titaniaprime.json +0 -2000
  698. package/data/warframe/characters/trinity.json +0 -1097
  699. package/data/warframe/characters/trinityprime.json +0 -1849
  700. package/data/warframe/characters/uriel.json +0 -215
  701. package/data/warframe/characters/valkyr.json +0 -1165
  702. package/data/warframe/characters/valkyrprime.json +0 -1969
  703. package/data/warframe/characters/vauban.json +0 -1067
  704. package/data/warframe/characters/vaubanprime.json +0 -1614
  705. package/data/warframe/characters/voidrig.json +0 -355
  706. package/data/warframe/characters/volt.json +0 -1324
  707. package/data/warframe/characters/voltprime.json +0 -1843
  708. package/data/warframe/characters/voruna.json +0 -293
  709. package/data/warframe/characters/vorunaprime.json +0 -431
  710. package/data/warframe/characters/wisp.json +0 -824
  711. package/data/warframe/characters/wispprime.json +0 -908
  712. package/data/warframe/characters/wukong.json +0 -927
  713. package/data/warframe/characters/wukongprime.json +0 -1754
  714. package/data/warframe/characters/xaku.json +0 -620
  715. package/data/warframe/characters/xakuprime.json +0 -879
  716. package/data/warframe/characters/yareli.json +0 -409
  717. package/data/warframe/characters/yareliprime.json +0 -683
  718. package/data/warframe/characters/zephyr.json +0 -1149
  719. package/data/warframe/characters/zephyrprime.json +0 -1864
  720. package/data/warframe/meta.json +0 -14
  721. package/data/wutheringwaves/meta.json +0 -14
  722. package/data/zenlesszonezero/meta.json +0 -14
  723. package/gamecodes.js +0 -204
  724. package/scripts/cache-sync-smoke.js +0 -139
  725. package/scripts/game-code-cache-smoke.js +0 -125
  726. package/scripts/sync-all-cache.js +0 -18
  727. package/scripts/sync-api-cache.js +0 -368
  728. package/scripts/sync-game-code-cache.js +0 -283
  729. package/scripts/sync-gaming-info-cache.js +0 -46
@@ -1,14 +0,0 @@
1
- {
2
- "name": "Warframe",
3
- "title": "Cooperative science-fiction action game by Digital Extremes.",
4
- "engine": "Evolution",
5
- "Platform": "Windows, PlayStation, Xbox, Nintendo Switch, iOS, Android",
6
- "Release date": "March 25, 2013",
7
- "Genre": "Action RPG, Third-person shooter, Online co-op",
8
- "developers": "Digital Extremes",
9
- "publisher": "Digital Extremes",
10
- "aliases": "WF, Warframe",
11
- "image": "https://www.warframe.com/favicon.ico",
12
- "description": "Online action game built around collectible Warframes, weapons, companions and the Origin System.",
13
- "url": "https://www.warframe.com/"
14
- }
@@ -1,14 +0,0 @@
1
- {
2
- "name": "Wuthering Waves",
3
- "title": "Open-world action RPG by Kuro Games.",
4
- "engine": "Unreal Engine 4",
5
- "Platform": "Windows, PlayStation 5, iOS, Android, macOS",
6
- "Release date": "May 22, 2024",
7
- "Genre": "Action RPG, Open World, Gacha",
8
- "developers": "Kuro Games",
9
- "publisher": "Kuro Games",
10
- "aliases": "WuWa, Wuthering Waves",
11
- "image": "https://wutheringwaves.kurogames.com/favicon.ico",
12
- "description": "Open-world action RPG featuring playable Resonators with distinct attributes and weapons.",
13
- "url": "https://wutheringwaves.kurogames.com/"
14
- }
@@ -1,14 +0,0 @@
1
- {
2
- "name": "Zenless Zone Zero",
3
- "title": "Urban fantasy action RPG by HoYoverse.",
4
- "engine": "Unity",
5
- "Platform": "Windows, PlayStation 5, Xbox Series X/S, iOS, Android",
6
- "Release date": "July 4, 2024",
7
- "Genre": "Action RPG, Urban Fantasy, Gacha",
8
- "developers": "miHoYo",
9
- "publisher": "HoYoverse",
10
- "aliases": "ZZZ, Zenless Zone Zero",
11
- "image": "https://zenless.hoyoverse.com/favicon.ico",
12
- "description": "Action RPG featuring playable Agents organized by faction, attribute and specialty.",
13
- "url": "https://zenless.hoyoverse.com/"
14
- }
package/gamecodes.js DELETED
@@ -1,204 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('fs');
4
- const path = require('path');
5
-
6
- const DATA_DIR = path.join(__dirname, 'data', 'game-codes');
7
- const DEFAULT_API_BASE = 'https://api.nekosunevr.co.uk';
8
- const DEFAULT_API_PATH = '/v5/games/api/codes';
9
- const DEFAULT_TIMEOUT_MS = 4000;
10
-
11
- function apiBase() {
12
- return String(process.env.GAMING_INFOS_API_BASE || DEFAULT_API_BASE).replace(/\/+$/, '');
13
- }
14
-
15
- function apiPath() {
16
- const raw = String(process.env.GAME_CODES_API_PATH || DEFAULT_API_PATH).trim();
17
- return `/${raw.replace(/^\/+|\/+$/g, '')}`;
18
- }
19
-
20
- function apiDisabled() {
21
- const raw = String(process.env.GAMING_INFOS_DISABLE_API || '').toLowerCase();
22
- return raw === '1' || raw === 'true';
23
- }
24
-
25
- function timeoutMs() {
26
- const raw = Number(process.env.GAMING_INFOS_TIMEOUT_MS);
27
- return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_TIMEOUT_MS;
28
- }
29
-
30
- async function apiGet(suffix = '', query = {}) {
31
- if (apiDisabled() || typeof fetch !== 'function') return null;
32
-
33
- const url = new URL(`${apiBase()}${apiPath()}${suffix}`);
34
- for (const [key, value] of Object.entries(query)) {
35
- if (value !== undefined && value !== null && value !== '') url.searchParams.set(key, String(value));
36
- }
37
-
38
- const controller = new AbortController();
39
- const timer = setTimeout(() => controller.abort(), timeoutMs());
40
- try {
41
- const response = await fetch(url, { signal: controller.signal, headers: { Accept: 'application/json' } });
42
- if (!response.ok) return null;
43
- const body = await response.json();
44
- if (!body || body.success === false) return null;
45
- return body;
46
- } catch (_) {
47
- return null;
48
- } finally {
49
- clearTimeout(timer);
50
- }
51
- }
52
-
53
- async function readJson(filePath) {
54
- return JSON.parse(await fs.promises.readFile(filePath, 'utf8'));
55
- }
56
-
57
- function safeFallbackPath(fileName) {
58
- const filePath = path.resolve(DATA_DIR, fileName);
59
- const root = `${path.resolve(DATA_DIR)}${path.sep}`;
60
- return filePath.startsWith(root) ? filePath : null;
61
- }
62
-
63
- async function readFallback(fileName) {
64
- const filePath = safeFallbackPath(fileName);
65
- if (!filePath || !fs.existsSync(filePath)) return null;
66
- try {
67
- return await readJson(filePath);
68
- } catch (_) {
69
- return null;
70
- }
71
- }
72
-
73
- function normalizeGame(game) {
74
- const slug = String(game || '').trim().toLowerCase();
75
- return /^[a-z0-9][a-z0-9-]*$/.test(slug) ? slug : null;
76
- }
77
-
78
- function normalizeCode(code) {
79
- return String(code || '').trim().toLowerCase();
80
- }
81
-
82
- async function resolveCachedGame(game) {
83
- const slug = normalizeGame(game);
84
- if (!slug) return null;
85
- if (await readFallback(path.join('games', `${slug}.json`))) return slug;
86
-
87
- const cachedDirectory = await readFallback('directory.json');
88
- const aliasTarget = cachedDirectory?.aliases?.[slug];
89
- const canonical = normalizeGame(aliasTarget);
90
- if (canonical && await readFallback(path.join('games', `${canonical}.json`))) return canonical;
91
- return slug;
92
- }
93
-
94
- function hydrateCachedExpiry(entry) {
95
- if (!entry || typeof entry !== 'object') return entry;
96
- const output = { ...entry };
97
- if (!entry.expiry || typeof entry.expiry !== 'object' || Array.isArray(entry.expiry)) return output;
98
-
99
- const expiry = { ...entry.expiry };
100
- const expiresAtMs = expiry.expiresAt ? new Date(expiry.expiresAt).getTime() : NaN;
101
- if (!Number.isNaN(expiresAtMs)) {
102
- const remainingSeconds = Math.max(0, Math.floor((expiresAtMs - Date.now()) / 1000));
103
- expiry.expiresInSeconds = remainingSeconds;
104
- expiry.expired = expiresAtMs <= Date.now();
105
- expiry.countdown = {
106
- days: Math.floor(remainingSeconds / 86400),
107
- hours: Math.floor((remainingSeconds % 86400) / 3600),
108
- minutes: Math.floor((remainingSeconds % 3600) / 60),
109
- seconds: remainingSeconds % 60
110
- };
111
- } else {
112
- expiry.expiresInSeconds = null;
113
- expiry.countdown = null;
114
- }
115
- output.expiry = expiry;
116
- return output;
117
- }
118
-
119
- function filterCachedList(data, options = {}) {
120
- if (!data || typeof data !== 'object') return data;
121
- const includeUnknown = Boolean(options.includeUnknown);
122
- const category = options.category ? String(options.category).toLowerCase() : null;
123
- const claimType = options.claimType ? String(options.claimType).toLowerCase() : null;
124
-
125
- const matches = (entry) => {
126
- if (!entry || typeof entry !== 'object') return false;
127
- if (category && String(entry.category || '').toLowerCase() !== category) return false;
128
- if (claimType && String(entry.claimType || '').toLowerCase() !== claimType) return false;
129
- return true;
130
- };
131
-
132
- const hydrate = (rows) => Array.isArray(rows) ? rows.filter(matches).map(hydrateCachedExpiry) : [];
133
- const result = {
134
- Active: hydrate(data.Active),
135
- Expired: hydrate(data.Expired)
136
- };
137
- if (includeUnknown) result.Unknown = hydrate(data.Unknown);
138
- return result;
139
- }
140
-
141
- async function directory() {
142
- const live = await apiGet('');
143
- if (live) return live;
144
- const cached = await readFallback('directory.json');
145
- return cached || { success: false, error: 'Game code directory is unavailable and no fallback cache exists.' };
146
- }
147
-
148
- async function status() {
149
- const live = await apiGet('/status');
150
- if (live) return live.data !== undefined ? live.data : live;
151
- const cached = await readFallback('status.json');
152
- return cached || { error: 'Game code status is unavailable and no fallback cache exists.' };
153
- }
154
-
155
- async function gameCodes(game, options = {}) {
156
- if (!game) return { error: 'game is required' };
157
- const requested = normalizeGame(game);
158
- if (!requested) return { error: 'invalid game slug' };
159
- const query = {
160
- timezone: options.timezone,
161
- category: options.category,
162
- claimType: options.claimType,
163
- includeUnknown: options.includeUnknown ? 'true' : undefined
164
- };
165
- const live = await apiGet(`/${encodeURIComponent(requested)}`, query);
166
- if (live) return live;
167
-
168
- const cachedGame = await resolveCachedGame(requested);
169
- const cached = cachedGame ? await readFallback(path.join('games', `${cachedGame}.json`)) : null;
170
- if (!cached) return { error: `No cached game codes found for "${game}".` };
171
- return filterCachedList(cached, options);
172
- }
173
-
174
- async function gameCode(game, code, options = {}) {
175
- if (!game || !code) return { error: 'game and code are both required' };
176
- const requested = normalizeGame(game);
177
- if (!requested) return { error: 'invalid game slug' };
178
- const codeValue = String(code).trim();
179
- const live = await apiGet(`/${encodeURIComponent(requested)}/${encodeURIComponent(codeValue)}`, { timezone: options.timezone });
180
- if (live) return live.data !== undefined ? live.data : live;
181
-
182
- const cachedGame = await resolveCachedGame(requested);
183
- const cached = cachedGame ? await readFallback(path.join('games', `${cachedGame}.json`)) : null;
184
- if (!cached) return { error: `No cached game codes found for "${game}".` };
185
- const wanted = normalizeCode(codeValue);
186
- for (const bucket of ['Active', 'Expired', 'Unknown']) {
187
- for (const entry of Array.isArray(cached[bucket]) ? cached[bucket] : []) {
188
- if (normalizeCode(entry?.code) === wanted) return hydrateCachedExpiry(entry);
189
- }
190
- }
191
- return { error: `Code "${code}" not found for game "${game}".` };
192
- }
193
-
194
- async function cacheInfo() {
195
- return readFallback('.cache-manifest.json');
196
- }
197
-
198
- module.exports = {
199
- Codes: () => directory(),
200
- CodesStatus: () => status(),
201
- GameCodes: (game, options) => gameCodes(game, options),
202
- GameCode: (game, code, options) => gameCode(game, code, options),
203
- CodeCacheInfo: () => cacheInfo()
204
- };
@@ -1,139 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const fs = require('fs');
5
- const http = require('http');
6
- const os = require('os');
7
- const path = require('path');
8
- const {
9
- DEFAULT_MANIFEST,
10
- mergeDiscoveredManifest,
11
- validateRootSyncState,
12
- syncApiCache
13
- } = require('./sync-api-cache');
14
-
15
- function json(res, status, body) {
16
- const payload = JSON.stringify(body);
17
- res.writeHead(status, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(payload) });
18
- res.end(payload);
19
- }
20
-
21
- async function main() {
22
- assert.deepStrictEqual(
23
- DEFAULT_MANIFEST.fortnite,
24
- ['characters', 'npcs', 'maps'],
25
- 'Fortnite fallback mirror must keep skins, NPCs, and maps as separate datasets'
26
- );
27
-
28
- const discovered = mergeDiscoveredManifest(
29
- [
30
- { slug: 'codblackops2', name: 'Call of Duty: Black Ops II', types: ['characters', 'npcs', 'maps'] },
31
- { slug: 'futuregame', name: 'Future Public Game', types: ['characters', 'maps'] }
32
- ],
33
- { testgame: ['characters'] }
34
- );
35
- assert.deepStrictEqual(discovered.testgame, ['characters']);
36
- assert.deepStrictEqual(discovered.codblackops2, ['characters', 'npcs', 'maps']);
37
- assert.deepStrictEqual(discovered.futuregame, ['characters', 'maps']);
38
-
39
- assert.doesNotThrow(() => validateRootSyncState({
40
- sync: {
41
- running: false,
42
- syncSchemaVersion: 2,
43
- state: { lastStatus: 'success', syncSchemaVersion: 2, requiredSyncSchemaVersion: 2 }
44
- }
45
- }));
46
- assert.throws(() => validateRootSyncState({ sync: { running: true, state: { lastStatus: 'running' } } }), /currently running/);
47
- assert.throws(() => validateRootSyncState({ sync: { running: false, state: { lastStatus: 'failed' } } }), /state is failed/);
48
- assert.throws(() => validateRootSyncState({
49
- sync: {
50
- running: false,
51
- syncSchemaVersion: 2,
52
- state: { lastStatus: 'success', syncSchemaVersion: 1, requiredSyncSchemaVersion: 2 }
53
- }
54
- }), /schema catch-up is incomplete/);
55
-
56
- const root = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'gaming-infos-cache-test-'));
57
- const dataDir = path.join(root, 'data');
58
- let failCharacters = false;
59
- let characters = [
60
- { slug: 'alpha', name: 'Alpha', value: 1 },
61
- { slug: 'beta', name: 'Beta', value: 2 }
62
- ];
63
-
64
- const server = http.createServer((req, res) => {
65
- if (req.url === '/v5/games/api/gaming-infos') {
66
- return json(res, 200, {
67
- success: true,
68
- data: [{ slug: 'testgame', name: 'Test Game', types: ['characters'] }],
69
- sync: {
70
- running: false,
71
- syncSchemaVersion: 2,
72
- state: { lastStatus: 'success', syncSchemaVersion: 2, requiredSyncSchemaVersion: 2 }
73
- }
74
- });
75
- }
76
- if (req.url === '/v5/games/api/gaming-infos/testgame/meta/testgame') {
77
- return json(res, 200, { success: true, data: { slug: 'testgame', name: 'Test Game', description: 'fixture', types: ['characters'] } });
78
- }
79
- if (req.url === '/v5/games/api/gaming-infos/testgame/characters') {
80
- if (failCharacters) return json(res, 503, { success: false, error: 'fixture outage' });
81
- return json(res, 200, { success: true, data: characters });
82
- }
83
- return json(res, 404, { success: false, error: 'not found' });
84
- });
85
-
86
- await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
87
- const address = server.address();
88
- const apiBase = `http://127.0.0.1:${address.port}`;
89
- const options = {
90
- apiBase,
91
- apiPath: '/v5/games/api/gaming-infos',
92
- dataDir,
93
- manifest: { testgame: ['characters'] },
94
- retries: 0,
95
- timeoutMs: 3000
96
- };
97
-
98
- try {
99
- const first = await syncApiCache(options);
100
- assert.strictEqual(first.changed, true);
101
- assert.ok(fs.existsSync(path.join(dataDir, 'testgame', 'characters', 'alpha.json')));
102
- assert.ok(fs.existsSync(path.join(dataDir, 'testgame', 'characters', 'beta.json')));
103
-
104
- characters = [
105
- { slug: 'alpha', name: 'Alpha', value: 99 },
106
- { slug: 'gamma', name: 'Gamma', value: 3 }
107
- ];
108
- const second = await syncApiCache(options);
109
- assert.strictEqual(second.changed, true);
110
- assert.strictEqual(second.stats.added, 1);
111
- assert.strictEqual(second.stats.removed, 1);
112
- assert.ok(second.stats.changed >= 1);
113
- assert.strictEqual(JSON.parse(await fs.promises.readFile(path.join(dataDir, 'testgame', 'characters', 'alpha.json'), 'utf8')).value, 99);
114
- assert.ok(fs.existsSync(path.join(dataDir, 'testgame', 'characters', 'gamma.json')));
115
- assert.ok(!fs.existsSync(path.join(dataDir, 'testgame', 'characters', 'beta.json')));
116
-
117
- const beforeOutage = await fs.promises.readFile(path.join(dataDir, 'testgame', 'characters', 'alpha.json'), 'utf8');
118
- failCharacters = true;
119
- let failed = false;
120
- try {
121
- await syncApiCache(options);
122
- } catch (_) {
123
- failed = true;
124
- }
125
- assert.strictEqual(failed, true, 'partial API outage must fail the sync');
126
- assert.strictEqual(await fs.promises.readFile(path.join(dataDir, 'testgame', 'characters', 'alpha.json'), 'utf8'), beforeOutage);
127
- assert.ok(fs.existsSync(path.join(dataDir, 'testgame', 'characters', 'gamma.json')), 'last good snapshot must survive an outage');
128
-
129
- console.log('gaming-infos cache sync smoke test passed');
130
- } finally {
131
- await new Promise((resolve) => server.close(resolve));
132
- await fs.promises.rm(root, { recursive: true, force: true });
133
- }
134
- }
135
-
136
- main().catch((error) => {
137
- console.error(error);
138
- process.exitCode = 1;
139
- });
@@ -1,125 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const fs = require('fs');
5
- const os = require('os');
6
- const path = require('path');
7
- const { syncGameCodeCache } = require('./sync-game-code-cache');
8
-
9
- function response(body, status = 200) {
10
- return {
11
- ok: status >= 200 && status < 300,
12
- status,
13
- async json() { return body; }
14
- };
15
- }
16
-
17
- async function main() {
18
- const temp = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'game-code-cache-'));
19
- const dataDir = path.join(temp, 'game-codes');
20
- let phase = 1;
21
- let requestTick = 0;
22
-
23
- const directory = () => ({
24
- success: true,
25
- games: [
26
- { game: 'alpha', name: 'Alpha', counts: { total: 2 }, lastUpdatedAt: '2026-08-24T10:00:00.000Z' },
27
- { game: 'beta', name: 'Beta', counts: { total: 1 }, lastUpdatedAt: '2026-08-24T10:05:00.000Z' }
28
- ],
29
- aliases: { a: 'alpha', b: 'beta' },
30
- // Simulates APINODE's request-time directory timestamp. This must not make
31
- // an otherwise-identical fallback snapshot look changed.
32
- updatedAt: new Date(Date.UTC(2026, 7, 24, 10, 10, requestTick++)).toISOString()
33
- });
34
-
35
- function expiry() {
36
- return {
37
- type: 'fixed',
38
- expiresAt: '2030-12-31T23:59:59.000Z',
39
- local: '31/12/2030, 23:59:59 UTC',
40
- expired: false,
41
- // These are deliberately volatile and should be stripped by the mirror.
42
- expiresInSeconds: 100000 - requestTick,
43
- countdown: { days: 1, hours: 2, minutes: 3, seconds: 59 - (requestTick % 50) }
44
- };
45
- }
46
-
47
- const datasets = () => ({
48
- alpha: phase === 1
49
- ? {
50
- Active: [
51
- { code: 'KEEP', status: 'active', expiry: expiry() },
52
- { code: 'REMOVE', status: 'active', expiry: expiry() }
53
- ],
54
- Expired: [],
55
- Unknown: []
56
- }
57
- : {
58
- Active: [
59
- { code: 'KEEP', status: 'active', notes: 'changed', expiry: expiry() },
60
- { code: 'ADD', status: 'active', expiry: expiry() }
61
- ],
62
- Expired: [],
63
- Unknown: []
64
- },
65
- beta: { Active: [], Expired: [{ code: 'OLD', status: 'expired', expiry: expiry() }], Unknown: [] }
66
- });
67
-
68
- const originalFetch = global.fetch;
69
- global.fetch = async (input) => {
70
- const url = new URL(String(input));
71
- if (phase === 3 && url.pathname.endsWith('/beta')) return response({ success: false }, 503);
72
- if (url.pathname.endsWith('/codes')) return response(directory());
73
- if (url.pathname.endsWith('/codes/status')) return response({ success: true, data: { generic: { ok: true }, specialized: [] } });
74
- const game = url.pathname.split('/').pop();
75
- if (datasets()[game]) return response(datasets()[game]);
76
- return response({ success: false }, 404);
77
- };
78
-
79
- try {
80
- const first = await syncGameCodeCache({ dataDir, apiBase: 'https://example.test', apiPath: '/v5/games/api/codes', retries: 0, delayMs: 0 });
81
- assert.equal(first.success, true);
82
- assert.equal(fs.existsSync(path.join(dataDir, 'games', 'alpha.json')), true);
83
- let alpha = JSON.parse(await fs.promises.readFile(path.join(dataDir, 'games', 'alpha.json'), 'utf8'));
84
- assert.deepEqual(alpha.Active.map((row) => row.code), ['KEEP', 'REMOVE']);
85
- assert.equal(alpha.Active[0].expiry.expiresAt, '2030-12-31T23:59:59.000Z');
86
- assert.equal('expiresInSeconds' in alpha.Active[0].expiry, false);
87
- assert.equal('countdown' in alpha.Active[0].expiry, false);
88
-
89
- phase = 2;
90
- const second = await syncGameCodeCache({ dataDir, apiBase: 'https://example.test', apiPath: '/v5/games/api/codes', retries: 0, delayMs: 0 });
91
- assert.equal(second.success, true);
92
- assert.equal(second.changed, true);
93
- alpha = JSON.parse(await fs.promises.readFile(path.join(dataDir, 'games', 'alpha.json'), 'utf8'));
94
- assert.deepEqual(alpha.Active.map((row) => row.code), ['KEEP', 'ADD']);
95
- assert.equal(alpha.Active[0].notes, 'changed');
96
- assert.equal(alpha.Active.some((row) => row.code === 'REMOVE'), false);
97
-
98
- // Same real API data, but request-time updatedAt/countdowns change again.
99
- // The stable snapshot must detect this as unchanged.
100
- const unchanged = await syncGameCodeCache({ dataDir, apiBase: 'https://example.test', apiPath: '/v5/games/api/codes', retries: 0, delayMs: 0 });
101
- assert.equal(unchanged.success, true);
102
- assert.equal(unchanged.changed, false, 'volatile countdown/request timestamps must not create cache commits');
103
-
104
- const beforeFailure = await fs.promises.readFile(path.join(dataDir, 'games', 'alpha.json'), 'utf8');
105
- phase = 3;
106
- await assert.rejects(
107
- () => syncGameCodeCache({ dataDir, apiBase: 'https://example.test', apiPath: '/v5/games/api/codes', retries: 0, delayMs: 0 }),
108
- /503/
109
- );
110
- const afterFailure = await fs.promises.readFile(path.join(dataDir, 'games', 'alpha.json'), 'utf8');
111
- assert.equal(afterFailure, beforeFailure, 'failed partial sync must preserve last-good code cache');
112
-
113
- const status = JSON.parse(await fs.promises.readFile(path.join(dataDir, 'status.json'), 'utf8'));
114
- assert.equal(status.generic.ok, true);
115
- console.log('game-code-cache smoke test passed');
116
- } finally {
117
- global.fetch = originalFetch;
118
- await fs.promises.rm(temp, { recursive: true, force: true });
119
- }
120
- }
121
-
122
- main().catch((error) => {
123
- console.error(error);
124
- process.exitCode = 1;
125
- });
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- const { syncGamingInfoCacheSafely } = require('./sync-gaming-info-cache');
4
- const { syncGameCodeCache } = require('./sync-game-code-cache');
5
-
6
- async function main() {
7
- // The gaming-info phase temporarily moves data/game-codes out of the way,
8
- // mirrors data/, then restores the previous code cache before code syncing.
9
- // If the code API fails afterwards, its last-good fallback is still present.
10
- const gamingInfos = await syncGamingInfoCacheSafely();
11
- const gameCodes = await syncGameCodeCache();
12
- console.log(JSON.stringify({ success: true, gamingInfos, gameCodes }, null, 2));
13
- }
14
-
15
- main().catch((error) => {
16
- console.error(`[gaming-infos combined cache] ${error.stack || error.message || error}`);
17
- process.exitCode = 1;
18
- });