This commit is contained in:
Joshua Hare 2025-08-12 22:33:05 +10:00
parent 9cf99ec78d
commit ffeef91166

View File

@ -181,6 +181,7 @@ document.addEventListener('DOMContentLoaded', () => {
let retrieveZipPath = null; let retrieveZipPath = null;
let splitZipPath = null; let splitZipPath = null;
let fetchedMetadataCache = null; let fetchedMetadataCache = null;
let eventSource = null;
// --- Helper Functions --- // --- Helper Functions ---
const sanitizeText = (str) => str ? String(str).replace(/</g, "&lt;").replace(/>/g, "&gt;") : ""; const sanitizeText = (str) => str ? String(str).replace(/</g, "&lt;").replace(/>/g, "&gt;") : "";
@ -383,42 +384,40 @@ document.addEventListener('DOMContentLoaded', () => {
return; return;
} }
const formData = new FormData(); const currentFhirServerUrl = useLocalHapi ? '/fhir' : fhirServerUrlInput.value.trim().replace(/\/+$/, '');
const csrfTokenInput = retrieveForm.querySelector('input[name="csrf_token"]'); if (!useLocalHapi && !currentFhirServerUrl) {
if (csrfTokenInput) formData.append('csrf_token', csrfTokenInput.value); alert('Custom FHIR Server URL is required.');
selectedResources.forEach(res => formData.append('resources', res)); fhirServerUrlInput.classList.add('is-invalid');
retrieveButton.disabled = false;
if (validateReferencesCheckbox) { if (spinner) spinner.style.display = 'none';
formData.append('validate_references', validateReferencesCheckbox.checked ? 'true' : 'false'); if (icon) icon.style.display = 'inline-block';
} return;
if (fetchReferenceBundlesCheckbox) {
if (validateReferencesCheckbox && validateReferencesCheckbox.checked) {
formData.append('fetch_reference_bundles', fetchReferenceBundlesCheckbox.checked ? 'true' : 'false');
} else {
formData.append('fetch_reference_bundles', 'false');
}
} else {
formData.append('fetch_reference_bundles', 'false');
} }
const currentFhirServerUrl = useLocalHapi ? null : fhirServerUrlInput.value.trim().replace(/\/+$/, '');
const authType = authTypeSelect?.value; const authType = authTypeSelect?.value;
const authHeader = (authType === 'bearer' && bearerTokenInput?.value) ? `Bearer ${bearerTokenInput.value}` const authHeader = (authType === 'bearer' && bearerTokenInput?.value) ? `Bearer ${bearerTokenInput.value}`
: (authType === 'basic' && usernameInput?.value && passwordInput?.value) ? `Basic ${btoa(`${usernameInput.value}:${passwordInput.value}`)}` : (authType === 'basic' && usernameInput?.value && passwordInput?.value) ? `Basic ${btoa(`${usernameInput.value}:${passwordInput.value}`)}`
: null; : null;
const validateReferences = validateReferencesCheckbox?.checked ? 'true' : 'false';
const fetchReferenceBundles = validateReferences === 'true' && fetchReferenceBundlesCheckbox?.checked ? 'true' : 'false';
// --- Stream the logs directly from the server ---
const url = new URL('/api/stream-retrieve', window.location.origin); const url = new URL('/api/stream-retrieve', window.location.origin);
if (currentFhirServerUrl) { if (currentFhirServerUrl) {
url.searchParams.set('proxy-target', currentFhirServerUrl); url.searchParams.set('proxy-target', currentFhirServerUrl);
} }
selectedResources.forEach(res => url.searchParams.append('resource_type', res)); selectedResources.forEach(res => url.searchParams.append('resource_type', res));
url.searchParams.set('validate_references', formData.get('validate_references')); url.searchParams.set('validate_references', validateReferences);
url.searchParams.set('fetch_reference_bundles', formData.get('fetch_reference_bundles')); url.searchParams.set('fetch_reference_bundles', fetchReferenceBundles);
const headers = { 'Accept': 'application/x-ndjson' }; const headers = {
'Accept': 'application/x-ndjson',
};
if (authHeader) { if (authHeader) {
headers['Authorization'] = authHeader; headers['Authorization'] = authHeader;
} }
const csrfTokenInput = retrieveForm.querySelector('input[name="csrf_token"]');
if (csrfTokenInput) { if (csrfTokenInput) {
headers['X-CSRFToken'] = csrfTokenInput.value; headers['X-CSRFToken'] = csrfTokenInput.value;
} }
@ -429,7 +428,7 @@ document.addEventListener('DOMContentLoaded', () => {
console.log(`Submitting retrieve request. URL: ${url.toString()}, Headers: ${JSON.stringify(headers)}`); console.log(`Submitting retrieve request. URL: ${url.toString()}, Headers: ${JSON.stringify(headers)}`);
try { try {
const response = await fetch(url.toString(), { method: 'GET', headers: headers }); const response = await fetch(url.toString(), { method: 'POST', headers: headers });
if (!response.ok) { if (!response.ok) {
const errorData = await response.json().catch(() => ({ message: 'Failed to parse error response.' })); const errorData = await response.json().catch(() => ({ message: 'Failed to parse error response.' }));