import {z} from 'zod' export type GetApiApiV1LtlShipmentCostLtlCostIdArgs = {ltlCostId: string}; export type GetApiApiV1LtlShipmentCostLtlCostIdOptions = {baseUrl?: string | undefined, oauth2Scheme?: string | undefined, fetch?: typeof fetch | undefined}; export const addressLineComponents = z.object({streetName: z.string().optional(), primaryAddressNumber: z.string().optional(), secondaryAddressNumber: z.string().optional(), district: z.string().optional(), neighborhood: z.string().optional()}); export const cSAddress = z.object({name: z.string().optional(), phoneNumber: z.string().optional(), phoneNumberCountryCode: z.string().optional(), emailAddress: z.string().optional(), company: z.string().optional(), street1: z.string().optional(), street2: z.string().optional(), city: z.string().optional(), state: z.string().optional(), countryCode: z.string(), postalCode: z.string(), addressType: z.enum(["commercial", "residential"]).optional(), addressLineComponents: addressLineComponents.optional()}); export const units = z.object({currencyCode: z.string(), linearUnit: z.enum(["in", "cm"]), weightUnit: z.enum(["g", "kg", "oz", "lb"])}); export const ltlCostSummary = z.object({transportationType: z.enum(["ltlTransportation", "packageTransportation"]), transportationTypeCost: z.number()}); export const currencyAmount = z.object({amount: z.number(), currency: z.string().optional()}); export const loadPackagingSize = z.object({height: z.number(), length: z.number(), linearUnit: z.enum(["in", "cm"]).optional(), weight: z.number(), weightUnit: z.enum(["g", "kg", "oz", "lb"]).optional(), width: z.number()}); export const loadPackagingDetails = z.object({declaredValue: currencyAmount.optional(), loadPackagingType: z.enum(["loose", "overboxed", "piece", "wrapped", "pallet"]).optional(), loadPackagingSize: loadPackagingSize, nmfcFreightClass: z.string()}); export const ltlLoadPackagingItem = z.object({partnerShipmentId: z.string().optional(), shipiumShipmentId: z.string().optional(), packageReferenceIdentifier: z.string().optional()}); export const ltlLoadPackagingRecommendation = z.object({details: loadPackagingDetails, shipments: z.array(ltlLoadPackagingItem).optional()}); export const weight = z.object({weightUnit: z.enum(["g", "kg", "oz", "lb"]).optional(), weight: z.number().optional()}); export const ltlRateLineItem = z.object({name: z.string(), rate: z.number(), carrierSurchargeId: z.string().optional(), surchargeType: z.enum(["additional_handling_weight", "additional_handling_volume", "additional_handling_length", "additional_handling_extra_length", "additional_handling_width", "additional_handling_packaging", "alaska_delivery_commercial_air", "alaska_delivery_commercial_ground", "alaska_delivery_residential_air", "alaska_delivery_residential_ground", "base", "delivery_commercial_air", "delivery_commercial_ground", "delivery_residential_air", "delivery_residential_ground", "extended_delivery_commercial_air", "extended_delivery_commercial_ground", "extended_delivery_residential_air", "extended_delivery_residential_ground", "fuel_air_domestic", "fuel_air_international_export", "fuel_air_international_import", "fuel_ground", "hawaii_delivery_commercial_air", "hawaii_delivery_commercial_ground", "hawaii_delivery_residential_air", "hawaii_delivery_residential_ground", "hazmat", "incentive", "international_delivery_area", "international_extended_delivery_area", "large_package_commercial", "large_package_residential", "peak", "peak_additional_handling", "peak_residential_delivery_air", "peak_residential_delivery_ground", "peak_large_package", "remote_delivery_commercial_air", "remote_delivery_commercial_ground", "remote_delivery_residential_air", "remote_delivery_residential_ground", "residential_air", "residential_ground", "saturday_delivery", "signature", "signature_resident", "signature_adult", "signature_adult_resident", "surcharge", "zone_weight"]).optional(), lineItemType: z.string().optional(), hiddenFromCarrierCompare: z.boolean().optional(), hiddenFromInvoice: z.boolean().optional(), hiddenFromOperational: z.boolean().optional(), nmfcFreightClass: z.string().optional(), weight: weight.optional()}); export const ltlLoadDeficitCost = z.object({amount: z.number(), nmfcClass: z.string().optional(), weight: weight, rate: z.number()}); export const ltlCarrierCost = z.object({billableWeight: weight, billToThirdPartyId: z.string().optional(), carrier: z.string(), carrierAccountId: z.string().optional(), carrierServiceMethodId: z.string(), estimatedDeliveryDate: z.string().optional(), lineItems: z.array(ltlRateLineItem).optional(), loadDeficitCost: ltlLoadDeficitCost.optional(), pickupDateTime: z.string().optional(), pricingType: z.enum(["all", "contract", "contractPallet", "dynamic", "volume", "unknown"]).optional(), quoteId: z.string().optional(), quoteEffectiveDateTime: z.string().optional(), quoteExpirationDateTime: z.string().optional(), scacCode: z.string(), serviceLevel: z.enum(["all", "guaranteedMorning", "guaranteedNoon", "guaranteedEndOfDay", "standard", "unknown"]), totalCost: z.number().optional()}); export const ltlCarrierSelection = z.object({loadPackaging: z.array(ltlLoadPackagingRecommendation), evaluatedCarriers: z.array(ltlCarrierCost).optional(), selectedCarrier: ltlCarrierCost.optional(), totalCost: z.number().optional()}); export const ltlBillToContact = z.object({addressLineComponents: addressLineComponents.optional(), addressType: z.enum(["commercial", "residential"]).optional(), city: z.string().optional(), company: z.string().optional(), countryCode: z.string(), emailAddress: z.string().optional(), name: z.string().optional(), phoneNumber: z.string().optional(), phoneNumberCountryCode: z.string().optional(), postalCode: z.string(), state: z.string().optional(), street1: z.string().optional(), street2: z.string().optional(), thirdPartyBillingSetId: z.string()}); export const ltlHazmatContact = z.object({contactName: z.string(), phoneNumber: z.string(), phoneNumberCountryCode: z.string().optional(), email: z.string().optional()}); export const loadPackagingSizeRequest = z.object({height: z.number(), length: z.number(), linearUnit: z.enum(["in", "cm"]).optional(), maximumWeight: z.number().optional(), packagingWeight: z.number().optional(), weightUnit: z.enum(["g", "kg", "oz", "lb"]).optional(), width: z.number()}); export const loadPackagingDetailsRequest = z.object({loadPackagingType: z.enum(["loose", "overboxed", "piece", "wrapped", "pallet"]).optional(), loadPackagingSize: loadPackagingSizeRequest}); export const ltlPaymentDetails = z.object({payerType: z.enum(["consignee", "shipper", "thirdParty"]), paymentTerms: z.enum(["collect", "prePaid", "thirdParty"])}); export const ltlShipmentParameters = z.object({billToContact: ltlBillToContact.optional(), carrierServiceMethodAllowList: z.array(z.string()).optional(), collectOnDelivery: currencyAmount.optional(), fulfillmentContextIds: z.array(z.string()).optional(), originId: z.string().optional(), fulfillmentType: z.enum(["customer", "at_large", "returns", "hundredweight", "reship", "unknown"]).optional(), hazmatContact: ltlHazmatContact.optional(), packagingOptions: z.array(loadPackagingDetailsRequest).optional(), paymentDetails: ltlPaymentDetails, pickupDate: z.string(), pricingTypes: z.array(z.enum(["all", "contract", "contractPallet", "dynamic", "volume", "unknown"])).optional(), serviceLevels: z.array(z.enum(["all", "guaranteedMorning", "guaranteedNoon", "guaranteedEndOfDay", "standard", "unknown"])).optional(), accessorialCodes: z.array(z.enum(["AIRD", "AIRP", "APTD", "APTP", "CFSD", "CFSP", "COD", "FSC", "GTD", "HAZ", "HCDA", "HCPA", "INS", "LTDAD", "LTDAP", "MISC", "MNC", "OVR", "PPD", "PSN", "REP", "RES", "SLTDAD", "SLTDAP", "SS", "WGDL", "WGDU"])).optional()}); export const injectionSummary = z.object({requestInjectionProfileId: z.string().optional(), partnerInjectionProfileId: z.string().optional(), shipiumInjectionProfileId: z.string().optional(), requestInjectionSiteId: z.string().optional(), partnerInjectionSiteId: z.string().optional(), shipiumInjectionSiteId: z.string().optional()}); export const cubicVolume = z.object({cubicVolumeUnit: z.enum(["in", "ft", "cm", "m"]).optional(), cubicVolume: z.number().optional()}); export const laneMatch = z.object({laneId: z.string().optional(), partnerLaneId: z.string().optional()}); export const injectionRateModifier = z.object({modifierType: z.enum(["flat", "percentage"]).optional(), modifierValue: z.number().optional()}); export const injectionCostDetails = z.object({injectionLineItemRate: z.number().optional(), injectionLineItemCurrencyCode: z.string().optional(), injectionRateModifier: injectionRateModifier.optional()}); export const injectionDetails = z.object({requestInjectionProfileId: z.string().optional(), partnerInjectionProfileId: z.string().optional(), shipiumInjectionProfileId: z.string().optional(), requestInjectionSiteId: z.string().optional(), partnerInjectionSiteId: z.string().optional(), shipiumInjectionSiteId: z.string().optional(), injectionCostDetails: injectionCostDetails.optional()}); export const rateLineItem = z.object({name: z.string(), rate: z.number(), carrierSurchargeId: z.string().optional(), surchargeType: z.enum(["additional_handling_weight", "additional_handling_volume", "additional_handling_length", "additional_handling_extra_length", "additional_handling_width", "additional_handling_packaging", "alaska_delivery_commercial_air", "alaska_delivery_commercial_ground", "alaska_delivery_residential_air", "alaska_delivery_residential_ground", "base", "delivery_commercial_air", "delivery_commercial_ground", "delivery_residential_air", "delivery_residential_ground", "extended_delivery_commercial_air", "extended_delivery_commercial_ground", "extended_delivery_residential_air", "extended_delivery_residential_ground", "fuel_air_domestic", "fuel_air_international_export", "fuel_air_international_import", "fuel_ground", "hawaii_delivery_commercial_air", "hawaii_delivery_commercial_ground", "hawaii_delivery_residential_air", "hawaii_delivery_residential_ground", "hazmat", "incentive", "international_delivery_area", "international_extended_delivery_area", "large_package_commercial", "large_package_residential", "peak", "peak_additional_handling", "peak_residential_delivery_air", "peak_residential_delivery_ground", "peak_large_package", "remote_delivery_commercial_air", "remote_delivery_commercial_ground", "remote_delivery_residential_air", "remote_delivery_residential_ground", "residential_air", "residential_ground", "saturday_delivery", "signature", "signature_resident", "signature_adult", "signature_adult_resident", "surcharge", "zone_weight"]).optional(), lineItemType: z.string().optional(), hiddenFromCarrierCompare: z.boolean().optional(), hiddenFromInvoice: z.boolean().optional(), hiddenFromOperational: z.boolean().optional()}); export const carrierSelectionExpansion = z.object({carrier: z.string().optional(), carrierServiceMethodId: z.string().optional(), serviceMethodName: z.string().optional(), carrierAccountId: z.string().optional(), totalCost: z.number().optional(), estimatedDeliveryDate: z.string().optional(), injectionDetails: injectionDetails.optional(), rateCurrency: z.string().optional(), lineItems: z.array(rateLineItem).optional(), estimatedDeliveryDateLocal: z.string().optional()}); export const carrierSelectionSummary = z.object({status: z.enum(["success", "uncosted", "no_decision"]).optional(), statusDetails: z.string().optional(), carrierSelectionId: z.string().optional(), shipiumShipmentId: z.string().optional(), partnerShipmentId: z.string().optional(), partnerId: z.string().optional(), carrierAccountId: z.string().optional(), serviceMethodUrn: z.string().optional(), serviceMethodIdentifier: z.string().optional(), carrier: z.string().optional(), carrierServiceMethodId: z.string().optional(), serviceMethodName: z.string().optional(), costAdjustConfigId: z.string().optional(), totalCost: z.number().optional(), carrierCompareCost: z.number().optional(), carrierInvoiceCost: z.number().optional(), operationalCost: z.number().optional(), thirdPartyBilling: z.boolean().optional(), carrierSelectionDateTime: z.string().optional(), injectionDetails: injectionSummary.optional(), carrierZoneId: z.string().optional(), calculatedBillableWeight: weight.optional(), calculatedBillableCubicVolume: cubicVolume.optional(), laneMatch: laneMatch.optional(), evaluatedServiceMethods: z.array(carrierSelectionExpansion).optional(), cancellationDateTime: z.string().optional(), effectiveShipDateTime: z.string().optional(), currencyCode: z.string().optional()}); export const ltlParcelCarrierSelection = z.object({totalCost: z.number(), packageDetails: z.array(carrierSelectionSummary), status: z.enum(["success", "failure", "timeout"])}); export const timeWindow = z.object({startWindow: z.string(), endWindow: z.string(), timeZone: z.string().optional()}); export const injectionParameter = z.object({injectionProfileId: z.string().optional(), injectionSiteId: z.string().optional()}); export const tip = z.object({type: z.enum(["FIXED", "PERCENTAGE"]).optional(), value: z.number().optional(), currency: z.string().optional()}); export const lastMileDeliveryOptions = z.object({deliveryInstruction: z.enum(["LEAVE_AT_DOOR", "MEET_AT_DOOR"]).optional(), undeliverableInstruction: z.enum(["LEAVE_AT_DOOR", "RETURN", "DESTROY"]).optional(), tip: tip.optional(), tipForLabelCreate: tip.optional(), deliverableActionForLabelCreate: z.enum(["RETURN", "LEAVE_AT_DOOR", "DISCARD", "MEET_AT_DOOR"]).optional(), undeliverableActionForLabelCreate: z.enum(["RETURN", "LEAVE_AT_DOOR", "DISCARD", "MEET_AT_DOOR"]).optional()}); export const ltlParcelShipmentParameters = z.object({carrierServiceMethodAllowList: z.array(z.string()).optional(), deliverySignatureOption: z.enum(["None", "Signature", "ResidentSignature", "AdultSignature", "AdultResidentSignature", "Unknown"]).optional(), deliveryWindow: timeWindow.optional(), forceThirdPartyBilling: z.boolean().optional(), fulfillmentContextIds: z.array(z.string()).optional(), originId: z.string().optional(), fulfillmentType: z.enum(["customer", "at_large", "returns", "hundredweight", "reship", "unknown"]).optional(), ignoreCarrierMinimumDimensions: z.boolean().optional(), ignoreUpgradeSpendLimits: z.boolean().optional(), includeInjectionProfiles: z.boolean().optional(), injectionParameters: z.array(injectionParameter).optional(), lastMileDeliveryOptions: lastMileDeliveryOptions.optional(), pickupWindow: timeWindow.optional(), preferredCarrierDeliveryDateTime: z.string().optional(), saturdayDelivery: z.boolean().optional(), desktopDelivery: z.boolean().optional(), serviceMethodPoBoxAllowList: z.array(z.string()).optional(), shipOption: z.string().optional(), thirdPartyBillingSetId: z.string().optional()}); export const ltlShipmentItemSummary = z.object({partnerShipmentId: z.string().optional(), shipiumShipmentId: z.string().optional()}); export const ltlCostResponse = z.object({shipiumLtlCostId: z.string(), partnerLtlCostId: z.string().optional(), partnerTenantId: z.string().optional(), shipiumTenantId: z.string().optional(), shipFromAddress: cSAddress, shipFromTimeZoneId: z.string().optional(), destinationAddress: cSAddress, destinationTimeZoneId: z.string().optional(), returnToAddress: cSAddress.optional(), rawDesiredDeliveryDate: z.string().optional(), recommendedTransportationType: z.enum(["ltlTransportation", "packageTransportation"]), recommendedTransportationTypeCost: z.number(), testMode: z.boolean(), currencyCode: z.string().optional(), units: units.optional(), allTransportationTypeCosts: z.array(ltlCostSummary), ltlCostDetails: ltlCarrierSelection, ltlShipmentParameters: ltlShipmentParameters, packageCostDetails: ltlParcelCarrierSelection.optional(), packageShipmentParameters: ltlParcelShipmentParameters.optional(), packedShipments: z.array(loadPackagingDetails).optional(), shipments: z.array(ltlShipmentItemSummary).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 }; /** * Retrieve an existing LTL shipment cost or cost comparison. * * GET /api/v1/ltl/shipment/cost/{ltlCostId} */ export const getApiApiV1LtlShipmentCostLtlCostId = async (args: GetApiApiV1LtlShipmentCostLtlCostIdArgs, options?: GetApiApiV1LtlShipmentCostLtlCostIdOptions) => { const {baseUrl = "https://api.shipium.com", fetch: fetchFn = fetch, oauth2Scheme} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (oauth2Scheme !== undefined) headers.set('authorization', `Bearer ${oauth2Scheme}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/ltl/shipment/cost/${encodeURIComponent(String(args.ltlCostId))}${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(ltlCostResponse, await res.json()) };