UNPKG

cod-dicomweb-server

Version:

A wadors server proxy that get data from a Cloud Optimized Dicom format.

48 lines (47 loc) 1.76 kB
import { CustomError } from './classes/customClasses'; import { createMetadataJsonUrl } from './classes/utils'; class MetadataManager { metadata = {}; constructor() { } addDeidMetadata(jsonMetadata) { const { deid_study_uid, deid_series_uid, cod } = jsonMetadata; if (!cod || !deid_study_uid || !deid_series_uid) { console.warn('Missing required metadata properties: cod, deid_study_uid, or deid_series_uid'); return; } for (const deid_sop_uid in cod.instances) { const instance = cod.instances[deid_sop_uid]; instance.metadata.DeidStudyInstanceUID = { Value: [deid_study_uid] }; instance.metadata.DeidSeriesInstanceUID = { Value: [deid_series_uid] }; instance.metadata.DeidSopInstanceUID = { Value: [deid_sop_uid] }; } } getMetadataFromCache(url) { return this.metadata[url]; } async getMetadata(params, headers) { const url = createMetadataJsonUrl(params); if (!url) { throw new CustomError('Error creating metadata json url'); } const cachedMetadata = this.getMetadataFromCache(url); if (cachedMetadata) { return cachedMetadata; } try { const response = await fetch(url, { headers }); if (!response.ok) { throw new CustomError(`Failed to fetch metadata: ${response.statusText}`); } const data = await response.json(); this.addDeidMetadata(data); this.metadata[url] = data; return data; } catch (error) { console.error(error); throw error; } } } export default MetadataManager;