{
  "service": "k4-hubs",
  "package": "@p31/k4-mesh-core",
  "routes": [
    {
      "method": "GET",
      "path": "/api",
      "desc": "This index"
    },
    {
      "method": "GET",
      "path": "/api/health",
      "desc": "Liveness + KV + auth mode"
    },
    {
      "method": "GET",
      "path": "/viz",
      "desc": "Hub list (add ?id=hubUuid for one hub viz)"
    },
    {
      "method": "GET",
      "path": "/api/dockback",
      "desc": "Reverse index: ?ref=personal:default"
    },
    {
      "method": "GET",
      "path": "/api/hubs",
      "desc": "List hubs"
    },
    {
      "method": "POST",
      "path": "/api/hubs",
      "desc": "Create hub (needs write token if HUBS_WRITE_TOKEN set)"
    },
    {
      "method": "GET",
      "path": "/api/hubs/:id",
      "desc": "Manifest + bindings"
    },
    {
      "method": "GET",
      "path": "/api/hubs/:id/mesh",
      "desc": "Hub K₄ + docks (mirror fetch to personal when bound)"
    },
    {
      "method": "POST",
      "path": "/api/hubs/:id/dock/:dockId/bind",
      "desc": "Bind dock (auth if token set)"
    },
    {
      "method": "POST",
      "path": "/api/hubs/:id/dock/:dockId/unbind",
      "desc": "Unbind dock (auth if token set)"
    },
    {
      "method": "POST",
      "path": "/api/hubs/:id/presence/:dockId",
      "desc": "Hub dock presence (auth if token set)"
    },
    {
      "method": "POST",
      "path": "/api/hubs/:id/ping/:from/:to",
      "desc": "Hub edge ping; live relay if HUB_LIVE_RELAY_URL + live dock"
    },
    {
      "method": "DELETE",
      "path": "/api/hubs/:id",
      "desc": "Delete hub (dockbacks + KV; auth + rate limit if configured)"
    }
  ]
}