3.1 KiB
Dune API
Node.js API for Dune: Awakening Questlog data. It imports items, skills, recipes, placeables, and NPCs in English and German into MongoDB, then exposes them through REST endpoints and Swagger UI.
Quick Start
npm install
npm run import:smoke
npm start
Open Swagger UI locally at http://localhost:3030/docs.
Docker
docker compose up --build
The container listens on 3030 and Docker Compose exposes it on 8030 by default. Set API_HOST_PORT=3031 if your machine needs the alternate host port.
Public HTTPS Domains
This app is configured for Dokploy/Traefik HTTPS by default. Traefik should terminate TLS and route both public HTTPS domains to the app container:
https://dune.api.coppnic.cc -> container port 3030
https://ui.dune.api.coppnic.cc -> container port 3030
The public API URL is https://dune.api.coppnic.cc. Swagger UI is available at https://ui.dune.api.coppnic.cc/docs.
The OpenAPI document advertises the HTTPS API domain by default, so Swagger requests go to the right public API host. These values can be adjusted through environment variables:
PUBLIC_API_URL=https://dune.api.coppnic.cc
PUBLIC_UI_URL=https://ui.dune.api.coppnic.cc
FORCE_HTTPS=true
Import All Data
npm run import
You can also call the script directly with filters:
node scripts/import.js --datasets=items,skills --languages=en,de --max-pages=1
or call POST /api/import from Swagger UI with an empty JSON body:
{}
The importer pulls every page for all configured datasets and both supported languages by default.
Endpoints
GET /healthGET /docsGET /openapi.jsonGET /api/itemGET /api/item/{id}GET /api/skillGET /api/skill/{id}GET /api/recipeGET /api/recipe/{id}GET /api/placeableGET /api/placeable/{id}GET /api/npcGET /api/npc/{id}GET /api/{dataset}GET /api/{dataset}/{id}GET /api/search?q=...POST /api/importGET /api/import/status
Use singular datasets for detailed records. These collections store the full Questlog single-record payloads. For example, item includes item-specific raw.stats structures such as weaponStats, fillableStats, and wearable stats.
GET /api/item?language=en&limit=25
GET /api/item/LongRifle_Unique_Poison_03?language=en
GET /api/items/LongRifle_Unique_Poison_03?language=en
GET /api/item/Bloodsack_02?language=de
GET /api/skill/skills_ability_poisonmine?language=en
GET /api/recipe/Bloodsack_2_Recipe?language=en
GET /api/placeable/Atre_Banner_Placeable?language=en
GET /api/npc/bs43q?language=en
GET /api/search?q=rifle&datasets=item,skill,recipe&language=en
Public API datasets: item, skill, recipe, placeable, npc, items, skills, recipes, placeables, npcs.
Plural datasets are the older paginated Questlog summary collections. For OpenClaw and other clients that need complete stats and relationships, prefer the singular datasets.
For convenience, GET /api/{pluralDataset}/{id} checks the matching detailed singular collection first when one exists, then falls back to the older summary record.