Skip to content

feat(bundle): carry the boot show-token on the render-bundle URL - #56

Open
forge-by-clodocapeo[bot] wants to merge 1 commit into
mainfrom
forge/bundle-token
Open

feat(bundle): carry the boot show-token on the render-bundle URL#56
forge-by-clodocapeo[bot] wants to merge 1 commit into
mainfrom
forge/bundle-token

Conversation

@forge-by-clodocapeo

Copy link
Copy Markdown

Summary

ZabGate (PR ZabLaboratory/ZabGate#69, en clearance) gate désormais
GET /orion/api/v1/scenes/{id}/render-bundle sur un ?token= viewer — miroir du
gate WS que le show-token de Solar passe déjà. Solar construisait cette URL sans
token (src/internal/orion-bundle-url.ts, câblé dans mount.ts) : le fetch du
bundle resterait 401 derrière la gateway même après le merge côté gate, le header
Authorization: Bearer du runtime n'étant pas la credential lue par cette route.

Ce diff propage le show-token dont Solar dispose au boot — la string que les
entries host résolvent via resolveShowToken et passent à mount({ token })
jusqu'à l'URL du bundle, en second argument optionnel d'orionBundleUrl,
émis comme &token= :

  • token absent ou vide → aucun token= (jamais un param vide) ; la forme
    d'URL dev/local non authentifiée est byte-identique ;
  • token provider (SolarTokenProvider, async) → inchangé : le resolver du
    runtime est sync, impossible d'await sans changer sa signature (paquet
    lumencast externe, hors périmètre) ; ce chemin garde le header Authorization ;
  • le token ne vit que dans cette URL : jamais loggé, et les erreurs de fetch du
    runtime (bundle fetch failed: <status>) n'échoient pas l'URL — vérifié dans
    @lumencast/runtime src/render/bundle.ts.

Aucun nouveau canal de configuration ; pas de refonte du résolveur ; rotation de
token (setToken) hors périmètre (le résolveur garde le token de boot).

Tests

Rouge prouvé sur le code non patché (src stashé) :

Test Files  2 failed (2)
     Tests  3 failed | 11 passed (14)

Les 3 rouges sont exactement les assertions « l'URL porte le token » (2 unit
orion-bundle-url, 1 seam bundle-fetch-auth via le vrai mount() → runtime →
fetch mocké) ; les négatifs (« pas de token= sans token ») passent déjà, comme
attendu.

Après patch :

npm run lint       → clean (eslint --max-warnings 0)
npm run typecheck  → clean (tsc -b)
npm test           → Test Files 22 passed (22) · Tests 148 passed (148)

Nouveaux tests : tests/unit/orion-bundle-url.test.ts (append + percent-encoding

  • token vide → pas de param) ; tests/unit/bundle-fetch-auth.test.tsx (seam
    complet : token= présent dans la query du fetch avec show-token au boot, absent
    sans).

Écarts / hypothèses

  • Hypothèse : seul le token string de boot est propagé sur l'URL. Un
    SolarTokenProvider n'y apparaît pas (resolver sync côté runtime) — ce cas
    garde le seul header Authorization. Aucun host in-tree ne monte avec un
    provider aujourd'hui (host-entry/dev-entry passent une string).
  • La rotation setToken ne met pas à jour l'URL du bundle (résolveur créé au
    mount) — cohérent avec le bail (token de boot), signalé pour mémoire.
  • Surface sensible (auth/token dans une URL) → clearance Bastion attendue côté
    Eleven, dans le sillage de ZabGate#69.

Refs ZabLaboratory/ZabCanvas#346

ZabGate now gates GET /orion/api/v1/scenes/{id}/render-bundle on a viewer
`?token=` (mirror of the WS gate — ZabGate PR#69). Solar built that URL
without the token it already holds at boot, so the CEF bundle fetch would
stay 401 behind the gateway even after the gate lands: the runtime's
`Authorization: Bearer` header is not the credential this route reads.

Thread the mount-time show-token (the string the host entries resolve via
`resolveShowToken`) into `orionBundleUrl` as an optional second argument,
appended as `&token=`. An absent/empty token emits no `token=` param, so
the unauthenticated dev/local URL shape is byte-identical. A provider
token (`SolarTokenProvider`) cannot be awaited in the sync resolver and
keeps the Authorization-header path only. The token lives solely in this
URL — never logged, and the runtime's fetch errors do not echo the URL.

Refs ZabLaboratory/ZabCanvas#346

Agent-Role: forge
Agent-Thread: SOLAR-BUNDLE-TOKEN/forge
Work-Unit: SOLAR-BUNDLE-TOKEN
Issue: ZabLaboratory/ZabCanvas#346
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant