From 5309ffb8cf85cbeb8bb82b2a47e3d3274d2a2de1 Mon Sep 17 00:00:00 2001 From: robbond Date: Wed, 25 Mar 2026 09:57:26 +0000 Subject: [PATCH] refactor(actions): fix document download helper contract --- actions/services/documentDirectService.js | 33 +++++++++-------------- memory-bank/change-log.md | 28 +++++++++++++++++++ 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/actions/services/documentDirectService.js b/actions/services/documentDirectService.js index 51f48d41..4e7b0793 100644 --- a/actions/services/documentDirectService.js +++ b/actions/services/documentDirectService.js @@ -1,4 +1,3 @@ -import axios from "axios"; import { BASE_URL } from "../core/env"; import { consoleLogger } from "../core/logger"; import { hashAPIPath } from "../core/hash"; @@ -334,26 +333,20 @@ export const deleteRepBlob = async ( }; export const downloadBlob = (containerName, blobName) => { - return axios - .get( - BASE_URL + - "/api/file/downloadblob?container=" + - containerName.toLowerCase() + - "&blobname=" + - blobName, - { responseType: "blob" } - ) - .then((response) => { - res.setHeader( - "content-disposition", - "attachment; filename=" + blobName - ); + const queryUrl = + BASE_URL + + "/api/file/downloadblob?container=" + + containerName.toLowerCase() + + "&blobname=" + + blobName; - return res.status(200).send(response.data); - }) - .catch((error) => { - consoleLogger(error); - }); + return requestJson({ + method: "get", + url: queryUrl, + responseType: "blob" + }).catch((error) => { + consoleLogger(error); + }); }; export const getProgressFromBlob = async (containerName, casereference) => { diff --git a/memory-bank/change-log.md b/memory-bank/change-log.md index 1bc3a68e..7ae4628d 100644 --- a/memory-bank/change-log.md +++ b/memory-bank/change-log.md @@ -1991,3 +1991,31 @@ Validation: Follow-ups: - Optional next bounded slice: isolate and correct `downloadBlob` behavior in `documentDirectService` (including legacy `res` usage) behind an explicit, tested contract. + +--- + +### CL-056: TASK22260 next slice — document direct service download helper contract fix + +date: 2026-03-25 +author: Cline +scope: `actions/services/documentDirectService.js` +type: change +rationale: Execute the next bounded follow-up by correcting the legacy `downloadBlob` service helper path that still relied on invalid `res` references and direct axios usage, aligning it to shared request client behavior. +impact: Fixes a service-layer contract defect risk in document download helper and improves consistency by using shared request client patterns; no endpoint contract change. +status: completed + +Summary: + +- Refactored `downloadBlob(containerName, blobName)` in `documentDirectService`: + - removed legacy direct `axios.get(...).then(response => res.status(...))` pattern that referenced undefined `res` in service layer + - now returns blob response data via `requestJson({ method: "get", url, responseType: "blob" })` + - preserved catch-path logging (`consoleLogger`) +- Removed now-unused module-level `axios` import from `documentDirectService`. + +Validation: + +- `npm run lint` -> warnings only (pre-existing `react-hooks/exhaustive-deps`; no new lint errors) + +Follow-ups: + +- Optional next bounded slice: add a focused test (or integration harness assertion) around `downloadBlob` service return contract to prevent regression to response-object assumptions.