import { GetPublicMessageListResponse } from "@/lib/types/medipost"; import axios from "axios"; import { xml2json } from "xml-js"; const BASE_URL = process.env.MEDIPOST_URL!; const USER = process.env.MEDIPOST_USER; const PASSWORD = process.env.MEDIPOST_PASSWORD; export async function getMessages() { try { const publicMessage = await getLatestPublicMessageListItem(); if (!publicMessage) { return []; } return getPublicMessage(publicMessage.messageId); } catch (error) { console.error(error); } } export async function getLatestPublicMessageListItem() { const { data } = await axios.get< GetPublicMessageListResponse & { code?: number; text?: string } >(BASE_URL, { params: { Action: "GetPublicMessageList", User: USER, Password: PASSWORD, Sender: "syndev", // LastChecked (date+time) can be used here to get only messages since the last check - add when cron is created // MessageType check only for messages of certain type }, }); if (data.code && data.code !== 0) { throw new Error("Failed to get message list"); } if (!data?.messages?.length) { return null; } return data.messages.reduce((prev, current) => Number(prev.messageId) > Number(current.messageId) ? prev : current ); } export async function getPublicMessage(messageId: string) { const { data } = await axios.get(BASE_URL, { params: { Action: "GetPublicMessage", User: USER, Password: PASSWORD, MessageId: messageId, }, headers: { Accept: "application/xml", }, }); const parsed = JSON.parse( xml2json(data, { compact: true, spaces: 2, }) ); if (data.code && data.code !== 0) { throw new Error(`Failed to get message (id: ${messageId})`); } return parsed; }