@rithien/website_api
v0.1.2
Published
Clusterio plugin: public (token-gated) cluster status API for an external website — instances, online players, merged ban list
Downloads
445
Maintainers
Readme
@rithien/website_api
Plugin Clusterio (controller-only): publiczne — ale bramkowane statycznym tokenem — API statusu klastra dla zewnętrznej strony WWW. Strona (PHP/JS/cokolwiek) odpytuje controller i renderuje listę aktywnych serwerów (z graczami online) oraz listę banów.
Część monorepo factorio-polska; opis
funkcjonalności: docs/website-api.md, workflow deploy: DEV_ENVIRONMENT.md.
Endpointy
Montowane na wbudowanym serwerze HTTP(S) controllera (ten sam port co web UI clusterio).
Wszystkie wymagają nagłówka X-Website-Token: <token>; brak/zły token → 401.
Pusty token w configu = API wyłączone (każde żądanie dostaje 401).
| Endpoint | Zwraca |
|---|---|
| GET /api/website/status | {cluster_name, generated_at, instances: [{id, name, status, game_port, public_address, game_version, started_at_ms, players: [nick, …]}]} |
| GET /api/website/bans | {generated_at, total, bans: [{name, reason, source}]} |
statusinstancji:unknown/unassigned/stopped/starting/running/stopping/creating_save/exporting_data— filtruj porunningpo stronie strony.public_address: override zcomfy_adapter.public_address_overrides(nazwa hosta > wildcard*) >host.public_address;nullgdy brak.bans.source:clusterio(ban wymuszony w userManager clusterio) lubglobal_list(globalna lista deny z SQLite comfy_adapter, egzekwowana leniwie na join). Lista jest merge'em obu źródeł, dedup po nicku.
Konfiguracja
| Pole (config controllera) | Opis |
|---|---|
| website_api.token | Statyczny token wymagany w X-Website-Token. Wygeneruj: openssl rand -hex 32. Pusty = API wyłączone. |
npx clusterioctl controller config set website_api.token "$(openssl rand -hex 32)"Instalacja na kontrolerze
npm install @rithien/website_api
npx clusterioctl plugin add @rithien/website_api
# restart controlleraPlugin nie ma części instance/host ani web UI — sam controller wystarczy.
comfy_adapter jest opcjonalny: bez niego /bans zwraca tylko bany z userManagera clusterio.
Dev-server (lokalnie, bez klastra)
dev-server.js udaje controller z przykładowymi danymi (nie wchodzi do paczki npm):
node dev-server.js # port 8081, token: dev-token
curl -H "X-Website-Token: dev-token" http://127.0.0.1:8081/api/website/statusPublikacja (z roota monorepo)
npm run stage:website-api # staging w publish/clusterio-website (strip komentarzy + parse-check)
npm run publish:website-api -- --otp=XXXXXX # staging + npm publish