import {z} from 'zod' export type GetApiShipmentsIdArgs = {id: string}; export type GetApiShipmentsIdOptions = {baseUrl: string, ApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const methodType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]); export const modeOfTransportationDto = z.object({code: z.string().nullable().optional(), description: z.string().nullable().optional(), method: methodType.optional(), default: z.boolean().optional()}); export const countryDto = z.object({code: z.string().nullable().optional()}); export const addressDto = z.object({street: z.array(z.string()).nullable().optional(), city: z.string().nullable().optional(), state: z.string().nullable().optional(), zipCode: z.string().nullable().optional(), country: countryDto.optional(), description: z.string().nullable().optional(), contactName: z.string().nullable().optional(), contactPhone: z.string().nullable().optional(), contactPhoneExtension: z.string().nullable().optional(), contactFax: z.string().nullable().optional(), contactEmail: z.string().nullable().optional(), portCode: z.string().nullable().optional()}); export const entityDto = z.object({guid: z.string().nullable().optional(), name: z.string().nullable().optional(), code: z.string().nullable().optional(), address: addressDto.optional()}); export const itemStatusType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14)]); export const packageTypeDesc = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19), z.literal(20), z.literal(21), z.literal(22), z.literal(23), z.literal(24), z.literal(25), z.literal(26), z.literal(27), z.literal(28)]); export const weightUnitType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]); export const weightValueDto = z.object({value: z.number().optional(), unit: weightUnitType.optional()}); export const volumeUnitType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const volumeValueDto = z.object({value: z.number().optional(), unit: volumeUnitType.optional()}); export const packageDto = z.object({type: packageTypeDesc.optional(), code: z.string().nullable().optional(), name: z.string().nullable().optional(), weight: weightValueDto.optional(), volume: volumeValueDto.optional()}); export const moneyValueDto = z.object({value: z.number().optional(), currency: z.string().nullable().optional()}); export const itemDto = z.object({guid: z.string().nullable().optional(), type: z.string().nullable().optional(), version: z.number().int().optional(), status: itemStatusType.optional(), package: packageDto.optional(), packageName: z.string().nullable().optional(), pieces: z.string().nullable().optional(), weight: weightValueDto.optional(), volume: volumeValueDto.optional(), unitaryValue: moneyValueDto.optional(), totalValue: moneyValueDto.optional(), description: z.string().nullable().optional(), partNumber: z.string().nullable().optional(), model: z.string().nullable().optional(), serialNumber: z.string().nullable().optional(), lotNumber: z.string().nullable().optional()}); export const lengthUnitType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]); export const measurementUnitsDto = z.object({weightUnit: weightUnitType.optional(), volumeUnit: volumeUnitType.optional(), lengthUnit: lengthUnitType.optional()}); export const chargeTypeDesc = z.union([z.literal(0), z.literal(1)]); export const chargeStatusType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]); export const chargeDto = z.object({guid: z.string().nullable().optional(), type: chargeTypeDesc.optional(), description: z.string().nullable().optional(), quantity: z.number().optional(), price: moneyValueDto.optional(), amount: moneyValueDto.optional(), taxAmount: moneyValueDto.optional(), status: chargeStatusType.optional(), isPrepaid: z.boolean().optional(), isThirdPartyCharge: z.boolean().optional()}); export const eventDto = z.object({date: z.string().nullable().optional(), details: z.string().nullable().optional(), location: z.string().nullable().optional(), includeInTracking: z.boolean().optional()}); export const volumeWeightUnitType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7)]); export const volumeWeightValueDto = z.object({value: z.number().optional(), unit: volumeWeightUnitType.optional()}); export const portDto = z.object({code: z.string().nullable().optional(), name: z.string().nullable().optional(), country: countryDto.optional(), method: z.array(methodType).nullable().optional(), subdivision: z.string().nullable().optional(), remarks: z.string().nullable().optional()}); export const shipmentStatusType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]); export const shipmentDirectionType = z.union([z.literal(0), z.literal(1)]); export const shipmentLayoutType = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const attachmentDto = z.object({name: z.string().nullable().optional(), description: z.string().nullable().optional(), extension: z.string().nullable().optional(), size: z.number().int().optional(), isImage: z.boolean().optional(), identifier: z.number().int().optional(), isInternal: z.boolean().optional()}); export const bookingStatusType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]); export const airShipmentDto = z.object({airWayBillNumber: z.string().nullable().optional(), flightNumber: z.string().nullable().optional(), declareValueForCustoms: z.string().nullable().optional()}); export const oceanShipmentDto = z.object({billOfLadingNumber: z.string().nullable().optional(), vesselName: z.string().nullable().optional(), voyageIdentification: z.string().nullable().optional()}); export const groundShipmentDto = z.object({billOfLadingNumber: z.string().nullable().optional(), vehicleNumber: z.string().nullable().optional(), carrierTrakingNumber: z.string().nullable().optional(), driverName: z.string().nullable().optional()}); export const shipmentDto = z.object({guid: z.string().nullable().optional(), type: z.string().nullable().optional(), createdOn: z.string().nullable().optional(), number: z.string().nullable().optional(), createdByName: z.string().nullable().optional(), version: z.number().int().optional(), modeOfTransportation: modeOfTransportationDto.optional(), modeOfTransportCode: z.string().nullable().optional(), issuedBy: entityDto.optional(), issuedByAddress: addressDto.optional(), issuedByName: z.string().nullable().optional(), shipperName: z.string().nullable().optional(), shipperAddress: addressDto.optional(), shipper: entityDto.optional(), consigneeName: z.string().nullable().optional(), consigneeAddress: addressDto.optional(), consignee: entityDto.optional(), destinationAgentName: z.string().nullable().optional(), destinationAgentAddress: addressDto.optional(), destinationAgent: entityDto.optional(), carrier: entityDto.optional(), carrierName: z.string().nullable().optional(), carrierAddress: addressDto.optional(), notes: z.string().nullable().optional(), waybillNotes: z.string().nullable().optional(), items: z.array(itemDto).nullable().optional(), measurementUnits: measurementUnitsDto.optional(), creatorNetworkID: z.number().int().optional(), charges: z.array(chargeDto).nullable().optional(), events: z.array(eventDto).nullable().optional(), division: entityDto.optional(), totalPieces: z.number().int().nullable().optional(), totalWeight: weightValueDto.optional(), totalVolume: volumeValueDto.optional(), totalValue: moneyValueDto.optional(), totalVolumeWeight: volumeWeightValueDto.optional(), chargeableWeight: weightValueDto.optional(), releaseType: z.string().nullable().optional(), descriptionOfGoods: z.string().nullable().optional(), originPort: portDto.optional(), destinationPort: portDto.optional(), receiptPort: portDto.optional(), deliveryPort: portDto.optional(), status: shipmentStatusType.optional(), direction: shipmentDirectionType.optional(), layoutType: shipmentLayoutType.optional(), estimatedArrivalDate: z.string().nullable().optional(), actualArrivalDate: z.string().nullable().optional(), estimatedDepartureDate: z.string().nullable().optional(), actualDepartureDate: z.string().nullable().optional(), notifyParty: entityDto.optional(), notifyPartyName: z.string().nullable().optional(), notifyPartyAddress: addressDto.optional(), intermediateConsignee: entityDto.optional(), intermediateConsigneeName: z.string().nullable().optional(), intermediateConsigneeAddress: addressDto.optional(), importer: entityDto.optional(), billingClient: entityDto.optional(), executedPlace: z.string().nullable().optional(), executedCityCode: z.string().nullable().optional(), declaredValue: z.string().nullable().optional(), bookingNumber: z.string().nullable().optional(), customerReferenceNumber: z.string().nullable().optional(), amsWaybill: z.string().nullable().optional(), masterGUID: z.string().nullable().optional(), masterNumber: z.string().nullable().optional(), receivedAtNetworkID: z.number().int().optional(), originPortSchedule: z.string().nullable().optional(), destinationPortSchedule: z.string().nullable().optional(), url: z.string().nullable().optional(), hasAttachments: z.boolean().optional(), attachments: z.array(attachmentDto).nullable().optional(), bookingStatus: bookingStatusType.optional(), airShipmentInfo: airShipmentDto.optional(), oceanShipmentInfo: oceanShipmentDto.optional(), groundShipmentInfo: groundShipmentDto.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 }; /** * Get a specific shipment * * GET /shipments/{id} */ export const getApiShipmentsId = async (args: GetApiShipmentsIdArgs, options: GetApiShipmentsIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, ApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (ApiKey !== undefined) headers.set("Authorization", ApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/shipments/${encodeURIComponent(String(args.id))}${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(shipmentDto, await res.json()) };