superhub
v0.1.0
Published
Hub local HTTPS/WSS pour projets perso (Mac mini, Node.js/TypeScript).
Downloads
111
Readme
SuperHub
Hub local HTTPS/WSS pour projets perso (Mac mini, Node.js/TypeScript).
Documentation de suivi
- Statut implementation + reste a faire:
docs/IMPLEMENTATION_STATUS.md - Worklog complet des evolutions:
docs/WORKLOG_2026-03-01.md - Runbook ops (TLS local, trust iOS/macOS, supervision):
docs/OPS_RUNBOOK.md - Guide dev exemples music:
examples/README.md - Guide dev exemples Python:
examples/python/README.md - Guide clients (Node/TS, Python, React):
client/README.md
Ce qui est inclus
@superhub/hub:- endpoint WS
/ws+ API/api/* - registry clients/services + health
- pub/sub + routage ciblé
- RPC léger (
rpc_req/rpc_res) - state store (
state_set,state_patch,state_get,state_watch) - sécurité LAN minimale (
X-Hub-Token, allowlist subnet, rate/size limits) - métriques + inspector
- console web servie sous
/console - flux dashboard realtime WS (
hub.dashboard) + fallback HTTP - persistance SQLite optionnelle
- endpoint WS
@superhub/sdk:- client TS (Node + web) avec reconnect/backoff
publish,subscribe,rpc,onRpc,getState,setState,patchState,watchState
@superhub/contracts:- envelope unique + schémas Zod + validation versionnée
deploy/Caddyfile:- terminaison TLS locale + reverse proxy vers le Hub
Arborescence
/packages/contracts/packages/sdk/packages/hub/examples/client/deploy/Caddyfile/hub.config.ts
Démarrage local
- Installer les dépendances:
npm install- Préparer la config:
cp .env.example .env- Lancer le Hub (HTTP local sur
127.0.0.1:7777):
npm run dev- Ouvrir la console:
- en direct:
http://127.0.0.1:7777/console/ - via Caddy/TLS:
https://mac-mini-de-olivier.local/console/ - pairing:
https://mac-mini-de-olivier.local/console/pair - dashboard realtime: WS interne auto (
/ws) + fallback poll 5s
Caddy + TLS local (LAN)
- Installer et lancer Caddy avec
deploy/Caddyfile. - Ajouter
mac-mini-de-olivier.localau DNS local (ou/etc/hostspour tests). - Faire confiance à la CA locale Caddy sur macOS et iOS.
- Vérifier:
https://mac-mini-de-olivier.local/api/healthwss://mac-mini-de-olivier.local/ws
Procedure complete detaillee: docs/OPS_RUNBOOK.md.
API HTTP
GET /api/healthGET /api/servicesGET /api/clientsGET /api/topicsGET /api/messagesGET /api/state?path=...ouGET /api/state?prefix=...GET /api/configGET /api/metricsGET /api/diagnosticsGET /api/controlPOST /api/publishPOST /api/rpcPOST /api/control/disconnectPOST /api/control/mutePOST /api/control/unmutePOST /api/control/inboundPOST /api/control/state-broadcastPOST /api/control/clear-queues
X-Hub-Token requis si security.token est configuré (sauf /api/health).
WS protocol
Tous les messages utilisent l’envelope HubEnvelope (version v=1) avec type:
eventcmdrpc_reqrpc_resstate_patchpresenceerror
Exemples
- Provider music:
examples/music-provider.ts - Controller:
examples/music-controller.ts - Python:
examples/python/(music + ISS + demo HTTP)
Lancer via tsx (après npm install):
npx tsx examples/music-provider.ts
npx tsx examples/music-controller.tsLe flux music d'exemple est maintenant base sur une vraie RPC:
music-controllerenvoierpc(\"music\", \"music.play\", ...)music-providerrepond viaonRpc(\"music.play\", handler)
Outils ops
Tests:
npm testDiagnostics runtime:
HUB_TOKEN=... npm run diagDistribution clients LAN (sans npm/pip publish):
npm run client:distNotes V1
- Delivery pub/sub en best-effort, ordre global non garanti.
- Backpressure par session: buffer borné + drop quand surcharge.
- Optimisation flux haute fréquence:
- sérialisation WS mutualisée pour broadcasts
- snapshots state SQLite coalescés (flush périodique) au lieu d'un write par update
- rate limit token-bucket +
rateLimitPerMinutepar défaut à120000(0pour désactiver)
- Console:
- state viewer realtime via
state_patchWS - dashboard realtime via event
hub.dashboardWS - fallback HTTP periodique si WS indisponible
- state viewer realtime via
- Validation Zod par
name+schemaVersion:rejecten dev par défautwarnpossible en prod
