fix(web): per-host apiUrl/wsUrl in the catalog, where they can actually resolve

The bootnode-web CR set NEXT_PUBLIC_API_URL=https://api.web3.hanzo.ai and
NEXT_PUBLIC_WS_URL=wss://ws.web3.hanzo.ai. The image is a static export served
by the Go hanzoai/static binary, so nothing reads container env — the live
bundle carried the build-time default api.bootno.de and ws.bootno.de instead.
The CR promised one thing and the app did another, on every host it serves.

Exactly the failure already fixed for the IAM knobs in this file: one image,
many white-label hosts, so a build-time NEXT_PUBLIC_* is a single global that
cannot express per-host anything. The brand catalog can, because it resolves
from the hostname at runtime.

web3.hanzo.ai now gets its own API and WS origins. Verified the two backends
are the same service before repointing: `/` and `/v1/chains` return
byte-identical bodies on api.bootno.de and api.web3.hanzo.ai, and both answer
401 on /v1/auth/me; ws.web3.hanzo.ai serves.

bootno.de keeps api.bootno.de via the built-in default. pars and zoo are left
alone deliberately: api.pars.network and api.zoo.network exist, but nothing
declared them as those brands' backends and cloud.zoo.network does not resolve
at all — I am not inventing a binding I cannot verify. (Note for whoever does:
lib/docs-config.ts derives `api.${brand.domain}`, which yields the nonexistent
api.cloud.pars.network — that derivation is wrong for the cloud.* hosts.)
This commit is contained in:
2026-07-26 13:03:45 -07:00
parent 5c7e9fd3bd
commit e09e86f940
+3
View File
@@ -19,8 +19,11 @@
}
},
"hanzo": {
"_note": "apiUrl/wsUrl are set here, not as deployment env. The bootnode-web CR carried NEXT_PUBLIC_API_URL=https://api.web3.hanzo.ai, but the image is a static export served by the Go hanzoai/static binary — nothing reads container env, so the live bundle used the build-time default api.bootno.de and the CR's promise was never kept. Same class as the IAM env removed earlier. Both hosts serve the identical Bootnode API (verified: / and /v1/chains byte-identical, /v1/auth/me 401 on both), so this is a per-host repoint, not a new integration.",
"name": "Hanzo",
"domain": "web3.hanzo.ai",
"apiUrl": "https://api.web3.hanzo.ai",
"wsUrl": "wss://ws.web3.hanzo.ai",
"iam": {
"url": "https://iam.hanzo.ai",
"clientId": "hanzo-web3",