import axios from 'axios'; import type { GetMessageListResponse } from '~/lib/types/medipost'; import { MedipostAction } from '~/lib/types/medipost'; import type { MedipostOrderResponse } from '@/packages/shared/src/types/medipost-analysis'; import { validateMedipostResponse } from './medipostValidate.service'; import { parseXML } from '../util/xml.service'; import { getLatestMessage } from './medipostMessageBase.service'; const BASE_URL = process.env.MEDIPOST_URL!; const USER = process.env.MEDIPOST_USER!; const PASSWORD = process.env.MEDIPOST_PASSWORD!; const IS_ENABLED_DELETE_PRIVATE_MESSAGE = process.env.MEDIPOST_ENABLE_DELETE_RESPONSE_PRIVATE_MESSAGE_ON_READ === 'true'; export default class MedipostMessageClient { public async getLatestPrivateMessageListItem({ excludedMessageIds, }: { excludedMessageIds: string[]; }) { const { data } = await axios.get(BASE_URL, { params: { Action: MedipostAction.GetPrivateMessageList, User: USER, Password: PASSWORD, }, }); if (data.code && data.code !== 0) { throw new Error('Failed to get private message list'); } return await getLatestMessage({ messages: data?.messages, excludedMessageIds, }); } public async getPrivateMessage(messageId: string) { const { data } = await axios.get(BASE_URL, { params: { Action: MedipostAction.GetPrivateMessage, User: USER, Password: PASSWORD, MessageId: messageId, }, headers: { Accept: 'application/xml', }, }); await validateMedipostResponse(data, { canHaveEmptyCode: true }); return { message: (await parseXML(data)) as MedipostOrderResponse, xml: data as string, }; } public async deletePrivateMessage({ medipostPrivateMessageId, }: { medipostPrivateMessageId: string; }) { if (!IS_ENABLED_DELETE_PRIVATE_MESSAGE) { console.info(`Skipping delete private message id=${medipostPrivateMessageId} because deleting is not enabled`); return; } const { data } = await axios.get(BASE_URL, { params: { Action: MedipostAction.DeletePrivateMessage, User: USER, Password: PASSWORD, MessageId: medipostPrivateMessageId, }, }); if (data.code && data.code !== 0) { throw new Error(`Failed to delete private message (id: ${medipostPrivateMessageId})`); } } }