Fix Mailbox/Artifacts media auth and ensure View task always opens a usable popup. - Add artifactMediaUrlWithToken for authenticated img/video/audio/link loads while keeping artifactMediaUrl token-free for fetch and HTML previews - Load script-capable HTML artifact previews via Authorization + revocable blob URL so tokens never reach allow-scripts iframes - Keep non-board/list task popups (Mailbox, Documents) visible even when board/list-only popup gating is enabled - Upgrade duplicate popOut entries so reopening a task refreshes snapshot and origin - Document the behavior and add a patch changeset Files changed: .changeset/fn-7976-mailbox-artifact-fixes.md | 7 +++ docs/dashboard-guide.md | 2 +- packages/dashboard/app/App.tsx | 15 +++-- .../app/__tests__/App.taskPopupViewGating.test.tsx | 10 ++- .../dashboard/app/__tests__/api-artifacts.test.ts | 12 +++- .../api/__tests__/legacy-artifact-media.test.ts | 27 ++++++++ packages/dashboard/app/api/legacy.ts | 21 +++++-- .../dashboard/app/components/ArtifactsGallery.tsx | 72 ++++++++++++++++++---- .../dashboard/app/components/DocumentsView.tsx | 4 +- .../app/components/MailboxArtifactAttachment.tsx | 6 +- .../dashboard/app/components/TaskDocumentsTab.tsx | 6 +- .../components/__tests__/DocumentsView.test.tsx | 31 ++++++---- .../__tests__/MailboxArtifactAttachment.test.tsx | 24 ++++---- .../app/components/__tests__/MailboxView.test.tsx | 8 +-- .../components/__tests__/TaskDocumentsTab.test.tsx | 16 ++--- .../app/hooks/__tests__/usePoppedOutTasks.test.ts | 9 ++- packages/dashboard/app/hooks/usePoppedOutTasks.ts | 17 +++-- 17 files changed, 206 insertions(+), 81 deletions(-) Fusion-Task-Id: FN-7976 Fusion-Task-Lineage: 4c25b3a6-5836-4629-b33e-647f213e3261 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import { afterEach, describe, expect, it } from "vitest";
|
|
import { artifactMediaUrl, artifactMediaUrlWithToken } from "../api";
|
|
import { clearAuthToken, setAuthToken } from "../auth";
|
|
|
|
afterEach(() => {
|
|
clearAuthToken();
|
|
});
|
|
|
|
describe("artifactMediaUrl", () => {
|
|
/*
|
|
* FNXC:ArtifactMediaAuth 2026-07-15-14:24:
|
|
* Browser-native image, video, and link requests cannot attach the dashboard's Authorization header.
|
|
*
|
|
* FNXC:ArtifactRegistry 2026-07-15-12:00:
|
|
* FN-7976 keeps the base media URL token-free (fetch + HTML previews) and routes element/link auth through artifactMediaUrlWithToken so script-capable previews never receive a tokenized src.
|
|
*/
|
|
it("keeps the base media URL token-free and tokenizes element/link loads separately", () => {
|
|
setAuthToken("daemon-token");
|
|
|
|
expect(artifactMediaUrl("artifact/with spaces", "project-1")).toBe(
|
|
"/api/artifacts/artifact%2Fwith%20spaces/media?projectId=project-1",
|
|
);
|
|
expect(artifactMediaUrlWithToken("artifact/with spaces", "project-1")).toBe(
|
|
"/api/artifacts/artifact%2Fwith%20spaces/media?projectId=project-1&fn_token=daemon-token",
|
|
);
|
|
});
|
|
});
|