import getTokenHelper from "../../../utils/getTokenHelper" import fetchHelper from "../../../utils/fetchHelper" import sendcloudHelper from "../../../utils/sendcloudHelper" import dhlTrackingHelper from "../../../utils/dhlTrackingHelper" const loadCustomDhlCredentials = async (event: any, inoutId: string) => { const config = useRuntimeConfig() const token = (await getTokenHelper(event)) || config.api.idempieretoken if (!token) return null try { const inout: any = await fetchHelper(event, `models/m_inout/${inoutId}?$expand=c_order_id,ad_org_id`, 'GET', token, null) const orderSourceId = inout?.C_Order_ID?.C_OrderSource_ID?.id if (!orderSourceId) return null const os: any = await fetchHelper(event, `models/c_ordersource/${orderSourceId}`, 'GET', token, null) if (os?.DHL_USE_CUSTOM === true && os?.DHLURL) { return { api: { dhlurl: os.DHLURL, dhlkey: os.DHLKEY, dhlsecret: os.DHLSECRET, dhluser: os.DHLUSER, dhlpass: os.DHLPASS, iscustom: true, dhl_billing_number_de: os.dhl_billing_number_de || '63291441520101', dhl_billing_number_int: os.dhl_billing_number_int || '63291441525301' } } } } catch (_e) { // fall through to default credentials } return null } export default defineEventHandler(async (event: any) => { const query = getQuery(event) const trackingNo = String(query?.no ?? '').trim() const service = String(query?.service ?? 'dhl').toLowerCase() const inoutId = query?.inout_id ? String(query.inout_id) : '' let data: any = {} let tracking_service = '' let tracking_inout = '' if (!trackingNo) { return { tracking_service: '', tracking_inout: '' } } try { if (service === 'sendcloud') { const res: any = await sendcloudHelper(`tracking/${encodeURIComponent(trackingNo)}`, 'GET', null) if (res) { data = { ...res } data.tracking_content = (res?.statuses ?? []).map((item: any) => ({ timestamp: item.carrier_update_timestamp, title: item.carrier_message, description: `${item.carrier_message}, ${item.carrier_code} ${item.parcel_status_history_id}`, status: item.parent_status })) } tracking_service = 'sendcloud' } else { // Default to DHL — unified tracking API handles both DE parcels and international const customDhl = inoutId ? await loadCustomDhlCredentials(event, inoutId) : null const config = customDhl ?? useRuntimeConfig() const apiKey = config?.api?.dhlkey || 'kOMZlCkdY27OvpGKiUffZ8lUigNhcvWn' const credential: any = { ...(customDhl ?? {}), headers: { 'DHL-API-Key': apiKey } } const url = `track/shipments?trackingNumber=${encodeURIComponent(trackingNo)}` const res: any = await dhlTrackingHelper(event, credential, url, 'GET', null) if (res) { data = { ...res } data.tracking_content = (res?.shipments?.[0]?.events ?? []).map((item: any) => { const locality = item?.location?.address?.addressLocality ?? '' const countryCode = item?.location?.address?.countryCode ?? '' const postalCode = item?.location?.address?.postalCode ?? '' return { timestamp: item.timestamp, title: item.status, description: item?.description ?? item?.remark ?? `${locality}, ${countryCode} ${postalCode}`.trim(), locality, postalCode, countryCode, status: item.statusCode } }) } tracking_service = 'dhl' tracking_inout = inoutId } } catch (error: any) { data.error = error?.data ?? error?.message ?? 'Tracking lookup failed' tracking_service = 'error' } data.tracking_service = tracking_service data.tracking_inout = tracking_inout return data })