import { string } from 'alga-js' import getTokenHelper from "../../../../utils/getTokenHelper" import refreshTokenHelper from "../../../../utils/refreshTokenHelper" import fetchHelper from "../../../../utils/fetchHelper" import errorHandlingHelper from "../../../../utils/errorHandlingHelper" /** * Retrieve a stored DPD label. * * DPD has no "re-print label" endpoint, so we return the cached base64 * label PDF from M_Inout. The response shape mirrors what the DHL retrieve * endpoint returns so the frontend can consume it identically. * * Query params: * - shipment_code: DPD mpsId or tracking number stored in M_Inout * - inout_id: alternative lookup key */ const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const query = getQuery(event) let inout: any = null if (query?.inout_id) { inout = await fetchHelper(event, `models/m_inout/${query.inout_id}`, 'GET', token, null) } else if (query?.shipment_code) { // Look up by DPD_Shipment_Code OR TrackingNo (covers both mpsId and label number lookups) const code = String(query.shipment_code) const filter = `DPD_Shipment_Code eq '${code}' or TrackingNo eq '${code}'` const res: any = await fetchHelper(event, `models/m_inout?$filter=${string.urlEncode(filter)}&$top=1`, 'GET', token, null) inout = res?.records?.[0] ?? null } if (!inout) { return { items: [], status: 404, message: 'DPD shipment not found' } } // Mirror DHL retrieve shape: { items: [{ shipmentNo, label: { b64 }, routingCode }] } return { items: [{ shipmentNo: inout.DPD_Shipment_Code || inout.TrackingNo || '', parcelLabelNumber: inout.TrackingNo || '', routingCode: '', label: { b64: inout.DPD_Label_Base64 || '' } }], status: 200 } } export default defineEventHandler(async (event) => { let data: any = null try { data = await handleFunc(event) } catch(err: any) { try { const authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch(error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) } } return data })