diff --git a/lib/services/medipost.service.ts b/lib/services/medipost.service.ts index aad9655..621f41a 100644 --- a/lib/services/medipost.service.ts +++ b/lib/services/medipost.service.ts @@ -19,6 +19,7 @@ import { SyncStatus } from '@/lib/types/audit'; import { AnalysisOrderStatus, GetMessageListResponse, + IMedipostResponseXMLBase, MaterjalideGrupp, MedipostAction, MedipostOrderResponse, @@ -38,6 +39,20 @@ import { createAnalysisGroup } from './analysis-group.service'; const BASE_URL = process.env.MEDIPOST_URL!; const USER = process.env.MEDIPOST_USER!; const PASSWORD = process.env.MEDIPOST_PASSWORD!; +const RECIPIENT = process.env.MEDIPOST_RECIPIENT!; + +function parseXML(xml: string) { + const parser = new XMLParser({ ignoreAttributes: false }); + return parser.parse(xml); +} + +export async function validateMedipostResponse(response: string) { + const parsed: IMedipostResponseXMLBase = parseXML(response); + if (typeof parsed.ANSWER?.CODE !== 'number' || parsed.ANSWER?.CODE !== 0) { + console.error("Bad response", response); + throw new Error(`Medipost response is invalid`); + } +} export async function getMessages() { try { @@ -85,14 +100,8 @@ export async function getPublicMessage(messageId: string) { Accept: 'application/xml', }, }); - const parser = new XMLParser({ ignoreAttributes: false }); - const parsed: MedipostPublicMessageResponse = parser.parse(data); - - if (parsed.ANSWER?.CODE && parsed.ANSWER?.CODE !== 0) { - throw new Error(`Failed to get public message (id: ${messageId})`); - } - - return parsed; + await validateMedipostResponse(data); + return parseXML(data) as MedipostPublicMessageResponse; } export async function sendPrivateMessage(messageXml: string, receiver: string) { @@ -111,9 +120,7 @@ export async function sendPrivateMessage(messageXml: string, receiver: string) { const { data } = await axios.post(BASE_URL, body); - if (data.code && data.code !== 0) { - throw new Error(`Failed to send private message`); - } + await validateMedipostResponse(data); } export async function getLatestPrivateMessageListItem() { @@ -145,15 +152,9 @@ export async function getPrivateMessage(messageId: string) { }, }); - const parser = new XMLParser({ ignoreAttributes: false }); - const parsed = parser.parse(data); + await validateMedipostResponse(data); - if (parsed.ANSWER?.CODE && parsed.ANSWER?.CODE !== 0) { - console.error("Bad response", data); - throw new Error(`Failed to get private message (id: ${messageId})`); - } - - return parsed; + return parseXML(data) as MedipostOrderResponse; } export async function deletePrivateMessage(messageId: string) {