import {z} from 'zod' export type GetApiApiV4LtlTrackedshipmentsIdStatusesArgs = {id: number, includeMapUrl?: boolean | undefined, includeStatusHistory?: boolean | undefined}; export type GetApiApiV4LtlTrackedshipmentsIdStatusesOptions = {baseUrl?: string | undefined, oAuth2?: string | undefined, fetch?: typeof fetch | undefined}; export const ltlTrackedShipmentImageReference = z.object({documentType: z.enum(["BILL_OF_LADING", "DELIVERY_RECEIPT", "WEIGHT_CERTIFICATE", "INVOICE", "INSPECTION_CERTIFICATE", "LETTER_OF_AUTHORIZATION", "LUMPER_CERTIFICATE", "PACKING_SLIP"]).optional(), imageFormat: z.enum(["PDF", "TIF", "PNG", "GIF", "JPG"]).optional(), imageUrl: z.string().optional()}); export const message = z.object({diagnostic: z.string().optional(), message: z.string().optional(), severity: z.enum(["ERROR", "WARNING", "INFO"]).optional(), source: z.enum(["SYSTEM", "CAPACITY_PROVIDER"]).optional()}); export const countryCode = z.enum(["US", "CA", "MX", "AG", "BB", "BS", "BZ", "CR", "CU", "DM", "DO", "GD", "GT", "HN", "HT", "JM", "KN", "LC", "NI", "PA", "SV", "TT", "VC", "AI", "AW", "BL", "BM", "BQ", "CW", "GL", "GP", "KY", "MF", "MQ", "MS", "PM", "PR", "SX", "TC", "UM", "VG", "VI", "AT", "BE", "BG", "CY", "CZ", "DK", "DE", "EE", "ES", "FI", "FR", "GB", "GR", "HR", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", "PT", "RO", "SE", "SK", "SI", "CH", "IS", "LI", "NO", "AL", "ME", "MK", "RS", "TR", "AD", "AX", "BA", "BV", "BY", "FO", "GG", "GI", "IM", "IO", "JE", "MC", "MD", "SJ", "SM", "TF", "UA", "VA", "AE", "AF", "AM", "AZ", "BD", "BH", "BN", "BT", "CN", "GE", "HK", "ID", "IL", "IN", "IQ", "IR", "JO", "JP", "KG", "KH", "KP", "KR", "KW", "KZ", "LA", "LB", "LK", "MM", "MN", "MO", "MV", "MY", "NP", "OM", "PH", "PK", "PS", "QA", "RU", "SA", "SG", "SY", "TH", "TJ", "TL", "TM", "TW", "UZ", "VN", "YE", "AO", "BF", "BI", "BJ", "BW", "CD", "CF", "CG", "CI", "CM", "CV", "DJ", "DZ", "EG", "EH", "ER", "ET", "GA", "GH", "GM", "GN", "GQ", "GW", "HM", "KE", "KM", "LR", "LS", "LY", "MA", "MG", "ML", "MR", "MU", "MW", "MZ", "NA", "NE", "NG", "RE", "RW", "SC", "SD", "SH", "SL", "SN", "SO", "SS", "ST", "SZ", "TD", "TG", "TN", "TZ", "UG", "YT", "ZA", "ZM", "ZW", "AR", "BO", "BR", "CL", "CO", "EC", "FK", "GF", "GS", "GY", "PE", "PY", "SR", "UY", "VE", "AS", "AU", "CC", "CK", "CX", "FJ", "FM", "GU", "KI", "MH", "MP", "NC", "NF", "NR", "NU", "NZ", "PF", "PG", "PN", "PW", "SB", "TK", "TO", "TV", "VU", "WF", "WS", "AQ", "EL", "UK", "XK", "XS", "XI"]); export const address = z.object({addressLines: z.array(z.string()).optional(), city: z.string().optional(), country: countryCode.optional(), postalCode: z.string().optional(), state: z.string().optional()}); export const ltlShipmentStatusReason = z.object({code: z.enum(["PICKUP_INFO", "PICKED_UP", "PICKUP_MISSED", "INTERLINE_INFO", "INTERLINE_MISSED", "DEPARTURE_INFO", "DEPARTURE_MISSED", "HELD", "DELAYED", "DELIVERY_INFO", "DELIVERY_MISSED", "DELIVERY_APPOINTMENT", "DELIVERED", "EXCEPTION", "CANCELED", "TIMED_OUT", "NOT_RECEIVING_DATA_12_TO_23", "NOT_RECEIVING_DATA_24_TO_47", "NOT_RECEIVING_DATA_48_TO_71", "NOT_RECEIVING_DATA_MORE_THAN_72"]).optional(), description: z.string().optional()}); export const splitOffsetDateTime = z.object({date: z.string().optional(), time: z.string().optional(), timeZoneOffset: z.string().optional()}); export const ltlShipmentStatusUpdate = z.object({address: address.optional(), exceptionDetailCode: z.enum(["APPOINTMENT_SET", "CANNOT_FIND_CONSIGNEE_ADDRESS", "CANNOT_REACH_CONSIGNEE", "CONS_CLOSED_FOR_HOLIDAY", "CONS_DID_NOT_ORDER_FREIGHT", "CONSIGNEE_CANCELED_ORDER", "CONSIGNEE_CLOSED", "CONSIGNEE_DISPUTES_CHARGES", "CREDIT_HOLD", "DAMAGED", "DAMAGED_ON_DELIVERY", "DELIVERY_ATTEMPTED_APPOINTMENT", "DELIVERY_ATTEMPTED_NO_DOCK_SPACE", "DELIVERY_ATTEMPTED_REAR_LOAD", "DELIVERY_REQUIRES_SPECIAL_EQUIPMENT", "DELIVERY_SHORTAGE", "DUPLICATE_SHIPMENT", "EMERGENCY_DELAY_IN_TRANSIT", "GENERAL_EXCEPTION", "HAZARDOUS_MATERIAL", "INCORRECT_ADDRESS_PROVIDED", "INVALID_OR_MISSING_PURCHASE_ORDER_NUMBER", "LIMITED_ACCESS_LOCATIONS", "MISSING_PACKING_LIST", "NO_PAYMENT_AVAILABLE_AT_DELIVERY", "OVERAGE", "PERMANENT_APPOINTMENT_REQUIRED", "PROTECTIVE_SERVICE_REQUIRED", "RECONSIGNED_TO_NEW_CONSIGNEE", "REFUSED_BY_CONS_CANNOT_RECEIVE_ON_DELIVERY_DATE", "REFUSED_NO_RETURN_AUTHORIZATION", "SHIP_WHEN_CAPACITY_AVAILABLE", "SHIPMENT_ALASKA_OR_HAWAII", "SHIPMENT_TENDERED_LATE", "SHORTAGE", "SPOT_MARKET_SHIPMENT", "WAITING_INSTRUCTIONS", "WEATHER_DELAY", "WEATHER_DELAY_CLEARED", "WORK_STOPPAGE", "WRONG_PRODUCT_SHIPPED"]).optional(), exceptionSummaryCode: z.enum(["APPOINTMENT_ISSUE", "BILLING_ISSUE", "DELIVERY_ISSUE", "OTHER_EXCEPTION", "PAPERWORK_ISSUE", "SHIPMENT_ISSUE", "SPOT_SHIPMENT", "STAFFING_ISSUE", "TRANSIT_ISSUE", "VEHICLE_ISSUE", "WEATHER_ISSUE"]).optional(), retrievalDateTime: z.string().optional(), statusCode: z.enum(["IN_TRANSIT", "OUT_TO_STOP", "AT_STOP", "INFO", "COMPLETED"]).optional(), statusReason: ltlShipmentStatusReason.optional(), stopId: z.number().int().optional(), stopNumber: z.number().int().optional(), stopType: z.enum(["ORIGIN", "DESTINATION", "TERMINAL"]).optional(), timestamp: splitOffsetDateTime.optional()}); export const splitOffsetDateTimeWindow = z.object({endDateTime: splitOffsetDateTime.optional(), startDateTime: splitOffsetDateTime.optional()}); export const ltlShipmentArrivalEstimate = z.object({estimatedArrivalWindow: splitOffsetDateTimeWindow.optional()}); export const ltlShipmentStopStatus = z.object({arrivalCode: z.enum(["UNKNOWN", "EARLY", "ON_TIME", "LATE"]).optional(), arrivalDateTime: splitOffsetDateTime.optional(), arrivalEstimate: ltlShipmentArrivalEstimate.optional(), departureDateTime: splitOffsetDateTime.optional(), statusCode: z.enum(["UNKNOWN", "EN_ROUTE", "ARRIVED", "DEPARTED"]).optional(), stopId: z.number().int().optional(), stopNumber: z.number().int().optional(), stopType: z.enum(["ORIGIN", "DESTINATION", "TERMINAL"]).optional(), uuid: z.string().optional()}); export const ltlTrackedShipmentApiConfiguration = z.object({fallBackToDefaultAccountGroup: z.boolean().optional()}); export const capacityProviderAccount = z.object({code: z.string().optional()}); export const capacityProviderAccountGroup = z.object({accounts: z.array(capacityProviderAccount).optional(), code: z.string().optional()}); export const attribute = z.object({name: z.string().optional(), values: z.array(z.string()).optional()}); export const ltlShipmentIdentifier = z.object({primaryForType: z.boolean().optional(), source: z.enum(["CUSTOMER", "CAPACITY_PROVIDER"]).optional(), type: z.enum(["PRO", "BILL_OF_LADING", "CUSTOMER_REFERENCE", "PICKUP", "PURCHASE_ORDER", "EXTERNAL"]).optional(), value: z.string().optional()}); export const zonedDateTimeWindow = z.object({endDateTime: z.string().optional(), localTimeZoneIdentifier: z.string().optional(), startDateTime: z.string().optional()}); export const additionalAppointmentWindowIdentifier = z.object({type: z.enum(["DOCK", "BOOKING_ID"]).optional(), value: z.string().optional()}); export const ltlAdditionalAppointmentWindow = z.object({appointmentStatus: z.enum(["PENDING", "REJECTED", "BOOKED", "CANCELLED", "COMPLETED", "PENDING_CARRIER", "PENDING_INTERNAL", "NONE_AVAILABLE"]).optional(), appointmentWindow: zonedDateTimeWindow.optional(), identifiers: z.array(additionalAppointmentWindowIdentifier).optional(), type: z.enum(["STRATEGIC", "SLOT_BOOKING_PICKUP", "SLOT_BOOKING_DELIVERY", "SLOT_BOOKING_PICKUP_DELIVERY"]).optional()}); export const geoCoordinates = z.object({latitude: z.number().optional(), longitude: z.number().optional()}); export const partyAddress = z.object({addressLines: z.array(z.string()).optional(), addressLabel: z.string().optional(), city: z.string().optional(), country: countryCode.optional(), id: z.string().optional(), postalCode: z.string().optional(), state: z.string().optional()}); export const bookingContact = z.object({companyName: z.string().optional(), email: z.string().optional(), familyName: z.string().optional(), givenName: z.string().optional(), mobilePhoneNumber: z.string().optional(), phoneNumber: z.string().optional()}); export const codeListProvider = z.enum(["WAVE", "CARX", "ESSD", "IDT", "BOLE", "EDOX", "IQAX", "SECR", "TRGO", "ETEU", "TRAC", "BRIT", "GSBN", "WISE", "GLEIF", "W3C", "DNB", "FMC", "DCSA", "ZZZ"]); export const codeListName = z.enum(["DID", "LEI", "DUNS"]); export const identifyingCodes = z.object({codeListProvider: codeListProvider.optional(), codeListName: codeListName.optional(), partyCode: z.string().optional()}); export const locationIdentifierType = z.enum(["UNKNOWN", "AIRPORT_IATA", "AIRPORT_ICAO", "PORT_UN_LOCODE", "RAIL_SPLC", "DATA_PROVIDER_LOCATION_CODE", "LOCODE"]); export const ratingLocationIdentifier = z.object({type: locationIdentifierType.optional(), value: z.string().optional()}); export const partyType = z.enum(["SHIPPER", "CONSIGNEE", "BILL_TO", "NOTIFY_PARTY", "BOOKING_AGENT", "CARRIER_BOOKING_OFFICE"]); export const party = z.object({addressInfo: partyAddress.optional(), contactInfo: bookingContact.optional(), identifyingCodes: identifyingCodes.optional(), locationIdentifiers: z.array(ratingLocationIdentifier).optional(), partyType: partyType.optional(), vatNumber: z.string().optional()}); export const contact = z.object({companyName: z.string().optional(), contactName: z.string().optional(), email: z.string().optional(), faxNumber: z.string().optional(), faxNumberCountryCode: z.string().optional(), phoneNumber: z.string().optional(), phoneNumber2: z.string().optional(), phoneNumber2CountryCode: z.string().optional(), phoneNumberCountryCode: z.string().optional()}); export const location = z.object({address: address.optional(), contact: contact.optional()}); export const locationIdentifier = z.object({type: z.enum(["EXTERNAL", "SYSTEM"]).optional(), value: z.string().optional()}); export const ltlTrackedShipmentStop = z.object({additionalAppointmentWindows: z.array(ltlAdditionalAppointmentWindow).optional(), appointmentWindow: zonedDateTimeWindow.optional(), geoCoordinates: geoCoordinates.optional(), id: z.number().int().optional(), involvedParties: z.array(party).optional(), location: location.optional(), locationIdentifiers: z.array(locationIdentifier).optional(), stopDescription: z.string().optional(), stopName: z.string().optional(), stopNumber: z.number().int().optional(), stopType: z.enum(["ORIGIN", "DESTINATION", "TERMINAL"]).optional(), uuid: z.string().optional()}); export const ltlTrackedShipment = z.object({apiConfiguration: ltlTrackedShipmentApiConfiguration.optional(), capacityProviderAccountGroup: capacityProviderAccountGroup.optional(), id: z.number().int().optional(), ltlLegId: z.string().optional(), masterShipmentId: z.string().optional(), shipmentAttributes: z.array(attribute).optional(), shipmentIdentifiers: z.array(ltlShipmentIdentifier).optional(), shipmentStops: z.array(ltlTrackedShipmentStop).optional()}); export const ltlShipmentStatus = z.object({imageReferences: z.array(ltlTrackedShipmentImageReference).optional(), infoMessages: z.array(message).optional(), latestStatusUpdate: ltlShipmentStatusUpdate.optional(), latestStopStatuses: z.array(ltlShipmentStopStatus).optional(), mapUrl: z.string().optional(), shipment: ltlTrackedShipment.optional(), statusUpdates: z.array(ltlShipmentStatusUpdate).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 }; /** * Returns the status of an LTL shipment by unique system ID * * GET /api/v4/ltl/trackedshipments/{id}/statuses */ export const getApiApiV4LtlTrackedshipmentsIdStatuses = async (args: GetApiApiV4LtlTrackedshipmentsIdStatusesArgs, options?: GetApiApiV4LtlTrackedshipmentsIdStatusesOptions) => { const {baseUrl = "https://na12.api.project44.com", fetch: fetchFn = fetch, oAuth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.includeMapUrl != null) query.append("includeMapUrl", String(args.includeMapUrl)) if (args.includeStatusHistory != null) query.append("includeStatusHistory", String(args.includeStatusHistory)) if (oAuth2 !== undefined) headers.set('authorization', `Bearer ${oAuth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v4/ltl/trackedshipments/${encodeURIComponent(String(args.id))}/statuses${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(ltlShipmentStatus, await res.json()) };