import {z} from 'zod' export type InventoryOrderIdentifierCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, type?: ('CONTRACT' | 'LOAD' | 'MANUFACTURER' | 'PROMOTION' | 'SEASON' | 'VENDOR' | 'LAUNCH_CODE' | 'CUSTOMER_ORDER') | undefined, value?: string | undefined, values?: Array | undefined}; export type OffsetDateTimeRangeFilter = {endDateTime?: string | undefined, endDateTimeInclusive?: boolean | undefined, startDateTime?: string | undefined, startDateTimeInclusive?: boolean | undefined}; export type InventoryOrderAttributeFilter = {name?: string | undefined, operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, values?: Array | undefined}; export type OrderHealthDateCriteria = {endDateTime?: string | undefined, offsetMinutes?: number | undefined, operator?: ('WITHIN' | 'ON_OR_BEFORE' | 'ON_OR_AFTER') | undefined, startDateTime?: string | undefined}; export type OrderHealthDeltaCriteria = {operator?: ('MORE_THAN' | 'LESS_THAN' | 'EQUALS') | undefined, type?: ('RUNNING_EARLY' | 'RUNNING_LATE') | undefined, value?: number | undefined}; export type TimeUnit = 'UNKNOWN' | 'MILLISECONDS' | 'SECONDS' | 'MINUTES' | 'HOURS' | 'DAYS' | 'WEEKS' | 'MONTHS' | 'YEARS'; export type TimeDuration = {amount?: number | undefined, unit?: TimeUnit | undefined}; export type OrderDurationRange = {fromDuration?: TimeDuration | undefined, fromInclusive?: boolean | undefined, toDuration?: TimeDuration | undefined, toInclusive?: boolean | undefined}; export type OrderHealthCriteria = {dateRanges?: Array | undefined, deltas?: Array | undefined, durationRange?: OrderDurationRange | undefined, shipmentStatus?: ('UNKNOWN' | 'EARLY' | 'ON_TIME' | 'LATE') | undefined}; export type OrderIdentifierCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, type?: ('PURCHASE_ORDER' | 'SALES_ORDER' | 'WAREHOUSE_MOVEMENT_ORDER' | 'ADVANCED_SHIPMENT_NOTICE' | 'INVOICE' | 'DELIVERY' | 'STOCK_TRANSFER_ORDER') | undefined, values?: Array | undefined}; export type OrderItemAdditionalIdentifierCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, type?: ('DEPARTMENT' | 'SUB_DEPARTMENT' | 'CATEGORY' | 'GROUP' | 'FAMILY' | 'GENDER' | 'VENDOR' | 'MANUFACTURER' | 'PROMOTION' | 'SECTOR' | 'DIVISION' | 'CLASS' | 'SUB_CLASS' | 'CODE' | 'SEASON') | undefined, values?: Array | undefined}; export type OrderItemDescriptionCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, values?: Array | undefined}; export type OrderItemIdentifierCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, type?: ('STOCK_KEEPING_UNIT' | 'UNIVERSAL_PRODUCT_CODE' | 'SERIAL_NUMBER') | undefined, values?: Array | undefined}; export type OrderLocationPropertyCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, type?: ('POSTAL_CODE' | 'ADDRESS_LINES' | 'CITY' | 'STATE' | 'COUNTRY' | 'SUPPLIER_ID' | 'NAME') | undefined, values?: Array | undefined}; export type OrderStopCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, values?: (Array<'ORIGIN' | 'DESTINATION' | 'VENDOR' | 'BILLING'>) | undefined}; export type OrderLocationCriteria = {propertyCriteria?: Array | undefined, stopCriteria?: OrderStopCriteria | undefined}; export type InventoryOrderTagCriteria = {operator?: ('EQUALS' | 'NOT_EQUALS' | 'CONTAINS') | undefined, type?: ('ANALYST' | 'CARRIER' | 'CATEGORY' | 'COMMODITY' | 'DEPARTMENT' | 'DIRECTOR' | 'FAMILY' | 'GROUP' | 'MANAGER' | 'SECTOR' | 'BATCH') | undefined, value?: string | undefined, values?: Array | undefined}; export type PaginationParameters = {pageNumber?: number | undefined, pageSize?: number | undefined}; export type InventoryOrderSortField = {direction?: ('ASC' | 'DESC') | undefined, fieldName?: ('ORDER_TYPE' | 'ORDER_IDENTIFIER' | 'STATUS_CODE' | 'ORDER_SUBMISSION_DATETIME' | 'SUPPLIER_READY_WINDOW_START_DATETIME' | 'SUPPLIER_READY_WINDOW_END_DATETIME' | 'ORIGINAL_DELIVERY_WINDOW_START_DATETIME' | 'ORIGINAL_DELIVERY_WINDOW_END_DATETIME' | 'ORDER_HEALTH_ETA') | undefined}; export type BasicInventoryOrderSearchCriteria = {additionalOrderIdentifierCriteria?: Array | undefined, billToLocationAddressText?: string | undefined, destinationLocationAddressText?: string | undefined, hasShipmentIds?: boolean | undefined, ids?: Array | undefined, launchDateTime?: OffsetDateTimeRangeFilter | undefined, orderAttributes?: Array | undefined, orderHealthCriteria?: Array | undefined, orderIdentifierCriteria?: Array | undefined, orderIdentifiers?: Array | undefined, orderItemAdditionalIdentifierCriteria?: Array | undefined, orderItemDescriptionCriteria?: Array | undefined, orderItemIdentifierCriteria?: Array | undefined, orderLocationCriteria?: Array | undefined, orderSubmissionDateTime?: OffsetDateTimeRangeFilter | undefined, orderTagCriteria?: Array | undefined, orderTypes?: (Array<'PURCHASE_ORDER' | 'SALES_ORDER' | 'WAREHOUSE_MOVEMENT_ORDER' | 'ADVANCED_SHIPMENT_NOTICE' | 'INVOICE' | 'DELIVERY' | 'STOCK_TRANSFER_ORDER'>) | undefined, originLocationAddressText?: string | undefined, originalDeliveryDateTimeWindowEnd?: OffsetDateTimeRangeFilter | undefined, originalDeliveryDateTimeWindowStart?: OffsetDateTimeRangeFilter | undefined, pagination?: PaginationParameters | undefined, relatedOrderIds?: Array | undefined, searchText?: string | undefined, shipmentIds?: Array | undefined, sort?: Array | undefined, statusCodes?: (Array<'SUBMITTED' | 'RECEIVED' | 'PROCESSING' | 'ACCEPTED' | 'FULFILLED' | 'REJECTED' | 'CANCELED'>) | undefined, supplierReadyDateTimeWindowEnd?: OffsetDateTimeRangeFilter | undefined, supplierReadyDateTimeWindowStart?: OffsetDateTimeRangeFilter | undefined, vendorLocationAddressText?: string | undefined}; export type CreateApiApiV4InventoryOrdersSearchArgs = {page?: number | undefined, size?: number | undefined, sort?: string | undefined, body: BasicInventoryOrderSearchCriteria}; export type CreateApiApiV4InventoryOrdersSearchOptions = {baseUrl?: string | undefined, oAuth2?: string | undefined, fetch?: typeof fetch | undefined}; export const paginationInfo = z.object({pageNumber: z.number().int().optional(), pageSize: z.number().int().optional(), total: z.number().int().optional()}); export const inventoryOrderIdentifier = z.object({type: z.enum(["CONTRACT", "LOAD", "MANUFACTURER", "PROMOTION", "SEASON", "VENDOR", "LAUNCH_CODE", "CUSTOMER_ORDER"]).optional(), value: z.string().optional()}); export const orderCustomAttribute = z.object({name: z.string().optional(), values: z.array(z.string()).optional()}); export const inventoryContact = z.object({companyName: z.string().optional(), contactName: z.string().optional(), contactType: z.enum(["PRIMARY", "SECONDARY", "WAREHOUSE", "TRANSPORTATION", "FINANCE", "OTHER"]).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 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 inventoryLocation = z.object({additionalContacts: z.array(inventoryContact).optional(), address: address.optional(), contact: inventoryContact.optional(), id: z.string().optional(), name: z.string().optional(), suppliedId: z.string().optional()}); export const timeUnit = z.enum(["UNKNOWN", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS", "WEEKS", "MONTHS", "YEARS"]); export const timeDuration = z.object({amount: z.number().int().gte(0).optional(), unit: timeUnit.optional()}); export const arrivalStatus = z.object({code: z.enum(["UNKNOWN", "EARLY", "ON_TIME", "LATE"]).optional(), duration: timeDuration.optional()}); export const derivedOrderHealth = z.object({arrivalStatus: arrivalStatus.optional(), estimatedTimeOfArrival: z.string().optional()}); export const freightTerms = z.object({freightOwnershipType: z.enum(["PREPAID", "COLLECT"]).optional(), transportationPaymentType: z.enum(["ORIGIN", "DESTINATION"]).optional()}); export const inventoryOrderTag = z.object({description: z.string().optional(), type: z.enum(["ANALYST", "CARRIER", "CATEGORY", "COMMODITY", "DEPARTMENT", "DIRECTOR", "FAMILY", "GROUP", "MANAGER", "SECTOR", "BATCH"]).optional(), value: z.string().optional()}); export const offsetDateTimeWindow = z.object({endDateTime: z.string().optional(), startDateTime: z.string().optional()}); export const currency = z.enum(["USD", "CAD", "MXN", "EUR"]); export const monetaryValue = z.object({amount: z.number().optional(), currency: currency.optional()}); export const inventoryOrder = z.object({additionalOrderIdentifiers: z.array(inventoryOrderIdentifier).optional(), attributes: z.array(orderCustomAttribute).optional(), billToLocation: inventoryLocation.optional(), createdDate: z.string().optional(), deletedDateTime: z.string().optional(), derivedOrderHealth: derivedOrderHealth.optional(), destinationLocation: inventoryLocation.optional(), freightTerms: freightTerms.optional(), id: z.string().optional(), launchDateTime: z.string().optional(), orderIdentifier: z.string().optional(), orderIdentifierAuthority: z.string().optional(), orderSubmissionDateTime: z.string().optional(), orderTags: z.array(inventoryOrderTag).optional(), orderType: z.enum(["PURCHASE_ORDER", "SALES_ORDER", "WAREHOUSE_MOVEMENT_ORDER", "ADVANCED_SHIPMENT_NOTICE", "INVOICE", "DELIVERY", "STOCK_TRANSFER_ORDER"]).optional(), originLocation: inventoryLocation.optional(), originalDeliveryDateTimeWindow: offsetDateTimeWindow.optional(), relatedOrderIds: z.array(z.string()).optional(), shipmentIds: z.array(z.string()).optional(), statusCode: z.enum(["SUBMITTED", "RECEIVED", "PROCESSING", "ACCEPTED", "FULFILLED", "REJECTED", "CANCELED"]).optional(), statusCodeDateTime: z.string().optional(), subject: z.string().optional(), supplierReadyDateTimeWindow: offsetDateTimeWindow.optional(), totalCost: monetaryValue.optional(), totalRetailValue: monetaryValue.optional(), vendorLocation: inventoryLocation.optional()}); export const inventoryOrderPage = z.object({paginationInfo: paginationInfo.optional(), results: z.array(inventoryOrder).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 }; /** * Search for orders. * * POST /api/v4/inventory/orders/search */ export const createApiApiV4InventoryOrdersSearch = async (args: CreateApiApiV4InventoryOrdersSearchArgs, options?: CreateApiApiV4InventoryOrdersSearchOptions) => { 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 (args.page != null) query.append("page", String(args.page)) if (args.size != null) query.append("size", String(args.size)) if (args.sort != null) query.append("sort", String(args.sort)) if (oAuth2 !== undefined) headers.set('authorization', `Bearer ${oAuth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v4/inventory/orders/search${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(inventoryOrderPage, await res.json()) };