import {z} from 'zod' export type OrderNumber = number; export type GetApiOrdersPublicOrderNumberArgs = {orderNumber: OrderNumber}; export type GetApiOrdersPublicOrderNumberOptions = {baseUrl?: string | undefined, appId?: string | undefined, fetch?: typeof fetch | undefined}; export const addressInfo = z.object({id: z.number().int().optional(), address1: z.string().optional(), address2: z.string().nullable().optional(), attention: z.string().optional(), business_name: z.string().optional(), city: z.string().optional(), country: z.string().optional(), facility_name: z.string().nullable().optional(), phone: z.string().optional(), phone_ext: z.string().nullable().optional(), postal_code: z.string().optional(), state: z.string().optional(), erp_code: z.string().nullable().optional()}).nullable(); export const orderContact = z.object({account: z.object({erp_code: z.string().nullable().optional(), id: z.number().optional(), notes: z.string().nullable().optional(), name: z.string().optional(), payment_terms: z.string().nullable().optional(), payment_terms_period: z.string().nullable().optional()}).optional(), email: z.string().optional(), first_name: z.string().optional(), id: z.number().int().optional(), last_name: z.string().optional(), notes: z.string().nullable().optional(), phone: z.string().nullable().optional(), phone_ext: z.string().nullable().optional()}); export const orderCompany = z.object({business_name: z.string().optional(), erp_code: z.string().optional()}); export const orderCustomer = z.object({company: orderCompany.optional(), email: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional(), phone: z.string().optional(), phone_ext: z.string().optional()}); export const orderUser = z.object({first_name: z.string().optional(), last_name: z.string().optional(), email: z.string().optional(), avatar_color: z.string().optional()}); export const orderNumber = z.number().int(); export const componentChild = z.object({child_id: z.number().int().optional(), quantity: z.number().int().optional()}); export const orderMaterial = z.object({id: z.number().int().optional(), display_name: z.string().optional(), family: z.string().optional(), material_class: z.string().optional(), name: z.string().optional()}); export const orderCostingVariable = z.object({label: z.string().optional(), variable_class: z.enum(["basic", "drop_down", "table"]).optional(), value_type: z.enum(["string", "number", "currency", "boolean"]).optional(), value: z.union([z.string(), z.number(), z.number().int(), z.boolean()]).nullable().optional(), row: z.object({}).nullable().optional(), options: z.array(z.union([z.number(), z.string()])).nullable().optional(), type: z.string().optional()}); export const operationQuantity = z.object({price: z.number().optional(), manual_price: z.number().nullable().optional(), lead_time: z.number().int().nullable().optional(), manual_lead_time: z.number().int().nullable().optional(), quantity: z.number().int().optional()}); export const orderOperation = z.object({id: z.number().int().optional(), category: z.enum(["material", "operation"]).optional(), cost: z.number().optional(), costing_variables: z.array(orderCostingVariable).optional(), quantities: z.array(operationQuantity).optional(), is_finish: z.boolean().optional(), is_outside_service: z.boolean().optional(), name: z.string().optional(), erp_code: z.string().optional(), operation_definition_name: z.string().optional(), notes: z.string().nullable().optional(), position: z.number().int().optional(), runtime: z.number().nullable().optional(), setup_time: z.number().nullable().optional()}); export const orderProcess = z.object({id: z.number().int().optional(), external_name: z.string().optional(), name: z.string().optional()}); export const purchasedComponentProperty = z.object({name: z.string().optional(), code_name: z.string().optional(), value_type: z.enum(["string", "boolean", "numeric"]).optional(), value: z.union([z.string(), z.number(), z.boolean()]).nullable().optional()}); export const quotePurchasedComponent = z.object({oem_part_number: z.string().optional(), internal_part_number: z.string().nullable().optional(), description: z.string().nullable().optional(), piece_price: z.number().optional(), id: z.string().optional(), properties: z.array(purchasedComponentProperty).optional()}); export const orderSupportingFile = z.object({filename: z.string().optional(), url: z.string().optional()}); export const orderComponent = z.object({id: z.string().optional(), child_ids: z.array(z.number().int()).optional(), children: z.array(componentChild).optional(), deliver_quantity: z.number().int().optional(), description: z.string().nullable().optional(), export_controlled: z.boolean().optional(), finishes: z.array(z.string()).optional(), innate_quantity: z.number().int().optional(), is_root_component: z.boolean().optional(), make_quantity: z.number().int().optional(), material: orderMaterial.optional(), material_operations: z.array(orderOperation).optional(), parent_ids: z.array(z.number().int()).optional(), part_name: z.string().optional(), part_number: z.string().nullable().optional(), part_url: z.string().optional(), part_uuid: z.string().optional(), process: orderProcess.optional(), purchased_component: quotePurchasedComponent.optional(), revision: z.string().nullable().optional(), shop_operations: z.array(orderOperation).optional(), supporting_files: z.array(orderSupportingFile).optional(), thumbnail_url: z.string().nullable().optional(), type: z.enum(["assembled", "manufactured", "purchased"]).optional()}); export const orderAddOn = z.object({is_required: z.boolean().optional(), name: z.string().optional(), erp_code: z.string().optional(), notes: z.string().optional(), price: z.number().optional(), quantity: z.number().int().optional(), costing_variables: z.array(orderCostingVariable).optional()}); export const orderItem = z.object({id: z.number().int().optional(), components: z.array(orderComponent).optional(), description: z.string().nullable().optional(), expedite_revenue: z.number().nullable().optional(), export_controlled: z.boolean().optional(), filename: z.string().optional(), lead_days: z.number().int().optional(), markup_1_price: z.number().optional(), markup_1_name: z.string().optional(), markup_2_price: z.number().optional(), markup_2_name: z.string().optional(), private_notes: z.string().nullable().optional(), public_notes: z.string().nullable().optional(), quantity: z.number().int().optional(), quantity_outstanding: z.number().int().optional(), quote_item_id: z.number().int().optional(), quote_item_type: z.enum(["automatic", "manual"]).optional(), root_component_id: z.number().int().optional(), ships_on: z.string().optional(), total_price: z.number().optional(), unit_price: z.number().optional(), base_price: z.number().optional(), add_on_fees: z.number().nullable().optional(), ordered_add_ons: z.array(orderAddOn).optional(), pricing_items: z.array(z.object({})).optional(), unit_price_before_discounts: z.number().nullable().optional()}); export const orderPaymentDetails = z.object({card_brand: z.string().nullable().optional(), card_last4: z.string().nullable().optional(), net_payout: z.number().nullable().optional(), payment_type: z.enum(["credit_card", "purchase_order"]).nullable().optional(), purchase_order_number: z.string().optional(), purchasing_dept_contact_email: z.string().nullable().optional(), purchasing_dept_contact_name: z.string().nullable().optional(), shipping_cost: z.number().optional(), subtotal: z.number().optional(), tax_cost: z.number().optional(), tax_rate: z.number().optional(), payment_terms: z.string().nullable().optional(), total_price: z.number().optional()}); export const address = z.object({id: z.number().int().optional(), address1: z.string().max(250).optional(), address2: z.string().max(250).nullable().optional(), city: z.string().max(100).optional(), state: z.string().optional(), postal_code: z.string().optional(), country: z.string().max(3).optional(), erp_code: z.string().max(50).optional()}); export const salesPerson = z.object({uuid: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional(), email: z.string().optional(), erp_code: z.string().optional()}); export const facility = z.object({account_id: z.number().int().optional(), address: address.optional(), attention: z.string().optional(), id: z.number().int().optional(), name: z.string().optional(), salesperson: salesPerson.optional()}).nullable(); export const orderShipmentItem = z.object({id: z.number().int().optional(), order_item_id: z.number().int().optional(), quantity: z.number().int().optional()}); export const orderShipment = z.object({id: z.number().int().optional(), pickup_recipient: z.string().nullable().optional(), shipment_date: z.string().optional(), shipment_items: z.array(orderShipmentItem).optional(), shipping_cost: z.number().optional(), tracking_number: z.string().optional()}); export const orderShippingOption = z.object({customers_account_number: z.string().nullable().optional(), customers_carrier: z.enum(["ups", "fedex"]).nullable().optional(), shipping_method: z.enum(["early_am_overnight", "ground", "next_day_air", "second_day_air"]).nullable().optional(), type: z.enum(["pickup", "customers_shipping_account", "suppliers_shipping_account"]).optional()}); export const order = z.object({uuid: z.string().optional(), billing_info: addressInfo.optional(), created: z.string().optional(), contact: orderContact.optional(), customer: orderCustomer.optional(), deliver_by: z.string().nullable().optional(), erp_code: z.string().nullable().optional(), estimator: orderUser.optional(), number: orderNumber.optional(), order_items: z.array(orderItem).optional(), payment_details: orderPaymentDetails.optional(), private_notes: z.string().nullable().optional(), purchase_order_file_url: z.string().nullable().optional(), quote_erp_code: z.string().nullable().optional(), quote_number: z.number().int().optional(), quote_rfq_number: z.string().nullable().optional(), quote_revision_number: z.number().int().optional(), sales_person: orderUser.optional(), salesperson: orderUser.optional(), send_from_facility: facility.optional(), shipments: z.array(orderShipment).optional(), shipping_info: addressInfo.optional(), shipping_option: orderShippingOption.optional(), ships_on: z.string().optional(), status: z.enum(["pending", "confirmed", "on_hold", "in_process", "completed", "cancelled"]).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 order details * * GET /orders/public/{orderNumber} */ export const getApiOrdersPublicOrderNumber = async (args: GetApiOrdersPublicOrderNumberArgs, options?: GetApiOrdersPublicOrderNumberOptions) => { const {baseUrl = "https://api.paperlessparts.com/v1", fetch: fetchFn = fetch, appId} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (appId !== undefined) headers.set("Authorization", appId) const url = `${baseUrl.replace(/\/+$/, '')}/orders/public/${encodeURIComponent(String(args.orderNumber))}${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(order, await res.json()) };