temporalio / temporalio/ui

External storage payload download button disabled when codec server is configured at namespace level

Open Beginner friendly
#3,419 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
431
Forks
179
Avg merge
2d 9h
Merged PRs (30d)
71

Description

Describe the bug
When a codec server is configured at the namespace level, the download button for externally-stored payloads is permanently disabled. Hovering shows the tooltip "Add a codec server with a /download endpoint to download this payload." even though the codec server is reachable and actively decoding payloads on the same page.

Steps To Reproduce

  1. Configure a codec server at the namespace level. Do not configure it via the per-browser "Configure Codec Server" dialog (top-right of any workflow page). If you've previously configured at the browser level, you'll need to clear the endpoint from local storage as well.
  2. Run a workflow that produces a payload large enough to be offloaded to external storage via the SDK's ExternalStorage feature.
  3. Navigate to that workflow execution in the Cloud UI.
  4. Observe that workflow payloads are decoded correctly (the codec server /decode endpoint is being called successfully), but any payload that was offloaded to external storage shows a disabled download button.

Expected behavior
The download button should be enabled whenever a codec server endpoint is resolvable, whether set at the namespace level or as a browser-level override. The codec server is clearly reachable (it handles /decode for every page load), so the button should not be gated on a separate browser-local store.

Screenshots
Image

Desktop:

  • OS: macOS 15.7.4
  • Browser: Chrome 146
  • Version: (Temporal Cloud UI, current production)

Additional context

The root cause seems to be in src/lib/components/payload/payload-code-block.svelte. The button's disabled and tooltip hide attributes check $codecEndpoint, the browser localStorage store, rather than getCodecEndpoint(page.data.settings), which is the function already used by codeServerRequest in data-encoder.ts for all codec requests. getCodecEndpoint correctly falls back to settings.codec.endpoint when the browser store is empty, but the button check does not.

If desired, I can make a PR for this!

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in src/lib/components/payload/payload-code-block.svelte and compare the download button's disabled and tooltip checks with getCodecEndpoint usage in data-encoder.ts. Verify behavior with a namespace-level codec endpoint and an externally stored payload: the button should enable whenever the endpoint resolves, including without a browser-local override.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
82/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.