yggvault ratatoskr-space connected via regular web
Color theme
also available via yggdrasil mesh http://[203:b338:2a84:a18f:986:47ae:1a4:d8d3]/pkg/ruview/v2068
vault / ruview / v2068

ruview @ v2068

integrity

size
65.5 MiB
downloaded
last checked
source https://github.com/ruvnet/RuView · available · github

release notes

Automated release from CI pipeline

Changes: fix(ui): pose stream WebSocket 401s when RUVIEW_API_TOKEN is set (#1461) (#1462)

websocket.service.js (used by the pose/event streams) opened a bare new WebSocket(url) with no ADR-272 ticket exchange, unlike sensing.service.js which already mints a ticket per connect. Since a browser cannot set an Authorization header on a WebSocket upgrade, and the server rejects a long-lived bearer passed as a query string (CWE-598), the pose stream 401'd whenever auth was on — visible in the Live Demo tab as "Failed to create WebSocket connection".

Fix: createWebSocketWithTimeout() now strips any token query param a caller put on the URL (pose.service.js does this) and exchanges the stored bearer for a single-use ?ticket= via withWsTicket(), done at this one choke point so every consumer (pose, events, training) and every reconnect attempt gets a fresh ticket.

Second, smaller bug: pose-fusion/js/main.js auto-connected to a hardcoded ws://localhost:8765/ws/sensing, but the Docker image serves the sensing WebSocket on :3001 (the same 3000->3001 mapping sensing.service.js already encodes) — the auto-connect dialed a port nothing listens on. Reuses that port mapping and tickets both the auto-connect and the manual "Connect" button.

Bumped the pose-fusion.html cache-buster (v=13 -> v=14) so browsers actually fetch the updated main.js.

Adds ui/services/websocket.service.test.mjs (4 executed Node tests, stubbed WebSocket/fetch/localStorage) covering: no-auth passthrough, ticket exchange + bearer-never-in-URL, stray ?token= stripping, and the pre-ADR-272 404 fallback. Wired into the CI "Run UI unit tests" step.

Reported with a verified fix in #1461 by wsc7r4zcj4-collab; this PR implements the same fix against current main with an added regression test.

Closes #1461

Docker Image: ghcr.io/ruvnet/RuView:a70ca90525b9f724d9356c4cf75e10476550024c

download

unix · zip
curl -fL -o v2068.zip https://ratatoskr.space/pkg/ruview/v2068.zip
                    printf '%s  %s\n' '1da1b372eeb52ca6cec9f3717bac38aa447accf2a1509fc46ddd98ebb2743741' 'v2068.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v2068.zip"
$out = "v2068.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1da1b372eeb52ca6cec9f3717bac38aa447accf2a1509fc46ddd98ebb2743741") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v2068.tar.gz https://ratatoskr.space/pkg/ruview/v2068.tar.gz
                    printf '%s  %s\n' '2eadddb5444668def5591ce5135639c1579839e69c018aa80e5782e02e4b1be3' 'v2068.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v2068.tar.gz"
$out = "v2068.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2eadddb5444668def5591ce5135639c1579839e69c018aa80e5782e02e4b1be3") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v2068.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v2068.zip
                    printf '%s  %s\n' '1da1b372eeb52ca6cec9f3717bac38aa447accf2a1509fc46ddd98ebb2743741' 'v2068.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v2068.zip"
$out = "v2068.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1da1b372eeb52ca6cec9f3717bac38aa447accf2a1509fc46ddd98ebb2743741") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v2068.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v2068.tar.gz
                    printf '%s  %s\n' '2eadddb5444668def5591ce5135639c1579839e69c018aa80e5782e02e4b1be3' 'v2068.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v2068.tar.gz"
$out = "v2068.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2eadddb5444668def5591ce5135639c1579839e69c018aa80e5782e02e4b1be3") { throw "sha256 mismatch" }
artifact format size hashes
v2068.zip zip 65.5 MiB
blake3-24 9de9520bfcd710861ca0321eb1c28bd86d33bf63c39091d5
sha256 1da1b372eeb52ca6cec9f3717bac38aa447accf2a1509fc46ddd98ebb2743741
sha1 158c23a340d060a660688544a391d2cd01559a40
v2068.tar.gz tar.gz 63.6 MiB
blake3-24 5658b42bf63806947ea80d28a1fcfa377687051d3bb6375b
sha256 2eadddb5444668def5591ce5135639c1579839e69c018aa80e5782e02e4b1be3
sha1 c8d3c05a8ce59880b23d3d9bb88a0ed1638d9f86

install

bazel
http_archive(
    name = "ruview",
    urls = ["https://ratatoskr.space/pkg/ruview/v2068.tar.gz"],
    integrity = "sha256-Lq3dtURGaN71WRzlE1Y5wVeYOeacAYqoDleC4C5LG+M=",
    strip_prefix = "ruview-v2068",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v2068.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
    name = "ruview",
    urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v2068.tar.gz"],
    integrity = "sha256-Lq3dtURGaN71WRzlE1Y5wVeYOeacAYqoDleC4C5LG+M=",
    strip_prefix = "ruview-v2068",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v2068.tar.gz",
v2063 →