Telegram: https://t.me/+DOylgFv1jyJlNzM0
Why this matters
mapBackendStreamToFrontend in frontend/src/lib/dashboard.ts has two display bugs feeding the dashboard:
token: "TOKEN" is hardcoded, so the dashboard table/cards literally show "TOKEN" instead of XLM/USDC/EURC (the symbol can be resolved from tokenAddress via TOKEN_ADDRESSES, as lib/api/streams.ts already does with resolveTokenLabel).
status: s.isActive ? "Active" : "Completed" never produces "Paused" or "Cancelled", even though those are valid Stream["status"] values and BackendStream carries isPaused. As a result the dashboard's Paused tab (which filters s.status === "Paused") is always empty, and cancelled streams show as "Completed".
Acceptance criteria
Files to touch
frontend/src/lib/dashboard.ts (mapBackendStreamToFrontend)
Out of scope
- The incoming-streams mapper in
lib/api/streams.ts (already resolves token + status).
Telegram: https://t.me/+DOylgFv1jyJlNzM0
Why this matters
mapBackendStreamToFrontendinfrontend/src/lib/dashboard.tshas two display bugs feeding the dashboard:token: "TOKEN"is hardcoded, so the dashboard table/cards literally show "TOKEN" instead of XLM/USDC/EURC (the symbol can be resolved fromtokenAddressviaTOKEN_ADDRESSES, aslib/api/streams.tsalready does withresolveTokenLabel).status: s.isActive ? "Active" : "Completed"never produces"Paused"or"Cancelled", even though those are validStream["status"]values andBackendStreamcarriesisPaused. As a result the dashboard's Paused tab (which filterss.status === "Paused") is always empty, and cancelled streams show as "Completed".Acceptance criteria
tokenAddressisPaused), Cancelled/Completed (when inactive — use events or available flags), and Active otherwiseFiles to touch
frontend/src/lib/dashboard.ts(mapBackendStreamToFrontend)Out of scope
lib/api/streams.ts(already resolves token + status).