import {z} from 'zod' export type VoidLabelRequest = {shipiumLabelId?: string | undefined, carrierTrackingId?: string | undefined}; export type CreateApiApiV1DeliveryexperienceShipmentCarrierSelectionVoidLabelArgs = {body: VoidLabelRequest}; export type CreateApiApiV1DeliveryexperienceShipmentCarrierSelectionVoidLabelOptions = {baseUrl?: string | undefined, oauth2Scheme?: string | undefined, fetch?: typeof fetch | undefined}; export const weight = z.object({weightUnit: z.enum(["g", "kg", "oz", "lb"]).optional(), weight: z.number().optional()}); export const cubicVolume = z.object({cubicVolumeUnit: z.enum(["in", "ft", "cm", "m"]).optional(), cubicVolume: z.number().optional()}); export const shiptimeLabelDimensions = z.object({height: z.number().optional(), width: z.number().optional(), linearUnits: z.string().optional()}); export const shiptimeLabelProperties = z.object({height: z.number(), width: z.number(), linearUnits: z.string(), dpi: z.number().int(), labelOrientation: z.string(), nonZplLabelDimensions: shiptimeLabelDimensions.optional()}); export const carrierLabelImage = z.object({imageEncoding: z.string().optional(), imageContents: z.string().optional(), imageFormat: z.string().optional()}); export const printerlessInfo = z.object({type: z.string().optional(), valueRepresented: z.string().optional()}); export const carrierLabelInfo = z.object({labelExpiration: z.string().optional(), labelFormat: z.string().optional(), labelProperties: shiptimeLabelProperties.optional(), labelImage: carrierLabelImage.optional(), labelUrl: z.string().optional(), carrierTrackingId: z.string().optional(), carrierTrackingLink: z.string().optional(), packageReferenceIdentifier: z.string().optional(), shipiumPackageReferenceId: z.string().optional(), packageScannableId: z.string().optional(), carrierShipmentId: z.string().optional(), printerlessInfo: printerlessInfo.optional()}); export const documentImage = z.object({documentEncoding: z.string().optional(), documentContents: z.string().optional()}); export const internationalDocumentInfo = z.object({documentType: z.enum(["commercial_invoice", "electronic_export_information", "ps_2976", "air_waybill", "multiple", "unknown"]).optional(), documentExpiration: z.string().optional(), documentFormat: z.string().optional(), documentImage: documentImage.optional(), electronicallySubmitted: z.boolean().optional(), packageReferenceIdentifier: z.string().optional()}); export const hazardousMaterialsDocumentInfo = z.object({documentType: z.enum(["OP_900LG", "OP_900LL"]).optional(), documentExpiration: z.string().optional(), documentFormat: z.string().optional(), documentImage: documentImage.optional(), electronicallySubmitted: z.boolean().optional(), packageReferenceIdentifier: z.string().optional()}); export const laneMatch = z.object({laneId: z.string().optional(), partnerLaneId: z.string().optional()}); export const trackingEvent = z.object({deliveryStep: z.enum(["InfoReceived", "InTransit", "OutForDelivery", "Delivered", "Exception", "Unknown"]).optional(), shipmentStatus: z.enum(["InfoReceived", "PickedUp", "ArrivedCarrierFacility", "DepartedCarrierFacility", "InTransit", "Hold", "OutForDelivery", "Delivered", "Exception", "Unknown"]).optional(), statusMessage: z.string().optional(), eventDateTime: z.string().optional(), eventCity: z.string().optional(), eventRegion: z.string().optional(), eventPostalCode: z.string().optional(), eventCountry: z.string().optional()}); export const trackingInfo = z.object({carrier: z.string().optional(), trackingId: z.string().optional(), shippedDateTime: z.string().optional(), deliveredDateTime: z.string().optional(), currentStatus: trackingEvent.optional(), events: z.array(trackingEvent).optional()}); export const carrierLabel = z.object({shipiumShipmentId: z.string().optional(), partnerShipmentId: z.string().optional(), carrierSelectionId: z.string().optional(), shipiumTenantId: z.string().optional(), partnerTenantId: z.string().optional(), shipiumLabelId: z.string().optional(), eligibleForManifest: z.boolean().optional(), partnerManifestId: z.string().optional(), status: z.enum(["success", "failure", "voided", "failover", "generated", "imported", "label_created", "manifesting", "manifested", "manifest_failure", "not_set", "carrier_selection_failure"]).optional(), statusDetails: z.string().optional(), effectiveShipDateTime: z.string().optional(), estimatedDeliveryDate: z.string().optional(), estimatedInjectionDateTime: z.string().optional(), labelCreationDateTime: z.string().optional(), cancellationDateTime: z.string().optional(), manifestDateTime: z.string().optional(), serviceMethodIdentifier: z.string().optional(), serviceMethodUrn: z.string().optional(), carrier: z.string().optional(), carrierServiceName: z.string().optional(), serviceMethodName: z.string().optional(), carrierServiceMethodId: z.string().optional(), carrierShipmentId: z.string().optional(), carrierTrackingId: z.string().optional(), carrierTrackingLink: z.string().optional(), customLabelEntries: z.record(z.string(), z.string()).optional(), shipiumTrackingId: z.string().optional(), carrierGroupId: z.string().optional(), packageScannableId: z.string().optional(), partnerThirdPartyBillingAccountId: z.string().optional(), shipiumThirdPartyBillingAccountId: z.string().optional(), thirdPartyBillingForShippingCosts: z.boolean().optional(), thirdPartyBillingForDutiesAndTaxes: z.boolean().optional(), carrierLabelCurrencyCode: z.string().optional(), carrierLabelPrice: z.number().optional(), estimatedLabelCost: z.number().optional(), billableWeight: weight.optional(), billableCubicVolume: cubicVolume.optional(), documents: z.array(carrierLabelInfo).optional(), internationalDocuments: z.array(internationalDocumentInfo).optional(), hazardousMaterialsDocuments: z.array(hazardousMaterialsDocumentInfo).optional(), fulfilledByCarrier: z.string().optional(), fulfilledByServiceMethod: z.string().optional(), fulfilledByCarrierTrackingId: z.string().optional(), laneMatch: laneMatch.optional(), labelFailoverOccurred: z.boolean().optional(), trackingInfo: trackingInfo.optional(), testMode: z.boolean().optional(), failureType: z.string().optional(), multiParcel: z.boolean().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 }; /** * Void a previously generated shipment label using the shipiumLabelId or carrierTrackingId. * * POST /api/v1/deliveryexperience/shipment/carrierSelection/voidLabel */ export const createApiApiV1DeliveryexperienceShipmentCarrierSelectionVoidLabel = async (args: CreateApiApiV1DeliveryexperienceShipmentCarrierSelectionVoidLabelArgs, options?: CreateApiApiV1DeliveryexperienceShipmentCarrierSelectionVoidLabelOptions) => { const {baseUrl = "https://api.shipium.com", fetch: fetchFn = fetch, oauth2Scheme} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (oauth2Scheme !== undefined) headers.set('authorization', `Bearer ${oauth2Scheme}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/deliveryexperience/shipment/carrierSelection/voidLabel${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(carrierLabel, await res.json()) };