@nekosuneprojects/gaming-infos 2.2.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.
- package/CHANGELOG.md +77 -3
- package/README.md +62 -495
- package/index.js +3 -223
- package/package.json +53 -46
- package/src/providers/vrchat.js +11 -0
- package/src/providers/warframe.js +7 -0
- package/src/registry.js +23 -0
- package/.github/workflows/npm-publish-github-packages.yml +0 -56
- package/.github/workflows/npm-publish.yml +0 -71
- package/.github/workflows/sync-api-cache.yml +0 -72
- package/CACHE_SYNC.md +0 -172
- package/CONTRIBUTING.md +0 -217
- package/DATA.md +0 -292
- package/data/arknightsendfield/meta.json +0 -14
- package/data/fortnite/meta.json +0 -14
- package/data/game-codes/.gitkeep +0 -0
- package/data/genshinimpact/characters/albedo.json +0 -11
- package/data/genshinimpact/characters/alhaitham.json +0 -12
- package/data/genshinimpact/characters/aloy.json +0 -11
- package/data/genshinimpact/characters/amber.json +0 -12
- package/data/genshinimpact/characters/aratakiitto.json +0 -12
- package/data/genshinimpact/characters/arlecchino.json +0 -12
- package/data/genshinimpact/characters/baizhu.json +0 -12
- package/data/genshinimpact/characters/barbara.json +0 -11
- package/data/genshinimpact/characters/beidou.json +0 -12
- package/data/genshinimpact/characters/bennett.json +0 -11
- package/data/genshinimpact/characters/candace.json +0 -12
- package/data/genshinimpact/characters/charlotte.json +0 -11
- package/data/genshinimpact/characters/chasca.json +0 -11
- package/data/genshinimpact/characters/chevreuse.json +0 -11
- package/data/genshinimpact/characters/chiori.json +0 -11
- package/data/genshinimpact/characters/chongyun.json +0 -12
- package/data/genshinimpact/characters/citlali.json +0 -11
- package/data/genshinimpact/characters/clorinde.json +0 -11
- package/data/genshinimpact/characters/collei.json +0 -12
- package/data/genshinimpact/characters/cyno.json +0 -12
- package/data/genshinimpact/characters/dahlia.json +0 -10
- package/data/genshinimpact/characters/dehya.json +0 -11
- package/data/genshinimpact/characters/diluc.json +0 -11
- package/data/genshinimpact/characters/diona.json +0 -11
- package/data/genshinimpact/characters/dori.json +0 -11
- package/data/genshinimpact/characters/durin.json +0 -11
- package/data/genshinimpact/characters/emilie.json +0 -11
- package/data/genshinimpact/characters/escoffier.json +0 -12
- package/data/genshinimpact/characters/eula.json +0 -11
- package/data/genshinimpact/characters/faruzan.json +0 -12
- package/data/genshinimpact/characters/fischl.json +0 -12
- package/data/genshinimpact/characters/freminet.json +0 -11
- package/data/genshinimpact/characters/furina.json +0 -12
- package/data/genshinimpact/characters/gaming.json +0 -11
- package/data/genshinimpact/characters/ganyu.json +0 -11
- package/data/genshinimpact/characters/gorou.json +0 -12
- package/data/genshinimpact/characters/hutao.json +0 -12
- package/data/genshinimpact/characters/iansan.json +0 -11
- package/data/genshinimpact/characters/ineffa.json +0 -11
- package/data/genshinimpact/characters/jean.json +0 -11
- package/data/genshinimpact/characters/kachina.json +0 -11
- package/data/genshinimpact/characters/kaedeharakazuha.json +0 -12
- package/data/genshinimpact/characters/kaeya.json +0 -11
- package/data/genshinimpact/characters/kamisatoayaka.json +0 -11
- package/data/genshinimpact/characters/kamisatoayato.json +0 -11
- package/data/genshinimpact/characters/kaveh.json +0 -12
- package/data/genshinimpact/characters/keqing.json +0 -11
- package/data/genshinimpact/characters/kinich.json +0 -11
- package/data/genshinimpact/characters/kirara.json +0 -11
- package/data/genshinimpact/characters/klee.json +0 -11
- package/data/genshinimpact/characters/kujousara.json +0 -11
- package/data/genshinimpact/characters/kukishinobu.json +0 -12
- package/data/genshinimpact/characters/lanyan.json +0 -11
- package/data/genshinimpact/characters/layla.json +0 -11
- package/data/genshinimpact/characters/lisa.json +0 -12
- package/data/genshinimpact/characters/lohen.json +0 -11
- package/data/genshinimpact/characters/lynette.json +0 -11
- package/data/genshinimpact/characters/lyney.json +0 -11
- package/data/genshinimpact/characters/mavuika.json +0 -11
- package/data/genshinimpact/characters/mikaschmidt.json +0 -11
- package/data/genshinimpact/characters/mona.json +0 -12
- package/data/genshinimpact/characters/mualani.json +0 -11
- package/data/genshinimpact/characters/nahida.json +0 -12
- package/data/genshinimpact/characters/navia.json +0 -11
- package/data/genshinimpact/characters/neuvillette.json +0 -11
- package/data/genshinimpact/characters/nilou.json +0 -11
- package/data/genshinimpact/characters/ningguang.json +0 -11
- package/data/genshinimpact/characters/noelle.json +0 -12
- package/data/genshinimpact/characters/ororon.json +0 -11
- package/data/genshinimpact/characters/prune.json +0 -10
- package/data/genshinimpact/characters/qiqi.json +0 -12
- package/data/genshinimpact/characters/raidenshogun.json +0 -12
- package/data/genshinimpact/characters/razor.json +0 -11
- package/data/genshinimpact/characters/rosaria.json +0 -12
- package/data/genshinimpact/characters/sangonomiyakokomi.json +0 -12
- package/data/genshinimpact/characters/sayu.json +0 -11
- package/data/genshinimpact/characters/sethos.json +0 -11
- package/data/genshinimpact/characters/shenhe.json +0 -12
- package/data/genshinimpact/characters/shikanoinheizou.json +0 -12
- package/data/genshinimpact/characters/sigewinne.json +0 -11
- package/data/genshinimpact/characters/skirk.json +0 -11
- package/data/genshinimpact/characters/sucrose.json +0 -12
- package/data/genshinimpact/characters/thoma.json +0 -11
- package/data/genshinimpact/characters/tighnari.json +0 -12
- package/data/genshinimpact/characters/varesa.json +0 -11
- package/data/genshinimpact/characters/varka.json +0 -10
- package/data/genshinimpact/characters/venti.json +0 -12
- package/data/genshinimpact/characters/wanderer.json +0 -11
- package/data/genshinimpact/characters/wriothesley.json +0 -12
- package/data/genshinimpact/characters/xiangling.json +0 -12
- package/data/genshinimpact/characters/xianyun.json +0 -11
- package/data/genshinimpact/characters/xiao.json +0 -11
- package/data/genshinimpact/characters/xilonen.json +0 -11
- package/data/genshinimpact/characters/xingqiu.json +0 -12
- package/data/genshinimpact/characters/xinyan.json +0 -12
- package/data/genshinimpact/characters/yaemiko.json +0 -12
- package/data/genshinimpact/characters/yanfei.json +0 -12
- package/data/genshinimpact/characters/yaoyao.json +0 -12
- package/data/genshinimpact/characters/yelan.json +0 -11
- package/data/genshinimpact/characters/yoimiya.json +0 -12
- package/data/genshinimpact/characters/yumemizukimizuki.json +0 -11
- package/data/genshinimpact/characters/yunjin.json +0 -11
- package/data/genshinimpact/characters/zhongli.json +0 -11
- package/data/genshinimpact/characters/zibai.json +0 -11
- package/data/genshinimpact/meta.json +0 -14
- package/data/honkaistarrail/characters/acheron.json +0 -12
- package/data/honkaistarrail/characters/aglaea.json +0 -12
- package/data/honkaistarrail/characters/anaxa.json +0 -12
- package/data/honkaistarrail/characters/argenti.json +0 -12
- package/data/honkaistarrail/characters/arlan.json +0 -12
- package/data/honkaistarrail/characters/ashveil.json +0 -12
- package/data/honkaistarrail/characters/asta.json +0 -12
- package/data/honkaistarrail/characters/aventurine.json +0 -12
- package/data/honkaistarrail/characters/bailu.json +0 -12
- package/data/honkaistarrail/characters/blackswan.json +0 -12
- package/data/honkaistarrail/characters/blade.json +0 -12
- package/data/honkaistarrail/characters/boothill.json +0 -12
- package/data/honkaistarrail/characters/bronya.json +0 -12
- package/data/honkaistarrail/characters/castorice.json +0 -12
- package/data/honkaistarrail/characters/cerydra.json +0 -12
- package/data/honkaistarrail/characters/cipher.json +0 -12
- package/data/honkaistarrail/characters/clara.json +0 -12
- package/data/honkaistarrail/characters/constance.json +0 -12
- package/data/honkaistarrail/characters/cyrene.json +0 -12
- package/data/honkaistarrail/characters/danheng.json +0 -12
- package/data/honkaistarrail/characters/drratio.json +0 -12
- package/data/honkaistarrail/characters/feixiao.json +0 -12
- package/data/honkaistarrail/characters/firefly.json +0 -12
- package/data/honkaistarrail/characters/fuxuan.json +0 -12
- package/data/honkaistarrail/characters/gallagher.json +0 -12
- package/data/honkaistarrail/characters/gepard.json +0 -12
- package/data/honkaistarrail/characters/guinaifen.json +0 -12
- package/data/honkaistarrail/characters/hanya.json +0 -12
- package/data/honkaistarrail/characters/herta.json +0 -12
- package/data/honkaistarrail/characters/himeko.json +0 -13
- package/data/honkaistarrail/characters/hook.json +0 -12
- package/data/honkaistarrail/characters/huohuo.json +0 -12
- package/data/honkaistarrail/characters/hyacine.json +0 -12
- package/data/honkaistarrail/characters/hysilens.json +0 -12
- package/data/honkaistarrail/characters/jade.json +0 -12
- package/data/honkaistarrail/characters/jiaoqiu.json +0 -12
- package/data/honkaistarrail/characters/jingliu.json +0 -12
- package/data/honkaistarrail/characters/jingyuan.json +0 -12
- package/data/honkaistarrail/characters/kafka.json +0 -12
- package/data/honkaistarrail/characters/lingsha.json +0 -12
- package/data/honkaistarrail/characters/lisushang.json +0 -12
- package/data/honkaistarrail/characters/luka.json +0 -12
- package/data/honkaistarrail/characters/luocha.json +0 -12
- package/data/honkaistarrail/characters/lynx.json +0 -12
- package/data/honkaistarrail/characters/march7th.json +0 -12
- package/data/honkaistarrail/characters/misha.json +0 -12
- package/data/honkaistarrail/characters/moze.json +0 -12
- package/data/honkaistarrail/characters/mydei.json +0 -12
- package/data/honkaistarrail/characters/natasha.json +0 -12
- package/data/honkaistarrail/characters/pela.json +0 -12
- package/data/honkaistarrail/characters/phainon.json +0 -12
- package/data/honkaistarrail/characters/qingque.json +0 -12
- package/data/honkaistarrail/characters/rappa.json +0 -12
- package/data/honkaistarrail/characters/robin.json +0 -12
- package/data/honkaistarrail/characters/ruanmei.json +0 -12
- package/data/honkaistarrail/characters/sampo.json +0 -12
- package/data/honkaistarrail/characters/seele.json +0 -12
- package/data/honkaistarrail/characters/serval.json +0 -12
- package/data/honkaistarrail/characters/silverwolf.json +0 -12
- package/data/honkaistarrail/characters/sparkle.json +0 -12
- package/data/honkaistarrail/characters/tingyun.json +0 -12
- package/data/honkaistarrail/characters/topaz.json +0 -12
- package/data/honkaistarrail/characters/tribbie.json +0 -12
- package/data/honkaistarrail/characters/weltyang.json +0 -12
- package/data/honkaistarrail/characters/xueyi.json +0 -12
- package/data/honkaistarrail/characters/yanqing.json +0 -12
- package/data/honkaistarrail/characters/yaoguang.json +0 -12
- package/data/honkaistarrail/characters/yukong.json +0 -12
- package/data/honkaistarrail/characters/yunli.json +0 -12
- package/data/honkaistarrail/meta.json +0 -14
- package/data/nte/characters/adler.json +0 -14
- package/data/nte/characters/aurelia.json +0 -14
- package/data/nte/characters/baicang.json +0 -14
- package/data/nte/characters/chaos.json +0 -14
- package/data/nte/characters/chiz.json +0 -14
- package/data/nte/characters/daffodill.json +0 -14
- package/data/nte/characters/edgar.json +0 -14
- package/data/nte/characters/esperzero.json +0 -14
- package/data/nte/characters/fadia.json +0 -14
- package/data/nte/characters/haniel.json +0 -14
- package/data/nte/characters/hathor.json +0 -14
- package/data/nte/characters/hotori.json +0 -14
- package/data/nte/characters/iroi.json +0 -14
- package/data/nte/characters/jiuyuan.json +0 -14
- package/data/nte/characters/lacrimosa.json +0 -14
- package/data/nte/characters/mint.json +0 -14
- package/data/nte/characters/nanally.json +0 -14
- package/data/nte/characters/sakiri.json +0 -14
- package/data/nte/characters/shinku.json +0 -14
- package/data/nte/characters/skia.json +0 -14
- package/data/nte/meta.json +0 -14
- package/data/toweroffantasy/meta.json +0 -14
- package/data/vrchat/avatars/.gitkeep +0 -0
- package/data/vrchat/groups/clubzodiac.json +0 -7
- package/data/vrchat/groups/dirtydancers.json +0 -7
- package/data/vrchat/groups/drumsynews.json +0 -7
- package/data/vrchat/groups/ebola20.json +0 -7
- package/data/vrchat/groups/internationaldancersassociation.json +0 -7
- package/data/vrchat/groups/kannagang.json +0 -6
- package/data/vrchat/groups/lolisquad.json +0 -7
- package/data/vrchat/groups/nekonightsnightclub.json +0 -7
- package/data/vrchat/groups/nekostudios.json +0 -7
- package/data/vrchat/groups/nekosunecommunity.json +0 -7
- package/data/vrchat/groups/voidclub.json +0 -7
- package/data/vrchat/groups/voltdanceclub.json +0 -7
- package/data/vrchat/groups/vrceventsgroup.json +0 -7
- package/data/vrchat/groups/vrchatcommunitydiscord.json +0 -6
- package/data/vrchat/meta.json +0 -13
- package/data/vrchat/players/alto.json +0 -9
- package/data/vrchat/players/arcadum.json +0 -10
- package/data/vrchat/players/chairhandler.json +0 -9
- package/data/vrchat/players/chipz.json +0 -9
- package/data/vrchat/players/hikarivr.json +0 -10
- package/data/vrchat/players/kimple.json +0 -10
- package/data/vrchat/players/linkzr.json +0 -8
- package/data/vrchat/players/nagzz21.json +0 -9
- package/data/vrchat/players/nebride.json +0 -10
- package/data/vrchat/players/nekosunevr.json +0 -10
- package/data/vrchat/players/pokelawls.json +0 -9
- package/data/vrchat/players/qwonk.json +0 -8
- package/data/vrchat/players/roflgator.json +0 -10
- package/data/vrchat/players/scifri.json +0 -7
- package/data/vrchat/players/sodapoppin.json +0 -9
- package/data/vrchat/players/woops.json +0 -9
- package/data/vrchat/players/zentreya.json +0 -10
- package/data/vrchat/worlds/ascensionacademy.json +0 -7
- package/data/vrchat/worlds/clubvgl.json +0 -8
- package/data/vrchat/worlds/fightfinder.json +0 -8
- package/data/vrchat/worlds/hangouthouse.json +0 -7
- package/data/vrchat/worlds/nekostudioshalloween.json +0 -9
- package/data/vrchat/worlds/nekostudiosnewyear.json +0 -9
- package/data/vrchat/worlds/nekostudiosxmas.json +0 -9
- package/data/vrchat/worlds/nekosunevranimations2023.json +0 -9
- package/data/vrchat/worlds/nekosunevranimations2024.json +0 -9
- package/data/vrchat/worlds/nekosunevranimations2025.json +0 -9
- package/data/vrchat/worlds/rumhamsavatarworld.json +0 -7
- package/data/vrchat/worlds/smewsranch.json +0 -7
- package/data/vrchat/worlds/smewsroom.json +0 -7
- package/data/vrchat/worlds/sunsetbar.json +0 -7
- package/data/vrchat/worlds/theblackcat.json +0 -9
- package/data/vrchat/worlds/thegreatpug.json +0 -8
- package/data/vrchat/worlds/themidnightbar.json +0 -7
- package/data/vrchat/worlds/voidclub.json +0 -7
- package/data/vrchat/worlds/voltdanceclub.json +0 -7
- package/data/vrchat/worlds/vrchathome.json +0 -8
- package/data/vrchat/worlds/whatalegend.json +0 -6
- package/data/warframe/meta.json +0 -14
- package/data/wutheringwaves/meta.json +0 -14
- package/data/zenlesszonezero/meta.json +0 -14
- package/gamecodes.js +0 -178
- package/scripts/cache-sync-smoke.js +0 -92
- package/scripts/game-code-cache-smoke.js +0 -85
- package/scripts/sync-all-cache.js +0 -18
- package/scripts/sync-api-cache.js +0 -319
- package/scripts/sync-game-code-cache.js +0 -244
- package/scripts/sync-gaming-info-cache.js +0 -46
package/README.md
CHANGED
|
@@ -1,535 +1,102 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @nekosuneprojects/gaming-infos
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Modular multi-game information toolkit for Node.js 18+. **Version 3.0.1 continues the clean-break 3.x rebuild** of the old monolithic data-mirror package, using independent npm packages for each game. The previous embedded datasets, API cache syncs and legacy add-on implementation have been removed.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The rebuilt package now includes **Warframe and VRChat**, backed by `@nekosuneprojects/warframe-api@1.0.1` and `@nekosuneprojects/vrchat-api@1.0.0` respectively. Additional games can be added later without reintroducing the old monolithic cache.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Current package version: **2.2.0**
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## ✨ What it provides
|
|
14
|
-
|
|
15
|
-
- 🎮 Multi-game metadata and character data
|
|
16
|
-
- 🌐 Live NekoSuneVR V5 API lookups
|
|
17
|
-
- 💾 Automatic local JSON fallback when the API is unavailable
|
|
18
|
-
- 🔄 Daily APINODE → repository cache synchronization
|
|
19
|
-
- 🧹 Add/change/remove mirroring so deleted API entries disappear from the next successful fallback snapshot
|
|
20
|
-
- 🛡️ Last-good-cache protection if APINODE is down or a sync only partially succeeds
|
|
21
|
-
- 👤 VRChat players
|
|
22
|
-
- 👥 VRChat groups
|
|
23
|
-
- 🌍 VRChat worlds
|
|
24
|
-
- 🧍 VRChat avatars
|
|
25
|
-
- 🧝 Character/roster datasets for supported games
|
|
26
|
-
- 🎁 Redeem-code and creator-code helpers
|
|
27
|
-
- 📊 Game-code directory, counts, aliases, status, and source-cache information
|
|
28
|
-
- 🧪 Offline smoke tests for cache replacement and failure recovery
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 🎮 Gaming Infos coverage
|
|
33
|
-
|
|
34
|
-
| Game | Slug | Data |
|
|
35
|
-
|---|---|---|
|
|
36
|
-
| VRChat | `vrchat` | players, groups, worlds, avatars |
|
|
37
|
-
| Genshin Impact | `genshinimpact` | characters |
|
|
38
|
-
| Honkai: Star Rail | `honkaistarrail` | characters |
|
|
39
|
-
| Neverness to Everness | `nte` | characters |
|
|
40
|
-
| Wuthering Waves | `wutheringwaves` | Resonators under `characters` |
|
|
41
|
-
| Warframe | `warframe` | Warframes under `characters` |
|
|
42
|
-
| Fortnite | `fortnite` | current/released Battle Royale characters |
|
|
43
|
-
| Zenless Zone Zero | `zenlesszonezero` | Agents under `characters` |
|
|
44
|
-
| Tower of Fantasy | `toweroffantasy` | Simulacra under `characters` |
|
|
45
|
-
| Arknights: Endfield | `arknightsendfield` | Operators under `characters` |
|
|
46
|
-
|
|
47
|
-
The Game Codes system is separate and its supported game list is returned dynamically by the APINODE `/codes` directory endpoint.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 📦 Installation
|
|
7
|
+
## Installation
|
|
52
8
|
|
|
53
9
|
```bash
|
|
54
10
|
npm install @nekosuneprojects/gaming-infos
|
|
55
11
|
```
|
|
56
12
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
# 🚀 Quick start
|
|
62
|
-
|
|
63
|
-
```js
|
|
64
|
-
const gamingInfos = require('@nekosuneprojects/gaming-infos');
|
|
65
|
-
|
|
66
|
-
async function main() {
|
|
67
|
-
const games = await gamingInfos.Games();
|
|
68
|
-
const vrchat = await gamingInfos.Game('vrchat');
|
|
69
|
-
|
|
70
|
-
const worlds = await gamingInfos.List('vrchat', 'worlds');
|
|
71
|
-
const avatars = await gamingInfos.List('vrchat', 'avatars');
|
|
72
|
-
const genshinCharacters = await gamingInfos.List('genshinimpact', 'characters');
|
|
73
|
-
const wuwaCharacters = await gamingInfos.List('wutheringwaves', 'characters');
|
|
74
|
-
|
|
75
|
-
console.log({
|
|
76
|
-
gameCount: games.length,
|
|
77
|
-
vrchat,
|
|
78
|
-
worlds: worlds.length,
|
|
79
|
-
avatars: avatars.length,
|
|
80
|
-
genshinCharacters: genshinCharacters.length,
|
|
81
|
-
wuwaCharacters: wuwaCharacters.length
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
main();
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
# 🧠 Gaming Infos API
|
|
91
|
-
|
|
92
|
-
## `Games()`
|
|
93
|
-
|
|
94
|
-
Returns every game with bundled/API Gaming Infos metadata.
|
|
95
|
-
|
|
96
|
-
```js
|
|
97
|
-
const games = await gamingInfos.Games();
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Live endpoint:
|
|
101
|
-
|
|
102
|
-
```http
|
|
103
|
-
GET /v5/games/api/gaming-infos
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## `Game(game)`
|
|
107
|
-
|
|
108
|
-
Returns game-level metadata.
|
|
109
|
-
|
|
110
|
-
```js
|
|
111
|
-
const game = await gamingInfos.Game('warframe');
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## `List(game, type)`
|
|
115
|
-
|
|
116
|
-
Returns every entity for a game/type.
|
|
117
|
-
|
|
118
|
-
```js
|
|
119
|
-
const resonators = await gamingInfos.List('wutheringwaves', 'characters');
|
|
120
|
-
const agents = await gamingInfos.List('zenlesszonezero', 'characters');
|
|
121
|
-
const operators = await gamingInfos.List('arknightsendfield', 'characters');
|
|
122
|
-
const vrchatGroups = await gamingInfos.List('vrchat', 'groups');
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Live endpoint:
|
|
126
|
-
|
|
127
|
-
```http
|
|
128
|
-
GET /v5/games/api/gaming-infos/:game/:type
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## Single-entity helpers
|
|
13
|
+
To use an individual game package directly:
|
|
132
14
|
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
await gamingInfos.Players('vrchat', 'player-slug');
|
|
137
|
-
await gamingInfos.Avatars('vrchat', 'avatar-slug');
|
|
138
|
-
await gamingInfos.Characters('warframe', 'warframe-slug');
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Generic lookup:
|
|
142
|
-
|
|
143
|
-
```js
|
|
144
|
-
await gamingInfos.Get('vrchat', 'worlds', 'world-slug');
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Live endpoint:
|
|
148
|
-
|
|
149
|
-
```http
|
|
150
|
-
GET /v5/games/api/gaming-infos/:game/:type/:name
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
The V5 API returns stable `slug` values for list entries. Use those slugs for detail lookups instead of trying to generate filenames from display names yourself.
|
|
154
|
-
|
|
155
|
-
## `CacheInfo()`
|
|
156
|
-
|
|
157
|
-
Reads information about the last mirrored Gaming Infos fallback snapshot.
|
|
158
|
-
|
|
159
|
-
```js
|
|
160
|
-
const cache = await gamingInfos.CacheInfo();
|
|
161
|
-
console.log(cache?.syncedAt, cache?.contentHash);
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
# 🎁 Game Codes API
|
|
167
|
-
|
|
168
|
-
Version 2.2.0 adds API-first redeem-code and creator-code support using the same fallback model.
|
|
169
|
-
|
|
170
|
-
APINODE endpoints:
|
|
171
|
-
|
|
172
|
-
```http
|
|
173
|
-
GET /v5/games/api/codes
|
|
174
|
-
GET /v5/games/api/codes/status
|
|
175
|
-
GET /v5/games/api/codes/:game
|
|
176
|
-
GET /v5/games/api/codes/:game/:code
|
|
15
|
+
```bash
|
|
16
|
+
npm install @nekosuneprojects/warframe-api@1.0.1
|
|
17
|
+
npm install @nekosuneprojects/vrchat-api@1.0.0
|
|
177
18
|
```
|
|
178
19
|
|
|
179
|
-
|
|
20
|
+
Node.js 18+ is required. Pushes to `main` run build/tests and attempt to publish the package to npmjs and GitHub Packages when the exact version is not already available. Pull requests build/test only.
|
|
180
21
|
|
|
181
|
-
##
|
|
182
|
-
|
|
183
|
-
Returns the Game Codes directory, including supported games, aliases, metadata, counters, source counts, and endpoint information.
|
|
22
|
+
## Warframe
|
|
184
23
|
|
|
185
24
|
```js
|
|
186
|
-
const
|
|
25
|
+
const gaming = require('@nekosuneprojects/gaming-infos');
|
|
187
26
|
|
|
188
|
-
|
|
189
|
-
|
|
27
|
+
const warframe = gaming.createClient('warframe', { platform: 'pc', language: 'en' });
|
|
28
|
+
const about = await warframe.About();
|
|
29
|
+
const matches = await warframe.search('Ash');
|
|
30
|
+
const codes = await warframe.codes.active({ hasCode: true });
|
|
31
|
+
const alerts = await warframe.api.alerts();
|
|
32
|
+
console.log(about.name, matches.total, codes.length, alerts.length);
|
|
190
33
|
```
|
|
191
34
|
|
|
192
|
-
##
|
|
193
|
-
|
|
194
|
-
Returns the cached source-refresh state.
|
|
35
|
+
## VRChat
|
|
195
36
|
|
|
196
37
|
```js
|
|
197
|
-
const
|
|
198
|
-
```
|
|
38
|
+
const gaming = require('@nekosuneprojects/gaming-infos');
|
|
199
39
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
```js
|
|
205
|
-
const fortniteCodes = await gamingInfos.GameCodes('fortnite');
|
|
206
|
-
|
|
207
|
-
console.log(fortniteCodes.Active);
|
|
208
|
-
console.log(fortniteCodes.Expired);
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
Default shape:
|
|
212
|
-
|
|
213
|
-
```json
|
|
214
|
-
{
|
|
215
|
-
"Active": [],
|
|
216
|
-
"Expired": []
|
|
217
|
-
}
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Include queued/unknown records:
|
|
221
|
-
|
|
222
|
-
```js
|
|
223
|
-
const allFortniteCodes = await gamingInfos.GameCodes('fortnite', {
|
|
224
|
-
includeUnknown: true
|
|
40
|
+
// Local-first bundled VRChat JSON, no VRChat login needed:
|
|
41
|
+
const vrchat = gaming.createClient('vrchat', {
|
|
42
|
+
cacheDir: './storage/vrchat'
|
|
225
43
|
});
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
44
|
+
const game = await vrchat.About();
|
|
45
|
+
const localWorld = await vrchat.world('theblackcat');
|
|
46
|
+
const localGroups = await vrchat.groups.search('club');
|
|
229
47
|
|
|
230
|
-
|
|
231
|
-
{
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
"Unknown": []
|
|
235
|
-
}
|
|
236
|
-
```
|
|
48
|
+
// Live online NekoSune APIs:
|
|
49
|
+
const worlds = await vrchat.worlds.browse({sort:'popular',page:1});
|
|
50
|
+
const foundWorlds = await vrchat.worlds.searchOnline('Mirror',{platform:'pc'});
|
|
51
|
+
const groups = await vrchat.groups.searchOnline('Dance',{page:1});
|
|
237
52
|
|
|
238
|
-
|
|
53
|
+
// Public third-party avatar-search providers (availability varies):
|
|
54
|
+
const avatars = await vrchat.avatars.searchOnline('Rindo');
|
|
239
55
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
category: 'creator-code',
|
|
243
|
-
includeUnknown: true
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
const freeCodes = await gamingInfos.GameCodes('genshin-impact', {
|
|
247
|
-
claimType: 'free'
|
|
248
|
-
});
|
|
56
|
+
console.log(game.name, localWorld.name, localGroups.total);
|
|
57
|
+
console.log(worlds.meta, foundWorlds.meta, groups.meta, avatars.successful);
|
|
249
58
|
```
|
|
250
59
|
|
|
251
|
-
|
|
60
|
+
The `vrchat-api` provider bundles local JSON for worlds, groups, players and game metadata; online methods make on-demand HTTP calls. It does **not** fetch private VRChat account data or bypass authentication. The upstream JSON currently contains no local avatar catalog, so `avatars.searchOnline` uses external providers.
|
|
252
61
|
|
|
253
|
-
|
|
254
|
-
const codes = await gamingInfos.GameCodes('fortnite', {
|
|
255
|
-
timezone: 'Europe/London',
|
|
256
|
-
includeUnknown: true
|
|
257
|
-
});
|
|
258
|
-
```
|
|
62
|
+
### World browsing
|
|
259
63
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
## `GameCode(game, code, options)`
|
|
263
|
-
|
|
264
|
-
Looks up one specific code.
|
|
64
|
+
The online world browser supports `updated`, `newest`, `oldest` and `popular`, using the remote API's 24-world pagination:
|
|
265
65
|
|
|
266
66
|
```js
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
Live endpoint:
|
|
272
|
-
|
|
273
|
-
```http
|
|
274
|
-
GET /v5/games/api/codes/:game/:code
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
When APINODE is unavailable, the package searches the locally mirrored Active, Expired, and Unknown code buckets.
|
|
278
|
-
|
|
279
|
-
## `CodeCacheInfo()`
|
|
280
|
-
|
|
281
|
-
Returns the local Game Codes cache manifest.
|
|
282
|
-
|
|
283
|
-
```js
|
|
284
|
-
const codeCache = await gamingInfos.CodeCacheInfo();
|
|
285
|
-
console.log(codeCache?.syncedAt, codeCache?.stats);
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
# 📚 Function reference
|
|
291
|
-
|
|
292
|
-
| Function | Purpose |
|
|
293
|
-
|---|---|
|
|
294
|
-
| `Games()` | List Gaming Infos games |
|
|
295
|
-
| `Game(game)` | Get game metadata |
|
|
296
|
-
| `List(game, type)` | List every entry for one game/type |
|
|
297
|
-
| `Worlds(game, name)` | Get one world |
|
|
298
|
-
| `Groups(game, name)` | Get one group |
|
|
299
|
-
| `Players(game, name)` | Get one player |
|
|
300
|
-
| `Avatars(game, name)` | Get one avatar |
|
|
301
|
-
| `Characters(game, name)` | Get one character/Warframe/Agent/etc. |
|
|
302
|
-
| `Get(game, type, name)` | Generic entity lookup |
|
|
303
|
-
| `CacheInfo()` | Gaming Infos fallback manifest |
|
|
304
|
-
| `Codes()` | Game Codes directory |
|
|
305
|
-
| `CodesStatus()` | Cached Game Codes source status |
|
|
306
|
-
| `GameCodes(game, options)` | Active/Expired/Unknown code lists |
|
|
307
|
-
| `GameCode(game, code, options)` | One specific redeem/creator code |
|
|
308
|
-
| `CodeCacheInfo()` | Game Codes fallback manifest |
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
# 💾 API-first fallback behavior
|
|
313
|
-
|
|
314
|
-
Normal reads follow this path:
|
|
315
|
-
|
|
316
|
-
```text
|
|
317
|
-
Application
|
|
318
|
-
│
|
|
319
|
-
▼
|
|
320
|
-
NekoSuneVR V5 API
|
|
321
|
-
│
|
|
322
|
-
├── available ──► return live data
|
|
323
|
-
│
|
|
324
|
-
└── unavailable
|
|
325
|
-
│
|
|
326
|
-
▼
|
|
327
|
-
bundled data/
|
|
328
|
-
│
|
|
329
|
-
▼
|
|
330
|
-
return last-good fallback
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
The package does not need an API key for the public read endpoints documented above.
|
|
334
|
-
|
|
335
|
-
Set this to force local-only reads:
|
|
336
|
-
|
|
337
|
-
```bash
|
|
338
|
-
GAMING_INFOS_DISABLE_API=1
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
---
|
|
342
|
-
|
|
343
|
-
# 🔄 Daily fallback synchronization
|
|
344
|
-
|
|
345
|
-
The repository automatically runs the cache mirror **once every day at 03:23 UTC** through GitHub Actions.
|
|
346
|
-
|
|
347
|
-
The combined command is:
|
|
348
|
-
|
|
349
|
-
```bash
|
|
350
|
-
npm run sync:cache
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
That performs both:
|
|
354
|
-
|
|
355
|
-
```bash
|
|
356
|
-
npm run sync:gaming-infos-cache
|
|
357
|
-
npm run sync:game-codes-cache
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
The synchronization process is designed to be authoritative and failure-safe:
|
|
361
|
-
|
|
362
|
-
1. Download the complete configured API snapshot into a temporary directory.
|
|
363
|
-
2. Validate all required responses.
|
|
364
|
-
3. Calculate content hashes and add/change/remove statistics.
|
|
365
|
-
4. Replace the old fallback only after the new snapshot succeeds completely.
|
|
366
|
-
5. Keep the previous fallback untouched if the API fails, times out, returns an error, or produces an incomplete snapshot.
|
|
367
|
-
6. Commit actual fallback changes back to the repository.
|
|
368
|
-
|
|
369
|
-
Successful syncs mirror **additions, modifications, and removals**. If APINODE removes an entry, that entry is removed from the fallback during the next successful mirror.
|
|
370
|
-
|
|
371
|
-
Gaming Infos and Game Codes use independent atomic caches so a failure in one dataset cannot destroy the last-good snapshot of the other.
|
|
372
|
-
|
|
373
|
-
See [CACHE_SYNC.md](CACHE_SYNC.md) for the detailed cache architecture.
|
|
374
|
-
|
|
375
|
-
---
|
|
376
|
-
|
|
377
|
-
# 🧪 Cache tests
|
|
378
|
-
|
|
379
|
-
Run all cache safety tests:
|
|
380
|
-
|
|
381
|
-
```bash
|
|
382
|
-
npm run test:all-cache
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
Or individually:
|
|
386
|
-
|
|
387
|
-
```bash
|
|
388
|
-
npm run test:cache-sync
|
|
389
|
-
npm run test:game-code-cache
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
The tests cover scenarios including:
|
|
393
|
-
|
|
394
|
-
- new entries appearing
|
|
395
|
-
- existing entries changing
|
|
396
|
-
- upstream entries being removed
|
|
397
|
-
- duplicate/invalid data protection
|
|
398
|
-
- partial API failures
|
|
399
|
-
- simulated HTTP 5xx outages
|
|
400
|
-
- preserving the last-good fallback after a failed sync
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
# 📁 Fallback data structure
|
|
405
|
-
|
|
406
|
-
```text
|
|
407
|
-
data/
|
|
408
|
-
├── genshinimpact/
|
|
409
|
-
│ ├── meta.json
|
|
410
|
-
│ └── characters/
|
|
411
|
-
├── honkaistarrail/
|
|
412
|
-
├── nte/
|
|
413
|
-
├── wutheringwaves/
|
|
414
|
-
├── warframe/
|
|
415
|
-
├── fortnite/
|
|
416
|
-
├── zenlesszonezero/
|
|
417
|
-
├── toweroffantasy/
|
|
418
|
-
├── arknightsendfield/
|
|
419
|
-
├── vrchat/
|
|
420
|
-
│ ├── meta.json
|
|
421
|
-
│ ├── players/
|
|
422
|
-
│ ├── groups/
|
|
423
|
-
│ ├── worlds/
|
|
424
|
-
│ └── avatars/
|
|
425
|
-
├── .cache-manifest.json
|
|
426
|
-
└── game-codes/
|
|
427
|
-
├── directory.json
|
|
428
|
-
├── status.json
|
|
429
|
-
├── .cache-manifest.json
|
|
430
|
-
└── games/
|
|
431
|
-
└── <game>.json
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
An entity with no verified image can use:
|
|
435
|
-
|
|
436
|
-
```json
|
|
437
|
-
{
|
|
438
|
-
"image": ""
|
|
439
|
-
}
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
Consumers should treat a blank image string as "no verified image available".
|
|
443
|
-
|
|
444
|
-
---
|
|
445
|
-
|
|
446
|
-
# ⚙️ Environment variables
|
|
447
|
-
|
|
448
|
-
## Runtime API reads
|
|
449
|
-
|
|
450
|
-
| Variable | Default | Purpose |
|
|
451
|
-
|---|---|---|
|
|
452
|
-
| `GAMING_INFOS_API_BASE` | `https://api.nekosunevr.co.uk` | NekoSuneVR APINODE base URL |
|
|
453
|
-
| `GAMING_INFOS_API_PATH` | `/v5/games/api/gaming-infos` | Gaming Infos path |
|
|
454
|
-
| `GAME_CODES_API_PATH` | `/v5/games/api/codes` | Game Codes path |
|
|
455
|
-
| `GAMING_INFOS_DISABLE_API` | unset | `1`/`true` forces local-only operation |
|
|
456
|
-
| `GAMING_INFOS_TIMEOUT_MS` | `4000` | Runtime API timeout before fallback |
|
|
457
|
-
|
|
458
|
-
## Cache mirror
|
|
459
|
-
|
|
460
|
-
| Variable | Default | Purpose |
|
|
461
|
-
|---|---|---|
|
|
462
|
-
| `GAMING_INFOS_CACHE_TIMEOUT_MS` | `15000` | Gaming Infos sync request timeout |
|
|
463
|
-
| `GAMING_INFOS_CACHE_RETRIES` | `2` | Gaming Infos retry count |
|
|
464
|
-
| `GAMING_INFOS_CACHE_RETRY_DELAY_MS` | `750` | Gaming Infos retry delay |
|
|
465
|
-
| `GAME_CODES_CACHE_TIMEOUT_MS` | `15000` | Game Codes sync request timeout |
|
|
466
|
-
| `GAME_CODES_CACHE_RETRIES` | `2` | Game Codes retry count |
|
|
467
|
-
| `GAME_CODES_CACHE_RETRY_DELAY_MS` | `750` | Game Codes retry delay |
|
|
468
|
-
| `GAME_CODES_CACHE_GAME_DELAY_MS` | small delay | Delay between per-game code snapshots |
|
|
469
|
-
|
|
470
|
-
---
|
|
471
|
-
|
|
472
|
-
# 📝 Example character entry
|
|
473
|
-
|
|
474
|
-
Different games expose different fields. Consumers should use the fields relevant to that game rather than assuming every title has the same schema.
|
|
475
|
-
|
|
476
|
-
```json
|
|
477
|
-
{
|
|
478
|
-
"name": "Example Character",
|
|
479
|
-
"slug": "examplecharacter",
|
|
480
|
-
"rarity": "5-star",
|
|
481
|
-
"element": "Electro",
|
|
482
|
-
"weapon": "Sword",
|
|
483
|
-
"description": "Public character information.",
|
|
484
|
-
"image": "https://example.com/character.webp",
|
|
485
|
-
"url": "https://example.com/source",
|
|
486
|
-
"source": {
|
|
487
|
-
"provider": "Public source",
|
|
488
|
-
"publicDataOnly": true
|
|
489
|
-
}
|
|
490
|
-
}
|
|
67
|
+
const { createVRChat } = require('@nekosuneprojects/gaming-infos');
|
|
68
|
+
const vrchat = createVRChat();
|
|
69
|
+
const page2 = await vrchat.worlds.browse({sort:'updated',page:2});
|
|
70
|
+
console.log(page2.data, page2.meta);
|
|
491
71
|
```
|
|
492
72
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
# 🤝 Contributions
|
|
496
|
-
|
|
497
|
-
Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
498
|
-
|
|
499
|
-
Please follow these rules:
|
|
500
|
-
|
|
501
|
-
- Only include publicly available data or data you have permission to publish.
|
|
502
|
-
- Do not include private profiles, private Discord messages, DMs, private logs, authentication data, or personal information.
|
|
503
|
-
- Do not add leaks, datamined/unreleased content, hidden APIs, memory-inspection data, or client-extracted private data.
|
|
504
|
-
- Respect each game's Terms of Service and community rules.
|
|
505
|
-
- Keep sources clear and verifiable.
|
|
506
|
-
- Do not submit harassment, defamation, doxxing, or invasive profile information.
|
|
507
|
-
|
|
508
|
-
---
|
|
509
|
-
|
|
510
|
-
# ⚠️ Package fallback note
|
|
511
|
-
|
|
512
|
-
GitHub repository cache snapshots update automatically, but published npm packages are immutable.
|
|
513
|
-
|
|
514
|
-
An already-installed npm release keeps the fallback JSON bundled with that release until you update the package. While APINODE is online, live API reads still provide current data without requiring a package release.
|
|
515
|
-
|
|
516
|
-
---
|
|
517
|
-
|
|
518
|
-
# ⚠️ Disclaimer
|
|
73
|
+
## Module layout
|
|
519
74
|
|
|
520
|
-
|
|
75
|
+
- `index.js` — public entrypoint
|
|
76
|
+
- `src/registry.js` — provider registry and selection
|
|
77
|
+
- `src/providers/warframe.js` — Warframe npm adapter
|
|
78
|
+
- `src/providers/vrchat.js` — VRChat npm adapter
|
|
79
|
+
- `test/registry.test.js` — provider smoke tests
|
|
80
|
+
- `.github/workflows/npm-publish.yml` — npmjs release publishing
|
|
81
|
+
- `.github/workflows/npm-publish-github-packages.yml` — GitHub Packages release publishing
|
|
521
82
|
|
|
522
|
-
|
|
83
|
+
## API surface
|
|
523
84
|
|
|
524
|
-
|
|
85
|
+
| Export | Purpose |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| `createClient(game, options)` | Instantiate the game provider |
|
|
88
|
+
| `createWarframe(options)` | Shortcut to the Warframe provider |
|
|
89
|
+
| `createVRChat(options)` | Shortcut to the VRChat provider |
|
|
90
|
+
| `listProviders()` | List installed game IDs |
|
|
91
|
+
| `providers.warframe` | Warframe provider adapter |
|
|
92
|
+
| `providers.vrchat` | VRChat provider adapter |
|
|
525
93
|
|
|
526
|
-
|
|
94
|
+
Read the standalone packages' documentation for complete features: [Warframe API](https://www.npmjs.com/package/@nekosuneprojects/warframe-api) and [VRChat API](https://www.npmjs.com/package/@nekosuneprojects/vrchat-api).
|
|
527
95
|
|
|
528
|
-
|
|
96
|
+
## Migration from 2.x
|
|
529
97
|
|
|
530
|
-
|
|
98
|
+
The 2.x `gaming-infos` API-first caches, embedded JSON catalogs, `gamecodes`, and sync scripts are **not available** in 3.0.0. Previous consumers must migrate explicitly. Old releases remain accessible through Git history and npm.
|
|
531
99
|
|
|
532
|
-
|
|
100
|
+
## Publishing
|
|
533
101
|
|
|
534
|
-
|
|
535
|
-
[](https://gitads.dev/v1/ad-track?source=nekosuneprojects/gaming-infos@github)
|
|
102
|
+
The source version is `3.0.1`; package publication is manual through GitHub Actions. Before publishing, confirm both exact dependency versions exist on npmjs.org, run `npm ci`, `npm run check`, `npm test`, and `npm pack --dry-run`. The consolidated `Build and publish gaming-infos` workflow builds/tests on every `main` push and pull request. After a successful build on `main`, it also attempts **both** registry publications, skipping any version already published. The manual **Run workflow** action still supports `registry=both`, `npmjs`, or `github`. On automatic pushes, npmjs uses **Trusted Publisher OIDC only**, not the existing `npm_token` (which caused EOTP). Configure npm's Trusted Publisher for the exact `NekoSuneProjectsNPM/gaming-infos` repository and `build-publish.yml` workflow, and enable direct `npm publish`. Manual dispatch still permits a token if it is eligible to publish without an interactive OTP (which must be configured for repository `NekoSuneProjectsNPM/gaming-infos`, workflow `build-publish.yml`). Manual dispatch uses the selected `npm_auth` setting. GitHub Packages publishes as `@nekosuneprojectsnpm/gaming-infos`. Each new npm release still requires incrementing the package version in both package files.
|