import {z} from 'zod' export type TruckloadTrackingUpdateIdentifierValue = string; export type TruckloadTrackingUpdateIdentifiers = {billOfLadingNumber: TruckloadTrackingUpdateIdentifierValue, dotNumber?: TruckloadTrackingUpdateIdentifierValue | undefined, mcNumber?: TruckloadTrackingUpdateIdentifierValue | undefined, orderNumber?: TruckloadTrackingUpdateIdentifierValue | undefined, scac?: TruckloadTrackingUpdateIdentifierValue | undefined} | {[key: string]: unknown} | {billOfLadingNumber?: TruckloadTrackingUpdateIdentifierValue | undefined, dotNumber?: TruckloadTrackingUpdateIdentifierValue | undefined, mcNumber?: TruckloadTrackingUpdateIdentifierValue | undefined, orderNumber: TruckloadTrackingUpdateIdentifierValue, scac?: TruckloadTrackingUpdateIdentifierValue | undefined} | {[key: string]: unknown}; export type UniversalTrackingUpdatePosition = {altitude?: number | undefined, heading?: number | undefined, latitude?: number | undefined, longitude?: number | undefined, speed?: number | undefined, speedUnit?: ('KILOMETERS_PER_HOUR' | 'MILES_PER_HOUR') | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateAmbientTemperature = {unit?: ('CELSIUS' | 'FAHRENHEIT') | undefined, value?: number | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateFuelSensor = {currentLevel?: number | undefined, capacity?: number | undefined, fuelUnit?: ('PERCENT' | 'LITER' | 'GALLON' | 'PERCENT_REMAINING' | 'KWH') | undefined, type?: ('DIESEL' | 'GASOLINE' | 'ELECTRIC' | 'LIQUEFIED_NATURAL_GAS' | 'COMPRESSED_NATURAL_GAS') | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateReeferSensor = {engineRpm?: number | undefined, engineHours?: number | undefined, operatingMode?: ('CONTINUOUS' | 'CYCLE_SENTRY' | 'START_STOP' | 'UNKNOWN') | undefined, powerSource?: ('DIESEL' | 'ELECTRIC' | 'LIQUEFIED_PETROLEUM_GAS' | 'BATTERY' | 'UNKNOWN') | undefined, state?: ('ON' | 'OFF' | 'UNKNOWN') | undefined, voltage?: number | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateShockReading = {axis?: ('X' | 'Y' | 'Z' | 'RESULTANT') | undefined, durationInMilliseconds?: number | undefined, magnitude?: number | undefined, thresholdExceeded?: boolean | undefined, thresholdValue?: number | undefined, unit?: 'G' | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateTirePressure = {axle?: number | undefined, alarmState?: ('OK' | 'LOW' | 'HIGH' | 'CRITICAL' | 'UNKNOWN') | undefined, position?: ('LEFT' | 'RIGHT' | 'INNER_LEFT' | 'OUTER_LEFT' | 'INNER_RIGHT' | 'OUTER_RIGHT') | undefined, psi?: number | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateVibrationReading = {axis?: ('X' | 'Y' | 'Z' | 'RESULTANT') | undefined, frequencyInHertz?: number | undefined, unit?: ('G' | 'G_RMS' | 'IN_PER_SEC' | 'MM_PER_SEC' | 'MIL' | 'UM' | 'DB' | 'VDV') | undefined, value?: number | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateBattery = {isCharging?: boolean | undefined, percentage?: number | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateHumidity = {percentage?: number | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateTemperatureZone = {battery?: TruckloadTrackingUpdateBattery | undefined, dischargeAirTemperature?: number | undefined, doorState?: ('OPEN' | 'CLOSED' | 'UNKNOWN') | undefined, humidity?: TruckloadTrackingUpdateHumidity | undefined, id?: ('ZONE1' | 'ZONE2' | 'ZONE3' | 'ZONE4' | 'ZONE5') | undefined, returnAirTemperature?: number | undefined, supplyAirTemperature?: number | undefined, setPoint?: number | undefined, temperatureUnit?: ('CELSIUS' | 'FAHRENHEIT') | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateSensorInfo = {ambientTemperature?: TruckloadTrackingUpdateAmbientTemperature | undefined, fuel?: TruckloadTrackingUpdateFuelSensor | undefined, ignitionStatus?: ('ON' | 'OFF' | 'UNKNOWN') | undefined, reefer?: TruckloadTrackingUpdateReeferSensor | undefined, shock?: TruckloadTrackingUpdateShockReading | undefined, tirePressure?: Array | undefined, vibration?: TruckloadTrackingUpdateVibrationReading | undefined, zones?: Array | undefined} | {[key: string]: unknown}; export type TruckloadTrackingUpdateReadings = {dateTime?: string | undefined, position: UniversalTrackingUpdatePosition, sensor?: TruckloadTrackingUpdateSensorInfo | undefined} | {[key: string]: unknown} | {dateTime?: string | undefined, position?: UniversalTrackingUpdatePosition | undefined, sensor: TruckloadTrackingUpdateSensorInfo} | {[key: string]: unknown}; export type UniversalTrackingUpdateEventType = 'UNKNOWN' | 'TRACKING_INITIATE' | 'TRACKING_START' | 'ARRIVAL_AT_STOP' | 'DEPARTURE_FROM_STOP' | 'LOAD_ONTO_VEHICLE' | 'UNLOAD_FROM_VEHICLE' | 'TRACKING_END_DUE_TO_TIMEOUT' | 'TRACKING_END_BY_USER' | 'TRACKING_COMPLETE' | 'GATE_IN' | 'GATE_OUT' | 'FLIGHT_BOOKING' | 'MANIFEST' | 'RECEIVE_FROM_SHIPPER' | 'CONSIGNEE_NOTIFY' | 'DELIVERY' | 'WARNING' | 'EXCEPTION' | 'TRACKING_STOP' | 'EXCEPTION_LATE_DEPARTURE' | 'EXCEPTION_MISSED_CONNECTION' | 'GATE_IN_FULL' | 'GATE_IN_EMPTY' | 'GATE_OUT_EMPTY' | 'GATE_OUT_FULL' | 'LOAD' | 'DISCHARGE' | 'EXCEPTION_DELAYED' | 'EXCEPTION_DELIVERY_MISSED' | 'EXCEPTION_HELD' | 'EXCEPTION_PICKUP_MISSED' | 'AVAILABLE' | 'ENTERED_GEOFENCE' | 'EXITED_GEOFENCE' | 'INFO' | 'OUT_FOR_DELIVERY' | 'PICKED_UP' | 'RETURN_TO_SENDER' | 'TRACKING_FAILED' | 'UNAUTHORIZED' | 'PICKUP_MISSED' | 'SURVEY' | 'HELD' | 'CLEAN_TRUCK_FEE_CLEARANCE' | 'CLEAN_TRUCK_FEE_HOLD' | 'OTHER_HOLD' | 'OTHER_HOLD_CLEARANCE' | 'TERMINAL_CLEARANCE' | 'TERMINAL_HOLD' | 'TRAFFIC_MITIGATION_FEE_CLEARANCE' | 'TRAFFIC_MITIGATION_FEE_HOLD' | 'RELEASE' | 'DELAYED' | 'DELIVERY_MISSED' | 'ENTERED_INNER_GEOFENCE' | 'EXITED_INNER_GEOFENCE' | 'ENTERED_OUTER_GEOFENCE' | 'EXITED_OUTER_GEOFENCE' | 'ENTERED_FINAL_GEOFENCE' | 'EXITED_FINAL_GEOFENCE' | 'IDLE' | 'DRIVER_DENY_TRACKING' | 'UNKNOWN_EQUIPMENT_IDENTIFIER' | 'MISSING_EQUIPMENT_IDENTIFIER' | 'DISPATCH' | 'CUSTOMS_HOLD' | 'CUSTOMS_CLEARANCE' | 'CUSTOMS_DOCS_FILING' | 'CUSTOMS_TRANSIT_DOCS_ISSUED' | 'CUSTOMS_TRANSIT_DOCS_CLOSED' | 'CARRIER_HOLD' | 'RECEIVE_FROM_CARRIER' | 'ISSUE_FREIGHT_BILL' | 'FREIGHT_ON_HAND' | 'READY_FOR_CARRIAGE' | 'LAST_FREE_DAY' | 'MISSING_CARRIER' | 'STUFF' | 'STRIP' | 'SEAL_INSPECTION' | 'SEAL_REMOVAL' | 'SEAL_RESEAL' | 'HANDOVER' | 'DOCUMENT_ADD' | 'DOCUMENT_REMOVE' | 'REMOVE_FROM_BOOKING' | 'COST_UPDATE' | 'SHARING_STOPPED' | 'ROLLED_OVER' | 'BAD_ORDER' | 'BAD_ORDER_RELEASE' | 'ARRIVED_AT_TERMINAL' | 'DEPARTED_TERMINAL'; export type TruckloadTrackingUpdateEvent = {dateTime?: string | undefined, description?: string | undefined, exceptionCode?: string | undefined, extensions?: {[key: string]: unknown} | undefined, stopNumber?: number | undefined, stopReferenceId?: string | undefined, stopId?: string | undefined, source?: ('UNKNOWN' | 'CARRIER' | 'CONTRACT') | undefined, type?: UniversalTrackingUpdateEventType | undefined} | {[key: string]: unknown}; export type ZonedDateTimeWindow = {endDateTime?: string | undefined, localTimeZoneIdentifier?: string | undefined, startDateTime?: string | undefined}; export type TruckloadTrackingStopUpdate = {carrierEstimatedArrivalDateTime?: string | undefined, carrierAppointmentWindow?: ZonedDateTimeWindow | undefined, stopNumber: number, stopReferenceId?: string | undefined, stopType?: ('PICKUP' | 'DELIVERY') | undefined, stopId?: string | undefined} | {[key: string]: unknown} | {carrierEstimatedArrivalDateTime?: string | undefined, carrierAppointmentWindow?: ZonedDateTimeWindow | undefined, stopNumber?: number | undefined, stopReferenceId: string, stopType?: ('PICKUP' | 'DELIVERY') | undefined, stopId?: string | undefined} | {[key: string]: unknown} | {carrierEstimatedArrivalDateTime?: string | undefined, carrierAppointmentWindow?: ZonedDateTimeWindow | undefined, stopNumber?: number | undefined, stopReferenceId?: string | undefined, stopType?: ('PICKUP' | 'DELIVERY') | undefined, stopId: string} | {[key: string]: unknown}; export type TruckloadTrackingUpdate = {extensions?: {[key: string]: unknown} | undefined, identifiers?: TruckloadTrackingUpdateIdentifiers | undefined, readings: TruckloadTrackingUpdateReadings, shipmentEvent?: TruckloadTrackingUpdateEvent | undefined, stops?: Array | undefined} | {[key: string]: unknown} | {extensions?: {[key: string]: unknown} | undefined, identifiers?: TruckloadTrackingUpdateIdentifiers | undefined, readings?: TruckloadTrackingUpdateReadings | undefined, shipmentEvent: TruckloadTrackingUpdateEvent, stops?: Array | undefined} | {[key: string]: unknown} | {extensions?: {[key: string]: unknown} | undefined, identifiers?: TruckloadTrackingUpdateIdentifiers | undefined, readings?: TruckloadTrackingUpdateReadings | undefined, shipmentEvent?: TruckloadTrackingUpdateEvent | undefined, stops: Array} | {[key: string]: unknown}; export type UniversalTrackingUpdate = {customerAccountNumber?: string | undefined, truckload?: TruckloadTrackingUpdate | undefined} | {[key: string]: unknown}; export type CreateApiServicesCarrierPushV1TrackingUpdatesArgs = {body: UniversalTrackingUpdate}; export type CreateApiServicesCarrierPushV1TrackingUpdatesOptions = {baseUrl?: string | undefined, oAuth2?: string | undefined, fetch?: typeof fetch | undefined}; export const universalTrackingUpdateAccepted = z.object({ingestionId: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Push tracking events and telematics readings. * * POST /services/carrier-push/v1/tracking-updates */ export const createApiServicesCarrierPushV1TrackingUpdates = async (args: CreateApiServicesCarrierPushV1TrackingUpdatesArgs, options?: CreateApiServicesCarrierPushV1TrackingUpdatesOptions) => { const {baseUrl = "https://na12.api.project44.com", fetch: fetchFn = fetch, oAuth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (oAuth2 !== undefined) headers.set('authorization', `Bearer ${oAuth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/services/carrier-push/v1/tracking-updates${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(universalTrackingUpdateAccepted, await res.json()) };