@atomic-solutions/woocommerce-api-client 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/classes/BaseError.ts","../../src/errors/mapping/mapWooCommerceCode.ts","../../src/errors/mapping/constants.ts","../../src/errors/classes/http-error.ts","../../src/errors/classes/WooCommerceApiError.ts","../../src/errors/classes/WooCommerceDataValidationError.ts","../../src/http/handleApiResponse.ts","../../src/utils/calculatePagination.ts","../../src/utils/getPaginationMeta.ts","../../src/http/handlePaginatedApiResponse.ts","../../src/logging/logger.ts","../../src/http/storeRoutes.ts","../../src/http/interceptors/request.ts","../../src/http/interceptors/response.ts","../../src/utils/initializeCartSession.ts","../../src/http/interceptors/error.ts","../../../schemas/src/common/address.schema.ts","../../../schemas/src/common/money.schema.ts","../../../schemas/src/woocommerce/store-api/image.schema.ts","../../../schemas/src/woocommerce/store-api/prices.schema.ts","../../../schemas/src/woocommerce/store-api/cart-item.schema.ts","../../../schemas/src/woocommerce/store-api/cart-totals.schema.ts","../../../schemas/src/woocommerce/store-api/coupon.schema.ts","../../../schemas/src/woocommerce/store-api/shipping.schema.ts","../../../schemas/src/woocommerce/store-api/cart.ts","../../../schemas/src/woocommerce/store-api/order-item.schema.ts","../../../schemas/src/woocommerce/store-api/order-totals.schema.ts","../../../schemas/src/woocommerce/store-api/order.schema.ts","../../../schemas/src/woocommerce/store-api/checkout.ts","../../../schemas/src/woocommerce/store-api/add-to-cart.schema.ts","../../../schemas/src/woocommerce/store-api/category.schema.ts","../../../schemas/src/woocommerce/store-api/products.ts","../../../schemas/src/woocommerce/store-api/order-attribution.schema.ts","../../src/api/cart.ts","../../src/api/checkout.ts","../../src/api/orders.ts","../../src/api/products.ts","../../src/constants/endpoints.ts","../../src/client/createClient.ts","../../src/testing/adminClient.ts","../../src/testing/helpers.ts","../../src/testing/suites/authenticated-checkout.suite.ts","../../src/testing/suites/checkout-validation.suite.ts","../../src/testing/suites/guest-checkout.suite.ts","../../src/testing/createTestSuite.ts"],"names":["BaseError","error","z","axios"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Base error class for all package errors\n *\n * Generic over:\n * - TOptions: The options type for this error class\n * - TReportable: The reportable data structure for error tracking\n */\nimport type { BaseErrorOptions, BaseReportableData } from './types';\n\nexport class BaseError<\n TOptions extends BaseErrorOptions = BaseErrorOptions,\n TReportable extends BaseReportableData = BaseReportableData,\n> extends Error {\n constructor(public readonly options: TOptions) {\n super(options.message);\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n\n // Set error name\n this.name = this.constructor.name;\n\n // Capture stack trace (excluding constructor call)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n // If there's a cause with a stack, preserve it\n if (this.options.cause instanceof Error && this.options.cause.stack) {\n this.stack = `${this.stack}\\nCaused by: ${this.options.cause.stack}`;\n }\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Subclasses should override this to add their own reportable fields\n */\n getReportableData(): TReportable {\n const { code, operation, userMessage, retryable } = this.options;\n return {\n code,\n operation,\n userMessage,\n retryable,\n } as TReportable;\n }\n\n /**\n * Custom JSON serialization\n * Makes the error properly serializable for logging/reporting\n */\n toJSON(): Record<string, unknown> {\n return {\n ...this.getReportableData(),\n name: this.name,\n message: this.message,\n stack: this.stack,\n } as unknown as Record<string, unknown>;\n }\n}\n","import type { WooCommerceApiErrorCode } from './types';\n\nexport const mapWooCommerceCode = (apiCode?: string): WooCommerceApiErrorCode => {\n if (!apiCode) return 'unknown_error';\n\n // Direct matches\n const directMatches: Record<string, WooCommerceApiErrorCode> = {\n woocommerce_rest_cart_empty: 'cart_empty',\n woocommerce_rest_cart_coupon_error: 'invalid_coupon',\n woocommerce_rest_missing_nonce: 'missing_nonce',\n woocommerce_rest_invalid_nonce: 'invalid_nonce',\n rest_invalid_param: 'invalid_params',\n woocommerce_rest_product_invalid_id: 'product_not_found',\n woocommerce_rest_product_out_of_stock: 'out_of_stock',\n woocommerce_rest_product_not_enough_stock: 'insufficient_stock',\n woocommerce_rest_checkout_invalid_payment_method: 'invalid_payment_method',\n };\n\n if (directMatches[apiCode]) {\n return directMatches[apiCode];\n }\n\n // Pattern matches\n if (apiCode.includes('nonce')) return 'invalid_nonce';\n if (apiCode.includes('coupon')) return 'invalid_coupon';\n if (apiCode.includes('stock')) return 'insufficient_stock';\n if (apiCode.includes('checkout')) return 'checkout_error';\n if (apiCode.includes('payment')) return 'invalid_payment_method';\n\n return 'unknown_error';\n};\n","import type { WooCommerceApiErrorCode, WooCommerceApiErrorMetaData } from './types';\n\nexport const WOOCOMMERCE_ERROR_METADATA: Record<\n WooCommerceApiErrorCode,\n WooCommerceApiErrorMetaData\n> = {\n cart_empty: {\n operation: 'get_cart',\n retryable: false,\n userMessage: 'Your cart is empty',\n },\n invalid_coupon: {\n operation: 'apply_coupon',\n retryable: false,\n userMessage: 'Invalid coupon code',\n },\n missing_nonce: {\n operation: 'cart_request',\n retryable: true, // Auto-retry with new nonce\n },\n invalid_nonce: {\n operation: 'cart_request',\n retryable: true, // Auto-retry with new nonce\n },\n invalid_params: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'Invalid request parameters',\n },\n product_not_found: {\n operation: 'get_product',\n retryable: false,\n userMessage: 'Product not found',\n },\n out_of_stock: {\n operation: 'add_to_cart',\n retryable: false,\n userMessage: 'This product is out of stock',\n },\n insufficient_stock: {\n operation: 'add_to_cart',\n retryable: false,\n userMessage: 'Not enough stock available',\n },\n invalid_payment_method: {\n operation: 'process_checkout',\n retryable: false,\n userMessage: 'Invalid payment method',\n },\n checkout_error: {\n operation: 'process_checkout',\n retryable: false,\n },\n network_error: {\n operation: 'network_request',\n retryable: true,\n },\n unknown_error: {\n operation: 'unknown',\n retryable: false,\n },\n};\n","export const redactPath = (url: string): string =>\n url\n .replace(/^[a-z][a-z0-9+.-]*:\\/\\/[^/]+/i, '')\n .replace(/[?#].*$/, '')\n .split('/')\n .map((segment) => (/^(\\d+|[0-9a-f]{16,}|[0-9a-f-]{36})$/i.test(segment) ? ':id' : segment))\n .join('/');\n\nexport const classifyHttpStatus = (status?: number) =>\n ({\n domain:\n status === undefined ? 'network' : status === 401 || status === 403 ? 'auth' : 'integration',\n severity: status !== undefined && status < 500 ? 'warning' : 'error',\n }) as const;\n","/**\n * WooCommerce API Error\n */\n\nimport { BaseError } from '@atomic-solutions/errors';\n\nimport { WOOCOMMERCE_ERROR_METADATA, type WooCommerceApiErrorCode } from '../mapping';\nimport { classifyHttpStatus, redactPath } from './http-error';\nimport type { WooCommerceApiErrorOptions } from './types';\n\n/**\n * WooCommerce-specific error class\n *\n * Extends BaseError to provide:\n * - Code transformation (WooCommerce API codes → clean app codes)\n * - WooCommerce-specific error categorization\n * - HTTP context (status, URL, method)\n */\nexport class WooCommerceApiError extends BaseError {\n readonly #options: WooCommerceApiErrorOptions;\n\n constructor(options: WooCommerceApiErrorOptions) {\n const metadata = WOOCOMMERCE_ERROR_METADATA[options.code] ?? {\n operation: 'woocommerce_api_request',\n retryable: false,\n };\n\n // Enrich options with metadata defaults\n const enrichedOptions: WooCommerceApiErrorOptions = {\n ...options,\n operation: options.operation || metadata.operation,\n userMessage: options.userMessage || metadata.userMessage,\n retryable: options.retryable ?? metadata.retryable,\n };\n\n const status = enrichedOptions.statusCode;\n const { domain, severity } = classifyHttpStatus(status);\n\n super({\n domain,\n severity,\n operation: enrichedOptions.operation as string,\n message: enrichedOptions.message,\n code: enrichedOptions.code,\n retryable: enrichedOptions.retryable,\n userMessage: enrichedOptions.userMessage,\n cause: enrichedOptions.cause,\n fingerprint: [domain, enrichedOptions.code, String(status ?? 'network')],\n extras: {\n originalCode: enrichedOptions.originalCode,\n statusCode: status,\n path: redactPath(enrichedOptions.url),\n method: enrichedOptions.method,\n },\n });\n\n this.#options = enrichedOptions;\n }\n\n get options(): WooCommerceApiErrorOptions {\n return this.#options;\n }\n\n // Convenient getters for frequently accessed fields (no duplication)\n get wooCode(): WooCommerceApiErrorCode {\n return this.options.code;\n }\n\n get originalCode(): string {\n return this.options.originalCode;\n }\n\n get statusCode(): number | undefined {\n return this.options.statusCode;\n }\n\n get url(): string {\n return this.options.url;\n }\n\n get method(): string {\n return this.options.method;\n }\n\n get requestBody(): unknown | undefined {\n return this.options.requestBody;\n }\n\n get responseBody(): unknown | undefined {\n return this.options.responseBody;\n }\n\n get data(): Record<string, unknown> | undefined {\n return this.options.data;\n }\n}\n","/**\n * WooCommerce validation error class\n * Thrown when API response validation fails\n */\n\nimport type { ZodError } from 'zod';\n\nimport { BaseError } from './BaseError';\nimport type {\n BaseErrorOptions,\n ValidationReportableData,\n WooCommerceDataValidationErrorOptions,\n} from './types';\n\n/**\n * Internal options type that combines user options with computed fields\n */\ninterface WooCommerceDataValidationErrorInternalOptions extends BaseErrorOptions {\n url?: string;\n zodError?: ZodError;\n value?: unknown;\n fieldErrors?: Record<string, string[]>;\n}\n\n/**\n * WooCommerce validation error\n *\n * Thrown when API response validation fails using Zod schemas\n */\nexport class WooCommerceDataValidationError extends BaseError<\n WooCommerceDataValidationErrorInternalOptions,\n ValidationReportableData\n> {\n constructor(options: WooCommerceDataValidationErrorOptions) {\n // Extract field errors from Zod error if provided\n const fieldErrors = options.zodError\n ? WooCommerceDataValidationError.extractFieldErrorsFromZod(options.zodError)\n : undefined;\n\n super({\n code: 'validation_error',\n message: options.message,\n operation: options.operation,\n userMessage: options.userMessage || 'Received unexpected data from WooCommerce',\n retryable: false,\n cause: options.cause,\n url: options.url,\n zodError: options.zodError,\n value: options.value,\n fieldErrors,\n });\n }\n\n // Convenient getters for validation-specific fields (no duplication)\n get url(): string | undefined {\n return this.options.url;\n }\n\n get zodError(): ZodError | undefined {\n return this.options.zodError;\n }\n\n get invalidValue(): unknown | undefined {\n return this.options.value;\n }\n\n get fieldErrors(): Record<string, string[]> | undefined {\n return this.options.fieldErrors;\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Includes validation-specific fields\n */\n override getReportableData(): ValidationReportableData {\n return {\n code: this.options.code,\n operation: this.options.operation,\n userMessage: this.options.userMessage,\n retryable: false,\n fieldErrors: this.options.fieldErrors,\n url: this.options.url,\n };\n }\n\n /**\n * Extract field errors from Zod error\n */\n private static extractFieldErrorsFromZod(\n zodError: ZodError\n ): Record<string, string[]> | undefined {\n if (!zodError?.errors) {\n return undefined;\n }\n\n const fieldErrors: Record<string, string[]> = {};\n\n for (const issue of zodError.errors) {\n const path = issue.path.join('.');\n if (!fieldErrors[path]) {\n fieldErrors[path] = [];\n }\n fieldErrors[path].push(issue.message);\n }\n\n return fieldErrors;\n }\n\n /**\n * Get all error messages as a flat array\n */\n getMessages(): string[] {\n if (!this.fieldErrors) {\n return [this.message];\n }\n\n const messages: string[] = [];\n for (const fieldMessages of Object.values(this.fieldErrors)) {\n messages.push(...fieldMessages);\n }\n\n return messages;\n }\n\n /**\n * Check if a specific field has errors\n */\n hasFieldError(field: string): boolean {\n return this.fieldErrors ? field in this.fieldErrors : false;\n }\n\n /**\n * Get error messages for a specific field\n */\n getFieldError(field: string): string[] | undefined {\n return this.fieldErrors?.[field];\n }\n}\n","/**\n * Response validation utilities\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WooCommerceDataValidationError } from '@/errors';\n\n/**\n * Validation mode for API responses\n * - 'strict': Throw error on validation failure (default)\n * - 'warn': Log warning and continue on validation failure\n */\nexport type ValidationMode = 'strict' | 'warn';\n\n/**\n * Options for response handling\n */\nexport interface ResponseOptions {\n /** Validation mode */\n validationMode?: ValidationMode;\n\n /** Error reporter for validation errors */\n errorReporter?: (error: Error) => void;\n\n /** Optional validation error handler (called before errorReporter) */\n onValidationError?: (error: Error) => void;\n}\n\n/**\n * Handle and validate API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validation\n * @param options - Response handling options\n * @returns Validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handleApiData = <T>(\n data: unknown,\n schema: ZodSchema<T>,\n options?: ResponseOptions,\n url?: string\n): T => {\n const validationMode = options?.validationMode ?? 'strict';\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(data);\n\n if (!result.success) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${url || 'unknown endpoint'}`,\n url,\n zodError: result.error,\n value: data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[woocommerce-utils] Validation warning:', validationError.message);\n\n // Return raw data to allow app to continue\n return data as T;\n }\n\n return result.data;\n }\n\n // Strict mode - throw on validation failure\n try {\n return schema.parse(data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${url || 'unknown endpoint'}`,\n url,\n zodError: error as ZodError,\n value: data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n};\n\nexport const handleApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T>,\n options?: ResponseOptions\n): T => handleApiData(response.data, schema, options, response.config.url);\n\n/**\n * Check if error is a Zod validation error\n */\nexport const isZodError = (error: unknown): error is ZodError => {\n return error instanceof Error && error.name === 'ZodError';\n};\n","/**\n * Calculate pagination navigation\n */\n\nexport interface Pagination {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n nextPage: number | null;\n prevPage: number | null;\n}\n\nexport interface CalculatePaginationInput {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n}\n\n/**\n * Calculate pagination navigation from WooCommerce pagination metadata\n *\n * @param input - Current pagination state\n * @returns Full pagination object with navigation helpers\n */\nexport const calculatePagination = (input: CalculatePaginationInput): Pagination => {\n const { page, perPage, total, totalPages } = input;\n\n const hasNextPage = page < totalPages;\n const hasPrevPage = page > 1;\n\n return {\n page,\n perPage,\n total,\n totalPages,\n hasNextPage,\n hasPrevPage,\n nextPage: hasNextPage ? page + 1 : null,\n prevPage: hasPrevPage ? page - 1 : null,\n };\n};\n","/**\n * Extract pagination metadata from WooCommerce response headers\n */\n\nimport type { AxiosResponse } from 'axios';\n\nexport interface PaginationMeta {\n total: number;\n totalPages: number;\n}\n\nexport const getPaginationMeta = (headers: AxiosResponse['headers']): PaginationMeta => {\n // Handle undefined/null headers\n if (!headers) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const wpTotal = headers['x-wp-total'];\n const wpTotalPages = headers['x-wp-totalpages'];\n\n if (!wpTotal || !wpTotalPages) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const total = parseInt(wpTotal, 10);\n const totalPages = parseInt(wpTotalPages, 10);\n\n return {\n total,\n totalPages,\n };\n};\n","/**\n * Pagination utilities for WooCommerce API responses\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WooCommerceDataValidationError } from '../errors';\nimport { calculatePagination, type Pagination } from '../utils/calculatePagination';\nimport { getPaginationMeta } from '../utils/getPaginationMeta';\nimport type { ResponseOptions } from './handleApiResponse';\n\n/**\n * Paginated response wrapper\n */\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: Pagination;\n}\n\n/**\n * Handle paginated API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validating array items\n * @param params - Request parameters (page, per_page)\n * @param options - Response handling options\n * @returns Paginated response with validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handlePaginatedApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T[]>,\n params: { page?: number; per_page?: number } = {},\n options?: ResponseOptions\n): PaginatedResponse<T> => {\n const validationMode = options?.validationMode ?? 'strict';\n let data: T[];\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(response.data);\n\n if (!result.success) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: result.error,\n value: response.data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[woocommerce-utils] Validation warning:', validationError.message);\n\n // Return raw data as array (best effort)\n data = Array.isArray(response.data) ? response.data : [];\n } else {\n data = result.data;\n }\n } else {\n // Strict mode - throw on validation failure\n try {\n data = schema.parse(response.data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: error as ZodError,\n value: response.data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n }\n\n const { total, totalPages } = getPaginationMeta(response.headers);\n const page = params.page || 1;\n const perPage = params.per_page || 10;\n\n const pagination = calculatePagination({\n page,\n perPage,\n total,\n totalPages,\n });\n\n return {\n data,\n pagination,\n };\n};\n","/**\n * Debug logger for WooCommerce utils\n */\n\nconst DEBUG_PREFIX = '[woocommerce-utils]';\n\n/**\n * Check if debug mode is enabled\n */\nexport const isDebugEnabled = (): boolean => {\n if (typeof process !== 'undefined' && process.env) {\n return process.env.DEBUG === 'true' || process.env.DEBUG === '1';\n }\n return false;\n};\n\n/**\n * Log debug message (only if DEBUG is enabled)\n */\nexport const debug = (...args: unknown[]): void => {\n if (isDebugEnabled()) {\n console.log(DEBUG_PREFIX, ...args);\n }\n};\n\n/**\n * Log warning message\n */\nexport const warn = (...args: unknown[]): void => {\n console.warn(DEBUG_PREFIX, ...args);\n};\n\n/**\n * Log error message\n */\nexport const error = (...args: unknown[]): void => {\n console.error(DEBUG_PREFIX, ...args);\n};\n","const CART_ROUTE = /\\/wc\\/store\\/(v\\d+\\/)?(cart|checkout|batch)/;\nconst BATCH_ROUTE = /\\/wc\\/store\\/(v\\d+\\/)?batch/;\n\nexport const isCartRoute = (url?: string): boolean => !!url && CART_ROUTE.test(url);\n\nexport const isBatchRoute = (url?: string): boolean => !!url && BATCH_ROUTE.test(url);\n","/**\n * Request interceptor\n *\n * Handles:\n * - JWT authentication for protected endpoints\n * - Nonce/Cart-Token injection for cart/checkout endpoints\n * - Cache-Control headers for cart/checkout to prevent Android caching bugs\n * - Debug logging\n */\n\nimport type { AxiosInstance, InternalAxiosRequestConfig } from 'axios';\n\nimport type { WooCommerceClient, WooCommerceConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\nimport { isBatchRoute, isCartRoute } from '../storeRoutes';\n\n/**\n * Check if endpoint requires JWT authentication\n */\nconst requiresAuth = (url?: string): boolean => {\n if (!url) return false;\n\n const authEndpoints = [\n '/jwt-auth/',\n '/customers/me',\n '/wp/v2/users/me',\n // Store API non-cart endpoints: inject JWT when available so authenticated\n // users can access their own resources (e.g. orders, personalised product data)\n '/wc/store/v1/order',\n ];\n\n return authEndpoints.some((endpoint) => url.includes(endpoint));\n};\n\n/**\n * Setup request interceptor\n *\n * - Injects JWT Bearer token for authenticated requests\n * - Injects Nonce/Cart-Token headers for cart/checkout requests\n * - Adds Cache-Control headers to prevent Android caching bugs\n * - Calls optional onRequest hook\n * - Passes client instance to callbacks\n */\nexport const setupRequestInterceptor = (\n axiosInstance: AxiosInstance,\n config: WooCommerceConfig,\n client: WooCommerceClient\n): void => {\n axiosInstance.interceptors.request.use(\n async (requestConfig: InternalAxiosRequestConfig) => {\n const url = requestConfig.url;\n\n // Inject JWT token for authenticated endpoints\n if (config.jwtToken) {\n const token = await config.jwtToken.get();\n if (token && (requiresAuth(url) || isCartRoute(url))) {\n requestConfig.headers.Authorization = `Bearer ${token}`;\n if (config.debug) {\n debug('Injected JWT token for', url);\n }\n }\n }\n\n // Inject nonce/cart-token for cart endpoints\n // When JWT is present, skip Cart-Token: WooCommerce prioritizes Cart-Token over JWT\n // for session identification, which would route requests to a separate API session\n // instead of the user's persistent cart.\n //\n // /batch is the exception. WP core rebuilds every sub-request as a fresh\n // WP_REST_Request, so none of them inherit the Nonce header and each one fails\n // AbstractCartRoute::check_nonce(). WooCommerce waives the nonce when\n // has_cart_token() is set, and that helper reads the outer HTTP header precisely\n // so it survives batch dispatch — so Cart-Token is the only credential a batch\n // sub-request can present.\n if (isCartRoute(url)) {\n const headers = await config.cartHeaders.get();\n const isAuthenticated = !!(await config.jwtToken?.get());\n\n if (headers.nonce) {\n requestConfig.headers.Nonce = headers.nonce;\n }\n if (headers.cartToken && (!isAuthenticated || isBatchRoute(url))) {\n requestConfig.headers['Cart-Token'] = headers.cartToken;\n }\n\n // CRITICAL: Disable HTTP caching for cart/checkout endpoints\n // WooCommerce sends aggressive cache headers (max-age=2419200, 28 days) which\n // can cause Android HTTP clients to serve stale cart data from cache.\n // This was causing empty carts to be returned after successful add-item operations\n // because the cached GET /cart response (from before items were added) was being\n // served instead of fetching fresh data from the server.\n // iOS URLSession happened to work because it handles expired cache differently.\n requestConfig.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate';\n requestConfig.headers.Pragma = 'no-cache';\n requestConfig.headers.Expires = '0';\n\n if (config.debug) {\n debug('Injected cart headers for', url, {\n hasNonce: !!headers.nonce,\n hasCartToken: !!headers.cartToken,\n });\n }\n }\n\n // Debug logging\n if (config.debug) {\n debug(\n `${requestConfig.method?.toUpperCase()} ${requestConfig.url}`,\n requestConfig.params || requestConfig.data\n );\n }\n\n // Call optional onRequest hook\n if (config.onRequest) {\n return config.onRequest(requestConfig, client);\n }\n\n return requestConfig;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Axios response interceptor for WooCommerce API\n */\n\nimport { AxiosError, type AxiosInstance, type AxiosResponse } from 'axios';\n\nimport type { WooCommerceClient, WooCommerceConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\nimport { isBatchRoute, isCartRoute } from '../storeRoutes';\n\nconst NONCE_ERROR_CODES = ['woocommerce_rest_missing_nonce', 'woocommerce_rest_invalid_nonce'];\n\nconst isNonceRejectedBatch = (data: unknown): boolean => {\n const responses = (data as { responses?: unknown } | null | undefined)?.responses;\n\n if (!Array.isArray(responses) || responses.length === 0) return false;\n\n return responses.every((response) => {\n const code = (response as { body?: { code?: unknown } } | null)?.body?.code;\n return typeof code === 'string' && NONCE_ERROR_CODES.includes(code);\n });\n};\n\n/**\n * Setup response interceptor\n *\n * - Extracts and saves cart headers (nonce rotation)\n * - Logs responses in debug mode\n * - Calls optional onResponse hook\n * - Passes client instance to callbacks\n */\nexport const setupResponseInterceptor = (\n axiosInstance: AxiosInstance,\n config: WooCommerceConfig,\n client: WooCommerceClient\n): void => {\n axiosInstance.interceptors.response.use(\n async (response: AxiosResponse) => {\n // Extract and save cart headers (nonce rotation)\n if (isCartRoute(response.config.url)) {\n const nonce = response.headers['nonce'] || response.headers['Nonce'];\n const cartToken = response.headers['cart-token'] || response.headers['Cart-Token'];\n\n if (nonce || cartToken) {\n await config.cartHeaders.save({\n nonce: nonce || undefined,\n cartToken: cartToken || undefined,\n });\n\n if (config.debug) {\n debug(\n 'Saved updated cart headers:',\n response.config.url,\n 'nonce:',\n !!nonce,\n 'cartToken:',\n !!cartToken\n );\n }\n }\n }\n\n if (isBatchRoute(response.config.url) && isNonceRejectedBatch(response.data)) {\n throw new AxiosError(\n 'Batch rejected for a nonce error',\n AxiosError.ERR_BAD_REQUEST,\n response.config,\n response.request,\n { ...response, status: 401, data: { code: 'woocommerce_rest_missing_nonce' } }\n );\n }\n\n if (config.debug) {\n debug('Response:', response.config.url, response.status);\n }\n\n // Call optional onResponse hook\n if (config.onResponse) {\n return config.onResponse(response, client);\n }\n\n return response;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Cart session initialization utility\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport type { CartHeadersAdapter } from '../client/types';\nimport { debug } from '../logging/logger';\n\n/**\n * Initialize cart session by fetching cart and saving headers\n *\n * This is called when nonce errors occur to get a fresh nonce/cart-token\n *\n * @param client - Axios instance\n * @param cartHeaders - Cart headers adapter\n */\nexport const initializeCartSession = async (\n client: AxiosInstance,\n cartHeaders: CartHeadersAdapter\n): Promise<void> => {\n try {\n debug('session', 'Initializing cart session');\n\n // Make GET request to cart endpoint\n const response = await client.get('/wc/store/v1/cart');\n\n // Extract headers\n const nonce = response.headers['nonce'] || response.headers['Nonce'];\n const cartToken = response.headers['cart-token'] || response.headers['Cart-Token'];\n\n // Save headers\n if (nonce || cartToken) {\n await cartHeaders.save({\n nonce: nonce || undefined,\n cartToken: cartToken || undefined,\n });\n\n debug('session', 'Cart session initialized', {\n hasNonce: !!nonce,\n hasCartToken: !!cartToken,\n });\n }\n } catch (error) {\n debug('session', 'Failed to initialize cart session', error);\n throw error;\n }\n};\n","/**\n * Axios error interceptor for WooCommerce API\n */\n\nimport { isAxiosError, isCancel, type AxiosError, type AxiosInstance } from 'axios';\n\nimport type { WooCommerceClient, WooCommerceConfig } from '../../client/types';\nimport { WooCommerceApiError } from '../../errors/classes/WooCommerceApiError';\nimport { mapWooCommerceCode } from '../../errors/mapping';\nimport { debug, error as logError } from '../../logging/logger';\nimport { initializeCartSession } from '../../utils/initializeCartSession';\n\ninterface WooCommerceErrorData {\n code?: string;\n message?: string;\n data?: {\n status?: number;\n };\n}\n\n/**\n * Setup error interceptor\n *\n * - Transforms WooCommerce errors into WooCommerceApiError instances\n * - Calls optional onError hook\n * - Passes client instance to callbacks\n */\nexport const setupErrorInterceptor = (\n axiosInstance: AxiosInstance,\n config: WooCommerceConfig,\n client: WooCommerceClient\n): void => {\n axiosInstance.interceptors.response.use(\n (response) => response,\n async (axiosError: AxiosError<WooCommerceErrorData>) => {\n if (isCancel(axiosError)) {\n return Promise.reject(axiosError);\n }\n\n const status = axiosError.response?.status;\n const errorData = axiosError.response?.data;\n const isNetworkError = isAxiosError(axiosError) && !axiosError.response;\n\n // Extract WooCommerce error details\n const apiCode = errorData?.code || 'unknown_error';\n const wpMessage = errorData?.message || axiosError.message || 'Unknown error';\n\n // Transform WooCommerce API code to application-level code\n // e.g., \"woocommerce_rest_cart_empty\" → \"cart_empty\"\n const errorCode = isNetworkError ? 'network_error' : mapWooCommerceCode(apiCode);\n\n // Create WooCommerceError with full context\n const wcError = new WooCommerceApiError({\n message: wpMessage,\n statusCode: status,\n code: errorCode, // Transformed app-level code\n originalCode: apiCode, // Original WooCommerce API code\n url: axiosError.config?.url || '',\n method: axiosError.config?.method?.toUpperCase() || 'GET',\n requestBody: axiosError.config?.data,\n responseBody: errorData,\n data: errorData?.data as Record<string, unknown> | undefined,\n cause: axiosError,\n });\n\n if (config.debug) {\n debug('WooCommerce error:', apiCode, status, wpMessage);\n logError(wcError);\n }\n\n // Handle authentication errors (401/403)\n if (\n (status === 401 || status === 403) &&\n config.onAuthError &&\n isAxiosError(axiosError) &&\n !axiosError.config?._retry\n ) {\n if (config.debug) {\n debug('Auth error detected, calling onAuthError handler');\n }\n\n try {\n const shouldRetry = await config.onAuthError(wcError, client);\n\n if (shouldRetry) {\n if (config.debug) {\n debug('Retrying request after auth error');\n }\n\n // Mark as retry to prevent infinite loops\n axiosError.config!._retry = true;\n\n // Retry the request\n return axiosInstance.request(axiosError.config!);\n }\n } catch (authErrorHandlerError) {\n // If onAuthError handler throws, fall through to error reporting\n if (config.debug) {\n debug('onAuthError handler threw error', authErrorHandlerError);\n }\n }\n }\n\n // Call optional onError hook first (even for retryable errors)\n if (config.onError) {\n config.onError(wcError, client);\n }\n\n // Auto-retry nonce errors\n const isNonceError = errorCode === 'missing_nonce' || errorCode === 'invalid_nonce';\n if (isNonceError && isAxiosError(axiosError) && !axiosError.config?._retry) {\n if (config.debug) {\n debug('Nonce error detected, retrying with new session');\n }\n\n try {\n // Initialize new cart session\n await initializeCartSession(axiosInstance, config.cartHeaders);\n\n // Mark as retry to prevent infinite loops\n axiosError.config!._retry = true;\n\n // Retry the request\n return axiosInstance.request(axiosError.config!);\n } catch (_retryError) {\n // If retry fails, report and throw original error\n config.errorReporter?.report(wcError);\n return Promise.reject(wcError);\n }\n }\n\n // Report error to configured error reporter (Sentry, etc.)\n config.errorReporter?.report(wcError);\n\n return Promise.reject(wcError);\n }\n );\n};\n\n// Augment AxiosRequestConfig to include _retry flag\ndeclare module 'axios' {\n export interface AxiosRequestConfig {\n _retry?: boolean;\n }\n}\n","import { z } from 'zod';\n\n/**\n * Base address schema for WooCommerce addresses\n *\n * Used for both billing and shipping addresses in checkout\n */\nexport const addressSchema = z.object({\n /** First name */\n first_name: z.string().min(1, 'First name is required'),\n\n /** Last name */\n last_name: z.string().min(1, 'Last name is required'),\n\n /** Company name (optional) */\n company: z.string(),\n\n /** Address line 1 */\n address_1: z.string().min(1, 'Address is required'),\n\n /** Address line 2 (optional) */\n address_2: z.string(),\n\n /** City */\n city: z.string().min(1, 'City is required'),\n\n /** State/Province/Region */\n state: z.string(),\n\n /** Postal code */\n postcode: z.string().min(1, 'Postal code is required'),\n\n /** Country code (ISO 3166-1 alpha-2) */\n country: z.string(),\n\n /** Phone number */\n phone: z.string().min(1, 'Phone number is required'),\n});\n\n/**\n * Non-mandatory address schema for API responses\n *\n * Used for parsing cart shipping/billing addresses from API responses.\n * No validation constraints - accepts whatever the API returns.\n */\nexport const addressSchemaNonMandatory = z.object({\n /** First name */\n first_name: z.string(),\n\n /** Last name */\n last_name: z.string(),\n\n /** Company name (optional) */\n company: z.string(),\n\n /** Address line 1 */\n address_1: z.string(),\n\n /** Address line 2 (optional) */\n address_2: z.string(),\n\n /** City */\n city: z.string(),\n\n /** State/Province/Region */\n state: z.string(),\n\n /** Postal code */\n postcode: z.string(),\n\n /** Country code (ISO 3166-1 alpha-2) */\n country: z.string(),\n\n /** Phone number */\n phone: z.string(),\n});\n\n/**\n * Billing address schema\n *\n * Extends base address with email field (required for billing)\n */\nexport const billingAddressSchemaMandatory = addressSchema.extend({\n /** Email address (required for billing) */\n email: z.string().email('Valid email is required'),\n});\n\nexport const billingAddressSchemaNonMandatory = addressSchemaNonMandatory.extend({\n /** Email address (can be null for guest carts) */\n email: z.string().nullable(),\n});\n\n/**\n * Phone format accepted by the form schemas: an optional leading `+`, then\n * digits and common separators (space, dash, slash, parentheses).\n */\nconst phoneFormatRegex = /^[+\\d][\\d\\s\\-/()]{5,}$/;\n\n/**\n * Messages for the client-side form schemas. Pass translated strings to\n * localize validation errors; any omitted message falls back to English.\n */\nexport interface AddressFormMessages {\n required?: string;\n email?: string;\n postcode?: string;\n phone?: string;\n}\n\nconst defaultAddressFormMessages: Required<AddressFormMessages> = {\n required: 'This field is required',\n email: 'Valid email is required',\n postcode: 'Postal code is not valid',\n phone: 'Invalid phone number',\n};\n\n/**\n * Default postcode pattern (digits only). Pass a stricter, country-specific\n * pattern via `postcodePattern` to match a given locale (e.g. `/^\\d{5}$/`).\n */\nconst defaultPostcodePattern = /^\\d+$/;\n\nconst resolveAddressFormMessages = (\n messages: AddressFormMessages\n): Required<AddressFormMessages> => ({ ...defaultAddressFormMessages, ...messages });\n\nconst buildAddressFormShape = (m: Required<AddressFormMessages>, postcodePattern: RegExp) => ({\n first_name: z.string().trim().min(1, m.required),\n last_name: z.string().trim().min(1, m.required),\n company: z.string().trim(),\n address_1: z.string().trim().min(1, m.required),\n address_2: z.string().trim(),\n city: z.string().trim().min(1, m.required),\n postcode: z.string().trim().min(1, m.required).regex(postcodePattern, m.postcode),\n phone: z.string().trim().min(1, m.required).regex(phoneFormatRegex, m.phone),\n});\n\n/**\n * Build an address schema for client-side form validation.\n *\n * Unlike `addressSchema` (lenient, used to parse API responses), this trims\n * input, validates the postcode against `postcodePattern` and the phone\n * against `phoneFormatRegex`, and accepts translated messages. It covers the\n * user-editable fields only (no `state`/`country`).\n */\nexport const makeAddressFormSchema = (\n messages: AddressFormMessages = {},\n postcodePattern: RegExp = defaultPostcodePattern\n) => z.object(buildAddressFormShape(resolveAddressFormMessages(messages), postcodePattern));\n\n/**\n * Billing variant of `makeAddressFormSchema` — adds a required, validated email.\n */\nexport const makeBillingAddressFormSchema = (\n messages: AddressFormMessages = {},\n postcodePattern: RegExp = defaultPostcodePattern\n) => {\n const m = resolveAddressFormMessages(messages);\n\n return z.object({\n ...buildAddressFormShape(m, postcodePattern),\n email: z.string().trim().min(1, m.required).email(m.email),\n });\n};\n\n// Type exports\nexport type Address = z.infer<typeof addressSchema>;\nexport type BillingAddress = z.infer<typeof billingAddressSchemaMandatory>;\nexport type AddressNonOptional = z.infer<typeof addressSchemaNonMandatory>;\nexport type BillingAddressNonOptional = z.infer<typeof billingAddressSchemaNonMandatory>;\nexport type AddressFormValues = z.infer<ReturnType<typeof makeAddressFormSchema>>;\nexport type BillingAddressFormValues = z.infer<ReturnType<typeof makeBillingAddressFormSchema>>;\n","import { z } from 'zod';\n\n/**\n * WooCommerce money/currency formatting schema\n *\n * Contains currency information and formatting rules used throughout\n * WooCommerce responses for prices, totals, and monetary values.\n */\nexport const moneySchema = z.object({\n /** Currency code (e.g., 'USD', 'EUR', 'BAM') */\n currency_code: z.string(),\n\n /** Currency symbol (e.g., '$', '€', 'KM') */\n currency_symbol: z.string(),\n\n /** Number of decimal places (e.g., 2 for dollars/euros) */\n currency_minor_unit: z.number(),\n\n /** Decimal separator character (e.g., '.', ',') */\n currency_decimal_separator: z.string(),\n\n /** Thousands separator character (e.g., ',', '.') */\n currency_thousand_separator: z.string(),\n\n /** Currency symbol prefix (empty if symbol is suffix) */\n currency_prefix: z.string(),\n\n /** Currency symbol suffix (empty if symbol is prefix) */\n currency_suffix: z.string(),\n});\n\n// Type export\nexport type Money = z.infer<typeof moneySchema>;\n","import { z } from 'zod';\n\n/**\n * Schema for WooCommerce product image\n * Includes multiple image sizes and srcset for responsive images\n */\nexport const productImageSchema = z.object({\n /** Alternative text for the image */\n alt: z.string(),\n /** Image unique identifier */\n id: z.number(),\n /** Image filename */\n name: z.string(),\n /** Available image sizes in JSON format */\n sizes: z.string(),\n /** Full-size image URL */\n src: z.string().url(),\n /** Srcset attribute for responsive images */\n srcset: z.string(),\n /** Thumbnail image URL */\n thumbnail: z.string().url(),\n});\n\n/**\n * Schema for WooCommerce cart item image\n * Similar to product image but without URL validation on src/thumbnail\n */\nexport const cartItemImageSchema = z.object({\n /** Image ID */\n id: z.number(),\n /** Full image URL */\n src: z.string(),\n /** Thumbnail URL */\n thumbnail: z.string(),\n /** Responsive image srcset */\n srcset: z.string(),\n /** Responsive image sizes */\n sizes: z.string(),\n /** Image name */\n name: z.string(),\n /** Image alt text */\n alt: z.string(),\n});\n\n/**\n * Product image type\n */\nexport type ProductImage = z.infer<typeof productImageSchema>;\n\n/**\n * Cart item image type\n */\nexport type CartItemImage = z.infer<typeof cartItemImageSchema>;\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\n\n/**\n * Product prices schema for cart items\n *\n * Contains current price, regular price, sale price, and price range\n * with currency formatting information.\n */\nexport const pricesSchema = z\n .object({\n /** Current active price (sale price if on sale, otherwise regular) */\n price: z.string(),\n\n /** Regular price (before any discounts) */\n regular_price: z.string(),\n\n /** Sale price (empty string if not on sale) */\n sale_price: z.string(),\n\n /** Price range for variable products (null for simple products) */\n price_range: z\n .object({\n min_amount: z.string(),\n max_amount: z.string(),\n })\n .nullable(),\n\n /** Raw price data without formatting */\n raw_prices: z\n .object({\n /** Decimal precision */\n precision: z.number(),\n /** Raw price value */\n price: z.string(),\n /** Raw regular price value */\n regular_price: z.string(),\n /** Raw sale price value */\n sale_price: z.string(),\n })\n .optional(),\n })\n .merge(moneySchema);\n\n// Type export\nexport type Prices = z.infer<typeof pricesSchema>;\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\nimport { cartItemImageSchema } from './image.schema';\nimport { pricesSchema } from './prices.schema';\n\n/**\n * Cart item totals schema\n *\n * Contains line item totals with tax information and currency formatting.\n */\nexport const itemTotalsSchema = z\n .object({\n /** Subtotal before taxes */\n line_subtotal: z.string(),\n\n /** Tax amount on subtotal */\n line_subtotal_tax: z.string(),\n\n /** Total after discounts, before taxes */\n line_total: z.string(),\n\n /** Tax amount on total */\n line_total_tax: z.string(),\n })\n .merge(moneySchema);\n\n/**\n * Cart item schema\n *\n * Represents a single product/variation in the shopping cart.\n * Includes product details, quantity, pricing, and totals.\n *\n * CRITICAL: Use `key` field (not `id`) to identify cart items for updates/removals.\n * The `key` is a unique identifier for this specific cart item (item_key in some contexts).\n */\nexport const cartItemSchema = z.object({\n /** Unique cart item key (use this for update/remove operations) */\n key: z.string(),\n\n /** Product ID */\n id: z.number(),\n\n /** Quantity of this item in cart */\n quantity: z.number(),\n\n /** Quantity limits for this product */\n quantity_limits: z.object({\n /** Minimum quantity allowed */\n minimum: z.number(),\n /** Maximum quantity allowed */\n maximum: z.number(),\n /** Quantity must be multiple of this value */\n multiple_of: z.number(),\n /** Whether quantity can be changed */\n editable: z.boolean(),\n }),\n\n /** Product name */\n name: z.string(),\n\n /** Short product description */\n short_description: z.string(),\n\n /** Full product description */\n description: z.string(),\n\n /** Product SKU */\n sku: z.string(),\n\n /** Remaining stock count if low (null if not low or unlimited) */\n low_stock_remaining: z.number().nullable(),\n\n /** Whether backorders are allowed */\n backorders_allowed: z.boolean(),\n\n /** Whether to show backorder badge */\n show_backorder_badge: z.boolean(),\n\n /** Whether product can only be purchased individually */\n sold_individually: z.boolean(),\n\n /** Product permalink URL */\n permalink: z.string(),\n\n /** Product images */\n images: z.array(cartItemImageSchema),\n\n /** Variation attributes (for variable products) */\n variation: z.array(\n z.object({\n /** Attribute name (e.g., 'Color', 'Size') */\n attribute: z.string(),\n /** Selected value (e.g., 'Red', 'Large') */\n value: z.string(),\n })\n ),\n\n /** Additional item data/metadata */\n item_data: z.array(\n z.object({\n key: z.string(),\n value: z.string(),\n })\n ),\n\n /** Product pricing information */\n prices: pricesSchema,\n\n /** Line item totals */\n totals: itemTotalsSchema,\n\n /** Catalog visibility setting */\n catalog_visibility: z.string(),\n\n /** Product type */\n type: z.enum(['simple', 'variable', 'grouped', 'external']),\n\n /** Extension data from plugins */\n extensions: z.record(z.string(), z.unknown()),\n});\n\n// Type exports\nexport type CartItem = z.infer<typeof cartItemSchema>;\nexport type ItemTotals = z.infer<typeof itemTotalsSchema>;\nexport type { CartItemImage } from './image.schema';\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\n\n/**\n * Cart totals schema\n *\n * Contains all cart totals including items, fees, discounts, shipping, and taxes.\n * All monetary values are strings to preserve precision.\n */\nexport const cartTotalsSchema = z\n .object({\n /** Total of all cart items (before discounts and taxes) */\n total_items: z.string(),\n\n /** Tax on cart items */\n total_items_tax: z.string(),\n\n /** Total fees */\n total_fees: z.string(),\n\n /** Tax on fees */\n total_fees_tax: z.string(),\n\n /** Total discount amount from coupons */\n total_discount: z.string(),\n\n /** Tax on discounts */\n total_discount_tax: z.string(),\n\n /** Shipping cost (null if not calculated yet) */\n total_shipping: z.string().nullable(),\n\n /** Shipping tax (null if not calculated yet) */\n total_shipping_tax: z.string().nullable(),\n\n /** Final total price (includes all taxes and fees) */\n total_price: z.string(),\n\n /** Total tax amount */\n total_tax: z.string(),\n\n /** Tax breakdown by rate */\n tax_lines: z.array(\n z.object({\n /** Tax rate name */\n name: z.string(),\n /** Tax amount */\n price: z.string(),\n /** Tax rate percentage */\n rate: z.string(),\n })\n ),\n })\n .merge(moneySchema);\n\n// Type export\nexport type CartTotals = z.infer<typeof cartTotalsSchema>;\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\n\n/**\n * Cart coupon schema\n *\n * Represents an applied coupon in the cart with discount totals\n * and currency formatting information.\n */\nexport const cartCouponSchema = z.object({\n /** Coupon code */\n code: z.string(),\n\n /** Discount totals for this coupon */\n totals: z\n .object({\n /** Total discount amount (before tax) */\n total_discount: z.string(),\n\n /** Tax amount on discount */\n total_discount_tax: z.string(),\n })\n .merge(moneySchema),\n});\n\n// Type export\nexport type CartCoupon = z.infer<typeof cartCouponSchema>;\n","import { z } from 'zod';\n\n/**\n * Shipping rate schema\n *\n * Represents a single shipping method option with pricing and metadata.\n */\nexport const shippingRateSchema = z.object({\n /** Unique rate identifier (format: instance_id:method_id) */\n rate_id: z.string(),\n\n /** Shipping method name */\n name: z.string(),\n\n /** Shipping method description */\n description: z.string(),\n\n /** Estimated delivery time */\n delivery_time: z.string(),\n\n /** Shipping cost */\n price: z.string(),\n\n /** Shipping instance ID */\n instance_id: z.number(),\n\n /** Shipping method ID */\n method_id: z.string(),\n\n /** Additional metadata for this shipping method */\n meta_data: z.array(\n z.object({\n key: z.string(),\n value: z.string(),\n })\n ),\n\n /** Whether this rate is currently selected */\n selected: z.boolean(),\n\n /** Currency code for the price */\n currency_code: z.string(),\n\n /** Currency symbol for the price */\n currency_symbol: z.string(),\n});\n\n/**\n * Shipping package schema\n *\n * A shipping package groups cart items that ship together,\n * with available shipping methods/rates for that package.\n *\n * WooCommerce can split cart into multiple packages based on\n * shipping classes, vendors, or custom logic.\n */\nexport const shippingPackageSchema = z.object({\n /** Package identifier (0-indexed) */\n package_id: z.number(),\n\n /** Package name/label */\n name: z.string(),\n\n /** Shipping destination address */\n destination: z.object({\n address_1: z.string(),\n address_2: z.string().optional(),\n city: z.string(),\n state: z.string(),\n postcode: z.string(),\n country: z.string(),\n }),\n\n /** Items included in this package */\n items: z.array(\n z.object({\n /** Cart item key */\n key: z.string(),\n /** Product name */\n name: z.string(),\n /** Quantity in package */\n quantity: z.number(),\n })\n ),\n\n /** Available shipping rates for this package */\n shipping_rates: z.array(shippingRateSchema),\n});\n\n// Type exports\nexport type ShippingRate = z.infer<typeof shippingRateSchema>;\nexport type ShippingPackage = z.infer<typeof shippingPackageSchema>;\n","/**\n * Cart schemas\n */\n\nimport { z } from 'zod';\n\nimport {\n addressSchemaNonMandatory,\n addressSchema as apiAddressSchema,\n billingAddressSchemaMandatory as apiBillingAddressSchema,\n billingAddressSchemaNonMandatory,\n} from '../../common/address.schema';\nimport { cartItemSchema } from './cart-item.schema';\nimport { cartTotalsSchema } from './cart-totals.schema';\nimport { cartCouponSchema } from './coupon.schema';\nimport { shippingPackageSchema } from './shipping.schema';\n\n/**\n * WooCommerce cart schema\n */\nexport const cartSchema = z.object({\n items: z.array(cartItemSchema),\n items_count: z.number(),\n items_weight: z.number(),\n needs_payment: z.boolean(),\n needs_shipping: z.boolean(),\n payment_methods: z.array(z.enum(['cod', 'monri'])),\n payment_requirements: z.array(z.string()),\n has_calculated_shipping: z.boolean(),\n shipping_address: addressSchemaNonMandatory,\n billing_address: billingAddressSchemaNonMandatory,\n shipping_rates: z.array(shippingPackageSchema),\n coupons: z.array(cartCouponSchema),\n totals: cartTotalsSchema,\n errors: z.array(\n z.object({\n code: z.string(),\n message: z.string(),\n })\n ),\n extensions: z.record(z.string(), z.unknown()).optional(),\n cross_sells: z.array(z.unknown()),\n fees: z.array(z.unknown()),\n});\n\n// Input schemas\nexport const addToCartInputSchema = z.object({\n id: z.number(),\n quantity: z.number().int().positive(),\n variation: z\n .array(\n z.object({\n attribute: z.string(),\n value: z.string(),\n })\n )\n .optional(),\n});\n\nexport const addItemsInputSchema = z.object({\n items: z.array(addToCartInputSchema).min(1),\n});\n\nexport const batchResponseSchema = z.object({\n responses: z.array(\n z.object({\n status: z.number(),\n body: z.unknown(),\n headers: z.record(z.string(), z.unknown()).optional(),\n })\n ),\n});\n\nexport const updateCartItemInputSchema = z.object({\n key: z.string(),\n quantity: z.number().int().positive(),\n});\n\nexport const removeCartItemInputSchema = z.object({\n key: z.string(),\n});\n\nexport const couponInputSchema = z.object({\n code: z.string().min(1),\n});\n\nexport const updateCustomerInputSchema = z\n .object({\n billing_address: apiBillingAddressSchema.partial(),\n shipping_address: apiAddressSchema.partial(),\n })\n .partial();\n\nexport const selectShippingRateInputSchema = z.object({\n package_id: z.union([z.number(), z.string()]).default(0),\n rate_id: z.string(),\n});\n\n// Type exports\nexport type Cart = z.infer<typeof cartSchema>;\nexport type CartItem = z.infer<typeof cartItemSchema>;\nexport type AddToCartInput = z.infer<typeof addToCartInputSchema>;\nexport type AddItemsInput = z.infer<typeof addItemsInputSchema>;\nexport type BatchResponse = z.infer<typeof batchResponseSchema>;\nexport type UpdateCartItemInput = z.infer<typeof updateCartItemInputSchema>;\nexport type RemoveCartItemInput = z.infer<typeof removeCartItemInputSchema>;\nexport type CouponInput = z.infer<typeof couponInputSchema>;\nexport type UpdateCustomerInput = z.infer<typeof updateCustomerInputSchema>;\nexport type SelectShippingRateInput = z.infer<typeof selectShippingRateInputSchema>;\n","import { z } from 'zod';\n\n/**\n * Product image schema for order items\n *\n * Contains image URLs and metadata for products in orders\n */\nexport const orderItemImageSchema = z.object({\n /** Image ID */\n id: z.number(),\n\n /** Full image URL */\n src: z.string().url(),\n\n /** Thumbnail URL */\n thumbnail: z.string().url(),\n\n /** Responsive image srcset */\n srcset: z.string(),\n\n /** Responsive image sizes attribute */\n sizes: z.string(),\n\n /** Image name */\n name: z.string(),\n\n /** Image alt text */\n alt: z.string(),\n});\n\n/**\n * Price information for order items\n *\n * Contains formatted and raw prices with currency information\n */\nexport const orderItemPricesSchema = z.object({\n /** Formatted price (current price) */\n price: z.string(),\n\n /** Formatted regular price */\n regular_price: z.string(),\n\n /** Formatted sale price */\n sale_price: z.string(),\n\n /** Price range (null for simple products) */\n price_range: z.null(),\n\n /** Currency code (e.g., 'USD', 'EUR') */\n currency_code: z.string(),\n\n /** Currency symbol (e.g., '$', '€') */\n currency_symbol: z.string(),\n\n /** Number of decimal places for currency */\n currency_minor_unit: z.number(),\n\n /** Decimal separator (e.g., '.', ',') */\n currency_decimal_separator: z.string(),\n\n /** Thousand separator (e.g., ',', '.') */\n currency_thousand_separator: z.string(),\n\n /** Currency prefix (e.g., '$') */\n currency_prefix: z.string(),\n\n /** Currency suffix (e.g., 'USD') */\n currency_suffix: z.string(),\n\n /** Raw price values for calculations */\n raw_prices: z.object({\n /** Precision for price calculations */\n precision: z.number(),\n\n /** Raw price (in minor units) */\n price: z.string(),\n\n /** Raw regular price (in minor units) */\n regular_price: z.string(),\n\n /** Raw sale price (in minor units) */\n sale_price: z.string(),\n }),\n});\n\n/**\n * Totals for individual order item\n *\n * Contains subtotal and total with tax breakdown\n */\nexport const orderItemTotalsSchema = z.object({\n /** Line subtotal (before discounts) */\n line_subtotal: z.string(),\n\n /** Line subtotal tax */\n line_subtotal_tax: z.string(),\n\n /** Line total (after discounts) */\n line_total: z.string(),\n\n /** Line total tax */\n line_total_tax: z.string(),\n\n /** Currency code */\n currency_code: z.string(),\n\n /** Currency symbol */\n currency_symbol: z.string(),\n\n /** Currency minor unit */\n currency_minor_unit: z.number(),\n\n /** Decimal separator */\n currency_decimal_separator: z.string(),\n\n /** Thousand separator */\n currency_thousand_separator: z.string(),\n\n /** Currency prefix */\n currency_prefix: z.string(),\n\n /** Currency suffix */\n currency_suffix: z.string(),\n});\n\n/**\n * Quantity limits for order items\n *\n * Defines minimum, maximum, and step values for product quantity\n */\nexport const quantityLimitsSchema = z.object({\n /** Minimum quantity allowed */\n minimum: z.number(),\n\n /** Maximum quantity allowed */\n maximum: z.number(),\n\n /** Quantity must be multiple of this value */\n multiple_of: z.number(),\n\n /** Whether quantity is editable */\n editable: z.boolean(),\n});\n\n/**\n * Order item schema\n *\n * Represents a product/line item in an order with all metadata\n */\nexport const orderItemSchema = z.object({\n /** Unique cart/order item key */\n key: z.string(),\n\n /** Product ID */\n id: z.number(),\n\n /** Quantity ordered */\n quantity: z.number(),\n\n /** Quantity limits for this product */\n quantity_limits: quantityLimitsSchema,\n\n /** Product name */\n name: z.string(),\n\n /** Short description */\n short_description: z.string(),\n\n /** Full description */\n description: z.string(),\n\n /** Product SKU */\n sku: z.string(),\n\n /** Low stock warning (null if not low) */\n low_stock_remaining: z.null(),\n\n /** Whether backorders are allowed */\n backorders_allowed: z.boolean(),\n\n /** Whether to show backorder badge */\n show_backorder_badge: z.boolean(),\n\n /** Whether product can only be purchased individually */\n sold_individually: z.boolean(),\n\n /** Product permalink URL */\n permalink: z.string().url(),\n\n /** Product images */\n images: z.array(orderItemImageSchema),\n\n /** Variation attributes (empty for simple products) */\n variation: z.array(z.unknown()),\n\n /** Custom item data/metadata */\n item_data: z.array(z.unknown()),\n\n /** Price information */\n prices: orderItemPricesSchema,\n\n /** Totals for this line item */\n totals: orderItemTotalsSchema,\n\n /** Catalog visibility setting */\n catalog_visibility: z.string(),\n});\n\n// Type exports\nexport type OrderItemImage = z.infer<typeof orderItemImageSchema>;\nexport type OrderItemPrices = z.infer<typeof orderItemPricesSchema>;\nexport type OrderItemTotals = z.infer<typeof orderItemTotalsSchema>;\nexport type QuantityLimits = z.infer<typeof quantityLimitsSchema>;\nexport type OrderItem = z.infer<typeof orderItemSchema>;\n","import { z } from 'zod';\n\n/**\n * Order totals schema\n *\n * Complete breakdown of order totals including subtotal, taxes, shipping, fees, and discounts\n */\nexport const orderTotalsSchema = z.object({\n /** Subtotal (before discounts and fees) */\n subtotal: z.string(),\n\n /** Total discount amount */\n total_discount: z.string(),\n\n /** Total shipping cost */\n total_shipping: z.string(),\n\n /** Total fees */\n total_fees: z.string(),\n\n /** Total tax */\n total_tax: z.string(),\n\n /** Total refund amount */\n total_refund: z.string(),\n\n /** Final total price */\n total_price: z.string(),\n\n /** Total items cost (subtotal after item-level discounts) */\n total_items: z.string(),\n\n /** Tax on items */\n total_items_tax: z.string(),\n\n /** Tax on fees */\n total_fees_tax: z.string(),\n\n /** Tax on discounts */\n total_discount_tax: z.string(),\n\n /** Tax on shipping */\n total_shipping_tax: z.string(),\n\n /** Tax line items breakdown */\n tax_lines: z.array(z.unknown()),\n\n /** Currency code (e.g., 'USD', 'EUR', 'BAM') */\n currency_code: z.string(),\n\n /** Currency symbol (e.g., '$', '€', 'KM') */\n currency_symbol: z.string(),\n\n /** Number of decimal places for currency */\n currency_minor_unit: z.number(),\n\n /** Decimal separator (e.g., '.', ',') */\n currency_decimal_separator: z.string(),\n\n /** Thousand separator (e.g., ',', '.') */\n currency_thousand_separator: z.string(),\n\n /** Currency prefix (e.g., '$') */\n currency_prefix: z.string(),\n\n /** Currency suffix (e.g., 'USD') */\n currency_suffix: z.string(),\n});\n\n// Type export\nexport type OrderTotals = z.infer<typeof orderTotalsSchema>;\n","import { z } from 'zod';\n\nimport { addressSchema, billingAddressSchemaMandatory } from '../../common/address.schema';\nimport { orderItemSchema } from './order-item.schema';\nimport { orderTotalsSchema } from './order-totals.schema';\n\n/**\n * WooCommerce order status enum\n *\n * Represents the current state of an order in the WooCommerce system\n */\nexport const orderStatusEnum = z.enum([\n 'pending', // Order received, awaiting payment\n 'processing', // Payment received, order is being processed\n 'on-hold', // Order on hold, awaiting confirmation\n 'completed', // Order fulfilled and complete\n 'cancelled', // Order cancelled by customer or admin\n 'refunded', // Order refunded\n 'failed', // Payment failed or order declined\n]);\n\n/**\n * Store API order schema\n *\n * Complete order structure from WooCommerce Store API\n * This is the response from checkout and order retrieval endpoints\n */\nexport const storeApiOrderSchema = z.object({\n /** Order ID */\n id: z.number(),\n\n /** Order status */\n status: orderStatusEnum,\n\n /** Order line items (products purchased) */\n items: z.array(orderItemSchema),\n\n /** Applied coupons */\n coupons: z.array(z.unknown()),\n\n /** Order fees */\n fees: z.array(z.unknown()),\n\n /** Order totals breakdown */\n totals: orderTotalsSchema,\n\n /** Shipping address */\n shipping_address: addressSchema,\n\n /** Billing address (includes email) */\n billing_address: billingAddressSchemaMandatory,\n\n /** Whether order still needs payment */\n needs_payment: z.boolean(),\n\n /** Whether order needs shipping */\n needs_shipping: z.boolean(),\n\n /** Payment method requirements */\n payment_requirements: z.array(z.string()),\n\n /** Order errors (if any) */\n errors: z.array(z.unknown()),\n\n /** Payment method (optional - returned from checkout) */\n payment_method: z.string().optional(),\n\n /** Payment method title (optional - returned from checkout) */\n payment_method_title: z.string().optional(),\n});\n\n// Type exports\nexport type OrderStatus = z.infer<typeof orderStatusEnum>;\nexport type StoreApiOrder = z.infer<typeof storeApiOrderSchema>;\n","/**\n * Checkout schemas\n */\n\nimport { z } from 'zod';\n\nimport {\n addressSchema,\n addressSchemaNonMandatory,\n billingAddressSchemaMandatory,\n billingAddressSchemaNonMandatory,\n} from '../../common/address.schema';\n\n/**\n * Checkout response schema (from API)\n */\nexport const checkoutSchema = z.object({\n order_id: z.number(),\n status: z.string(),\n order_key: z.string(),\n customer_note: z.string(),\n customer_id: z.number(),\n billing_address: billingAddressSchemaNonMandatory,\n shipping_address: addressSchemaNonMandatory,\n payment_method: z.string(),\n payment_result: z.object({\n payment_status: z.string(),\n payment_details: z.array(z.unknown()),\n redirect_url: z.string(),\n }),\n});\n\n/**\n * Checkout input schema (for submitting checkout)\n */\nexport const checkoutInputSchema = z.object({\n payment_method: z.string(),\n payment_data: z\n .array(\n z.object({\n key: z.string(),\n value: z.union([z.string(), z.boolean()]),\n })\n )\n .optional(),\n billing_address: billingAddressSchemaMandatory.optional(),\n shipping_address: addressSchema.optional(),\n customer_note: z.string().optional(),\n create_account: z.boolean().optional(),\n extensions: z.record(z.string(), z.unknown()).optional(),\n});\n\n// Type exports\nexport type Checkout = z.infer<typeof checkoutSchema>;\nexport type CheckoutInput = z.infer<typeof checkoutInputSchema>;\n","import { z } from 'zod';\n\n/**\n * Schema for WooCommerce add to cart configuration\n * Defines quantity restrictions and add to cart button properties\n */\nexport const addToCartSchema = z.object({\n /** Description for add to cart action */\n description: z.string(),\n /** Maximum quantity that can be added */\n maximum: z.number(),\n /** Minimum quantity that can be added */\n minimum: z.number(),\n /** Quantity must be a multiple of this number */\n multiple_of: z.number(),\n /** Text for add to cart button */\n text: z.string(),\n /** URL for add to cart action */\n url: z.string(),\n});\n\n/**\n * Add to cart configuration type\n */\nexport type AddToCart = z.infer<typeof addToCartSchema>;\n","import { z } from 'zod';\n\nimport { productImageSchema } from './image.schema';\n\n/**\n * Schema for embedded category in products\n * WooCommerce Store API returns simplified categories when nested in products\n */\nexport const embeddedCategorySchema = z.object({\n /** Category unique identifier */\n id: z.number(),\n /** Category display name */\n name: z.string(),\n /** URL-friendly category identifier */\n slug: z.string(),\n /** Link to category page */\n link: z.string(),\n /** Parent category ID (0 for root categories) - optional in embedded */\n parent: z.number().optional(),\n /** Category description - optional in embedded */\n description: z.string().optional(),\n /** Display type - optional in embedded */\n display: z.string().optional(),\n /** Category image - optional in embedded */\n image: productImageSchema.nullable().optional(),\n /** Menu order for sorting - optional in embedded */\n menu_order: z.number().optional(),\n /** Number of products in this category - optional in embedded */\n count: z.number().optional(),\n});\n\n/**\n * Schema for WooCommerce product category\n * Represents a product category with full information from the Store API\n * Used when fetching from /products/categories endpoint\n */\nexport const productCategorySchema = z.object({\n /** Category unique identifier */\n id: z.number(),\n /** Category display name */\n name: z.string(),\n /** URL-friendly category identifier */\n slug: z.string(),\n /** Parent category ID (0 for root categories) */\n parent: z.number(),\n /** Category description */\n description: z.string(),\n /** Category image */\n image: productImageSchema.nullable(),\n /** Menu order for sorting */\n menu_order: z.number().optional(),\n /** Number of products in this category */\n count: z.number(),\n});\n\n/**\n * Embedded category type (simplified, used in products)\n */\nexport type EmbeddedCategory = z.infer<typeof embeddedCategorySchema>;\n\n/**\n * Product category type (full, from categories endpoint)\n */\nexport type ProductCategory = z.infer<typeof productCategorySchema>;\n","/**\n * Product schemas\n */\n\nimport { z } from 'zod';\n\nimport { addToCartSchema } from './add-to-cart.schema';\nimport { embeddedCategorySchema, productCategorySchema } from './category.schema';\nimport { productImageSchema } from './image.schema';\nimport { pricesSchema as productPricesSchema } from './prices.schema';\nimport { storeProductsSearchParamsSchema as searchParamsSchema } from './search-params.schema';\n\n/**\n * Schema for WooCommerce product\n * Note: Categories embedded in products have simplified data (embeddedCategorySchema)\n */\nexport const productSchema = z.object({\n id: z.number(),\n name: z.string(),\n slug: z.string(),\n type: z.string(),\n variation: z.string(),\n permalink: z.string().url(),\n sku: z.string(),\n short_description: z.string(),\n description: z.string(),\n is_purchasable: z.boolean(),\n is_in_stock: z.boolean(),\n is_on_backorder: z.boolean(),\n low_stock_remaining: z.number().nullable(),\n sold_individually: z.boolean(),\n add_to_cart: addToCartSchema,\n has_options: z.boolean(),\n on_sale: z.boolean(),\n parent: z.number(),\n attributes: z.array(z.unknown()),\n categories: z.array(embeddedCategorySchema),\n tags: z.array(z.unknown()),\n images: z.array(productImageSchema),\n variations: z.array(z.unknown()),\n price_html: z.string(),\n prices: productPricesSchema,\n average_rating: z.string(),\n review_count: z.number(),\n extensions: z.record(z.string(), z.unknown()),\n});\n\n// Type exports\nexport type Product = z.infer<typeof productSchema>;\nexport type ProductCategory = z.infer<typeof productCategorySchema>;\nexport type EmbeddedCategory = z.infer<typeof embeddedCategorySchema>;\nexport type ProductImage = z.infer<typeof productImageSchema>;\nexport type ProductParams = z.infer<typeof searchParamsSchema>;\n\n// Re-export schemas\nexport { embeddedCategorySchema, productCategorySchema, productImageSchema, searchParamsSchema };\n","import { z } from 'zod';\n\n/**\n * Order attribution schema\n *\n * WooCommerce order attribution data passed via the Store API checkout\n * extensions field under the 'woocommerce/order-attribution' namespace.\n *\n * This tells WooCommerce where the order originated from (e.g., mobile app,\n * web, referral) and is stored as order meta:\n * - _wc_order_attribution_source_type\n * - _wc_order_attribution_utm_source\n * - _wc_order_attribution_device_type\n *\n * @see https://developer.woocommerce.com/docs/order-attribution-tracking/\n */\nexport const orderAttributionSchema = z.object({\n /** Attribution source type (e.g., 'mobile_app', 'organic', 'referral') */\n source_type: z.string(),\n\n /** UTM source identifier (e.g., 'moja-apoteka-app', 'google') */\n utm_source: z.string(),\n\n /** Device type (e.g., 'mobile', 'desktop', 'tablet') */\n device_type: z.string(),\n});\n\nexport type OrderAttribution = z.infer<typeof orderAttributionSchema>;\n\n/**\n * WooCommerce Store API checkout extensions namespace for order attribution\n */\nexport const ORDER_ATTRIBUTION_NAMESPACE = 'woocommerce/order-attribution' as const;\n","/**\n * Cart API\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport type { CartAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiData, handleApiResponse, type ResponseOptions } from '../http';\nimport {\n batchResponseSchema,\n cartSchema,\n type BatchResponse,\n} from '@atomic-solutions/schemas/woocommerce/store-api';\n\nconst BATCH_MAX_REQUESTS = 25;\n\nconst chunk = <T>(list: T[], size: number): T[][] =>\n Array.from({ length: Math.ceil(list.length / size) }, (_, index) =>\n list.slice(index * size, index * size + size)\n );\n\nconst isAccepted = (status: number): boolean => status >= 200 && status < 300;\n\nconst bodyError = (body: unknown): { code?: string; message?: string } => {\n const data = body as { code?: unknown; message?: unknown } | null | undefined;\n\n return {\n code: typeof data?.code === 'string' ? data.code : undefined,\n message: typeof data?.message === 'string' ? data.message : undefined,\n };\n};\n\nexport const createCartAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions\n): CartAPI => ({\n get: async () => {\n const response = await client.get(endpoints.cart);\n return handleApiResponse(response, cartSchema, options);\n },\n\n addItem: async (input) => {\n const response = await client.post(endpoints.addItem, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n addItems: async ({ items }) => {\n const responses: BatchResponse['responses'] = [];\n let chunkFailed = false;\n\n for (const batch of chunk(items, BATCH_MAX_REQUESTS)) {\n try {\n const response = await client.post(endpoints.batch, {\n requests: batch.map((item) => ({\n method: 'POST' as const,\n path: endpoints.addItem,\n body: item,\n })),\n });\n\n responses.push(...handleApiResponse(response, batchResponseSchema, options).responses);\n } catch (error) {\n if (responses.length === 0) throw error;\n\n chunkFailed = true;\n break;\n }\n }\n\n const results = items.map((item, index) => {\n const entry = responses[index];\n const { code, message } = bodyError(entry?.body);\n\n return {\n item,\n status: entry?.status ?? 500,\n ...(code ? { code } : {}),\n ...(message ? { message } : {}),\n };\n });\n\n const lastAccepted = [...responses].reverse().find((entry) => isAccepted(entry.status));\n const batchCart = lastAccepted\n ? handleApiData(lastAccepted.body, cartSchema, options, endpoints.batch)\n : undefined;\n\n let cart = chunkFailed ? undefined : batchCart;\n\n if (!cart) {\n try {\n cart = handleApiResponse(await client.get(endpoints.cart), cartSchema, options);\n } catch (error) {\n if (!batchCart) throw error;\n\n cart = batchCart;\n }\n }\n\n return { cart, results };\n },\n\n updateItem: async (input) => {\n const response = await client.post(endpoints.updateItem, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n removeItem: async (input) => {\n const response = await client.post(endpoints.removeItem, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n applyCoupon: async (input) => {\n const response = await client.post(endpoints.applyCoupon, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n removeCoupon: async (input) => {\n const response = await client.post(endpoints.removeCoupon, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n updateCustomer: async (input) => {\n const response = await client.post(endpoints.updateCustomer, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n selectShippingRate: async (input) => {\n const response = await client.post(endpoints.selectShippingRate, input);\n return handleApiResponse(response, cartSchema, options);\n },\n});\n","/**\n * Checkout API\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport type { OrderAttribution } from '@atomic-solutions/schemas/woocommerce/store-api';\nimport { ORDER_ATTRIBUTION_NAMESPACE } from '@atomic-solutions/schemas/woocommerce/store-api';\n\nimport type { CheckoutAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport { checkoutSchema } from '@atomic-solutions/schemas/woocommerce/store-api';\n\nexport const createCheckoutAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions,\n orderAttribution?: OrderAttribution\n): CheckoutAPI => ({\n get: async () => {\n const response = await client.get(endpoints.checkout);\n return handleApiResponse(response, checkoutSchema, options);\n },\n\n process: async (input) => {\n const body = orderAttribution\n ? {\n ...input,\n extensions: {\n [ORDER_ATTRIBUTION_NAMESPACE]: orderAttribution,\n ...input.extensions,\n },\n }\n : input;\n\n const response = await client.post(endpoints.checkout, body);\n return handleApiResponse(response, checkoutSchema, options);\n },\n});\n","/**\n * Orders API\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { storeApiOrderSchema } from '@atomic-solutions/schemas/woocommerce/store-api';\n\nimport type { GetOrderInput, OrdersAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\n\nexport const createOrdersAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions\n): OrdersAPI => ({\n /**\n * Get a single order by ID\n * Uses Store API - supports guest lookup with billing_email + key\n */\n get: async (input: GetOrderInput) => {\n const { id, billing_email, key } = input;\n\n const params = billing_email && key ? { billing_email, key } : undefined;\n\n const response = await client.get(`${endpoints.order}/${id}`, { params });\n return handleApiResponse(response, storeApiOrderSchema, options);\n },\n});\n","/**\n * Products API\n */\n\nimport type { AxiosInstance } from 'axios';\nimport { z } from 'zod';\n\nimport type { ProductsAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiResponse, handlePaginatedApiResponse, type ResponseOptions } from '../http';\nimport {\n productCategorySchema,\n productSchema,\n} from '@atomic-solutions/schemas/woocommerce/store-api';\n\nexport const createProductsAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions\n): ProductsAPI => ({\n list: async (params) => {\n const response = await client.get(endpoints.products, { params });\n return handlePaginatedApiResponse(response, z.array(productSchema), params, options);\n },\n\n get: async (id) => {\n const response = await client.get(`${endpoints.products}/${id}`);\n return handleApiResponse(response, productSchema, options);\n },\n\n categories: async () => {\n const response = await client.get(endpoints.categories);\n return handleApiResponse(response, z.array(productCategorySchema), options);\n },\n});\n","/**\n * WooCommerce Store API endpoints\n */\n\nimport type { StoreApiVersion } from '../client/types';\n\n/**\n * Create endpoints based on Store API version\n *\n * @param version - 'v1' for versioned endpoints, 'legacy' for non-versioned\n * @returns Endpoint paths object\n */\nexport const createEndpoints = (version: StoreApiVersion = 'legacy') => {\n const prefix = version === 'v1' ? '/wc/store/v1' : '/wc/store';\n\n return {\n // Products\n products: `${prefix}/products`,\n categories: `${prefix}/products/categories`,\n\n // Cart\n cart: `${prefix}/cart`,\n addItem: `${prefix}/cart/add-item`,\n updateItem: `${prefix}/cart/update-item`,\n removeItem: `${prefix}/cart/remove-item`,\n applyCoupon: `${prefix}/cart/apply-coupon`,\n removeCoupon: `${prefix}/cart/remove-coupon`,\n updateCustomer: `${prefix}/cart/update-customer`,\n selectShippingRate: `${prefix}/cart/select-shipping-rate`,\n\n // Batch\n batch: `${prefix}/batch`,\n\n // Checkout\n checkout: `${prefix}/checkout`,\n\n // Orders\n order: `${prefix}/order`,\n } as const;\n};\n\n/** Endpoint paths type */\nexport type EndpointPaths = ReturnType<typeof createEndpoints>;\n\n/**\n * Default endpoints (legacy, non-versioned)\n * Kept for backwards compatibility - use createEndpoints(version) for new code\n */\nexport const Endpoints = createEndpoints('legacy');\n","/**\n * WooCommerce API client factory\n *\n * Creates a configured WooCommerce client with:\n * - Automatic nonce/cart-token injection for cart operations\n * - JWT authentication for user operations\n * - Response validation and nonce updates\n * - Error handling with WooCommerce-specific error codes\n */\n\nimport axios from 'axios';\n\nimport { createCartAPI } from '../api/cart';\nimport { createCheckoutAPI } from '../api/checkout';\nimport { createOrdersAPI } from '../api/orders';\nimport { createProductsAPI } from '../api/products';\nimport { createEndpoints } from '../constants/endpoints';\nimport {\n setupErrorInterceptor,\n setupRequestInterceptor,\n setupResponseInterceptor,\n} from '../http/interceptors';\nimport type { ErrorReporter, WooCommerceClient, WooCommerceConfig } from './types';\n\n/**\n * Default error reporter - logs errors to console\n */\nconst DEFAULT_ERROR_REPORTER: ErrorReporter = {\n report: (error: Error) => {\n console.error('[woocommerce-utils]', error);\n },\n};\n\n/**\n * Create a configured WooCommerce API client\n *\n * @param config - Client configuration\n * @returns Configured WooCommerce client instance\n *\n * @example\n * ```tsx\n * import { createClient } from '@atomic-solutions/woocommerce-utils';\n *\n * const cartHeadersAdapter = {\n * get: async () => ({\n * nonce: await AsyncStorage.getItem('woo_nonce'),\n * cartToken: await AsyncStorage.getItem('woo_cart_token'),\n * }),\n * save: async ({ nonce, cartToken }) => {\n * if (nonce) await AsyncStorage.setItem('woo_nonce', nonce);\n * if (cartToken) await AsyncStorage.setItem('woo_cart_token', cartToken);\n * },\n * clear: async () => {\n * await AsyncStorage.removeItem('woo_nonce');\n * await AsyncStorage.removeItem('woo_cart_token');\n * },\n * };\n *\n * const client = createClient({\n * baseURL: 'https://shop.com/wp-json',\n * cartHeaders: cartHeadersAdapter,\n * debug: process.env.DEBUG === 'true',\n * });\n *\n * // Use the client\n * const products = await client.products.list({ per_page: 20 });\n * ```\n */\nexport const createClient = (config: WooCommerceConfig): WooCommerceClient => {\n // Apply default error reporter if not provided\n const fullConfig: WooCommerceConfig = {\n ...config,\n errorReporter: config.errorReporter ?? DEFAULT_ERROR_REPORTER,\n };\n\n // Create axios instance\n const axiosInstance = axios.create({\n baseURL: fullConfig.baseURL,\n timeout: fullConfig.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...fullConfig.headers,\n },\n });\n\n // Create endpoints based on API version (default: 'legacy' for backwards compatibility)\n const endpoints = createEndpoints(fullConfig.storeApiVersion ?? 'legacy');\n\n // Response options with validation mode, error reporter, and validation error handler\n const responseOptions = {\n validationMode: fullConfig.validationMode,\n errorReporter: fullConfig.errorReporter?.report,\n onValidationError: fullConfig.onValidationError,\n };\n\n // Create client object FIRST\n const client: WooCommerceClient = {\n config: fullConfig,\n axios: axiosInstance,\n products: createProductsAPI(axiosInstance, endpoints, responseOptions),\n cart: createCartAPI(axiosInstance, endpoints, responseOptions),\n checkout: createCheckoutAPI(\n axiosInstance,\n endpoints,\n responseOptions,\n fullConfig.orderAttribution\n ),\n orders: createOrdersAPI(axiosInstance, endpoints, responseOptions),\n };\n\n // Setup interceptors with client reference\n setupRequestInterceptor(axiosInstance, fullConfig, client);\n setupResponseInterceptor(axiosInstance, fullConfig, client);\n setupErrorInterceptor(axiosInstance, fullConfig, client);\n\n return client;\n};\n","import axios from 'axios';\n\nexport interface AdminClient {\n /** Delete an order permanently (force=true skips trash) */\n deleteOrder: (id: number, force?: boolean) => Promise<void>;\n}\n\nexport function createAdminClient(options: {\n baseURL: string;\n consumerKey: string;\n consumerSecret: string;\n}): AdminClient {\n const client = axios.create({\n baseURL: options.baseURL,\n auth: {\n username: options.consumerKey,\n password: options.consumerSecret,\n },\n timeout: 15000,\n });\n\n return {\n deleteOrder: async (id: number, force = true) => {\n await client.delete(`/wc/v3/orders/${id}`, {\n params: { force },\n });\n },\n };\n}\n","import axios from 'axios';\n\nimport type { CartHeadersAdapter, JwtTokenAdapter } from '../client/types';\n\nexport const TEST_BILLING_ADDRESS = {\n first_name: 'E2E',\n last_name: 'Test',\n company: '',\n address_1: 'Ferhadija 10',\n address_2: '',\n city: 'Sarajevo',\n state: '',\n postcode: '71000',\n country: 'BA',\n phone: '+38761000000',\n email: 'e2e-test@atomic.ba',\n};\n\nexport const TEST_SHIPPING_ADDRESS = {\n first_name: 'E2E',\n last_name: 'Test',\n company: '',\n address_1: 'Ferhadija 10',\n address_2: '',\n city: 'Sarajevo',\n state: '',\n postcode: '71000',\n country: 'BA',\n phone: '+38761000000',\n};\n\nexport function createInMemoryCartAdapter(): CartHeadersAdapter {\n let stored: { nonce?: string; cartToken?: string } = {};\n return {\n get: async () => stored,\n save: async (headers) => {\n stored = { ...stored, ...headers };\n },\n clear: async () => {\n stored = {};\n },\n };\n}\n\nexport function createStaticJwtAdapter(token: string): JwtTokenAdapter {\n return {\n get: async () => token,\n };\n}\n\n// --- JWT login helper ---\n\nexport async function loginForJwt(\n baseURL: string,\n username: string,\n password: string\n): Promise<string> {\n const response = await axios.post(`${baseURL}/jwt-auth/v1/token`, {\n username,\n password,\n });\n return response.data.token;\n}\n\nexport function assertAddressMatch(\n actual: Record<string, unknown>,\n expected: Record<string, unknown>,\n expectFn: (value: unknown) => { toBe: (expected: unknown) => void }\n): void {\n const fields = ['first_name', 'last_name', 'address_1', 'city', 'postcode', 'country', 'phone'];\n for (const field of fields) {\n expectFn(actual[field]).toBe(expected[field]);\n }\n}\n","import { createClient } from '../../client/createClient';\nimport type { WooCommerceClient } from '../../client/types';\nimport { createAdminClient, type AdminClient } from '../adminClient';\nimport {\n assertAddressMatch,\n createInMemoryCartAdapter,\n createStaticJwtAdapter,\n loginForJwt,\n TEST_BILLING_ADDRESS,\n TEST_SHIPPING_ADDRESS,\n} from '../helpers';\nimport type { WooCommerceTestSuiteOptions } from '../types';\n\nexport function authenticatedCheckoutSuite(options: WooCommerceTestSuiteOptions): void {\n const { timeout = 30000 } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n const describeFn = options.describe || g.describe;\n const itFn = options.it || g.it;\n const expectFn = options.expect || g.expect;\n const beforeAllFn = options.beforeAll || g.beforeAll;\n const afterAllFn = options.afterAll || g.afterAll;\n\n if (!options.wpUsername || !options.wpPassword) {\n describeFn('Authenticated Checkout E2E', () => {\n itFn('skipped — no WP credentials provided', () => {\n console.warn('Authenticated checkout E2E skipped. Set wpUsername and wpPassword to run.');\n });\n });\n return;\n }\n\n describeFn('Authenticated Checkout E2E', () => {\n let client: WooCommerceClient;\n let adminClient: AdminClient;\n let createdOrderId: number | null = null;\n\n beforeAllFn(async () => {\n const token = await loginForJwt(options.baseURL, options.wpUsername!, options.wpPassword!);\n\n client = createClient({\n baseURL: options.baseURL,\n storeApiVersion: options.storeApiVersion ?? 'v1',\n cartHeaders: createInMemoryCartAdapter(),\n jwtToken: createStaticJwtAdapter(token),\n validationMode: 'strict',\n });\n\n adminClient = createAdminClient({\n baseURL: options.baseURL,\n consumerKey: options.consumerKey,\n consumerSecret: options.consumerSecret,\n });\n }, timeout);\n\n afterAllFn(async () => {\n if (createdOrderId) {\n try {\n await adminClient.deleteOrder(createdOrderId);\n } catch {\n console.warn(`[e2e cleanup] Failed to delete order ${createdOrderId}`);\n }\n }\n }, timeout);\n\n // --- Clear cart (authenticated user may have leftover items) ---\n\n itFn(\n 'should clear any existing cart items',\n async () => {\n const cart = await client.cart.get();\n for (const item of cart.items) {\n await client.cart.removeItem({ key: item.key });\n }\n const cleared = await client.cart.get();\n expectFn(cleared.items_count).toBe(0);\n },\n timeout\n );\n\n // --- Products ---\n\n let productId: number;\n\n itFn(\n 'should fetch products',\n async () => {\n const result = await client.products.list({ page: 1, per_page: 5 });\n expectFn(result.data.length).toBeGreaterThan(0);\n productId = result.data[0]!.id;\n },\n timeout\n );\n\n // --- Cart: add item ---\n\n let cartItemKey: string;\n\n itFn(\n 'should add item to cart with JWT auth',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.items[0]!.id).toBe(productId);\n cartItemKey = cart.items[0]!.key;\n },\n timeout\n );\n\n // --- Cart: fetch ---\n\n itFn(\n 'should fetch cart',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.needs_payment).toBe(true);\n },\n timeout\n );\n\n // --- Cart: update customer addresses ---\n\n itFn(\n 'should update customer addresses',\n async () => {\n const cart = await client.cart.updateCustomer({\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n assertAddressMatch(cart.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n },\n timeout\n );\n\n // --- Cart: verify addresses persisted ---\n\n itFn(\n 'should return persisted addresses on cart fetch',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n },\n timeout\n );\n\n // --- Cart: remove item ---\n\n itFn(\n 'should remove item from cart',\n async () => {\n const cart = await client.cart.removeItem({ key: cartItemKey });\n expectFn(cart.items_count).toBe(0);\n expectFn(cart.items.length).toBe(0);\n },\n timeout\n );\n\n // --- Cart: re-add item for checkout ---\n\n itFn(\n 'should re-add item to cart for checkout',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n },\n timeout\n );\n\n // --- Checkout: fetch state ---\n\n itFn(\n 'should fetch checkout state',\n async () => {\n const checkout = await client.checkout.get();\n expectFn(checkout).toHaveProperty('order_id');\n expectFn(checkout).toHaveProperty('billing_address');\n expectFn(checkout).toHaveProperty('shipping_address');\n expectFn(checkout).toHaveProperty('payment_method');\n },\n timeout\n );\n\n // --- Checkout: process (COD) ---\n\n itFn(\n 'should process checkout with COD payment',\n async () => {\n const checkout = await client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n expectFn(checkout.order_id).toBeGreaterThan(0);\n expectFn(checkout.order_key).toMatch(/^wc_order_/);\n expectFn(checkout.status).toBeTruthy();\n\n createdOrderId = checkout.order_id;\n },\n timeout\n );\n\n // --- Order: retrieve with JWT auth (no email/key needed) ---\n\n itFn(\n 'should retrieve order using JWT authentication',\n async () => {\n const order = await client.orders.get({\n id: createdOrderId!,\n });\n\n expectFn(order.id).toBe(createdOrderId);\n assertAddressMatch(order.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(order.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(order.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n expectFn(order.items.length).toBeGreaterThan(0);\n },\n timeout\n );\n });\n}\n","import { createClient } from '../../client/createClient';\nimport type { WooCommerceClient } from '../../client/types';\nimport { WooCommerceApiError } from '../../errors/classes/WooCommerceApiError';\nimport { createAdminClient, type AdminClient } from '../adminClient';\nimport { createInMemoryCartAdapter, TEST_BILLING_ADDRESS, TEST_SHIPPING_ADDRESS } from '../helpers';\nimport type { WooCommerceTestSuiteOptions } from '../types';\n\n/**\n * E2E suite for checkout validation errors.\n *\n * Tests that the WooCommerce Store API rejects invalid checkout payloads\n * with HTTP 400 responses (server-side validation).\n *\n * Each test uses its own client+cart session to avoid cross-contamination.\n * Discovery tests that succeed (e.g. phone acceptance) track the created\n * order IDs so they can be cleaned up via the admin client in afterAll.\n */\nexport function checkoutValidationSuite(options: WooCommerceTestSuiteOptions): void {\n const { timeout = 30000 } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n const describeFn = options.describe || g.describe;\n const itFn = options.it || g.it;\n const expectFn = options.expect || g.expect;\n const afterAllFn = options.afterAll || g.afterAll;\n\n describeFn('Checkout Validation E2E', () => {\n // Orders leaked by discovery tests (where the server unexpectedly accepts\n // the payload) are tracked here and deleted in afterAll.\n const leakedOrderIds: number[] = [];\n\n const adminClient: AdminClient = createAdminClient({\n baseURL: options.baseURL,\n consumerKey: options.consumerKey,\n consumerSecret: options.consumerSecret,\n });\n\n afterAllFn(async () => {\n for (const id of leakedOrderIds) {\n try {\n await adminClient.deleteOrder(id);\n } catch {\n console.warn(`[e2e cleanup] Failed to delete leaked order ${id}`);\n }\n }\n }, timeout);\n\n /**\n * Creates a fresh client, adds an item to cart, and returns the client.\n * Each validation test gets an isolated session.\n */\n async function createReadyClient(): Promise<WooCommerceClient> {\n const client = createClient({\n baseURL: options.baseURL,\n storeApiVersion: options.storeApiVersion ?? 'v1',\n cartHeaders: createInMemoryCartAdapter(),\n validationMode: 'strict',\n });\n\n const products = await client.products.list({ page: 1, per_page: 1 });\n if (products.data.length === 0) {\n throw new Error('No products available for checkout validation tests');\n }\n\n await client.cart.addItem({ id: products.data[0]!.id, quantity: 1 });\n return client;\n }\n\n /**\n * Asserts that a checkout attempt throws a WooCommerceApiError with HTTP 400.\n * Fails with a descriptive error if no exception was thrown (server accepted).\n * If the server unexpectedly accepts, the created order is tracked for cleanup.\n */\n async function expectRejection(\n label: string,\n checkoutCall: () => Promise<{ order_id: number }>\n ): Promise<void> {\n let thrown: unknown = null;\n let result: { order_id: number } | null = null;\n\n try {\n result = await checkoutCall();\n } catch (error) {\n thrown = error;\n }\n\n if (result) {\n if (result.order_id > 0) leakedOrderIds.push(result.order_id);\n throw new Error(\n `${label}: expected server rejection but checkout succeeded (order_id=${result.order_id})`\n );\n }\n\n expectFn(thrown).toBeInstanceOf(WooCommerceApiError);\n const wcError = thrown as WooCommerceApiError;\n expectFn(wcError.statusCode).toBe(400);\n }\n\n // --- Billing email ---\n\n itFn(\n 'should reject checkout when billing email is empty',\n async () => {\n const client = await createReadyClient();\n await expectRejection('empty billing email', () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, email: '' },\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n\n itFn(\n 'should reject checkout when billing email is invalid',\n async () => {\n const client = await createReadyClient();\n await expectRejection('invalid billing email', () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, email: 'not-an-email' },\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n\n // --- Billing required fields ---\n\n const billingRequiredFields = [\n 'first_name',\n 'last_name',\n 'address_1',\n 'city',\n 'postcode',\n ] as const;\n\n for (const field of billingRequiredFields) {\n itFn(\n `should reject checkout when billing ${field} is empty`,\n async () => {\n const client = await createReadyClient();\n await expectRejection(`empty billing ${field}`, () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, [field]: '' },\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n }\n\n // --- Phone number (discovery test) ---\n\n itFn(\n 'should document server behavior for empty billing phone',\n async () => {\n const client = await createReadyClient();\n let serverAccepted = false;\n let orderId = 0;\n\n try {\n const result = await client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, phone: '' },\n shipping_address: { ...TEST_SHIPPING_ADDRESS, phone: '' },\n });\n serverAccepted = result.order_id > 0;\n orderId = result.order_id;\n } catch (error) {\n expectFn(error).toBeInstanceOf(WooCommerceApiError);\n }\n\n if (serverAccepted) {\n leakedOrderIds.push(orderId);\n }\n\n console.log(\n `[checkout-validation] Server ${serverAccepted ? 'ACCEPTED' : 'REJECTED'} checkout with empty phone`\n );\n expectFn(typeof serverAccepted).toBe('boolean');\n },\n timeout\n );\n\n // --- Shipping required fields ---\n\n const shippingRequiredFields = [\n 'first_name',\n 'last_name',\n 'address_1',\n 'city',\n 'postcode',\n ] as const;\n\n for (const field of shippingRequiredFields) {\n itFn(\n `should reject checkout when shipping ${field} is empty`,\n async () => {\n const client = await createReadyClient();\n await expectRejection(`empty shipping ${field}`, () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: { ...TEST_SHIPPING_ADDRESS, [field]: '' },\n })\n );\n },\n timeout\n );\n }\n\n // --- Shipping phone (discovery test) ---\n\n itFn(\n 'should document server behavior for empty shipping phone',\n async () => {\n const client = await createReadyClient();\n let serverAccepted = false;\n let orderId = 0;\n\n try {\n const result = await client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: { ...TEST_SHIPPING_ADDRESS, phone: '' },\n });\n serverAccepted = result.order_id > 0;\n orderId = result.order_id;\n } catch (error) {\n expectFn(error).toBeInstanceOf(WooCommerceApiError);\n }\n\n if (serverAccepted) {\n leakedOrderIds.push(orderId);\n }\n\n console.log(\n `[checkout-validation] Server ${serverAccepted ? 'ACCEPTED' : 'REJECTED'} checkout with empty shipping phone`\n );\n expectFn(typeof serverAccepted).toBe('boolean');\n },\n timeout\n );\n\n // --- Missing payment method ---\n\n itFn(\n 'should reject checkout with empty payment method',\n async () => {\n const client = await createReadyClient();\n await expectRejection('empty payment method', () =>\n client.checkout.process({\n payment_method: '',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n });\n}\n","import { createClient } from '../../client/createClient';\nimport type { WooCommerceClient } from '../../client/types';\nimport { createAdminClient, type AdminClient } from '../adminClient';\nimport {\n assertAddressMatch,\n createInMemoryCartAdapter,\n TEST_BILLING_ADDRESS,\n TEST_SHIPPING_ADDRESS,\n} from '../helpers';\nimport type { WooCommerceTestSuiteOptions } from '../types';\n\nexport function guestCheckoutSuite(options: WooCommerceTestSuiteOptions): void {\n const { timeout = 30000 } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n const describeFn = options.describe || g.describe;\n const itFn = options.it || g.it;\n const expectFn = options.expect || g.expect;\n const beforeAllFn = options.beforeAll || g.beforeAll;\n const afterAllFn = options.afterAll || g.afterAll;\n\n describeFn('Guest Checkout E2E', () => {\n let client: WooCommerceClient;\n let adminClient: AdminClient;\n let createdOrderId: number | null = null;\n\n beforeAllFn(() => {\n client = createClient({\n baseURL: options.baseURL,\n storeApiVersion: options.storeApiVersion ?? 'v1',\n cartHeaders: createInMemoryCartAdapter(),\n validationMode: 'strict',\n });\n\n adminClient = createAdminClient({\n baseURL: options.baseURL,\n consumerKey: options.consumerKey,\n consumerSecret: options.consumerSecret,\n });\n }, timeout);\n\n afterAllFn(async () => {\n if (createdOrderId) {\n try {\n await adminClient.deleteOrder(createdOrderId);\n } catch {\n console.warn(`[e2e cleanup] Failed to delete order ${createdOrderId}`);\n }\n }\n }, timeout);\n\n // --- Products ---\n\n let productId: number;\n\n itFn(\n 'should fetch products and find at least one',\n async () => {\n const result = await client.products.list({ page: 1, per_page: 5 });\n expectFn(result.data.length).toBeGreaterThan(0);\n expectFn(result.pagination).toHaveProperty('total');\n productId = result.data[0]!.id;\n },\n timeout\n );\n\n // --- Cart: add item ---\n\n let cartItemKey: string;\n\n itFn(\n 'should add item to cart',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.items.length).toBe(1);\n expectFn(cart.items[0]!.id).toBe(productId);\n cartItemKey = cart.items[0]!.key;\n },\n timeout\n );\n\n // --- Cart: fetch ---\n\n itFn(\n 'should fetch cart with item present',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.needs_payment).toBe(true);\n },\n timeout\n );\n\n // --- Cart: update customer addresses ---\n\n itFn(\n 'should update customer billing and shipping addresses',\n async () => {\n const cart = await client.cart.updateCustomer({\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n assertAddressMatch(cart.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n },\n timeout\n );\n\n // --- Cart: verify addresses persisted ---\n\n itFn(\n 'should return persisted addresses on cart fetch',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n },\n timeout\n );\n\n // --- Cart: remove item ---\n\n itFn(\n 'should remove item from cart',\n async () => {\n const cart = await client.cart.removeItem({ key: cartItemKey });\n expectFn(cart.items_count).toBe(0);\n expectFn(cart.items.length).toBe(0);\n },\n timeout\n );\n\n // --- Cart: re-add item for checkout ---\n\n itFn(\n 'should re-add item to cart for checkout',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n },\n timeout\n );\n\n // --- Checkout: fetch state ---\n\n itFn(\n 'should fetch checkout state',\n async () => {\n const checkout = await client.checkout.get();\n expectFn(checkout).toHaveProperty('order_id');\n expectFn(checkout).toHaveProperty('billing_address');\n expectFn(checkout).toHaveProperty('shipping_address');\n expectFn(checkout).toHaveProperty('payment_method');\n },\n timeout\n );\n\n // --- Checkout: process (COD) ---\n\n let orderKey: string;\n\n itFn(\n 'should process checkout with COD payment',\n async () => {\n const checkout = await client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n expectFn(checkout.order_id).toBeGreaterThan(0);\n expectFn(checkout.order_key).toMatch(/^wc_order_/);\n expectFn(checkout.status).toBeTruthy();\n\n createdOrderId = checkout.order_id;\n orderKey = checkout.order_key;\n },\n timeout\n );\n\n // --- Order: retrieve as guest (billing_email + key) ---\n\n itFn(\n 'should retrieve order as guest using billing email and order key',\n async () => {\n const order = await client.orders.get({\n id: createdOrderId!,\n billing_email: TEST_BILLING_ADDRESS.email,\n key: orderKey,\n });\n\n expectFn(order.id).toBe(createdOrderId);\n assertAddressMatch(order.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(order.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(order.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n expectFn(order.items.length).toBeGreaterThan(0);\n },\n timeout\n );\n });\n}\n","import { authenticatedCheckoutSuite } from './suites/authenticated-checkout.suite';\nimport { checkoutValidationSuite } from './suites/checkout-validation.suite';\nimport { guestCheckoutSuite } from './suites/guest-checkout.suite';\nimport type { WooCommerceTestSuiteOptions } from './types';\n\n/**\n * Create a WooCommerce E2E test suite\n *\n * Runs independent test flows against a live WooCommerce instance:\n * - Guest checkout (always runs)\n * - Authenticated checkout (skipped if jwtToken not provided)\n * - Checkout validation (verifies server-side rejection of invalid payloads)\n *\n * Requires WC REST Admin API credentials for order cleanup after each flow.\n *\n * @example\n * ```ts\n * import { createWooCommerceTestSuite } from '@atomic-solutions/woocommerce-utils/testing';\n *\n * createWooCommerceTestSuite({\n * baseURL: process.env.WC_BASE_URL!,\n * consumerKey: process.env.WC_CONSUMER_KEY!,\n * consumerSecret: process.env.WC_CONSUMER_SECRET!,\n * jwtToken: process.env.WC_JWT_TOKEN,\n * storeApiVersion: 'v1',\n * });\n * ```\n */\nexport function createWooCommerceTestSuite(options: WooCommerceTestSuiteOptions): void {\n guestCheckoutSuite(options);\n authenticatedCheckoutSuite(options);\n checkoutValidationSuite(options);\n}\n"]}
1
+ {"version":3,"sources":["../../src/errors/classes/BaseError.ts","../../src/errors/mapping/mapWooCommerceCode.ts","../../src/errors/mapping/constants.ts","../../src/errors/classes/http-error.ts","../../src/errors/classes/WooCommerceApiError.ts","../../src/errors/classes/WooCommerceDataValidationError.ts","../../src/http/handleApiResponse.ts","../../src/utils/calculatePagination.ts","../../src/utils/getPaginationMeta.ts","../../src/http/handlePaginatedApiResponse.ts","../../src/logging/logger.ts","../../src/http/storeRoutes.ts","../../src/http/interceptors/request.ts","../../src/http/interceptors/response.ts","../../src/utils/initializeCartSession.ts","../../src/http/interceptors/error.ts","../../../schemas/src/common/address.schema.ts","../../../schemas/src/common/money.schema.ts","../../../schemas/src/woocommerce/store-api/image.schema.ts","../../../schemas/src/woocommerce/store-api/prices.schema.ts","../../../schemas/src/woocommerce/store-api/cart-item.schema.ts","../../../schemas/src/woocommerce/store-api/cart-totals.schema.ts","../../../schemas/src/woocommerce/store-api/coupon.schema.ts","../../../schemas/src/woocommerce/store-api/shipping.schema.ts","../../../schemas/src/woocommerce/store-api/cart.ts","../../../schemas/src/woocommerce/store-api/order-item.schema.ts","../../../schemas/src/woocommerce/store-api/order-totals.schema.ts","../../../schemas/src/woocommerce/store-api/order.schema.ts","../../../schemas/src/woocommerce/store-api/checkout.ts","../../../schemas/src/woocommerce/store-api/add-to-cart.schema.ts","../../../schemas/src/woocommerce/store-api/category.schema.ts","../../../schemas/src/woocommerce/store-api/products.ts","../../../schemas/src/woocommerce/store-api/tag.schema.ts","../../../schemas/src/woocommerce/store-api/order-attribution.schema.ts","../../src/api/cart.ts","../../src/api/checkout.ts","../../src/api/orders.ts","../../src/api/products.ts","../../src/constants/endpoints.ts","../../src/client/createClient.ts","../../src/testing/adminClient.ts","../../src/testing/helpers.ts","../../src/testing/suites/authenticated-checkout.suite.ts","../../src/testing/suites/checkout-validation.suite.ts","../../src/testing/suites/guest-checkout.suite.ts","../../src/testing/createTestSuite.ts"],"names":["BaseError","error","z","axios"],"mappings":";;;;;;;;;;;;;AASO,IAAM,SAAA,GAAN,cAGG,KAAA,CAAM;AAAA,EACd,YAA4B,OAAA,EAAmB;AAC7C,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AADK,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAI1B,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAGhD,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAG7B,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,MAAA,KAAA,CAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA;AAAA,IAChD;AAGA,IAAA,IAAI,KAAK,OAAA,CAAQ,KAAA,YAAiB,SAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,KAAA,EAAO;AACnE,MAAA,IAAA,CAAK,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,KAAK;AAAA,WAAA,EAAgB,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAAiC;AAC/B,IAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,SAAA,KAAc,IAAA,CAAK,OAAA;AACzD,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAkC;AAChC,IAAA,OAAO;AAAA,MACL,GAAG,KAAK,iBAAA,EAAkB;AAAA,MAC1B,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AACF,CAAA;;;ACzDO,IAAM,kBAAA,GAAqB,CAAC,OAAA,KAA8C;AAI/E,EAAA,MAAM,aAAA,GAAyD;AAAA,IAC7D,2BAAA,EAA6B,YAAA;AAAA,IAC7B,kCAAA,EAAoC,gBAAA;AAAA,IACpC,8BAAA,EAAgC,eAAA;AAAA,IAChC,8BAAA,EAAgC,eAAA;AAAA,IAChC,kBAAA,EAAoB,gBAAA;AAAA,IACpB,mCAAA,EAAqC,mBAAA;AAAA,IACrC,qCAAA,EAAuC,cAAA;AAAA,IACvC,yCAAA,EAA2C,oBAAA;AAAA,IAC3C,gDAAA,EAAkD;AAAA,GACpD;AAEA,EAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,cAAc,OAAO,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,eAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,gBAAA;AACvC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,oBAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,UAAU,CAAA,EAAG,OAAO,gBAAA;AACzC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,wBAAA;AAExC,EAAA,OAAO,eAAA;AACT,CAAA;;;AC5BO,IAAM,0BAAA,GAGT;AAAA,EACF,UAAA,EAAY;AAAA,IACV,SAAA,EAAW,UAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,SAAA,EAAW,cAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,aAAA,EAAe;AAAA,IACb,SAAA,EAAW,cAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,aAAA,EAAe;AAAA,IACb,SAAA,EAAW,cAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,SAAA,EAAW,aAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,SAAA,EAAW,aAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,SAAA,EAAW,aAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,SAAA,EAAW,aAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,SAAA,EAAW,kBAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa;AAAA,GACf;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,SAAA,EAAW,kBAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb;AAAA,EACA,aAAA,EAAe;AAAA,IACb,SAAA,EAAW,iBAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb;AAAA,EACA,aAAA,EAAe;AAAA,IACb,SAAA,EAAW,SAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAEf,CAAA;;;AC7DO,IAAM,UAAA,GAAa,CAAC,GAAA,KACzB,GAAA,CACG,OAAA,CAAQ,+BAAA,EAAiC,EAAE,CAAA,CAC3C,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,CACrB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,OAAA,KAAa,sCAAA,CAAuC,IAAA,CAAK,OAAO,CAAA,GAAI,KAAA,GAAQ,OAAQ,CAAA,CACzF,IAAA,CAAK,GAAG,CAAA;AAEN,IAAM,kBAAA,GAAqB,CAAC,MAAA,MAChC;AAAA,EACC,MAAA,EACE,WAAW,MAAA,GAAY,SAAA,GAAY,WAAW,GAAA,IAAO,MAAA,KAAW,MAAM,MAAA,GAAS,aAAA;AAAA,EACjF,QAAA,EAAU,MAAA,KAAW,MAAA,IAAa,MAAA,GAAS,MAAM,SAAA,GAAY;AAC/D,CAAA,CAAA;;;ACbF,IAAA,QAAA;AAkBO,IAAM,mBAAA,GAAN,cAAkCA,WAAAA,CAAU;AAAA,EAGjD,YAAY,OAAA,EAAqC;AAC/C,IAAA,MAAM,QAAA,GAAW,0BAAA,CAA2B,OAAA,CAAQ,IAAI,CAAA,IAAK;AAAA,MAC3D,SAAA,EAAW,yBAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACb;AAGA,IAAA,MAAM,eAAA,GAA8C;AAAA,MAClD,GAAG,OAAA;AAAA,MACH,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,CAAS,SAAA;AAAA,MACzC,WAAA,EAAa,OAAA,CAAQ,WAAA,IAAe,QAAA,CAAS,WAAA;AAAA,MAC7C,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,CAAS;AAAA,KAC3C;AAEA,IAAA,MAAM,SAAS,eAAA,CAAgB,UAAA;AAC/B,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAS,GAAI,mBAAmB,MAAM,CAAA;AAEtD,IAAA,KAAA,CAAM;AAAA,MACJ,MAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAW,eAAA,CAAgB,SAAA;AAAA,MAC3B,SAAS,eAAA,CAAgB,OAAA;AAAA,MACzB,MAAM,eAAA,CAAgB,IAAA;AAAA,MACtB,WAAW,eAAA,CAAgB,SAAA;AAAA,MAC3B,aAAa,eAAA,CAAgB,WAAA;AAAA,MAC7B,OAAO,eAAA,CAAgB,KAAA;AAAA,MACvB,WAAA,EAAa,CAAC,MAAA,EAAQ,eAAA,CAAgB,MAAM,MAAA,CAAO,MAAA,IAAU,SAAS,CAAC,CAAA;AAAA,MACvE,MAAA,EAAQ;AAAA,QACN,cAAc,eAAA,CAAgB,YAAA;AAAA,QAC9B,UAAA,EAAY,MAAA;AAAA,QACZ,IAAA,EAAM,UAAA,CAAW,eAAA,CAAgB,GAAG,CAAA;AAAA,QACpC,QAAQ,eAAA,CAAgB;AAAA;AAC1B,KACD,CAAA;AAnCH,IAAA,YAAA,CAAA,IAAA,EAAS,QAAA,CAAA;AAqCP,IAAA,YAAA,CAAA,IAAA,EAAK,QAAA,EAAW,eAAA,CAAA;AAAA,EAClB;AAAA,EAEA,IAAI,OAAA,GAAsC;AACxC,IAAA,OAAO,YAAA,CAAA,IAAA,EAAK,QAAA,CAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,OAAA,GAAmC;AACrC,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA,EAEA,IAAI,YAAA,GAAuB;AACzB,IAAA,OAAO,KAAK,OAAA,CAAQ,YAAA;AAAA,EACtB;AAAA,EAEA,IAAI,UAAA,GAAiC;AACnC,IAAA,OAAO,KAAK,OAAA,CAAQ,UAAA;AAAA,EACtB;AAAA,EAEA,IAAI,GAAA,GAAc;AAChB,IAAA,OAAO,KAAK,OAAA,CAAQ,GAAA;AAAA,EACtB;AAAA,EAEA,IAAI,MAAA,GAAiB;AACnB,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA,EAEA,IAAI,WAAA,GAAmC;AACrC,IAAA,OAAO,KAAK,OAAA,CAAQ,WAAA;AAAA,EACtB;AAAA,EAEA,IAAI,YAAA,GAAoC;AACtC,IAAA,OAAO,KAAK,OAAA,CAAQ,YAAA;AAAA,EACtB;AAAA,EAEA,IAAI,IAAA,GAA4C;AAC9C,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,EACtB;AACF,CAAA;AA5EW,QAAA,GAAA,IAAA,OAAA,EAAA;;;ACUJ,IAAM,8BAAA,GAAN,MAAM,+BAAA,SAAuC,SAAA,CAGlD;AAAA,EACA,YAAY,OAAA,EAAgD;AAE1D,IAAA,MAAM,cAAc,OAAA,CAAQ,QAAA,GACxB,gCAA+B,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA,GACzE,MAAA;AAEJ,IAAA,KAAA,CAAM;AAAA,MACJ,IAAA,EAAM,kBAAA;AAAA,MACN,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,WAAA,EAAa,QAAQ,WAAA,IAAe,2CAAA;AAAA,MACpC,SAAA,EAAW,KAAA;AAAA,MACX,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,IAAI,GAAA,GAA0B;AAC5B,IAAA,OAAO,KAAK,OAAA,CAAQ,GAAA;AAAA,EACtB;AAAA,EAEA,IAAI,QAAA,GAAiC;AACnC,IAAA,OAAO,KAAK,OAAA,CAAQ,QAAA;AAAA,EACtB;AAAA,EAEA,IAAI,YAAA,GAAoC;AACtC,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,EACtB;AAAA,EAEA,IAAI,WAAA,GAAoD;AACtD,IAAA,OAAO,KAAK,OAAA,CAAQ,WAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMS,iBAAA,GAA8C;AACrD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAK,OAAA,CAAQ,IAAA;AAAA,MACnB,SAAA,EAAW,KAAK,OAAA,CAAQ,SAAA;AAAA,MACxB,WAAA,EAAa,KAAK,OAAA,CAAQ,WAAA;AAAA,MAC1B,SAAA,EAAW,KAAA;AAAA,MACX,WAAA,EAAa,KAAK,OAAA,CAAQ,WAAA;AAAA,MAC1B,GAAA,EAAK,KAAK,OAAA,CAAQ;AAAA,KACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,0BACb,QAAA,EACsC;AACtC,IAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,cAAwC,EAAC;AAE/C,IAAA,KAAA,MAAW,KAAA,IAAS,SAAS,MAAA,EAAQ;AACnC,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAChC,MAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,QAAA,WAAA,CAAY,IAAI,IAAI,EAAC;AAAA,MACvB;AACA,MAAA,WAAA,CAAY,IAAI,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAwB;AACtB,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAO,CAAC,KAAK,OAAO,CAAA;AAAA,IACtB;AAEA,IAAA,MAAM,WAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,aAAA,IAAiB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,EAAG;AAC3D,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,aAAa,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,KAAA,EAAwB;AACpC,IAAA,OAAO,IAAA,CAAK,WAAA,GAAc,KAAA,IAAS,IAAA,CAAK,WAAA,GAAc,KAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,KAAA,EAAqC;AACjD,IAAA,OAAO,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EACjC;AACF,CAAA;;;AClGO,IAAM,aAAA,GAAgB,CAC3B,IAAA,EACA,MAAA,EACA,SACA,GAAA,KACM;AACN,EAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,QAAA;AAGlD,EAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA;AAEpC,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,eAAA,GAAkB,IAAI,8BAAA,CAA+B;AAAA,QACzD,OAAA,EAAS,CAAA,+CAAA,EAAkD,GAAA,IAAO,kBAAkB,CAAA,CAAA;AAAA,QACpF,GAAA;AAAA,QACA,UAAU,MAAA,CAAO,KAAA;AAAA,QACjB,KAAA,EAAO,IAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACd,CAAA;AAGD,MAAA,OAAA,EAAS,oBAAoB,eAAe,CAAA;AAG5C,MAAA,OAAA,EAAS,gBAAgB,eAAe,CAAA;AAGxC,MAAA,OAAA,CAAQ,IAAA,CAAK,yCAAA,EAA2C,eAAA,CAAgB,OAAO,CAAA;AAG/E,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAGA,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EAC1B,SAASC,MAAAA,EAAO;AACd,IAAA,IAAIA,MAAAA,IAAS,OAAOA,MAAAA,KAAU,QAAA,IAAY,YAAYA,MAAAA,EAAO;AAC3D,MAAA,MAAM,eAAA,GAAkB,IAAI,8BAAA,CAA+B;AAAA,QACzD,OAAA,EAAS,CAAA,+CAAA,EAAkD,GAAA,IAAO,kBAAkB,CAAA,CAAA;AAAA,QACpF,GAAA;AAAA,QACA,QAAA,EAAUA,MAAAA;AAAA,QACV,KAAA,EAAO,IAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACd,CAAA;AAGD,MAAA,OAAA,EAAS,oBAAoB,eAAe,CAAA;AAG5C,MAAA,OAAA,EAAS,gBAAgB,eAAe,CAAA;AAExC,MAAA,MAAM,eAAA;AAAA,IACR;AACA,IAAA,MAAMA,MAAAA;AAAA,EACR;AACF,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAC/B,QAAA,EACA,MAAA,EACA,OAAA,KACM,aAAA,CAAc,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA;;;AC7ElE,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAAgD;AAClF,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,YAAW,GAAI,KAAA;AAE7C,EAAA,MAAM,cAAc,IAAA,GAAO,UAAA;AAC3B,EAAA,MAAM,cAAc,IAAA,GAAO,CAAA;AAE3B,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA,EAAU,WAAA,GAAc,IAAA,GAAO,CAAA,GAAI,IAAA;AAAA,IACnC,QAAA,EAAU,WAAA,GAAc,IAAA,GAAO,CAAA,GAAI;AAAA,GACrC;AACF,CAAA;;;ACjCO,IAAM,iBAAA,GAAoB,CAAC,OAAA,KAAsD;AAEtF,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA;AAAA,MACP,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,YAAY,CAAA;AACpC,EAAA,MAAM,YAAA,GAAe,QAAQ,iBAAiB,CAAA;AAE9C,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc;AAC7B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA;AAAA,MACP,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,YAAA,EAAc,EAAE,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;;;ACPO,IAAM,6BAA6B,CACxC,QAAA,EACA,QACA,MAAA,GAA+C,IAC/C,OAAA,KACyB;AACzB,EAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,QAAA;AAClD,EAAA,IAAI,IAAA;AAGJ,EAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA;AAE7C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,eAAA,GAAkB,IAAI,8BAAA,CAA+B;AAAA,QACzD,OAAA,EAAS,CAAA,+CAAA,EAAkD,QAAA,CAAS,MAAA,CAAO,OAAO,kBAAkB,CAAA,CAAA;AAAA,QACpG,GAAA,EAAK,SAAS,MAAA,CAAO,GAAA;AAAA,QACrB,UAAU,MAAA,CAAO,KAAA;AAAA,QACjB,OAAO,QAAA,CAAS,IAAA;AAAA,QAChB,WAAA,EAAa;AAAA,OACd,CAAA;AAGD,MAAA,OAAA,EAAS,oBAAoB,eAAe,CAAA;AAG5C,MAAA,OAAA,EAAS,gBAAgB,eAAe,CAAA;AAGxC,MAAA,OAAA,CAAQ,IAAA,CAAK,yCAAA,EAA2C,eAAA,CAAgB,OAAO,CAAA;AAG/E,MAAA,IAAA,GAAO,MAAM,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,GAAI,QAAA,CAAS,OAAO,EAAC;AAAA,IACzD,CAAA,MAAO;AACL,MAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAAA,IACnC,SAASA,MAAAA,EAAO;AACd,MAAA,IAAIA,MAAAA,IAAS,OAAOA,MAAAA,KAAU,QAAA,IAAY,YAAYA,MAAAA,EAAO;AAC3D,QAAA,MAAM,eAAA,GAAkB,IAAI,8BAAA,CAA+B;AAAA,UACzD,OAAA,EAAS,CAAA,+CAAA,EAAkD,QAAA,CAAS,MAAA,CAAO,OAAO,kBAAkB,CAAA,CAAA;AAAA,UACpG,GAAA,EAAK,SAAS,MAAA,CAAO,GAAA;AAAA,UACrB,QAAA,EAAUA,MAAAA;AAAA,UACV,OAAO,QAAA,CAAS,IAAA;AAAA,UAChB,WAAA,EAAa;AAAA,SACd,CAAA;AAGD,QAAA,OAAA,EAAS,oBAAoB,eAAe,CAAA;AAG5C,QAAA,OAAA,EAAS,gBAAgB,eAAe,CAAA;AAExC,QAAA,MAAM,eAAA;AAAA,MACR;AACA,MAAA,MAAMA,MAAAA;AAAA,IACR;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,iBAAA,CAAkB,SAAS,OAAO,CAAA;AAChE,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAQ,CAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,IAAY,EAAA;AAEnC,EAAA,MAAM,aAAa,mBAAA,CAAoB;AAAA,IACrC,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;;;ACvGA,IAAM,YAAA,GAAe,qBAAA;AAKd,IAAM,iBAAiB,MAAe;AAC3C,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,EAAK;AACjD,IAAA,OAAO,QAAQ,GAAA,CAAI,KAAA,KAAU,MAAA,IAAU,OAAA,CAAQ,IAAI,KAAA,KAAU,GAAA;AAAA,EAC/D;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAKO,IAAM,KAAA,GAAQ,IAAI,IAAA,KAA0B;AACjD,EAAA,IAAI,gBAAe,EAAG;AACpB,IAAA,OAAA,CAAQ,GAAA,CAAI,YAAA,EAAc,GAAG,IAAI,CAAA;AAAA,EACnC;AACF,CAAA;AAYO,IAAM,KAAA,GAAQ,IAAI,IAAA,KAA0B;AACjD,EAAA,OAAA,CAAQ,KAAA,CAAM,YAAA,EAAc,GAAG,IAAI,CAAA;AACrC,CAAA;;;ACrCA,IAAM,UAAA,GAAa,6CAAA;AACnB,IAAM,WAAA,GAAc,6BAAA;AAEb,IAAM,WAAA,GAAc,CAAC,GAAA,KAA0B,CAAC,CAAC,GAAA,IAAO,UAAA,CAAW,KAAK,GAAG,CAAA;AAE3E,IAAM,YAAA,GAAe,CAAC,GAAA,KAA0B,CAAC,CAAC,GAAA,IAAO,WAAA,CAAY,KAAK,GAAG,CAAA;;;ACcpF,IAAM,YAAA,GAAe,CAAC,GAAA,KAA0B;AAC9C,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AAEjB,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,YAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA;AAAA;AAAA,IAGA;AAAA,GACF;AAEA,EAAA,OAAO,cAAc,IAAA,CAAK,CAAC,aAAa,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAC,CAAA;AAChE,CAAA;AAWO,IAAM,uBAAA,GAA0B,CACrC,aAAA,EACA,MAAA,EACA,MAAA,KACS;AACT,EAAA,aAAA,CAAc,aAAa,OAAA,CAAQ,GAAA;AAAA,IACjC,OAAO,aAAA,KAA8C;AACnD,MAAA,MAAM,MAAM,aAAA,CAAc,GAAA;AAG1B,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,QAAA,CAAS,GAAA,EAAI;AACxC,QAAA,IAAI,UAAU,YAAA,CAAa,GAAG,CAAA,IAAK,WAAA,CAAY,GAAG,CAAA,CAAA,EAAI;AACpD,UAAA,aAAA,CAAc,OAAA,CAAQ,aAAA,GAAgB,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA;AACrD,UAAA,IAAI,OAAO,KAAA,EAAO;AAChB,YAAA,KAAA,CAAM,0BAA0B,GAAG,CAAA;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAaA,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,EAAG;AACpB,QAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,WAAA,CAAY,GAAA,EAAI;AAC7C,QAAA,MAAM,kBAAkB,CAAC,CAAE,MAAM,MAAA,CAAO,UAAU,GAAA,EAAI;AAEtD,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,aAAA,CAAc,OAAA,CAAQ,QAAQ,OAAA,CAAQ,KAAA;AAAA,QACxC;AACA,QAAA,IAAI,QAAQ,SAAA,KAAc,CAAC,eAAA,IAAmB,YAAA,CAAa,GAAG,CAAA,CAAA,EAAI;AAChE,UAAA,aAAA,CAAc,OAAA,CAAQ,YAAY,CAAA,GAAI,OAAA,CAAQ,SAAA;AAAA,QAChD;AASA,QAAA,aAAA,CAAc,OAAA,CAAQ,eAAe,CAAA,GAAI,qCAAA;AACzC,QAAA,aAAA,CAAc,QAAQ,MAAA,GAAS,UAAA;AAC/B,QAAA,aAAA,CAAc,QAAQ,OAAA,GAAU,GAAA;AAEhC,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,KAAA,CAAM,6BAA6B,GAAA,EAAK;AAAA,YACtC,QAAA,EAAU,CAAC,CAAC,OAAA,CAAQ,KAAA;AAAA,YACpB,YAAA,EAAc,CAAC,CAAC,OAAA,CAAQ;AAAA,WACzB,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,KAAA;AAAA,UACE,GAAG,aAAA,CAAc,MAAA,EAAQ,aAAa,CAAA,CAAA,EAAI,cAAc,GAAG,CAAA,CAAA;AAAA,UAC3D,aAAA,CAAc,UAAU,aAAA,CAAc;AAAA,SACxC;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,OAAO,MAAA,CAAO,SAAA,CAAU,aAAA,EAAe,MAAM,CAAA;AAAA,MAC/C;AAEA,MAAA,OAAO,aAAA;AAAA,IACT,CAAA;AAAA,IACA,CAACA,MAAAA,KAAU;AACT,MAAA,OAAO,OAAA,CAAQ,OAAOA,MAAK,CAAA;AAAA,IAC7B;AAAA,GACF;AACF,CAAA;ACjHA,IAAM,iBAAA,GAAoB,CAAC,gCAAA,EAAkC,gCAAgC,CAAA;AAE7F,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAA2B;AACvD,EAAA,MAAM,YAAa,IAAA,EAAqD,SAAA;AAExE,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAS,KAAK,SAAA,CAAU,MAAA,KAAW,GAAG,OAAO,KAAA;AAEhE,EAAA,OAAO,SAAA,CAAU,KAAA,CAAM,CAAC,QAAA,KAAa;AACnC,IAAA,MAAM,IAAA,GAAQ,UAAmD,IAAA,EAAM,IAAA;AACvE,IAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,iBAAA,CAAkB,SAAS,IAAI,CAAA;AAAA,EACpE,CAAC,CAAA;AACH,CAAA;AAUO,IAAM,wBAAA,GAA2B,CACtC,aAAA,EACA,MAAA,EACA,MAAA,KACS;AACT,EAAA,aAAA,CAAc,aAAa,QAAA,CAAS,GAAA;AAAA,IAClC,OAAO,QAAA,KAA4B;AAEjC,MAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AACpC,QAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA,IAAK,QAAA,CAAS,QAAQ,OAAO,CAAA;AACnE,QAAA,MAAM,YAAY,QAAA,CAAS,OAAA,CAAQ,YAAY,CAAA,IAAK,QAAA,CAAS,QAAQ,YAAY,CAAA;AAEjF,QAAA,IAAI,SAAS,SAAA,EAAW;AACtB,UAAA,MAAM,MAAA,CAAO,YAAY,IAAA,CAAK;AAAA,YAC5B,OAAO,KAAA,IAAS,MAAA;AAAA,YAChB,WAAW,SAAA,IAAa;AAAA,WACzB,CAAA;AAED,UAAA,IAAI,OAAO,KAAA,EAAO;AAChB,YAAA,KAAA;AAAA,cACE,6BAAA;AAAA,cACA,SAAS,MAAA,CAAO,GAAA;AAAA,cAChB,QAAA;AAAA,cACA,CAAC,CAAC,KAAA;AAAA,cACF,YAAA;AAAA,cACA,CAAC,CAAC;AAAA,aACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,YAAA,CAAa,SAAS,MAAA,CAAO,GAAG,KAAK,oBAAA,CAAqB,QAAA,CAAS,IAAI,CAAA,EAAG;AAC5E,QAAA,MAAM,IAAI,UAAA;AAAA,UACR,kCAAA;AAAA,UACA,UAAA,CAAW,eAAA;AAAA,UACX,QAAA,CAAS,MAAA;AAAA,UACT,QAAA,CAAS,OAAA;AAAA,UACT,EAAE,GAAG,QAAA,EAAU,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,IAAA,EAAM,gCAAA,EAAiC;AAAE,SAC/E;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,KAAA,CAAM,WAAA,EAAa,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,SAAS,MAAM,CAAA;AAAA,MACzD;AAGA,MAAA,IAAI,OAAO,UAAA,EAAY;AACrB,QAAA,OAAO,MAAA,CAAO,UAAA,CAAW,QAAA,EAAU,MAAM,CAAA;AAAA,MAC3C;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,CAACA,MAAAA,KAAU;AACT,MAAA,OAAO,OAAA,CAAQ,OAAOA,MAAK,CAAA;AAAA,IAC7B;AAAA,GACF;AACF,CAAA;;;ACtEO,IAAM,qBAAA,GAAwB,OACnC,MAAA,EACA,WAAA,KACkB;AAClB,EAAA,IAAI;AACF,IAAA,KAAA,CAAM,WAAW,2BAA2B,CAAA;AAG5C,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,mBAAmB,CAAA;AAGrD,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA,IAAK,QAAA,CAAS,QAAQ,OAAO,CAAA;AACnE,IAAA,MAAM,YAAY,QAAA,CAAS,OAAA,CAAQ,YAAY,CAAA,IAAK,QAAA,CAAS,QAAQ,YAAY,CAAA;AAGjF,IAAA,IAAI,SAAS,SAAA,EAAW;AACtB,MAAA,MAAM,YAAY,IAAA,CAAK;AAAA,QACrB,OAAO,KAAA,IAAS,KAAA,CAAA;AAAA,QAChB,WAAW,SAAA,IAAa,KAAA;AAAA,OACzB,CAAA;AAED,MAAA,KAAA,CAAM,WAAW,0BAAA,EAA4B;AAAA,QAC3C,QAAA,EAAU,CAAC,CAAC,KAAA;AAAA,QACZ,YAAA,EAAc,CAAC,CAAC;AAAA,OACjB,CAAA;AAAA,IACH;AAAA,EACF,SAASA,MAAAA,EAAO;AACd,IAAA,KAAA,CAAM,SAAA,EAAW,qCAAqCA,MAAK,CAAA;AAC3D,IAAA,MAAMA,MAAAA;AAAA,EACR;AACF,CAAA;;;ACpBO,IAAM,qBAAA,GAAwB,CACnC,aAAA,EACA,MAAA,EACA,MAAA,KACS;AACT,EAAA,aAAA,CAAc,aAAa,QAAA,CAAS,GAAA;AAAA,IAClC,CAAC,QAAA,KAAa,QAAA;AAAA,IACd,OAAO,UAAA,KAAiD;AACtD,MAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AACxB,QAAA,OAAO,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA,MAClC;AAEA,MAAA,MAAM,MAAA,GAAS,WAAW,QAAA,EAAU,MAAA;AACpC,MAAA,MAAM,SAAA,GAAY,WAAW,QAAA,EAAU,IAAA;AACvC,MAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,UAAU,CAAA,IAAK,CAAC,UAAA,CAAW,QAAA;AAG/D,MAAA,MAAM,OAAA,GAAU,WAAW,IAAA,IAAQ,eAAA;AACnC,MAAA,MAAM,SAAA,GAAY,SAAA,EAAW,OAAA,IAAW,UAAA,CAAW,OAAA,IAAW,eAAA;AAI9D,MAAA,MAAM,SAAA,GAAY,cAAA,GAAiB,eAAA,GAAkB,kBAAA,CAAmB,OAAO,CAAA;AAG/E,MAAA,MAAM,OAAA,GAAU,IAAI,mBAAA,CAAoB;AAAA,QACtC,OAAA,EAAS,SAAA;AAAA,QACT,UAAA,EAAY,MAAA;AAAA,QACZ,IAAA,EAAM,SAAA;AAAA;AAAA,QACN,YAAA,EAAc,OAAA;AAAA;AAAA,QACd,GAAA,EAAK,UAAA,CAAW,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAA,QAC/B,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,aAAY,IAAK,KAAA;AAAA,QACpD,WAAA,EAAa,WAAW,MAAA,EAAQ,IAAA;AAAA,QAChC,YAAA,EAAc,SAAA;AAAA,QACd,MAAM,SAAA,EAAW,IAAA;AAAA,QACjB,KAAA,EAAO;AAAA,OACR,CAAA;AAED,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,KAAA,CAAM,oBAAA,EAAsB,OAAA,EAAS,MAAA,EAAQ,SAAS,CAAA;AACtD,QAAA,KAAA,CAAS,OAAO,CAAA;AAAA,MAClB;AAGA,MAAA,IAAA,CACG,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,KAC9B,MAAA,CAAO,WAAA,IACP,YAAA,CAAa,UAAU,CAAA,IACvB,CAAC,UAAA,CAAW,MAAA,EAAQ,MAAA,EACpB;AACA,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,KAAA,CAAM,kDAAkD,CAAA;AAAA,QAC1D;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,WAAA,CAAY,SAAS,MAAM,CAAA;AAE5D,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,IAAI,OAAO,KAAA,EAAO;AAChB,cAAA,KAAA,CAAM,mCAAmC,CAAA;AAAA,YAC3C;AAGA,YAAA,UAAA,CAAW,OAAQ,MAAA,GAAS,IAAA;AAG5B,YAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,UAAA,CAAW,MAAO,CAAA;AAAA,UACjD;AAAA,QACF,SAAS,qBAAA,EAAuB;AAE9B,UAAA,IAAI,OAAO,KAAA,EAAO;AAChB,YAAA,KAAA,CAAM,mCAAmC,qBAAqB,CAAA;AAAA,UAChE;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,MAAM,CAAA;AAAA,MAChC;AAGA,MAAA,MAAM,YAAA,GAAe,SAAA,KAAc,eAAA,IAAmB,SAAA,KAAc,eAAA;AACpE,MAAA,IAAI,gBAAgB,YAAA,CAAa,UAAU,KAAK,CAAC,UAAA,CAAW,QAAQ,MAAA,EAAQ;AAC1E,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,KAAA,CAAM,iDAAiD,CAAA;AAAA,QACzD;AAEA,QAAA,IAAI;AAEF,UAAA,MAAM,qBAAA,CAAsB,aAAA,EAAe,MAAA,CAAO,WAAW,CAAA;AAG7D,UAAA,UAAA,CAAW,OAAQ,MAAA,GAAS,IAAA;AAG5B,UAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,UAAA,CAAW,MAAO,CAAA;AAAA,QACjD,SAAS,WAAA,EAAa;AAEpB,UAAA,MAAA,CAAO,aAAA,EAAe,OAAO,OAAO,CAAA;AACpC,UAAA,OAAO,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,QAC/B;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,aAAA,EAAe,OAAO,OAAO,CAAA;AAEpC,MAAA,OAAO,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,IAC/B;AAAA,GACF;AACF,CAAA;AClIO,IAAM,aAAA,GAAgB,EAAE,MAAA,CAAO;AAAA;AAAA,EAEpC,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA;AAAA,EAGtD,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,uBAAuB,CAAA;AAAA;AAAA,EAGpD,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,WAAW,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,qBAAqB,CAAA;AAAA;AAAA,EAGlD,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,kBAAkB,CAAA;AAAA;AAAA,EAG1C,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA;AAAA,EAGhB,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yBAAyB,CAAA;AAAA;AAAA,EAGrD,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,0BAA0B;AACrD,CAAC,CAAA;AAQM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA;AAAA,EAEhD,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA;AAAA,EAGhB,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA;AAAA,EAGnB,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,KAAA,EAAO,EAAE,MAAA;AACX,CAAC,CAAA;AAOM,IAAM,6BAAA,GAAgC,cAAc,MAAA,CAAO;AAAA;AAAA,EAEhE,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,MAAM,yBAAyB;AACnD,CAAC,CAAA;AAEM,IAAM,gCAAA,GAAmC,0BAA0B,MAAA,CAAO;AAAA;AAAA,EAE/E,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC,CAAA;AClFM,IAAM,WAAA,GAAcC,EAAE,MAAA,CAAO;AAAA;AAAA,EAElC,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,mBAAA,EAAqBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG9B,0BAAA,EAA4BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrC,2BAAA,EAA6BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtC,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,eAAA,EAAiBA,EAAE,MAAA;AACrB,CAAC,CAAA;ACvBM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEzC,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEd,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA;AAAA,EAEpB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEjB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA;AACxB,CAAC,CAAA;AAMM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEb,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEd,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEpB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,GAAA,EAAKA,EAAE,MAAA;AACT,CAAC,CAAA;AChCM,IAAM,YAAA,GAAeA,EACzB,MAAA,CAAO;AAAA;AAAA,EAEN,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGhB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,WAAA,EAAaA,EACV,MAAA,CAAO;AAAA,IACN,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,IACrB,UAAA,EAAYA,EAAE,MAAA;AAAO,GACtB,EACA,QAAA,EAAS;AAAA;AAAA,EAGZ,UAAA,EAAYA,EACT,MAAA,CAAO;AAAA;AAAA,IAEN,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,IAEpB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,IAEhB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,IAExB,UAAA,EAAYA,EAAE,MAAA;AAAO,GACtB,EACA,QAAA;AACL,CAAC,CAAA,CACA,MAAM,WAAW,CAAA;;;AChCb,IAAM,gBAAA,GAAmBA,EAC7B,MAAA,CAAO;AAAA;AAAA,EAEN,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,iBAAA,EAAmBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG5B,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,cAAA,EAAgBA,EAAE,MAAA;AACpB,CAAC,CAAA,CACA,MAAM,WAAW,CAAA;AAWb,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAErC,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGd,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGb,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGnB,eAAA,EAAiBA,EAAE,MAAA,CAAO;AAAA;AAAA,IAExB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,IAElB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,IAElB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,IAEtB,QAAA,EAAUA,EAAE,OAAA;AAAQ,GACrB,CAAA;AAAA;AAAA,EAGD,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,iBAAA,EAAmBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG5B,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGd,mBAAA,EAAqBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGzC,kBAAA,EAAoBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAG9B,oBAAA,EAAsBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGhC,iBAAA,EAAmBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAG7B,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA;AAAA,EAGnC,WAAWA,CAAAA,CAAE,KAAA;AAAA,IACXA,EAAE,MAAA,CAAO;AAAA;AAAA,MAEP,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,MAEpB,KAAA,EAAOA,EAAE,MAAA;AAAO,KACjB;AAAA,GACH;AAAA;AAAA,EAGA,WAAWA,CAAAA,CAAE,KAAA;AAAA,IACXA,EAAE,MAAA,CAAO;AAAA,MACP,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,MACd,KAAA,EAAOA,EAAE,MAAA;AAAO,KACjB;AAAA,GACH;AAAA;AAAA,EAGA,MAAA,EAAQ,YAAA;AAAA;AAAA,EAGR,MAAA,EAAQ,gBAAA;AAAA;AAAA,EAGR,kBAAA,EAAoBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG7B,IAAA,EAAMA,EAAE,IAAA,CAAK,CAAC,UAAU,UAAA,EAAY,SAAA,EAAW,UAAU,CAAC,CAAA;AAAA;AAAA,EAG1D,UAAA,EAAYA,EAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,SAAS;AAC9C,CAAC,CAAA;AC9GM,IAAM,gBAAA,GAAmBA,EAC7B,MAAA,CAAO;AAAA;AAAA,EAEN,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGzB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGzB,kBAAA,EAAoBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG7B,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGpC,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGxC,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,WAAWA,CAAAA,CAAE,KAAA;AAAA,IACXA,EAAE,MAAA,CAAO;AAAA;AAAA,MAEP,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,MAEf,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,MAEhB,IAAA,EAAMA,EAAE,MAAA;AAAO,KAChB;AAAA;AAEL,CAAC,CAAA,CACA,MAAM,WAAW,CAAA;AC5Cb,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEvC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,MAAA,EAAQA,EACL,MAAA,CAAO;AAAA;AAAA,IAEN,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,IAGzB,kBAAA,EAAoBA,EAAE,MAAA;AAAO,GAC9B,CAAA,CACA,KAAA,CAAM,WAAW;AACtB,CAAC,CAAA;ACjBM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEzC,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGhB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,WAAWA,CAAAA,CAAE,KAAA;AAAA,IACXA,EAAE,MAAA,CAAO;AAAA,MACP,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,MACd,KAAA,EAAOA,EAAE,MAAA;AAAO,KACjB;AAAA,GACH;AAAA;AAAA,EAGA,QAAA,EAAUA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGpB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,eAAA,EAAiBA,EAAE,MAAA;AACrB,CAAC,CAAA;AAWM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,WAAA,EAAaA,EAAE,MAAA,CAAO;AAAA,IACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC/B,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,IACnB,OAAA,EAASA,EAAE,MAAA;AAAO,GACnB,CAAA;AAAA;AAAA,EAGD,OAAOA,CAAAA,CAAE,KAAA;AAAA,IACPA,EAAE,MAAA,CAAO;AAAA;AAAA,MAEP,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,MAEd,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,MAEf,QAAA,EAAUA,EAAE,MAAA;AAAO,KACpB;AAAA,GACH;AAAA;AAAA,EAGA,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAM,kBAAkB;AAC5C,CAAC,CAAA;;;ACnEM,IAAM,UAAA,GAAaA,EAAE,MAAA,CAAO;AAAA,EACjC,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,cAAc,CAAA;AAAA,EAC7B,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,EACvB,aAAA,EAAeA,EAAE,OAAA,EAAQ;AAAA,EACzB,cAAA,EAAgBA,EAAE,OAAA,EAAQ;AAAA,EAC1B,eAAA,EAAiBA,EAAE,KAAA,CAAMA,CAAAA,CAAE,KAAK,CAAC,KAAA,EAAO,OAAO,CAAC,CAAC,CAAA;AAAA,EACjD,oBAAA,EAAsBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EACxC,uBAAA,EAAyBA,EAAE,OAAA,EAAQ;AAAA,EACnC,gBAAA,EAAkB,yBAAA;AAAA,EAClB,eAAA,EAAiB,gCAAA;AAAA,EACjB,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EAC7C,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACjC,MAAA,EAAQ,gBAAA;AAAA,EACR,QAAQA,CAAAA,CAAE,KAAA;AAAA,IACRA,EAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,MACf,OAAA,EAASA,EAAE,MAAA;AAAO,KACnB;AAAA,GACH;AAAA,EACA,UAAA,EAAYA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACvD,WAAA,EAAaA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA,EAChC,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS;AAC3B,CAAC,CAAA;AAGM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACpC,WAAWA,CAAAA,CACR,KAAA;AAAA,IACCA,EAAE,MAAA,CAAO;AAAA,MACP,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,MACpB,KAAA,EAAOA,EAAE,MAAA;AAAO,KACjB;AAAA,IAEF,QAAA;AACL,CAAC,CAAA;AAEkCA,EAAE,MAAA,CAAO;AAAA,EAC1C,OAAOA,CAAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA,CAAE,IAAI,CAAC;AAC5C,CAAC;AAEM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,WAAWA,CAAAA,CAAE,KAAA;AAAA,IACXA,EAAE,MAAA,CAAO;AAAA,MACP,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,MACjB,IAAA,EAAMA,EAAE,OAAA,EAAQ;AAAA,MAChB,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAAS,KACrD;AAAA;AAEL,CAAC,CAAA;AAEwCA,EAAE,MAAA,CAAO;AAAA,EAChD,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AAC7B,CAAC;AAEwCA,EAAE,MAAA,CAAO;AAAA,EAChD,GAAA,EAAKA,EAAE,MAAA;AACT,CAAC;AAEgCA,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AACxB,CAAC;AAIwCA,EAAE,MAAA,CAAO;AAAA,EAChD,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC3B,IAAA,EAAMA,EAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,SAAS;AACxC,CAAC;AAEwCA,EACtC,MAAA,CAAO;AAAA,EACN,eAAA,EAAiB,8BAAwB,OAAA,EAAQ;AAAA,EACjD,gBAAA,EAAkB,cAAiB,OAAA;AACrC,CAAC,EACA,OAAA;AAE0CA,EAAE,MAAA,CAAO;AAAA,EACpD,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACvD,OAAA,EAASA,EAAE,MAAA;AACb,CAAC;AChGM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE3C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGb,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA;AAAA,EAGpB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA;AAAA,EAG1B,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGhB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,GAAA,EAAKA,EAAE,MAAA;AACT,CAAC,CAAA;AAOM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGhB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,WAAA,EAAaA,EAAE,IAAA,EAAK;AAAA;AAAA,EAGpB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,mBAAA,EAAqBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG9B,0BAAA,EAA4BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrC,2BAAA,EAA6BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtC,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,UAAA,EAAYA,EAAE,MAAA,CAAO;AAAA;AAAA,IAEnB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,IAGpB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,IAGhB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,IAGxB,UAAA,EAAYA,EAAE,MAAA;AAAO,GACtB;AACH,CAAC,CAAA;AAOM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,iBAAA,EAAmBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG5B,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGzB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,mBAAA,EAAqBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG9B,0BAAA,EAA4BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrC,2BAAA,EAA6BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtC,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,eAAA,EAAiBA,EAAE,MAAA;AACrB,CAAC,CAAA;AAOM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE3C,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGlB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,QAAA,EAAUA,EAAE,OAAA;AACd,CAAC,CAAA;AAOM,IAAM,eAAA,GAAkBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEtC,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGd,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGb,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGnB,eAAA,EAAiB,oBAAA;AAAA;AAAA,EAGjB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGf,iBAAA,EAAmBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG5B,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGd,mBAAA,EAAqBA,EAAE,IAAA,EAAK;AAAA;AAAA,EAG5B,kBAAA,EAAoBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAG9B,oBAAA,EAAsBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGhC,iBAAA,EAAmBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAG7B,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA;AAAA,EAG1B,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA;AAAA;AAAA,EAGpC,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAG9B,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAG9B,MAAA,EAAQ,qBAAA;AAAA;AAAA,EAGR,MAAA,EAAQ,qBAAA;AAAA;AAAA,EAGR,kBAAA,EAAoBA,EAAE,MAAA;AACxB,CAAC,CAAA;ACvMM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAExC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGnB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGzB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGzB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGpB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGvB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGzB,kBAAA,EAAoBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG7B,kBAAA,EAAoBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG7B,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAG9B,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGxB,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,mBAAA,EAAqBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG9B,0BAAA,EAA4BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrC,2BAAA,EAA6BA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtC,eAAA,EAAiBA,EAAE,MAAA,EAAO;AAAA;AAAA,EAG1B,eAAA,EAAiBA,EAAE,MAAA;AACrB,CAAC,CAAA;;;ACxDM,IAAM,eAAA,GAAkBA,EAAE,IAAA,CAAK;AAAA,EACpC,SAAA;AAAA;AAAA,EACA,YAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,WAAA;AAAA;AAAA,EACA,WAAA;AAAA;AAAA,EACA,UAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAC,CAAA;AAQM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGb,MAAA,EAAQ,eAAA;AAAA;AAAA,EAGR,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,eAAe,CAAA;AAAA;AAAA,EAG9B,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAG5B,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAGzB,MAAA,EAAQ,iBAAA;AAAA;AAAA,EAGR,gBAAA,EAAkB,aAAA;AAAA;AAAA,EAGlB,eAAA,EAAiB,6BAAA;AAAA;AAAA,EAGjB,aAAA,EAAeA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAGzB,cAAA,EAAgBA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAG1B,oBAAA,EAAsBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA;AAAA,EAGxC,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA;AAAA,EAG3B,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGpC,oBAAA,EAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnC,CAAC,CAAA;ACrDM,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AAAA,EACrC,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,eAAA,EAAiB,gCAAA;AAAA,EACjB,gBAAA,EAAkB,yBAAA;AAAA,EAClB,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA;AAAA;AAAA,EAGzB,cAAA,EAAgBA,EACb,MAAA,CAAO;AAAA,IACN,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,IACzB,eAAA,EAAiBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA,IACpC,YAAA,EAAcA,EAAE,MAAA;AAAO,GACxB,EACA,QAAA;AACL,CAAC,CAAA;AAKkCA,EAAE,MAAA,CAAO;AAAA,EAC1C,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,EACzB,cAAcA,CAAAA,CACX,KAAA;AAAA,IACCA,EAAE,MAAA,CAAO;AAAA,MACP,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,MACd,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,OAAA,EAAS,CAAC;AAAA,KACzC;AAAA,IAEF,QAAA,EAAS;AAAA,EACZ,eAAA,EAAiB,8BAA8B,QAAA,EAAS;AAAA,EACxD,gBAAA,EAAkB,cAAc,QAAA,EAAS;AAAA,EACzC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,cAAA,EAAgBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACrC,UAAA,EAAYA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAChD,CAAC;AChDM,IAAM,eAAA,GAAkBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEtC,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEtB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,EAElB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA;AAAA,EAElB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEtB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,GAAA,EAAKA,EAAE,MAAA;AACT,CAAC,CAAA;ACXM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE7C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE5B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAEjC,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE7B,KAAA,EAAO,kBAAA,CAAmB,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA;AAAA,EAE9C,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAEhC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC,CAAA;AAOM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEjB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEtB,KAAA,EAAO,mBAAmB,QAAA,EAAS;AAAA;AAAA,EAEnC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAEhC,KAAA,EAAOA,EAAE,MAAA;AACX,CAAC,CAAA;;;ACrCM,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EAC1B,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,iBAAA,EAAmBA,EAAE,MAAA,EAAO;AAAA,EAC5B,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,cAAA,EAAgBA,EAAE,OAAA,EAAQ;AAAA,EAC1B,WAAA,EAAaA,EAAE,OAAA,EAAQ;AAAA,EACvB,eAAA,EAAiBA,EAAE,OAAA,EAAQ;AAAA,EAC3B,mBAAA,EAAqBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzC,iBAAA,EAAmBA,EAAE,OAAA,EAAQ;AAAA,EAC7B,WAAA,EAAa,eAAA;AAAA,EACb,WAAA,EAAaA,EAAE,OAAA,EAAQ;AAAA,EACvB,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,EACnB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA,EAC/B,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,EAC1C,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA,EACzB,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAM,kBAAkB,CAAA;AAAA,EAClC,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,SAAS,CAAA;AAAA,EAC/B,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,MAAA,EAAQ,YAAA;AAAA,EACR,cAAA,EAAgBA,EAAE,MAAA,EAAO;AAAA,EACzB,YAAA,EAAcA,EAAE,MAAA,EAAO;AAAA,EACvB,UAAA,EAAYA,EAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,SAAS;AAC9C,CAAC,CAAA;ACvCM,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEvC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA;ACGqCA,EAAE,MAAA,CAAO;AAAA;AAAA,EAE7C,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGtB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA;AAAA,EAGrB,WAAA,EAAaA,EAAE,MAAA;AACjB,CAAC;AAOM,IAAM,2BAAA,GAA8B,+BAAA;;;ACjB3C,IAAM,kBAAA,GAAqB,EAAA;AAE3B,IAAM,KAAA,GAAQ,CAAI,IAAA,EAAW,IAAA,KAC3B,KAAA,CAAM,IAAA;AAAA,EAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,KAAK,IAAA,CAAK,MAAA,GAAS,IAAI,CAAA,EAAE;AAAA,EAAG,CAAC,GAAG,KAAA,KACxD,IAAA,CAAK,MAAM,KAAA,GAAQ,IAAA,EAAM,KAAA,GAAQ,IAAA,GAAO,IAAI;AAC9C,CAAA;AAEF,IAAM,UAAA,GAAa,CAAC,MAAA,KAA4B,MAAA,IAAU,OAAO,MAAA,GAAS,GAAA;AAE1E,IAAM,SAAA,GAAY,CAAC,IAAA,KAAuD;AACxE,EAAA,MAAM,IAAA,GAAO,IAAA;AAEb,EAAA,OAAO;AAAA,IACL,MAAM,OAAO,IAAA,EAAM,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,MAAA;AAAA,IACnD,SAAS,OAAO,IAAA,EAAM,OAAA,KAAY,QAAA,GAAW,KAAK,OAAA,GAAU;AAAA,GAC9D;AACF,CAAA;AAEO,IAAM,aAAA,GAAgB,CAC3B,MAAA,EACA,SAAA,EACA,OAAA,MACa;AAAA,EACb,KAAK,YAAY;AACf,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,UAAU,IAAI,CAAA;AAChD,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,OAAA,EAAS,OAAO,KAAA,KAAU;AACxB,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,SAAS,KAAK,CAAA;AAC3D,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,QAAA,EAAU,OAAO,EAAE,KAAA,EAAM,KAAM;AAC7B,IAAA,MAAM,YAAwC,EAAC;AAC/C,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,KAAA,EAAO,kBAAkB,CAAA,EAAG;AACpD,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAA,CAAK,UAAU,KAAA,EAAO;AAAA,UAClD,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,YAC7B,MAAA,EAAQ,MAAA;AAAA,YACR,MAAM,SAAA,CAAU,OAAA;AAAA,YAChB,IAAA,EAAM;AAAA,WACR,CAAE;AAAA,SACH,CAAA;AAED,QAAA,SAAA,CAAU,KAAK,GAAG,iBAAA,CAAkB,UAAU,mBAAA,EAAqB,OAAO,EAAE,SAAS,CAAA;AAAA,MACvF,SAASD,MAAAA,EAAO;AACd,QAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,MAAMA,MAAAA;AAElC,QAAA,WAAA,GAAc,IAAA;AACd,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACzC,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,SAAA,CAAU,OAAO,IAAI,CAAA;AAE/C,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,MAAA,EAAQ,OAAO,MAAA,IAAU,GAAA;AAAA,QACzB,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS,EAAC;AAAA,QACvB,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,OAC/B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,CAAC,GAAG,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,CAAM,MAAM,CAAC,CAAA;AACtF,IAAA,MAAM,SAAA,GAAY,eACd,aAAA,CAAc,YAAA,CAAa,MAAM,UAAA,EAAY,OAAA,EAAS,SAAA,CAAU,KAAK,CAAA,GACrE,MAAA;AAEJ,IAAA,IAAI,IAAA,GAAO,cAAc,MAAA,GAAY,SAAA;AAErC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,iBAAA,CAAkB,MAAM,MAAA,CAAO,GAAA,CAAI,UAAU,IAAI,CAAA,EAAG,YAAY,OAAO,CAAA;AAAA,MAChF,SAASA,MAAAA,EAAO;AACd,QAAA,IAAI,CAAC,WAAW,MAAMA,MAAAA;AAEtB,QAAA,IAAA,GAAO,SAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB,CAAA;AAAA,EAEA,UAAA,EAAY,OAAO,KAAA,KAAU;AAC3B,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,YAAY,KAAK,CAAA;AAC9D,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,UAAA,EAAY,OAAO,KAAA,KAAU;AAC3B,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,YAAY,KAAK,CAAA;AAC9D,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,WAAA,EAAa,OAAO,KAAA,KAAU;AAC5B,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,aAAa,KAAK,CAAA;AAC/D,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,YAAA,EAAc,OAAO,KAAA,KAAU;AAC7B,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,cAAc,KAAK,CAAA;AAChE,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA;AAAA,EAGA,gBAAA,EAAkB,OAAO,KAAA,KAAU;AACjC,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,kBAAkB,KAAK,CAAA;AACpE,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,cAAA,EAAgB,OAAO,KAAA,KAAU;AAC/B,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,gBAAgB,KAAK,CAAA;AAClE,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,kBAAA,EAAoB,OAAO,KAAA,KAAU;AACnC,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,oBAAoB,KAAK,CAAA;AACtE,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EACxD;AACF,CAAA,CAAA;;;AC5HO,IAAM,iBAAA,GAAoB,CAC/B,MAAA,EACA,SAAA,EACA,SACA,gBAAA,MACiB;AAAA,EACjB,KAAK,YAAY;AACf,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,UAAU,QAAQ,CAAA;AACpD,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,cAAA,EAAgB,OAAO,CAAA;AAAA,EAC5D,CAAA;AAAA,EAEA,OAAA,EAAS,OAAO,KAAA,KAAU;AACxB,IAAA,MAAM,OAAO,gBAAA,GACT;AAAA,MACE,GAAG,KAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,CAAC,2BAA2B,GAAG,gBAAA;AAAA,QAC/B,GAAG,KAAA,CAAM;AAAA;AACX,KACF,GACA,KAAA;AAEJ,IAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,UAAU,IAAI,CAAA;AAC3D,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,cAAA,EAAgB,OAAO,CAAA;AAAA,EAC5D;AACF,CAAA,CAAA;;;AC3BO,IAAM,eAAA,GAAkB,CAC7B,MAAA,EACA,SAAA,EACA,OAAA,MACe;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,GAAA,EAAK,OAAO,KAAA,KAAyB;AACnC,IAAA,MAAM,EAAE,EAAA,EAAI,aAAA,EAAe,GAAA,EAAI,GAAI,KAAA;AAEnC,IAAA,MAAM,SAAS,aAAA,IAAiB,GAAA,GAAM,EAAE,aAAA,EAAe,KAAI,GAAI,MAAA;AAE/D,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,KAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,CAAA;AACxE,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,mBAAA,EAAqB,OAAO,CAAA;AAAA,EACjE;AACF,CAAA,CAAA;ACbO,IAAM,iBAAA,GAAoB,CAC/B,MAAA,EACA,SAAA,EACA,OAAA,MACiB;AAAA,EACjB,IAAA,EAAM,OAAO,MAAA,KAAW;AACtB,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,UAAU,QAAA,EAAU,EAAE,QAAQ,CAAA;AAChE,IAAA,OAAO,2BAA2B,QAAA,EAAUC,CAAAA,CAAE,MAAM,aAAa,CAAA,EAAG,QAAQ,OAAO,CAAA;AAAA,EACrF,CAAA;AAAA,EAEA,GAAA,EAAK,OAAO,EAAA,KAAO;AACjB,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,GAAG,SAAA,CAAU,QAAQ,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAC/D,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,aAAA,EAAe,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA,EAEA,YAAY,YAAY;AACtB,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,UAAU,UAAU,CAAA;AACtD,IAAA,OAAO,kBAAkB,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,GAAG,OAAO,CAAA;AAAA,EAC5E,CAAA;AAAA;AAAA;AAAA,EAIA,IAAA,EAAM,OAAO,MAAA,KAAW;AACtB,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAAI,UAAU,IAAA,EAAM;AAAA,MAChD,QAAQ,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAAE,KAC/C,CAAA;AACD,IAAA,OAAO,kBAAkB,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,GAAG,OAAO,CAAA;AAAA,EACvE;AACF,CAAA,CAAA;;;AChCO,IAAM,eAAA,GAAkB,CAAC,OAAA,GAA2B,QAAA,KAAa;AACtE,EAAA,MAAM,MAAA,GAAS,OAAA,KAAY,IAAA,GAAO,cAAA,GAAiB,WAAA;AAEnD,EAAA,OAAO;AAAA;AAAA,IAEL,QAAA,EAAU,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,IACnB,UAAA,EAAY,GAAG,MAAM,CAAA,oBAAA,CAAA;AAAA;AAAA,IAErB,IAAA,EAAM,GAAG,MAAM,CAAA,cAAA,CAAA;AAAA;AAAA,IAGf,IAAA,EAAM,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,IACf,OAAA,EAAS,GAAG,MAAM,CAAA,cAAA,CAAA;AAAA,IAClB,UAAA,EAAY,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,IACrB,UAAA,EAAY,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,IACrB,WAAA,EAAa,GAAG,MAAM,CAAA,kBAAA,CAAA;AAAA,IACtB,YAAA,EAAc,GAAG,MAAM,CAAA,mBAAA,CAAA;AAAA;AAAA,IAEvB,gBAAA,EAAkB,GAAG,MAAM,CAAA,gBAAA,CAAA;AAAA,IAC3B,cAAA,EAAgB,GAAG,MAAM,CAAA,qBAAA,CAAA;AAAA,IACzB,kBAAA,EAAoB,GAAG,MAAM,CAAA,0BAAA,CAAA;AAAA;AAAA,IAG7B,KAAA,EAAO,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA;AAAA,IAGhB,QAAA,EAAU,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA;AAAA,IAGnB,KAAA,EAAO,GAAG,MAAM,CAAA,MAAA;AAAA,GAClB;AACF,CAAA;;;AChBA,IAAM,sBAAA,GAAwC;AAAA,EAC5C,MAAA,EAAQ,CAACD,MAAAA,KAAiB;AACxB,IAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuBA,MAAK,CAAA;AAAA,EAC5C;AACF,CAAA;AAqCO,IAAM,YAAA,GAAe,CAAC,MAAA,KAAiD;AAE5E,EAAA,MAAM,UAAA,GAAgC;AAAA,IACpC,GAAG,MAAA;AAAA,IACH,aAAA,EAAe,OAAO,aAAA,IAAiB;AAAA,GACzC;AAGA,EAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO;AAAA,IACjC,SAAS,UAAA,CAAW,OAAA;AAAA,IACpB,OAAA,EAAS,WAAW,OAAA,IAAW,GAAA;AAAA,IAC/B,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,UAAA,CAAW;AAAA;AAChB,GACD,CAAA;AAGD,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,UAAA,CAAW,eAAA,IAAmB,QAAQ,CAAA;AAGxE,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,gBAAgB,UAAA,CAAW,cAAA;AAAA,IAC3B,aAAA,EAAe,WAAW,aAAA,EAAe,MAAA;AAAA,IACzC,mBAAmB,UAAA,CAAW;AAAA,GAChC;AAGA,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,MAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,iBAAA,CAAkB,aAAA,EAAe,SAAA,EAAW,eAAe,CAAA;AAAA,IACrE,IAAA,EAAM,aAAA,CAAc,aAAA,EAAe,SAAA,EAAW,eAAe,CAAA;AAAA,IAC7D,QAAA,EAAU,iBAAA;AAAA,MACR,aAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA,CAAW;AAAA,KACb;AAAA,IACA,MAAA,EAAQ,eAAA,CAAgB,aAAA,EAAe,SAAA,EAAW,eAAe;AAAA,GACnE;AAGA,EAAA,uBAAA,CAAwB,aAAA,EAAe,YAAY,MAAM,CAAA;AACzD,EAAA,wBAAA,CAAyB,aAAA,EAAe,YAAY,MAAM,CAAA;AAC1D,EAAA,qBAAA,CAAsB,aAAA,EAAe,YAAY,MAAM,CAAA;AAEvD,EAAA,OAAO,MAAA;AACT,CAAA;AC7GO,SAAS,kBAAkB,OAAA,EAIlB;AACd,EAAA,MAAM,MAAA,GAASE,MAAM,MAAA,CAAO;AAAA,IAC1B,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,IAAA,EAAM;AAAA,MACJ,UAAU,OAAA,CAAQ,WAAA;AAAA,MAClB,UAAU,OAAA,CAAQ;AAAA,KACpB;AAAA,IACA,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,OAAO,EAAA,EAAY,KAAA,GAAQ,IAAA,KAAS;AAC/C,MAAA,MAAM,MAAA,CAAO,MAAA,CAAO,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA,EAAI;AAAA,QACzC,MAAA,EAAQ,EAAE,KAAA;AAAM,OACjB,CAAA;AAAA,IACH;AAAA,GACF;AACF;ACxBO,IAAM,oBAAA,GAAuB;AAAA,EAClC,UAAA,EAAY,KAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,OAAA,EAAS,EAAA;AAAA,EACT,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,KAAA,EAAO,cAAA;AAAA,EACP,KAAA,EAAO;AACT;AAEO,IAAM,qBAAA,GAAwB;AAAA,EACnC,UAAA,EAAY,KAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,OAAA,EAAS,EAAA;AAAA,EACT,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,KAAA,EAAO;AACT;AAEO,SAAS,yBAAA,GAAgD;AAC9D,EAAA,IAAI,SAAiD,EAAC;AACtD,EAAA,OAAO;AAAA,IACL,KAAK,YAAY,MAAA;AAAA,IACjB,IAAA,EAAM,OAAO,OAAA,KAAY;AACvB,MAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,GAAG,OAAA,EAAQ;AAAA,IACnC,CAAA;AAAA,IACA,OAAO,YAAY;AACjB,MAAA,MAAA,GAAS,EAAC;AAAA,IACZ;AAAA,GACF;AACF;AAEO,SAAS,uBAAuB,KAAA,EAAgC;AACrE,EAAA,OAAO;AAAA,IACL,KAAK,YAAY;AAAA,GACnB;AACF;AAIA,eAAsB,WAAA,CACpB,OAAA,EACA,QAAA,EACA,QAAA,EACiB;AACjB,EAAA,MAAM,WAAW,MAAMA,KAAAA,CAAM,IAAA,CAAK,CAAA,EAAG,OAAO,CAAA,kBAAA,CAAA,EAAsB;AAAA,IAChE,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO,SAAS,IAAA,CAAK,KAAA;AACvB;AAEO,SAAS,kBAAA,CACd,MAAA,EACA,QAAA,EACA,QAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,CAAC,YAAA,EAAc,WAAA,EAAa,aAAa,MAAA,EAAQ,UAAA,EAAY,WAAW,OAAO,CAAA;AAC9F,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,QAAA,CAAS,OAAO,KAAK,CAAC,EAAE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EAC9C;AACF;;;AC5DO,SAAS,2BAA2B,OAAA,EAA4C;AACrF,EAAA,MAAM,EAAE,OAAA,GAAU,GAAA,EAAM,GAAI,OAAA;AAG5B,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,QAAA;AACzC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,EAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,IAAU,CAAA,CAAE,MAAA;AACrC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,IAAa,CAAA,CAAE,SAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,QAAA;AAEzC,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,IAAc,CAAC,QAAQ,UAAA,EAAY;AAC9C,IAAA,UAAA,CAAW,8BAA8B,MAAM;AAC7C,MAAA,IAAA,CAAK,6CAAwC,MAAM;AACjD,QAAA,OAAA,CAAQ,KAAK,2EAA2E,CAAA;AAAA,MAC1F,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,UAAA,CAAW,8BAA8B,MAAM;AAC7C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,cAAA,GAAgC,IAAA;AAEpC,IAAA,WAAA,CAAY,YAAY;AACtB,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,SAAS,OAAA,CAAQ,UAAA,EAAa,QAAQ,UAAW,CAAA;AAEzF,MAAA,MAAA,GAAS,YAAA,CAAa;AAAA,QACpB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,eAAA,EAAiB,QAAQ,eAAA,IAAmB,IAAA;AAAA,QAC5C,aAAa,yBAAA,EAA0B;AAAA,QACvC,QAAA,EAAU,uBAAuB,KAAK,CAAA;AAAA,QACtC,cAAA,EAAgB;AAAA,OACjB,CAAA;AAED,MAAA,WAAA,GAAc,iBAAA,CAAkB;AAAA,QAC9B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,gBAAgB,OAAA,CAAQ;AAAA,OACzB,CAAA;AAAA,IACH,GAAG,OAAO,CAAA;AAEV,IAAA,UAAA,CAAW,YAAY;AACrB,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,CAAY,YAAY,cAAc,CAAA;AAAA,QAC9C,CAAA,CAAA,MAAQ;AACN,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qCAAA,EAAwC,cAAc,CAAA,CAAE,CAAA;AAAA,QACvE;AAAA,MACF;AAAA,IACF,GAAG,OAAO,CAAA;AAIV,IAAA,IAAA;AAAA,MACE,sCAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI;AACnC,QAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,KAAA,EAAO;AAC7B,UAAA,MAAM,OAAO,IAAA,CAAK,UAAA,CAAW,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAAA,QAChD;AACA,QAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI;AACtC,QAAA,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,MACtC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAA;AAAA,MACE,uBAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,CAAA;AAClE,QAAA,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAC9C,QAAA,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAG,EAAA;AAAA,MAC9B,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAA;AAAA,MACE,uCAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,CAAA,EAAG,CAAA;AACrE,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACjC,QAAA,QAAA,CAAS,KAAK,KAAA,CAAM,CAAC,EAAG,EAAE,CAAA,CAAE,KAAK,SAAS,CAAA;AAC1C,QAAA,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAG,GAAA;AAAA,MAC/B,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,mBAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI;AACnC,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,MACxC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,kCAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe;AAAA,UAC5C,eAAA,EAAiB,oBAAA;AAAA,UACjB,gBAAA,EAAkB;AAAA,SACnB,CAAA;AAED,QAAA,kBAAA,CAAmB,IAAA,CAAK,eAAA,EAAiB,oBAAA,EAAsB,QAAQ,CAAA;AACvE,QAAA,kBAAA,CAAmB,IAAA,CAAK,gBAAA,EAAkB,qBAAA,EAAuB,QAAQ,CAAA;AACzE,QAAA,QAAA,CAAS,KAAK,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,qBAAqB,KAAK,CAAA;AAAA,MACtE,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,iDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI;AACnC,QAAA,QAAA,CAAS,KAAK,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,qBAAqB,KAAK,CAAA;AACpE,QAAA,kBAAA,CAAmB,IAAA,CAAK,gBAAA,EAAkB,qBAAA,EAAuB,QAAQ,CAAA;AAAA,MAC3E,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,8BAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,GAAA,EAAK,aAAa,CAAA;AAC9D,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,MACpC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,yCAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,CAAA,EAAG,CAAA;AACrE,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,MACnC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,6BAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,QAAA,CAAS,GAAA,EAAI;AAC3C,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,UAAU,CAAA;AAC5C,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,iBAAiB,CAAA;AACnD,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,kBAAkB,CAAA;AACpD,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,gBAAgB,CAAA;AAAA,MACpD,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,0CAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,UAC7C,cAAA,EAAgB,KAAA;AAAA,UAChB,eAAA,EAAiB,oBAAA;AAAA,UACjB,gBAAA,EAAkB;AAAA,SACnB,CAAA;AAED,QAAA,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,CAAE,eAAA,CAAgB,CAAC,CAAA;AAC7C,QAAA,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA;AACjD,QAAA,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,CAAE,UAAA,EAAW;AAErC,QAAA,cAAA,GAAiB,QAAA,CAAS,QAAA;AAAA,MAC5B,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,gDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI;AAAA,UACpC,EAAA,EAAI;AAAA,SACL,CAAA;AAED,QAAA,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,cAAc,CAAA;AACtC,QAAA,kBAAA,CAAmB,KAAA,CAAM,eAAA,EAAiB,oBAAA,EAAsB,QAAQ,CAAA;AACxE,QAAA,kBAAA,CAAmB,KAAA,CAAM,gBAAA,EAAkB,qBAAA,EAAuB,QAAQ,CAAA;AAC1E,QAAA,QAAA,CAAS,MAAM,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,qBAAqB,KAAK,CAAA;AACrE,QAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAAA,MAChD,CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;;;ACjNO,SAAS,wBAAwB,OAAA,EAA4C;AAClF,EAAA,MAAM,EAAE,OAAA,GAAU,GAAA,EAAM,GAAI,OAAA;AAG5B,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,QAAA;AACzC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,EAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,IAAU,CAAA,CAAE,MAAA;AACrC,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,QAAA;AAEzC,EAAA,UAAA,CAAW,2BAA2B,MAAM;AAG1C,IAAA,MAAM,iBAA2B,EAAC;AAElC,IAAA,MAAM,cAA2B,iBAAA,CAAkB;AAAA,MACjD,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,UAAA,CAAW,YAAY;AACrB,MAAA,KAAA,MAAW,MAAM,cAAA,EAAgB;AAC/B,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,CAAY,YAAY,EAAE,CAAA;AAAA,QAClC,CAAA,CAAA,MAAQ;AACN,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4CAAA,EAA+C,EAAE,CAAA,CAAE,CAAA;AAAA,QAClE;AAAA,MACF;AAAA,IACF,GAAG,OAAO,CAAA;AAMV,IAAA,eAAe,iBAAA,GAAgD;AAC7D,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,eAAA,EAAiB,QAAQ,eAAA,IAAmB,IAAA;AAAA,QAC5C,aAAa,yBAAA,EAA0B;AAAA,QACvC,cAAA,EAAgB;AAAA,OACjB,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,CAAA;AACpE,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC9B,QAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,EAAE,EAAA,EAAI,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAAG,EAAA,EAAI,QAAA,EAAU,CAAA,EAAG,CAAA;AACnE,MAAA,OAAO,MAAA;AAAA,IACT;AAOA,IAAA,eAAe,eAAA,CACb,OACA,YAAA,EACe;AACf,MAAA,IAAI,MAAA,GAAkB,IAAA;AACtB,MAAA,IAAI,MAAA,GAAsC,IAAA;AAE1C,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,YAAA,EAAa;AAAA,MAC9B,SAASF,MAAAA,EAAO;AACd,QAAA,MAAA,GAASA,MAAAA;AAAA,MACX;AAEA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI,OAAO,QAAA,GAAW,CAAA,EAAG,cAAA,CAAe,IAAA,CAAK,OAAO,QAAQ,CAAA;AAC5D,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,EAAG,KAAK,CAAA,6DAAA,EAAgE,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,SACzF;AAAA,MACF;AAEA,MAAA,QAAA,CAAS,MAAM,CAAA,CAAE,cAAA,CAAe,mBAAmB,CAAA;AACnD,MAAA,MAAM,OAAA,GAAU,MAAA;AAChB,MAAA,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IACvC;AAIA,IAAA,IAAA;AAAA,MACE,oDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,QAAA,MAAM,eAAA;AAAA,UAAgB,qBAAA;AAAA,UAAuB,MAC3C,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,YACtB,cAAA,EAAgB,KAAA;AAAA,YAChB,eAAA,EAAiB,EAAE,GAAG,oBAAA,EAAsB,OAAO,EAAA,EAAG;AAAA,YACtD,gBAAA,EAAkB;AAAA,WACnB;AAAA,SACH;AAAA,MACF,CAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAA;AAAA,MACE,sDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,QAAA,MAAM,eAAA;AAAA,UAAgB,uBAAA;AAAA,UAAyB,MAC7C,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,YACtB,cAAA,EAAgB,KAAA;AAAA,YAChB,eAAA,EAAiB,EAAE,GAAG,oBAAA,EAAsB,OAAO,cAAA,EAAe;AAAA,YAClE,gBAAA,EAAkB;AAAA,WACnB;AAAA,SACH;AAAA,MACF,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,MAAM,qBAAA,GAAwB;AAAA,MAC5B,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,SAAS,qBAAA,EAAuB;AACzC,MAAA,IAAA;AAAA,QACE,uCAAuC,KAAK,CAAA,SAAA,CAAA;AAAA,QAC5C,YAAY;AACV,UAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,UAAA,MAAM,eAAA;AAAA,YAAgB,iBAAiB,KAAK,CAAA,CAAA;AAAA,YAAI,MAC9C,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,cACtB,cAAA,EAAgB,KAAA;AAAA,cAChB,iBAAiB,EAAE,GAAG,sBAAsB,CAAC,KAAK,GAAG,EAAA,EAAG;AAAA,cACxD,gBAAA,EAAkB;AAAA,aACnB;AAAA,WACH;AAAA,QACF,CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAIA,IAAA,IAAA;AAAA,MACE,yDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,QAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,QAAA,IAAI,OAAA,GAAU,CAAA;AAEd,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,YAC3C,cAAA,EAAgB,KAAA;AAAA,YAChB,eAAA,EAAiB,EAAE,GAAG,oBAAA,EAAsB,OAAO,EAAA,EAAG;AAAA,YACtD,gBAAA,EAAkB,EAAE,GAAG,qBAAA,EAAuB,OAAO,EAAA;AAAG,WACzD,CAAA;AACD,UAAA,cAAA,GAAiB,OAAO,QAAA,GAAW,CAAA;AACnC,UAAA,OAAA,GAAU,MAAA,CAAO,QAAA;AAAA,QACnB,SAASA,MAAAA,EAAO;AACd,UAAA,QAAA,CAASA,MAAK,CAAA,CAAE,cAAA,CAAe,mBAAmB,CAAA;AAAA,QACpD;AAEA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,QAC7B;AAEA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,6BAAA,EAAgC,cAAA,GAAiB,UAAA,GAAa,UAAU,CAAA,0BAAA;AAAA,SAC1E;AACA,QAAA,QAAA,CAAS,OAAO,cAAc,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA;AAAA,MAChD,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,MAAM,sBAAA,GAAyB;AAAA,MAC7B,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,SAAS,sBAAA,EAAwB;AAC1C,MAAA,IAAA;AAAA,QACE,wCAAwC,KAAK,CAAA,SAAA,CAAA;AAAA,QAC7C,YAAY;AACV,UAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,UAAA,MAAM,eAAA;AAAA,YAAgB,kBAAkB,KAAK,CAAA,CAAA;AAAA,YAAI,MAC/C,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,cACtB,cAAA,EAAgB,KAAA;AAAA,cAChB,eAAA,EAAiB,oBAAA;AAAA,cACjB,kBAAkB,EAAE,GAAG,uBAAuB,CAAC,KAAK,GAAG,EAAA;AAAG,aAC3D;AAAA,WACH;AAAA,QACF,CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAIA,IAAA,IAAA;AAAA,MACE,0DAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,QAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,QAAA,IAAI,OAAA,GAAU,CAAA;AAEd,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,YAC3C,cAAA,EAAgB,KAAA;AAAA,YAChB,eAAA,EAAiB,oBAAA;AAAA,YACjB,gBAAA,EAAkB,EAAE,GAAG,qBAAA,EAAuB,OAAO,EAAA;AAAG,WACzD,CAAA;AACD,UAAA,cAAA,GAAiB,OAAO,QAAA,GAAW,CAAA;AACnC,UAAA,OAAA,GAAU,MAAA,CAAO,QAAA;AAAA,QACnB,SAASA,MAAAA,EAAO;AACd,UAAA,QAAA,CAASA,MAAK,CAAA,CAAE,cAAA,CAAe,mBAAmB,CAAA;AAAA,QACpD;AAEA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,QAC7B;AAEA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,6BAAA,EAAgC,cAAA,GAAiB,UAAA,GAAa,UAAU,CAAA,mCAAA;AAAA,SAC1E;AACA,QAAA,QAAA,CAAS,OAAO,cAAc,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA;AAAA,MAChD,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,kDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,EAAkB;AACvC,QAAA,MAAM,eAAA;AAAA,UAAgB,sBAAA;AAAA,UAAwB,MAC5C,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,YACtB,cAAA,EAAgB,EAAA;AAAA,YAChB,eAAA,EAAiB,oBAAA;AAAA,YACjB,gBAAA,EAAkB;AAAA,WACnB;AAAA,SACH;AAAA,MACF,CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;;;ACjQO,SAAS,mBAAmB,OAAA,EAA4C;AAC7E,EAAA,MAAM,EAAE,OAAA,GAAU,GAAA,EAAM,GAAI,OAAA;AAG5B,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,QAAA;AACzC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,EAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,IAAU,CAAA,CAAE,MAAA;AACrC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,IAAa,CAAA,CAAE,SAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,QAAA;AAEzC,EAAA,UAAA,CAAW,sBAAsB,MAAM;AACrC,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,cAAA,GAAgC,IAAA;AAEpC,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,MAAA,GAAS,YAAA,CAAa;AAAA,QACpB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,eAAA,EAAiB,QAAQ,eAAA,IAAmB,IAAA;AAAA,QAC5C,aAAa,yBAAA,EAA0B;AAAA,QACvC,cAAA,EAAgB;AAAA,OACjB,CAAA;AAED,MAAA,WAAA,GAAc,iBAAA,CAAkB;AAAA,QAC9B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,gBAAgB,OAAA,CAAQ;AAAA,OACzB,CAAA;AAAA,IACH,GAAG,OAAO,CAAA;AAEV,IAAA,UAAA,CAAW,YAAY;AACrB,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,CAAY,YAAY,cAAc,CAAA;AAAA,QAC9C,CAAA,CAAA,MAAQ;AACN,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qCAAA,EAAwC,cAAc,CAAA,CAAE,CAAA;AAAA,QACvE;AAAA,MACF;AAAA,IACF,GAAG,OAAO,CAAA;AAIV,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAA;AAAA,MACE,6CAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,CAAA;AAClE,QAAA,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAC9C,QAAA,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA,CAAE,cAAA,CAAe,OAAO,CAAA;AAClD,QAAA,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAG,EAAA;AAAA,MAC9B,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAA;AAAA,MACE,yBAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,CAAA,EAAG,CAAA;AACrE,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAClC,QAAA,QAAA,CAAS,KAAK,KAAA,CAAM,CAAC,EAAG,EAAE,CAAA,CAAE,KAAK,SAAS,CAAA;AAC1C,QAAA,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAG,GAAA;AAAA,MAC/B,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,qCAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI;AACnC,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,MACxC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,uDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe;AAAA,UAC5C,eAAA,EAAiB,oBAAA;AAAA,UACjB,gBAAA,EAAkB;AAAA,SACnB,CAAA;AAED,QAAA,kBAAA,CAAmB,IAAA,CAAK,eAAA,EAAiB,oBAAA,EAAsB,QAAQ,CAAA;AACvE,QAAA,kBAAA,CAAmB,IAAA,CAAK,gBAAA,EAAkB,qBAAA,EAAuB,QAAQ,CAAA;AACzE,QAAA,QAAA,CAAS,KAAK,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,qBAAqB,KAAK,CAAA;AAAA,MACtE,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,iDAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,EAAI;AACnC,QAAA,QAAA,CAAS,KAAK,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,qBAAqB,KAAK,CAAA;AACpE,QAAA,kBAAA,CAAmB,IAAA,CAAK,gBAAA,EAAkB,qBAAA,EAAuB,QAAQ,CAAA;AAAA,MAC3E,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,8BAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,GAAA,EAAK,aAAa,CAAA;AAC9D,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,MACpC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,yCAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,CAAA,EAAG,CAAA;AACrE,QAAA,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,MACnC,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,6BAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,QAAA,CAAS,GAAA,EAAI;AAC3C,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,UAAU,CAAA;AAC5C,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,iBAAiB,CAAA;AACnD,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,kBAAkB,CAAA;AACpD,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,CAAe,gBAAgB,CAAA;AAAA,MACpD,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAA;AAAA,MACE,0CAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,UAC7C,cAAA,EAAgB,KAAA;AAAA,UAChB,eAAA,EAAiB,oBAAA;AAAA,UACjB,gBAAA,EAAkB;AAAA,SACnB,CAAA;AAED,QAAA,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,CAAE,eAAA,CAAgB,CAAC,CAAA;AAC7C,QAAA,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA;AACjD,QAAA,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,CAAE,UAAA,EAAW;AAErC,QAAA,cAAA,GAAiB,QAAA,CAAS,QAAA;AAC1B,QAAA,QAAA,GAAW,QAAA,CAAS,SAAA;AAAA,MACtB,CAAA;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAA;AAAA,MACE,kEAAA;AAAA,MACA,YAAY;AACV,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI;AAAA,UACpC,EAAA,EAAI,cAAA;AAAA,UACJ,eAAe,oBAAA,CAAqB,KAAA;AAAA,UACpC,GAAA,EAAK;AAAA,SACN,CAAA;AAED,QAAA,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,cAAc,CAAA;AACtC,QAAA,kBAAA,CAAmB,KAAA,CAAM,eAAA,EAAiB,oBAAA,EAAsB,QAAQ,CAAA;AACxE,QAAA,kBAAA,CAAmB,KAAA,CAAM,gBAAA,EAAkB,qBAAA,EAAuB,QAAQ,CAAA;AAC1E,QAAA,QAAA,CAAS,MAAM,eAAA,CAAgB,KAAK,CAAA,CAAE,IAAA,CAAK,qBAAqB,KAAK,CAAA;AACrE,QAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAAA,MAChD,CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;;;AChLO,SAAS,2BAA2B,OAAA,EAA4C;AACrF,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,EAAA,0BAAA,CAA2B,OAAO,CAAA;AAClC,EAAA,uBAAA,CAAwB,OAAO,CAAA;AACjC","file":"index.mjs","sourcesContent":["/**\n * Base error class for all package errors\n *\n * Generic over:\n * - TOptions: The options type for this error class\n * - TReportable: The reportable data structure for error tracking\n */\nimport type { BaseErrorOptions, BaseReportableData } from './types';\n\nexport class BaseError<\n TOptions extends BaseErrorOptions = BaseErrorOptions,\n TReportable extends BaseReportableData = BaseReportableData,\n> extends Error {\n constructor(public readonly options: TOptions) {\n super(options.message);\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n\n // Set error name\n this.name = this.constructor.name;\n\n // Capture stack trace (excluding constructor call)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n // If there's a cause with a stack, preserve it\n if (this.options.cause instanceof Error && this.options.cause.stack) {\n this.stack = `${this.stack}\\nCaused by: ${this.options.cause.stack}`;\n }\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Subclasses should override this to add their own reportable fields\n */\n getReportableData(): TReportable {\n const { code, operation, userMessage, retryable } = this.options;\n return {\n code,\n operation,\n userMessage,\n retryable,\n } as TReportable;\n }\n\n /**\n * Custom JSON serialization\n * Makes the error properly serializable for logging/reporting\n */\n toJSON(): Record<string, unknown> {\n return {\n ...this.getReportableData(),\n name: this.name,\n message: this.message,\n stack: this.stack,\n } as unknown as Record<string, unknown>;\n }\n}\n","import type { WooCommerceApiErrorCode } from './types';\n\nexport const mapWooCommerceCode = (apiCode?: string): WooCommerceApiErrorCode => {\n if (!apiCode) return 'unknown_error';\n\n // Direct matches\n const directMatches: Record<string, WooCommerceApiErrorCode> = {\n woocommerce_rest_cart_empty: 'cart_empty',\n woocommerce_rest_cart_coupon_error: 'invalid_coupon',\n woocommerce_rest_missing_nonce: 'missing_nonce',\n woocommerce_rest_invalid_nonce: 'invalid_nonce',\n rest_invalid_param: 'invalid_params',\n woocommerce_rest_product_invalid_id: 'product_not_found',\n woocommerce_rest_product_out_of_stock: 'out_of_stock',\n woocommerce_rest_product_not_enough_stock: 'insufficient_stock',\n woocommerce_rest_checkout_invalid_payment_method: 'invalid_payment_method',\n };\n\n if (directMatches[apiCode]) {\n return directMatches[apiCode];\n }\n\n // Pattern matches\n if (apiCode.includes('nonce')) return 'invalid_nonce';\n if (apiCode.includes('coupon')) return 'invalid_coupon';\n if (apiCode.includes('stock')) return 'insufficient_stock';\n if (apiCode.includes('checkout')) return 'checkout_error';\n if (apiCode.includes('payment')) return 'invalid_payment_method';\n\n return 'unknown_error';\n};\n","import type { WooCommerceApiErrorCode, WooCommerceApiErrorMetaData } from './types';\n\nexport const WOOCOMMERCE_ERROR_METADATA: Record<\n WooCommerceApiErrorCode,\n WooCommerceApiErrorMetaData\n> = {\n cart_empty: {\n operation: 'get_cart',\n retryable: false,\n userMessage: 'Your cart is empty',\n },\n invalid_coupon: {\n operation: 'apply_coupon',\n retryable: false,\n userMessage: 'Invalid coupon code',\n },\n missing_nonce: {\n operation: 'cart_request',\n retryable: true, // Auto-retry with new nonce\n },\n invalid_nonce: {\n operation: 'cart_request',\n retryable: true, // Auto-retry with new nonce\n },\n invalid_params: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'Invalid request parameters',\n },\n product_not_found: {\n operation: 'get_product',\n retryable: false,\n userMessage: 'Product not found',\n },\n out_of_stock: {\n operation: 'add_to_cart',\n retryable: false,\n userMessage: 'This product is out of stock',\n },\n insufficient_stock: {\n operation: 'add_to_cart',\n retryable: false,\n userMessage: 'Not enough stock available',\n },\n invalid_payment_method: {\n operation: 'process_checkout',\n retryable: false,\n userMessage: 'Invalid payment method',\n },\n checkout_error: {\n operation: 'process_checkout',\n retryable: false,\n },\n network_error: {\n operation: 'network_request',\n retryable: true,\n },\n unknown_error: {\n operation: 'unknown',\n retryable: false,\n },\n};\n","export const redactPath = (url: string): string =>\n url\n .replace(/^[a-z][a-z0-9+.-]*:\\/\\/[^/]+/i, '')\n .replace(/[?#].*$/, '')\n .split('/')\n .map((segment) => (/^(\\d+|[0-9a-f]{16,}|[0-9a-f-]{36})$/i.test(segment) ? ':id' : segment))\n .join('/');\n\nexport const classifyHttpStatus = (status?: number) =>\n ({\n domain:\n status === undefined ? 'network' : status === 401 || status === 403 ? 'auth' : 'integration',\n severity: status !== undefined && status < 500 ? 'warning' : 'error',\n }) as const;\n","/**\n * WooCommerce API Error\n */\n\nimport { BaseError } from '@atomic-solutions/errors';\n\nimport { WOOCOMMERCE_ERROR_METADATA, type WooCommerceApiErrorCode } from '../mapping';\nimport { classifyHttpStatus, redactPath } from './http-error';\nimport type { WooCommerceApiErrorOptions } from './types';\n\n/**\n * WooCommerce-specific error class\n *\n * Extends BaseError to provide:\n * - Code transformation (WooCommerce API codes → clean app codes)\n * - WooCommerce-specific error categorization\n * - HTTP context (status, URL, method)\n */\nexport class WooCommerceApiError extends BaseError {\n readonly #options: WooCommerceApiErrorOptions;\n\n constructor(options: WooCommerceApiErrorOptions) {\n const metadata = WOOCOMMERCE_ERROR_METADATA[options.code] ?? {\n operation: 'woocommerce_api_request',\n retryable: false,\n };\n\n // Enrich options with metadata defaults\n const enrichedOptions: WooCommerceApiErrorOptions = {\n ...options,\n operation: options.operation || metadata.operation,\n userMessage: options.userMessage || metadata.userMessage,\n retryable: options.retryable ?? metadata.retryable,\n };\n\n const status = enrichedOptions.statusCode;\n const { domain, severity } = classifyHttpStatus(status);\n\n super({\n domain,\n severity,\n operation: enrichedOptions.operation as string,\n message: enrichedOptions.message,\n code: enrichedOptions.code,\n retryable: enrichedOptions.retryable,\n userMessage: enrichedOptions.userMessage,\n cause: enrichedOptions.cause,\n fingerprint: [domain, enrichedOptions.code, String(status ?? 'network')],\n extras: {\n originalCode: enrichedOptions.originalCode,\n statusCode: status,\n path: redactPath(enrichedOptions.url),\n method: enrichedOptions.method,\n },\n });\n\n this.#options = enrichedOptions;\n }\n\n get options(): WooCommerceApiErrorOptions {\n return this.#options;\n }\n\n // Convenient getters for frequently accessed fields (no duplication)\n get wooCode(): WooCommerceApiErrorCode {\n return this.options.code;\n }\n\n get originalCode(): string {\n return this.options.originalCode;\n }\n\n get statusCode(): number | undefined {\n return this.options.statusCode;\n }\n\n get url(): string {\n return this.options.url;\n }\n\n get method(): string {\n return this.options.method;\n }\n\n get requestBody(): unknown | undefined {\n return this.options.requestBody;\n }\n\n get responseBody(): unknown | undefined {\n return this.options.responseBody;\n }\n\n get data(): Record<string, unknown> | undefined {\n return this.options.data;\n }\n}\n","/**\n * WooCommerce validation error class\n * Thrown when API response validation fails\n */\n\nimport type { ZodError } from 'zod';\n\nimport { BaseError } from './BaseError';\nimport type {\n BaseErrorOptions,\n ValidationReportableData,\n WooCommerceDataValidationErrorOptions,\n} from './types';\n\n/**\n * Internal options type that combines user options with computed fields\n */\ninterface WooCommerceDataValidationErrorInternalOptions extends BaseErrorOptions {\n url?: string;\n zodError?: ZodError;\n value?: unknown;\n fieldErrors?: Record<string, string[]>;\n}\n\n/**\n * WooCommerce validation error\n *\n * Thrown when API response validation fails using Zod schemas\n */\nexport class WooCommerceDataValidationError extends BaseError<\n WooCommerceDataValidationErrorInternalOptions,\n ValidationReportableData\n> {\n constructor(options: WooCommerceDataValidationErrorOptions) {\n // Extract field errors from Zod error if provided\n const fieldErrors = options.zodError\n ? WooCommerceDataValidationError.extractFieldErrorsFromZod(options.zodError)\n : undefined;\n\n super({\n code: 'validation_error',\n message: options.message,\n operation: options.operation,\n userMessage: options.userMessage || 'Received unexpected data from WooCommerce',\n retryable: false,\n cause: options.cause,\n url: options.url,\n zodError: options.zodError,\n value: options.value,\n fieldErrors,\n });\n }\n\n // Convenient getters for validation-specific fields (no duplication)\n get url(): string | undefined {\n return this.options.url;\n }\n\n get zodError(): ZodError | undefined {\n return this.options.zodError;\n }\n\n get invalidValue(): unknown | undefined {\n return this.options.value;\n }\n\n get fieldErrors(): Record<string, string[]> | undefined {\n return this.options.fieldErrors;\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Includes validation-specific fields\n */\n override getReportableData(): ValidationReportableData {\n return {\n code: this.options.code,\n operation: this.options.operation,\n userMessage: this.options.userMessage,\n retryable: false,\n fieldErrors: this.options.fieldErrors,\n url: this.options.url,\n };\n }\n\n /**\n * Extract field errors from Zod error\n */\n private static extractFieldErrorsFromZod(\n zodError: ZodError\n ): Record<string, string[]> | undefined {\n if (!zodError?.errors) {\n return undefined;\n }\n\n const fieldErrors: Record<string, string[]> = {};\n\n for (const issue of zodError.errors) {\n const path = issue.path.join('.');\n if (!fieldErrors[path]) {\n fieldErrors[path] = [];\n }\n fieldErrors[path].push(issue.message);\n }\n\n return fieldErrors;\n }\n\n /**\n * Get all error messages as a flat array\n */\n getMessages(): string[] {\n if (!this.fieldErrors) {\n return [this.message];\n }\n\n const messages: string[] = [];\n for (const fieldMessages of Object.values(this.fieldErrors)) {\n messages.push(...fieldMessages);\n }\n\n return messages;\n }\n\n /**\n * Check if a specific field has errors\n */\n hasFieldError(field: string): boolean {\n return this.fieldErrors ? field in this.fieldErrors : false;\n }\n\n /**\n * Get error messages for a specific field\n */\n getFieldError(field: string): string[] | undefined {\n return this.fieldErrors?.[field];\n }\n}\n","/**\n * Response validation utilities\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WooCommerceDataValidationError } from '@/errors';\n\n/**\n * Validation mode for API responses\n * - 'strict': Throw error on validation failure (default)\n * - 'warn': Log warning and continue on validation failure\n */\nexport type ValidationMode = 'strict' | 'warn';\n\n/**\n * Options for response handling\n */\nexport interface ResponseOptions {\n /** Validation mode */\n validationMode?: ValidationMode;\n\n /** Error reporter for validation errors */\n errorReporter?: (error: Error) => void;\n\n /** Optional validation error handler (called before errorReporter) */\n onValidationError?: (error: Error) => void;\n}\n\n/**\n * Handle and validate API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validation\n * @param options - Response handling options\n * @returns Validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handleApiData = <T>(\n data: unknown,\n schema: ZodSchema<T>,\n options?: ResponseOptions,\n url?: string\n): T => {\n const validationMode = options?.validationMode ?? 'strict';\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(data);\n\n if (!result.success) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${url || 'unknown endpoint'}`,\n url,\n zodError: result.error,\n value: data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[woocommerce-utils] Validation warning:', validationError.message);\n\n // Return raw data to allow app to continue\n return data as T;\n }\n\n return result.data;\n }\n\n // Strict mode - throw on validation failure\n try {\n return schema.parse(data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${url || 'unknown endpoint'}`,\n url,\n zodError: error as ZodError,\n value: data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n};\n\nexport const handleApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T>,\n options?: ResponseOptions\n): T => handleApiData(response.data, schema, options, response.config.url);\n\n/**\n * Check if error is a Zod validation error\n */\nexport const isZodError = (error: unknown): error is ZodError => {\n return error instanceof Error && error.name === 'ZodError';\n};\n","/**\n * Calculate pagination navigation\n */\n\nexport interface Pagination {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n nextPage: number | null;\n prevPage: number | null;\n}\n\nexport interface CalculatePaginationInput {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n}\n\n/**\n * Calculate pagination navigation from WooCommerce pagination metadata\n *\n * @param input - Current pagination state\n * @returns Full pagination object with navigation helpers\n */\nexport const calculatePagination = (input: CalculatePaginationInput): Pagination => {\n const { page, perPage, total, totalPages } = input;\n\n const hasNextPage = page < totalPages;\n const hasPrevPage = page > 1;\n\n return {\n page,\n perPage,\n total,\n totalPages,\n hasNextPage,\n hasPrevPage,\n nextPage: hasNextPage ? page + 1 : null,\n prevPage: hasPrevPage ? page - 1 : null,\n };\n};\n","/**\n * Extract pagination metadata from WooCommerce response headers\n */\n\nimport type { AxiosResponse } from 'axios';\n\nexport interface PaginationMeta {\n total: number;\n totalPages: number;\n}\n\nexport const getPaginationMeta = (headers: AxiosResponse['headers']): PaginationMeta => {\n // Handle undefined/null headers\n if (!headers) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const wpTotal = headers['x-wp-total'];\n const wpTotalPages = headers['x-wp-totalpages'];\n\n if (!wpTotal || !wpTotalPages) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const total = parseInt(wpTotal, 10);\n const totalPages = parseInt(wpTotalPages, 10);\n\n return {\n total,\n totalPages,\n };\n};\n","/**\n * Pagination utilities for WooCommerce API responses\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WooCommerceDataValidationError } from '../errors';\nimport { calculatePagination, type Pagination } from '../utils/calculatePagination';\nimport { getPaginationMeta } from '../utils/getPaginationMeta';\nimport type { ResponseOptions } from './handleApiResponse';\n\n/**\n * Paginated response wrapper\n */\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: Pagination;\n}\n\n/**\n * Handle paginated API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validating array items\n * @param params - Request parameters (page, per_page)\n * @param options - Response handling options\n * @returns Paginated response with validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handlePaginatedApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T[]>,\n params: { page?: number; per_page?: number } = {},\n options?: ResponseOptions\n): PaginatedResponse<T> => {\n const validationMode = options?.validationMode ?? 'strict';\n let data: T[];\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(response.data);\n\n if (!result.success) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: result.error,\n value: response.data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[woocommerce-utils] Validation warning:', validationError.message);\n\n // Return raw data as array (best effort)\n data = Array.isArray(response.data) ? response.data : [];\n } else {\n data = result.data;\n }\n } else {\n // Strict mode - throw on validation failure\n try {\n data = schema.parse(response.data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WooCommerceDataValidationError({\n message: `WooCommerce API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: error as ZodError,\n value: response.data,\n userMessage: 'Received unexpected data from WooCommerce',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n }\n\n const { total, totalPages } = getPaginationMeta(response.headers);\n const page = params.page || 1;\n const perPage = params.per_page || 10;\n\n const pagination = calculatePagination({\n page,\n perPage,\n total,\n totalPages,\n });\n\n return {\n data,\n pagination,\n };\n};\n","/**\n * Debug logger for WooCommerce utils\n */\n\nconst DEBUG_PREFIX = '[woocommerce-utils]';\n\n/**\n * Check if debug mode is enabled\n */\nexport const isDebugEnabled = (): boolean => {\n if (typeof process !== 'undefined' && process.env) {\n return process.env.DEBUG === 'true' || process.env.DEBUG === '1';\n }\n return false;\n};\n\n/**\n * Log debug message (only if DEBUG is enabled)\n */\nexport const debug = (...args: unknown[]): void => {\n if (isDebugEnabled()) {\n console.log(DEBUG_PREFIX, ...args);\n }\n};\n\n/**\n * Log warning message\n */\nexport const warn = (...args: unknown[]): void => {\n console.warn(DEBUG_PREFIX, ...args);\n};\n\n/**\n * Log error message\n */\nexport const error = (...args: unknown[]): void => {\n console.error(DEBUG_PREFIX, ...args);\n};\n","const CART_ROUTE = /\\/wc\\/store\\/(v\\d+\\/)?(cart|checkout|batch)/;\nconst BATCH_ROUTE = /\\/wc\\/store\\/(v\\d+\\/)?batch/;\n\nexport const isCartRoute = (url?: string): boolean => !!url && CART_ROUTE.test(url);\n\nexport const isBatchRoute = (url?: string): boolean => !!url && BATCH_ROUTE.test(url);\n","/**\n * Request interceptor\n *\n * Handles:\n * - JWT authentication for protected endpoints\n * - Nonce/Cart-Token injection for cart/checkout endpoints\n * - Cache-Control headers for cart/checkout to prevent Android caching bugs\n * - Debug logging\n */\n\nimport type { AxiosInstance, InternalAxiosRequestConfig } from 'axios';\n\nimport type { WooCommerceClient, WooCommerceConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\nimport { isBatchRoute, isCartRoute } from '../storeRoutes';\n\n/**\n * Check if endpoint requires JWT authentication\n */\nconst requiresAuth = (url?: string): boolean => {\n if (!url) return false;\n\n const authEndpoints = [\n '/jwt-auth/',\n '/customers/me',\n '/wp/v2/users/me',\n // Store API non-cart endpoints: inject JWT when available so authenticated\n // users can access their own resources (e.g. orders, personalised product data)\n '/wc/store/v1/order',\n ];\n\n return authEndpoints.some((endpoint) => url.includes(endpoint));\n};\n\n/**\n * Setup request interceptor\n *\n * - Injects JWT Bearer token for authenticated requests\n * - Injects Nonce/Cart-Token headers for cart/checkout requests\n * - Adds Cache-Control headers to prevent Android caching bugs\n * - Calls optional onRequest hook\n * - Passes client instance to callbacks\n */\nexport const setupRequestInterceptor = (\n axiosInstance: AxiosInstance,\n config: WooCommerceConfig,\n client: WooCommerceClient\n): void => {\n axiosInstance.interceptors.request.use(\n async (requestConfig: InternalAxiosRequestConfig) => {\n const url = requestConfig.url;\n\n // Inject JWT token for authenticated endpoints\n if (config.jwtToken) {\n const token = await config.jwtToken.get();\n if (token && (requiresAuth(url) || isCartRoute(url))) {\n requestConfig.headers.Authorization = `Bearer ${token}`;\n if (config.debug) {\n debug('Injected JWT token for', url);\n }\n }\n }\n\n // Inject nonce/cart-token for cart endpoints\n // When JWT is present, skip Cart-Token: WooCommerce prioritizes Cart-Token over JWT\n // for session identification, which would route requests to a separate API session\n // instead of the user's persistent cart.\n //\n // /batch is the exception. WP core rebuilds every sub-request as a fresh\n // WP_REST_Request, so none of them inherit the Nonce header and each one fails\n // AbstractCartRoute::check_nonce(). WooCommerce waives the nonce when\n // has_cart_token() is set, and that helper reads the outer HTTP header precisely\n // so it survives batch dispatch — so Cart-Token is the only credential a batch\n // sub-request can present.\n if (isCartRoute(url)) {\n const headers = await config.cartHeaders.get();\n const isAuthenticated = !!(await config.jwtToken?.get());\n\n if (headers.nonce) {\n requestConfig.headers.Nonce = headers.nonce;\n }\n if (headers.cartToken && (!isAuthenticated || isBatchRoute(url))) {\n requestConfig.headers['Cart-Token'] = headers.cartToken;\n }\n\n // CRITICAL: Disable HTTP caching for cart/checkout endpoints\n // WooCommerce sends aggressive cache headers (max-age=2419200, 28 days) which\n // can cause Android HTTP clients to serve stale cart data from cache.\n // This was causing empty carts to be returned after successful add-item operations\n // because the cached GET /cart response (from before items were added) was being\n // served instead of fetching fresh data from the server.\n // iOS URLSession happened to work because it handles expired cache differently.\n requestConfig.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate';\n requestConfig.headers.Pragma = 'no-cache';\n requestConfig.headers.Expires = '0';\n\n if (config.debug) {\n debug('Injected cart headers for', url, {\n hasNonce: !!headers.nonce,\n hasCartToken: !!headers.cartToken,\n });\n }\n }\n\n // Debug logging\n if (config.debug) {\n debug(\n `${requestConfig.method?.toUpperCase()} ${requestConfig.url}`,\n requestConfig.params || requestConfig.data\n );\n }\n\n // Call optional onRequest hook\n if (config.onRequest) {\n return config.onRequest(requestConfig, client);\n }\n\n return requestConfig;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Axios response interceptor for WooCommerce API\n */\n\nimport { AxiosError, type AxiosInstance, type AxiosResponse } from 'axios';\n\nimport type { WooCommerceClient, WooCommerceConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\nimport { isBatchRoute, isCartRoute } from '../storeRoutes';\n\nconst NONCE_ERROR_CODES = ['woocommerce_rest_missing_nonce', 'woocommerce_rest_invalid_nonce'];\n\nconst isNonceRejectedBatch = (data: unknown): boolean => {\n const responses = (data as { responses?: unknown } | null | undefined)?.responses;\n\n if (!Array.isArray(responses) || responses.length === 0) return false;\n\n return responses.every((response) => {\n const code = (response as { body?: { code?: unknown } } | null)?.body?.code;\n return typeof code === 'string' && NONCE_ERROR_CODES.includes(code);\n });\n};\n\n/**\n * Setup response interceptor\n *\n * - Extracts and saves cart headers (nonce rotation)\n * - Logs responses in debug mode\n * - Calls optional onResponse hook\n * - Passes client instance to callbacks\n */\nexport const setupResponseInterceptor = (\n axiosInstance: AxiosInstance,\n config: WooCommerceConfig,\n client: WooCommerceClient\n): void => {\n axiosInstance.interceptors.response.use(\n async (response: AxiosResponse) => {\n // Extract and save cart headers (nonce rotation)\n if (isCartRoute(response.config.url)) {\n const nonce = response.headers['nonce'] || response.headers['Nonce'];\n const cartToken = response.headers['cart-token'] || response.headers['Cart-Token'];\n\n if (nonce || cartToken) {\n await config.cartHeaders.save({\n nonce: nonce || undefined,\n cartToken: cartToken || undefined,\n });\n\n if (config.debug) {\n debug(\n 'Saved updated cart headers:',\n response.config.url,\n 'nonce:',\n !!nonce,\n 'cartToken:',\n !!cartToken\n );\n }\n }\n }\n\n if (isBatchRoute(response.config.url) && isNonceRejectedBatch(response.data)) {\n throw new AxiosError(\n 'Batch rejected for a nonce error',\n AxiosError.ERR_BAD_REQUEST,\n response.config,\n response.request,\n { ...response, status: 401, data: { code: 'woocommerce_rest_missing_nonce' } }\n );\n }\n\n if (config.debug) {\n debug('Response:', response.config.url, response.status);\n }\n\n // Call optional onResponse hook\n if (config.onResponse) {\n return config.onResponse(response, client);\n }\n\n return response;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Cart session initialization utility\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport type { CartHeadersAdapter } from '../client/types';\nimport { debug } from '../logging/logger';\n\n/**\n * Initialize cart session by fetching cart and saving headers\n *\n * This is called when nonce errors occur to get a fresh nonce/cart-token\n *\n * @param client - Axios instance\n * @param cartHeaders - Cart headers adapter\n */\nexport const initializeCartSession = async (\n client: AxiosInstance,\n cartHeaders: CartHeadersAdapter\n): Promise<void> => {\n try {\n debug('session', 'Initializing cart session');\n\n // Make GET request to cart endpoint\n const response = await client.get('/wc/store/v1/cart');\n\n // Extract headers\n const nonce = response.headers['nonce'] || response.headers['Nonce'];\n const cartToken = response.headers['cart-token'] || response.headers['Cart-Token'];\n\n // Save headers\n if (nonce || cartToken) {\n await cartHeaders.save({\n nonce: nonce || undefined,\n cartToken: cartToken || undefined,\n });\n\n debug('session', 'Cart session initialized', {\n hasNonce: !!nonce,\n hasCartToken: !!cartToken,\n });\n }\n } catch (error) {\n debug('session', 'Failed to initialize cart session', error);\n throw error;\n }\n};\n","/**\n * Axios error interceptor for WooCommerce API\n */\n\nimport { isAxiosError, isCancel, type AxiosError, type AxiosInstance } from 'axios';\n\nimport type { WooCommerceClient, WooCommerceConfig } from '../../client/types';\nimport { WooCommerceApiError } from '../../errors/classes/WooCommerceApiError';\nimport { mapWooCommerceCode } from '../../errors/mapping';\nimport { debug, error as logError } from '../../logging/logger';\nimport { initializeCartSession } from '../../utils/initializeCartSession';\n\ninterface WooCommerceErrorData {\n code?: string;\n message?: string;\n data?: {\n status?: number;\n };\n}\n\n/**\n * Setup error interceptor\n *\n * - Transforms WooCommerce errors into WooCommerceApiError instances\n * - Calls optional onError hook\n * - Passes client instance to callbacks\n */\nexport const setupErrorInterceptor = (\n axiosInstance: AxiosInstance,\n config: WooCommerceConfig,\n client: WooCommerceClient\n): void => {\n axiosInstance.interceptors.response.use(\n (response) => response,\n async (axiosError: AxiosError<WooCommerceErrorData>) => {\n if (isCancel(axiosError)) {\n return Promise.reject(axiosError);\n }\n\n const status = axiosError.response?.status;\n const errorData = axiosError.response?.data;\n const isNetworkError = isAxiosError(axiosError) && !axiosError.response;\n\n // Extract WooCommerce error details\n const apiCode = errorData?.code || 'unknown_error';\n const wpMessage = errorData?.message || axiosError.message || 'Unknown error';\n\n // Transform WooCommerce API code to application-level code\n // e.g., \"woocommerce_rest_cart_empty\" → \"cart_empty\"\n const errorCode = isNetworkError ? 'network_error' : mapWooCommerceCode(apiCode);\n\n // Create WooCommerceError with full context\n const wcError = new WooCommerceApiError({\n message: wpMessage,\n statusCode: status,\n code: errorCode, // Transformed app-level code\n originalCode: apiCode, // Original WooCommerce API code\n url: axiosError.config?.url || '',\n method: axiosError.config?.method?.toUpperCase() || 'GET',\n requestBody: axiosError.config?.data,\n responseBody: errorData,\n data: errorData?.data as Record<string, unknown> | undefined,\n cause: axiosError,\n });\n\n if (config.debug) {\n debug('WooCommerce error:', apiCode, status, wpMessage);\n logError(wcError);\n }\n\n // Handle authentication errors (401/403)\n if (\n (status === 401 || status === 403) &&\n config.onAuthError &&\n isAxiosError(axiosError) &&\n !axiosError.config?._retry\n ) {\n if (config.debug) {\n debug('Auth error detected, calling onAuthError handler');\n }\n\n try {\n const shouldRetry = await config.onAuthError(wcError, client);\n\n if (shouldRetry) {\n if (config.debug) {\n debug('Retrying request after auth error');\n }\n\n // Mark as retry to prevent infinite loops\n axiosError.config!._retry = true;\n\n // Retry the request\n return axiosInstance.request(axiosError.config!);\n }\n } catch (authErrorHandlerError) {\n // If onAuthError handler throws, fall through to error reporting\n if (config.debug) {\n debug('onAuthError handler threw error', authErrorHandlerError);\n }\n }\n }\n\n // Call optional onError hook first (even for retryable errors)\n if (config.onError) {\n config.onError(wcError, client);\n }\n\n // Auto-retry nonce errors\n const isNonceError = errorCode === 'missing_nonce' || errorCode === 'invalid_nonce';\n if (isNonceError && isAxiosError(axiosError) && !axiosError.config?._retry) {\n if (config.debug) {\n debug('Nonce error detected, retrying with new session');\n }\n\n try {\n // Initialize new cart session\n await initializeCartSession(axiosInstance, config.cartHeaders);\n\n // Mark as retry to prevent infinite loops\n axiosError.config!._retry = true;\n\n // Retry the request\n return axiosInstance.request(axiosError.config!);\n } catch (_retryError) {\n // If retry fails, report and throw original error\n config.errorReporter?.report(wcError);\n return Promise.reject(wcError);\n }\n }\n\n // Report error to configured error reporter (Sentry, etc.)\n config.errorReporter?.report(wcError);\n\n return Promise.reject(wcError);\n }\n );\n};\n\n// Augment AxiosRequestConfig to include _retry flag\ndeclare module 'axios' {\n export interface AxiosRequestConfig {\n _retry?: boolean;\n }\n}\n","import { z } from 'zod';\n\n/**\n * Base address schema for WooCommerce addresses\n *\n * Used for both billing and shipping addresses in checkout\n */\nexport const addressSchema = z.object({\n /** First name */\n first_name: z.string().min(1, 'First name is required'),\n\n /** Last name */\n last_name: z.string().min(1, 'Last name is required'),\n\n /** Company name (optional) */\n company: z.string(),\n\n /** Address line 1 */\n address_1: z.string().min(1, 'Address is required'),\n\n /** Address line 2 (optional) */\n address_2: z.string(),\n\n /** City */\n city: z.string().min(1, 'City is required'),\n\n /** State/Province/Region */\n state: z.string(),\n\n /** Postal code */\n postcode: z.string().min(1, 'Postal code is required'),\n\n /** Country code (ISO 3166-1 alpha-2) */\n country: z.string(),\n\n /** Phone number */\n phone: z.string().min(1, 'Phone number is required'),\n});\n\n/**\n * Non-mandatory address schema for API responses\n *\n * Used for parsing cart shipping/billing addresses from API responses.\n * No validation constraints - accepts whatever the API returns.\n */\nexport const addressSchemaNonMandatory = z.object({\n /** First name */\n first_name: z.string(),\n\n /** Last name */\n last_name: z.string(),\n\n /** Company name (optional) */\n company: z.string(),\n\n /** Address line 1 */\n address_1: z.string(),\n\n /** Address line 2 (optional) */\n address_2: z.string(),\n\n /** City */\n city: z.string(),\n\n /** State/Province/Region */\n state: z.string(),\n\n /** Postal code */\n postcode: z.string(),\n\n /** Country code (ISO 3166-1 alpha-2) */\n country: z.string(),\n\n /** Phone number */\n phone: z.string(),\n});\n\n/**\n * Billing address schema\n *\n * Extends base address with email field (required for billing)\n */\nexport const billingAddressSchemaMandatory = addressSchema.extend({\n /** Email address (required for billing) */\n email: z.string().email('Valid email is required'),\n});\n\nexport const billingAddressSchemaNonMandatory = addressSchemaNonMandatory.extend({\n /** Email address (can be null for guest carts) */\n email: z.string().nullable(),\n});\n\n/**\n * Phone format accepted by the form schemas: an optional leading `+`, then\n * digits and common separators (space, dash, slash, parentheses).\n */\nconst phoneFormatRegex = /^[+\\d][\\d\\s\\-/()]{5,}$/;\n\n/**\n * Messages for the client-side form schemas. Pass translated strings to\n * localize validation errors; any omitted message falls back to English.\n */\nexport interface AddressFormMessages {\n required?: string;\n email?: string;\n postcode?: string;\n phone?: string;\n}\n\nconst defaultAddressFormMessages: Required<AddressFormMessages> = {\n required: 'This field is required',\n email: 'Valid email is required',\n postcode: 'Postal code is not valid',\n phone: 'Invalid phone number',\n};\n\n/**\n * Default postcode pattern (digits only). Pass a stricter, country-specific\n * pattern via `postcodePattern` to match a given locale (e.g. `/^\\d{5}$/`).\n */\nconst defaultPostcodePattern = /^\\d+$/;\n\nconst resolveAddressFormMessages = (\n messages: AddressFormMessages\n): Required<AddressFormMessages> => ({ ...defaultAddressFormMessages, ...messages });\n\nconst buildAddressFormShape = (m: Required<AddressFormMessages>, postcodePattern: RegExp) => ({\n first_name: z.string().trim().min(1, m.required),\n last_name: z.string().trim().min(1, m.required),\n company: z.string().trim(),\n address_1: z.string().trim().min(1, m.required),\n address_2: z.string().trim(),\n city: z.string().trim().min(1, m.required),\n postcode: z.string().trim().min(1, m.required).regex(postcodePattern, m.postcode),\n phone: z.string().trim().min(1, m.required).regex(phoneFormatRegex, m.phone),\n});\n\n/**\n * Build an address schema for client-side form validation.\n *\n * Unlike `addressSchema` (lenient, used to parse API responses), this trims\n * input, validates the postcode against `postcodePattern` and the phone\n * against `phoneFormatRegex`, and accepts translated messages. It covers the\n * user-editable fields only (no `state`/`country`).\n */\nexport const makeAddressFormSchema = (\n messages: AddressFormMessages = {},\n postcodePattern: RegExp = defaultPostcodePattern\n) => z.object(buildAddressFormShape(resolveAddressFormMessages(messages), postcodePattern));\n\n/**\n * Billing variant of `makeAddressFormSchema` — adds a required, validated email.\n */\nexport const makeBillingAddressFormSchema = (\n messages: AddressFormMessages = {},\n postcodePattern: RegExp = defaultPostcodePattern\n) => {\n const m = resolveAddressFormMessages(messages);\n\n return z.object({\n ...buildAddressFormShape(m, postcodePattern),\n email: z.string().trim().min(1, m.required).email(m.email),\n });\n};\n\n// Type exports\nexport type Address = z.infer<typeof addressSchema>;\nexport type BillingAddress = z.infer<typeof billingAddressSchemaMandatory>;\nexport type AddressNonOptional = z.infer<typeof addressSchemaNonMandatory>;\nexport type BillingAddressNonOptional = z.infer<typeof billingAddressSchemaNonMandatory>;\nexport type AddressFormValues = z.infer<ReturnType<typeof makeAddressFormSchema>>;\nexport type BillingAddressFormValues = z.infer<ReturnType<typeof makeBillingAddressFormSchema>>;\n","import { z } from 'zod';\n\n/**\n * WooCommerce money/currency formatting schema\n *\n * Contains currency information and formatting rules used throughout\n * WooCommerce responses for prices, totals, and monetary values.\n */\nexport const moneySchema = z.object({\n /** Currency code (e.g., 'USD', 'EUR', 'BAM') */\n currency_code: z.string(),\n\n /** Currency symbol (e.g., '$', '€', 'KM') */\n currency_symbol: z.string(),\n\n /** Number of decimal places (e.g., 2 for dollars/euros) */\n currency_minor_unit: z.number(),\n\n /** Decimal separator character (e.g., '.', ',') */\n currency_decimal_separator: z.string(),\n\n /** Thousands separator character (e.g., ',', '.') */\n currency_thousand_separator: z.string(),\n\n /** Currency symbol prefix (empty if symbol is suffix) */\n currency_prefix: z.string(),\n\n /** Currency symbol suffix (empty if symbol is prefix) */\n currency_suffix: z.string(),\n});\n\n// Type export\nexport type Money = z.infer<typeof moneySchema>;\n","import { z } from 'zod';\n\n/**\n * Schema for WooCommerce product image\n * Includes multiple image sizes and srcset for responsive images\n */\nexport const productImageSchema = z.object({\n /** Alternative text for the image */\n alt: z.string(),\n /** Image unique identifier */\n id: z.number(),\n /** Image filename */\n name: z.string(),\n /** Available image sizes in JSON format */\n sizes: z.string(),\n /** Full-size image URL */\n src: z.string().url(),\n /** Srcset attribute for responsive images */\n srcset: z.string(),\n /** Thumbnail image URL */\n thumbnail: z.string().url(),\n});\n\n/**\n * Schema for WooCommerce cart item image\n * Similar to product image but without URL validation on src/thumbnail\n */\nexport const cartItemImageSchema = z.object({\n /** Image ID */\n id: z.number(),\n /** Full image URL */\n src: z.string(),\n /** Thumbnail URL */\n thumbnail: z.string(),\n /** Responsive image srcset */\n srcset: z.string(),\n /** Responsive image sizes */\n sizes: z.string(),\n /** Image name */\n name: z.string(),\n /** Image alt text */\n alt: z.string(),\n});\n\n/**\n * Product image type\n */\nexport type ProductImage = z.infer<typeof productImageSchema>;\n\n/**\n * Cart item image type\n */\nexport type CartItemImage = z.infer<typeof cartItemImageSchema>;\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\n\n/**\n * Product prices schema for cart items\n *\n * Contains current price, regular price, sale price, and price range\n * with currency formatting information.\n */\nexport const pricesSchema = z\n .object({\n /** Current active price (sale price if on sale, otherwise regular) */\n price: z.string(),\n\n /** Regular price (before any discounts) */\n regular_price: z.string(),\n\n /** Sale price (empty string if not on sale) */\n sale_price: z.string(),\n\n /** Price range for variable products (null for simple products) */\n price_range: z\n .object({\n min_amount: z.string(),\n max_amount: z.string(),\n })\n .nullable(),\n\n /** Raw price data without formatting */\n raw_prices: z\n .object({\n /** Decimal precision */\n precision: z.number(),\n /** Raw price value */\n price: z.string(),\n /** Raw regular price value */\n regular_price: z.string(),\n /** Raw sale price value */\n sale_price: z.string(),\n })\n .optional(),\n })\n .merge(moneySchema);\n\n// Type export\nexport type Prices = z.infer<typeof pricesSchema>;\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\nimport { cartItemImageSchema } from './image.schema';\nimport { pricesSchema } from './prices.schema';\n\n/**\n * Cart item totals schema\n *\n * Contains line item totals with tax information and currency formatting.\n */\nexport const itemTotalsSchema = z\n .object({\n /** Subtotal before taxes */\n line_subtotal: z.string(),\n\n /** Tax amount on subtotal */\n line_subtotal_tax: z.string(),\n\n /** Total after discounts, before taxes */\n line_total: z.string(),\n\n /** Tax amount on total */\n line_total_tax: z.string(),\n })\n .merge(moneySchema);\n\n/**\n * Cart item schema\n *\n * Represents a single product/variation in the shopping cart.\n * Includes product details, quantity, pricing, and totals.\n *\n * CRITICAL: Use `key` field (not `id`) to identify cart items for updates/removals.\n * The `key` is a unique identifier for this specific cart item (item_key in some contexts).\n */\nexport const cartItemSchema = z.object({\n /** Unique cart item key (use this for update/remove operations) */\n key: z.string(),\n\n /** Product ID */\n id: z.number(),\n\n /** Quantity of this item in cart */\n quantity: z.number(),\n\n /** Quantity limits for this product */\n quantity_limits: z.object({\n /** Minimum quantity allowed */\n minimum: z.number(),\n /** Maximum quantity allowed */\n maximum: z.number(),\n /** Quantity must be multiple of this value */\n multiple_of: z.number(),\n /** Whether quantity can be changed */\n editable: z.boolean(),\n }),\n\n /** Product name */\n name: z.string(),\n\n /** Short product description */\n short_description: z.string(),\n\n /** Full product description */\n description: z.string(),\n\n /** Product SKU */\n sku: z.string(),\n\n /** Remaining stock count if low (null if not low or unlimited) */\n low_stock_remaining: z.number().nullable(),\n\n /** Whether backorders are allowed */\n backorders_allowed: z.boolean(),\n\n /** Whether to show backorder badge */\n show_backorder_badge: z.boolean(),\n\n /** Whether product can only be purchased individually */\n sold_individually: z.boolean(),\n\n /** Product permalink URL */\n permalink: z.string(),\n\n /** Product images */\n images: z.array(cartItemImageSchema),\n\n /** Variation attributes (for variable products) */\n variation: z.array(\n z.object({\n /** Attribute name (e.g., 'Color', 'Size') */\n attribute: z.string(),\n /** Selected value (e.g., 'Red', 'Large') */\n value: z.string(),\n })\n ),\n\n /** Additional item data/metadata */\n item_data: z.array(\n z.object({\n key: z.string(),\n value: z.string(),\n })\n ),\n\n /** Product pricing information */\n prices: pricesSchema,\n\n /** Line item totals */\n totals: itemTotalsSchema,\n\n /** Catalog visibility setting */\n catalog_visibility: z.string(),\n\n /** Product type */\n type: z.enum(['simple', 'variable', 'grouped', 'external']),\n\n /** Extension data from plugins */\n extensions: z.record(z.string(), z.unknown()),\n});\n\n// Type exports\nexport type CartItem = z.infer<typeof cartItemSchema>;\nexport type ItemTotals = z.infer<typeof itemTotalsSchema>;\nexport type { CartItemImage } from './image.schema';\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\n\n/**\n * Cart totals schema\n *\n * Contains all cart totals including items, fees, discounts, shipping, and taxes.\n * All monetary values are strings to preserve precision.\n */\nexport const cartTotalsSchema = z\n .object({\n /** Total of all cart items (before discounts and taxes) */\n total_items: z.string(),\n\n /** Tax on cart items */\n total_items_tax: z.string(),\n\n /** Total fees */\n total_fees: z.string(),\n\n /** Tax on fees */\n total_fees_tax: z.string(),\n\n /** Total discount amount from coupons */\n total_discount: z.string(),\n\n /** Tax on discounts */\n total_discount_tax: z.string(),\n\n /** Shipping cost (null if not calculated yet) */\n total_shipping: z.string().nullable(),\n\n /** Shipping tax (null if not calculated yet) */\n total_shipping_tax: z.string().nullable(),\n\n /** Final total price (includes all taxes and fees) */\n total_price: z.string(),\n\n /** Total tax amount */\n total_tax: z.string(),\n\n /** Tax breakdown by rate */\n tax_lines: z.array(\n z.object({\n /** Tax rate name */\n name: z.string(),\n /** Tax amount */\n price: z.string(),\n /** Tax rate percentage */\n rate: z.string(),\n })\n ),\n })\n .merge(moneySchema);\n\n// Type export\nexport type CartTotals = z.infer<typeof cartTotalsSchema>;\n","import { z } from 'zod';\n\nimport { moneySchema } from '../../common/money.schema';\n\n/**\n * Cart coupon schema\n *\n * Represents an applied coupon in the cart with discount totals\n * and currency formatting information.\n */\nexport const cartCouponSchema = z.object({\n /** Coupon code */\n code: z.string(),\n\n /** Discount totals for this coupon */\n totals: z\n .object({\n /** Total discount amount (before tax) */\n total_discount: z.string(),\n\n /** Tax amount on discount */\n total_discount_tax: z.string(),\n })\n .merge(moneySchema),\n});\n\n// Type export\nexport type CartCoupon = z.infer<typeof cartCouponSchema>;\n","import { z } from 'zod';\n\n/**\n * Shipping rate schema\n *\n * Represents a single shipping method option with pricing and metadata.\n */\nexport const shippingRateSchema = z.object({\n /** Unique rate identifier (format: instance_id:method_id) */\n rate_id: z.string(),\n\n /** Shipping method name */\n name: z.string(),\n\n /** Shipping method description */\n description: z.string(),\n\n /** Estimated delivery time */\n delivery_time: z.string(),\n\n /** Shipping cost */\n price: z.string(),\n\n /** Shipping instance ID */\n instance_id: z.number(),\n\n /** Shipping method ID */\n method_id: z.string(),\n\n /** Additional metadata for this shipping method */\n meta_data: z.array(\n z.object({\n key: z.string(),\n value: z.string(),\n })\n ),\n\n /** Whether this rate is currently selected */\n selected: z.boolean(),\n\n /** Currency code for the price */\n currency_code: z.string(),\n\n /** Currency symbol for the price */\n currency_symbol: z.string(),\n});\n\n/**\n * Shipping package schema\n *\n * A shipping package groups cart items that ship together,\n * with available shipping methods/rates for that package.\n *\n * WooCommerce can split cart into multiple packages based on\n * shipping classes, vendors, or custom logic.\n */\nexport const shippingPackageSchema = z.object({\n /** Package identifier (0-indexed) */\n package_id: z.number(),\n\n /** Package name/label */\n name: z.string(),\n\n /** Shipping destination address */\n destination: z.object({\n address_1: z.string(),\n address_2: z.string().optional(),\n city: z.string(),\n state: z.string(),\n postcode: z.string(),\n country: z.string(),\n }),\n\n /** Items included in this package */\n items: z.array(\n z.object({\n /** Cart item key */\n key: z.string(),\n /** Product name */\n name: z.string(),\n /** Quantity in package */\n quantity: z.number(),\n })\n ),\n\n /** Available shipping rates for this package */\n shipping_rates: z.array(shippingRateSchema),\n});\n\n// Type exports\nexport type ShippingRate = z.infer<typeof shippingRateSchema>;\nexport type ShippingPackage = z.infer<typeof shippingPackageSchema>;\n","/**\n * Cart schemas\n */\n\nimport { z } from 'zod';\n\nimport {\n addressSchemaNonMandatory,\n addressSchema as apiAddressSchema,\n billingAddressSchemaMandatory as apiBillingAddressSchema,\n billingAddressSchemaNonMandatory,\n} from '../../common/address.schema';\nimport { cartItemSchema } from './cart-item.schema';\nimport { cartTotalsSchema } from './cart-totals.schema';\nimport { cartCouponSchema } from './coupon.schema';\nimport { shippingPackageSchema } from './shipping.schema';\n\n/**\n * WooCommerce cart schema\n */\nexport const cartSchema = z.object({\n items: z.array(cartItemSchema),\n items_count: z.number(),\n items_weight: z.number(),\n needs_payment: z.boolean(),\n needs_shipping: z.boolean(),\n payment_methods: z.array(z.enum(['cod', 'monri'])),\n payment_requirements: z.array(z.string()),\n has_calculated_shipping: z.boolean(),\n shipping_address: addressSchemaNonMandatory,\n billing_address: billingAddressSchemaNonMandatory,\n shipping_rates: z.array(shippingPackageSchema),\n coupons: z.array(cartCouponSchema),\n totals: cartTotalsSchema,\n errors: z.array(\n z.object({\n code: z.string(),\n message: z.string(),\n })\n ),\n extensions: z.record(z.string(), z.unknown()).optional(),\n cross_sells: z.array(z.unknown()),\n fees: z.array(z.unknown()),\n});\n\n// Input schemas\nexport const addToCartInputSchema = z.object({\n id: z.number(),\n quantity: z.number().int().positive(),\n variation: z\n .array(\n z.object({\n attribute: z.string(),\n value: z.string(),\n })\n )\n .optional(),\n});\n\nexport const addItemsInputSchema = z.object({\n items: z.array(addToCartInputSchema).min(1),\n});\n\nexport const batchResponseSchema = z.object({\n responses: z.array(\n z.object({\n status: z.number(),\n body: z.unknown(),\n headers: z.record(z.string(), z.unknown()).optional(),\n })\n ),\n});\n\nexport const updateCartItemInputSchema = z.object({\n key: z.string(),\n quantity: z.number().int().positive(),\n});\n\nexport const removeCartItemInputSchema = z.object({\n key: z.string(),\n});\n\nexport const couponInputSchema = z.object({\n code: z.string().min(1),\n});\n\n// POST /cart/extensions: the official Store API route for plugins\n// that change the cart. namespace picks the plugin, data is its own shape.\nexport const cartExtensionsInputSchema = z.object({\n namespace: z.string().min(1),\n data: z.record(z.string(), z.unknown()),\n});\n\nexport const updateCustomerInputSchema = z\n .object({\n billing_address: apiBillingAddressSchema.partial(),\n shipping_address: apiAddressSchema.partial(),\n })\n .partial();\n\nexport const selectShippingRateInputSchema = z.object({\n package_id: z.union([z.number(), z.string()]).default(0),\n rate_id: z.string(),\n});\n\n// Type exports\nexport type Cart = z.infer<typeof cartSchema>;\nexport type CartItem = z.infer<typeof cartItemSchema>;\nexport type AddToCartInput = z.infer<typeof addToCartInputSchema>;\nexport type AddItemsInput = z.infer<typeof addItemsInputSchema>;\nexport type BatchResponse = z.infer<typeof batchResponseSchema>;\nexport type UpdateCartItemInput = z.infer<typeof updateCartItemInputSchema>;\nexport type RemoveCartItemInput = z.infer<typeof removeCartItemInputSchema>;\nexport type CouponInput = z.infer<typeof couponInputSchema>;\nexport type CartExtensionsInput = z.infer<typeof cartExtensionsInputSchema>;\nexport type UpdateCustomerInput = z.infer<typeof updateCustomerInputSchema>;\nexport type SelectShippingRateInput = z.infer<typeof selectShippingRateInputSchema>;\n","import { z } from 'zod';\n\n/**\n * Product image schema for order items\n *\n * Contains image URLs and metadata for products in orders\n */\nexport const orderItemImageSchema = z.object({\n /** Image ID */\n id: z.number(),\n\n /** Full image URL */\n src: z.string().url(),\n\n /** Thumbnail URL */\n thumbnail: z.string().url(),\n\n /** Responsive image srcset */\n srcset: z.string(),\n\n /** Responsive image sizes attribute */\n sizes: z.string(),\n\n /** Image name */\n name: z.string(),\n\n /** Image alt text */\n alt: z.string(),\n});\n\n/**\n * Price information for order items\n *\n * Contains formatted and raw prices with currency information\n */\nexport const orderItemPricesSchema = z.object({\n /** Formatted price (current price) */\n price: z.string(),\n\n /** Formatted regular price */\n regular_price: z.string(),\n\n /** Formatted sale price */\n sale_price: z.string(),\n\n /** Price range (null for simple products) */\n price_range: z.null(),\n\n /** Currency code (e.g., 'USD', 'EUR') */\n currency_code: z.string(),\n\n /** Currency symbol (e.g., '$', '€') */\n currency_symbol: z.string(),\n\n /** Number of decimal places for currency */\n currency_minor_unit: z.number(),\n\n /** Decimal separator (e.g., '.', ',') */\n currency_decimal_separator: z.string(),\n\n /** Thousand separator (e.g., ',', '.') */\n currency_thousand_separator: z.string(),\n\n /** Currency prefix (e.g., '$') */\n currency_prefix: z.string(),\n\n /** Currency suffix (e.g., 'USD') */\n currency_suffix: z.string(),\n\n /** Raw price values for calculations */\n raw_prices: z.object({\n /** Precision for price calculations */\n precision: z.number(),\n\n /** Raw price (in minor units) */\n price: z.string(),\n\n /** Raw regular price (in minor units) */\n regular_price: z.string(),\n\n /** Raw sale price (in minor units) */\n sale_price: z.string(),\n }),\n});\n\n/**\n * Totals for individual order item\n *\n * Contains subtotal and total with tax breakdown\n */\nexport const orderItemTotalsSchema = z.object({\n /** Line subtotal (before discounts) */\n line_subtotal: z.string(),\n\n /** Line subtotal tax */\n line_subtotal_tax: z.string(),\n\n /** Line total (after discounts) */\n line_total: z.string(),\n\n /** Line total tax */\n line_total_tax: z.string(),\n\n /** Currency code */\n currency_code: z.string(),\n\n /** Currency symbol */\n currency_symbol: z.string(),\n\n /** Currency minor unit */\n currency_minor_unit: z.number(),\n\n /** Decimal separator */\n currency_decimal_separator: z.string(),\n\n /** Thousand separator */\n currency_thousand_separator: z.string(),\n\n /** Currency prefix */\n currency_prefix: z.string(),\n\n /** Currency suffix */\n currency_suffix: z.string(),\n});\n\n/**\n * Quantity limits for order items\n *\n * Defines minimum, maximum, and step values for product quantity\n */\nexport const quantityLimitsSchema = z.object({\n /** Minimum quantity allowed */\n minimum: z.number(),\n\n /** Maximum quantity allowed */\n maximum: z.number(),\n\n /** Quantity must be multiple of this value */\n multiple_of: z.number(),\n\n /** Whether quantity is editable */\n editable: z.boolean(),\n});\n\n/**\n * Order item schema\n *\n * Represents a product/line item in an order with all metadata\n */\nexport const orderItemSchema = z.object({\n /** Unique cart/order item key */\n key: z.string(),\n\n /** Product ID */\n id: z.number(),\n\n /** Quantity ordered */\n quantity: z.number(),\n\n /** Quantity limits for this product */\n quantity_limits: quantityLimitsSchema,\n\n /** Product name */\n name: z.string(),\n\n /** Short description */\n short_description: z.string(),\n\n /** Full description */\n description: z.string(),\n\n /** Product SKU */\n sku: z.string(),\n\n /** Low stock warning (null if not low) */\n low_stock_remaining: z.null(),\n\n /** Whether backorders are allowed */\n backorders_allowed: z.boolean(),\n\n /** Whether to show backorder badge */\n show_backorder_badge: z.boolean(),\n\n /** Whether product can only be purchased individually */\n sold_individually: z.boolean(),\n\n /** Product permalink URL */\n permalink: z.string().url(),\n\n /** Product images */\n images: z.array(orderItemImageSchema),\n\n /** Variation attributes (empty for simple products) */\n variation: z.array(z.unknown()),\n\n /** Custom item data/metadata */\n item_data: z.array(z.unknown()),\n\n /** Price information */\n prices: orderItemPricesSchema,\n\n /** Totals for this line item */\n totals: orderItemTotalsSchema,\n\n /** Catalog visibility setting */\n catalog_visibility: z.string(),\n});\n\n// Type exports\nexport type OrderItemImage = z.infer<typeof orderItemImageSchema>;\nexport type OrderItemPrices = z.infer<typeof orderItemPricesSchema>;\nexport type OrderItemTotals = z.infer<typeof orderItemTotalsSchema>;\nexport type QuantityLimits = z.infer<typeof quantityLimitsSchema>;\nexport type OrderItem = z.infer<typeof orderItemSchema>;\n","import { z } from 'zod';\n\n/**\n * Order totals schema\n *\n * Complete breakdown of order totals including subtotal, taxes, shipping, fees, and discounts\n */\nexport const orderTotalsSchema = z.object({\n /** Subtotal (before discounts and fees) */\n subtotal: z.string(),\n\n /** Total discount amount */\n total_discount: z.string(),\n\n /** Total shipping cost */\n total_shipping: z.string(),\n\n /** Total fees */\n total_fees: z.string(),\n\n /** Total tax */\n total_tax: z.string(),\n\n /** Total refund amount */\n total_refund: z.string(),\n\n /** Final total price */\n total_price: z.string(),\n\n /** Total items cost (subtotal after item-level discounts) */\n total_items: z.string(),\n\n /** Tax on items */\n total_items_tax: z.string(),\n\n /** Tax on fees */\n total_fees_tax: z.string(),\n\n /** Tax on discounts */\n total_discount_tax: z.string(),\n\n /** Tax on shipping */\n total_shipping_tax: z.string(),\n\n /** Tax line items breakdown */\n tax_lines: z.array(z.unknown()),\n\n /** Currency code (e.g., 'USD', 'EUR', 'BAM') */\n currency_code: z.string(),\n\n /** Currency symbol (e.g., '$', '€', 'KM') */\n currency_symbol: z.string(),\n\n /** Number of decimal places for currency */\n currency_minor_unit: z.number(),\n\n /** Decimal separator (e.g., '.', ',') */\n currency_decimal_separator: z.string(),\n\n /** Thousand separator (e.g., ',', '.') */\n currency_thousand_separator: z.string(),\n\n /** Currency prefix (e.g., '$') */\n currency_prefix: z.string(),\n\n /** Currency suffix (e.g., 'USD') */\n currency_suffix: z.string(),\n});\n\n// Type export\nexport type OrderTotals = z.infer<typeof orderTotalsSchema>;\n","import { z } from 'zod';\n\nimport { addressSchema, billingAddressSchemaMandatory } from '../../common/address.schema';\nimport { orderItemSchema } from './order-item.schema';\nimport { orderTotalsSchema } from './order-totals.schema';\n\n/**\n * WooCommerce order status enum\n *\n * Represents the current state of an order in the WooCommerce system\n */\nexport const orderStatusEnum = z.enum([\n 'pending', // Order received, awaiting payment\n 'processing', // Payment received, order is being processed\n 'on-hold', // Order on hold, awaiting confirmation\n 'completed', // Order fulfilled and complete\n 'cancelled', // Order cancelled by customer or admin\n 'refunded', // Order refunded\n 'failed', // Payment failed or order declined\n]);\n\n/**\n * Store API order schema\n *\n * Complete order structure from WooCommerce Store API\n * This is the response from checkout and order retrieval endpoints\n */\nexport const storeApiOrderSchema = z.object({\n /** Order ID */\n id: z.number(),\n\n /** Order status */\n status: orderStatusEnum,\n\n /** Order line items (products purchased) */\n items: z.array(orderItemSchema),\n\n /** Applied coupons */\n coupons: z.array(z.unknown()),\n\n /** Order fees */\n fees: z.array(z.unknown()),\n\n /** Order totals breakdown */\n totals: orderTotalsSchema,\n\n /** Shipping address */\n shipping_address: addressSchema,\n\n /** Billing address (includes email) */\n billing_address: billingAddressSchemaMandatory,\n\n /** Whether order still needs payment */\n needs_payment: z.boolean(),\n\n /** Whether order needs shipping */\n needs_shipping: z.boolean(),\n\n /** Payment method requirements */\n payment_requirements: z.array(z.string()),\n\n /** Order errors (if any) */\n errors: z.array(z.unknown()),\n\n /** Payment method (optional - returned from checkout) */\n payment_method: z.string().optional(),\n\n /** Payment method title (optional - returned from checkout) */\n payment_method_title: z.string().optional(),\n});\n\n// Type exports\nexport type OrderStatus = z.infer<typeof orderStatusEnum>;\nexport type StoreApiOrder = z.infer<typeof storeApiOrderSchema>;\n","/**\n * Checkout schemas\n */\n\nimport { z } from 'zod';\n\nimport {\n addressSchema,\n addressSchemaNonMandatory,\n billingAddressSchemaMandatory,\n billingAddressSchemaNonMandatory,\n} from '../../common/address.schema';\n\n/**\n * Checkout response schema (from API)\n */\nexport const checkoutSchema = z.object({\n order_id: z.number(),\n status: z.string(),\n order_key: z.string(),\n customer_note: z.string(),\n customer_id: z.number(),\n billing_address: billingAddressSchemaNonMandatory,\n shipping_address: addressSchemaNonMandatory,\n payment_method: z.string(),\n // Null until an order is placed.\n // GET /checkout returns null here, so the schema must accept it.\n payment_result: z\n .object({\n payment_status: z.string(),\n payment_details: z.array(z.unknown()),\n redirect_url: z.string(),\n })\n .nullable(),\n});\n\n/**\n * Checkout input schema (for submitting checkout)\n */\nexport const checkoutInputSchema = z.object({\n payment_method: z.string(),\n payment_data: z\n .array(\n z.object({\n key: z.string(),\n value: z.union([z.string(), z.boolean()]),\n })\n )\n .optional(),\n billing_address: billingAddressSchemaMandatory.optional(),\n shipping_address: addressSchema.optional(),\n customer_note: z.string().optional(),\n create_account: z.boolean().optional(),\n extensions: z.record(z.string(), z.unknown()).optional(),\n});\n\n// Type exports\nexport type Checkout = z.infer<typeof checkoutSchema>;\nexport type CheckoutInput = z.infer<typeof checkoutInputSchema>;\n","import { z } from 'zod';\n\n/**\n * Schema for WooCommerce add to cart configuration\n * Defines quantity restrictions and add to cart button properties\n */\nexport const addToCartSchema = z.object({\n /** Description for add to cart action */\n description: z.string(),\n /** Maximum quantity that can be added */\n maximum: z.number(),\n /** Minimum quantity that can be added */\n minimum: z.number(),\n /** Quantity must be a multiple of this number */\n multiple_of: z.number(),\n /** Text for add to cart button */\n text: z.string(),\n /** URL for add to cart action */\n url: z.string(),\n});\n\n/**\n * Add to cart configuration type\n */\nexport type AddToCart = z.infer<typeof addToCartSchema>;\n","import { z } from 'zod';\n\nimport { productImageSchema } from './image.schema';\n\n/**\n * Schema for embedded category in products\n * WooCommerce Store API returns simplified categories when nested in products\n */\nexport const embeddedCategorySchema = z.object({\n /** Category unique identifier */\n id: z.number(),\n /** Category display name */\n name: z.string(),\n /** URL-friendly category identifier */\n slug: z.string(),\n /** Link to category page */\n link: z.string(),\n /** Parent category ID (0 for root categories) - optional in embedded */\n parent: z.number().optional(),\n /** Category description - optional in embedded */\n description: z.string().optional(),\n /** Display type - optional in embedded */\n display: z.string().optional(),\n /** Category image - optional in embedded */\n image: productImageSchema.nullable().optional(),\n /** Menu order for sorting - optional in embedded */\n menu_order: z.number().optional(),\n /** Number of products in this category - optional in embedded */\n count: z.number().optional(),\n});\n\n/**\n * Schema for WooCommerce product category\n * Represents a product category with full information from the Store API\n * Used when fetching from /products/categories endpoint\n */\nexport const productCategorySchema = z.object({\n /** Category unique identifier */\n id: z.number(),\n /** Category display name */\n name: z.string(),\n /** URL-friendly category identifier */\n slug: z.string(),\n /** Parent category ID (0 for root categories) */\n parent: z.number(),\n /** Category description */\n description: z.string(),\n /** Category image */\n image: productImageSchema.nullable(),\n /** Menu order for sorting */\n menu_order: z.number().optional(),\n /** Number of products in this category */\n count: z.number(),\n});\n\n/**\n * Embedded category type (simplified, used in products)\n */\nexport type EmbeddedCategory = z.infer<typeof embeddedCategorySchema>;\n\n/**\n * Product category type (full, from categories endpoint)\n */\nexport type ProductCategory = z.infer<typeof productCategorySchema>;\n","/**\n * Product schemas\n */\n\nimport { z } from 'zod';\n\nimport { addToCartSchema } from './add-to-cart.schema';\nimport { embeddedCategorySchema, productCategorySchema } from './category.schema';\nimport { productImageSchema } from './image.schema';\nimport { pricesSchema as productPricesSchema } from './prices.schema';\nimport { storeProductsSearchParamsSchema as searchParamsSchema } from './search-params.schema';\n\n/**\n * Schema for WooCommerce product\n * Note: Categories embedded in products have simplified data (embeddedCategorySchema)\n */\nexport const productSchema = z.object({\n id: z.number(),\n name: z.string(),\n slug: z.string(),\n type: z.string(),\n variation: z.string(),\n permalink: z.string().url(),\n sku: z.string(),\n short_description: z.string(),\n description: z.string(),\n is_purchasable: z.boolean(),\n is_in_stock: z.boolean(),\n is_on_backorder: z.boolean(),\n low_stock_remaining: z.number().nullable(),\n sold_individually: z.boolean(),\n add_to_cart: addToCartSchema,\n has_options: z.boolean(),\n on_sale: z.boolean(),\n parent: z.number(),\n attributes: z.array(z.unknown()),\n categories: z.array(embeddedCategorySchema),\n tags: z.array(z.unknown()),\n images: z.array(productImageSchema),\n variations: z.array(z.unknown()),\n price_html: z.string(),\n prices: productPricesSchema,\n average_rating: z.string(),\n review_count: z.number(),\n extensions: z.record(z.string(), z.unknown()),\n});\n\n// Type exports\nexport type Product = z.infer<typeof productSchema>;\nexport type ProductCategory = z.infer<typeof productCategorySchema>;\nexport type EmbeddedCategory = z.infer<typeof embeddedCategorySchema>;\nexport type ProductImage = z.infer<typeof productImageSchema>;\nexport type ProductParams = z.infer<typeof searchParamsSchema>;\n\n// Re-export schemas\nexport { embeddedCategorySchema, productCategorySchema, productImageSchema, searchParamsSchema };\n","import { z } from 'zod';\n\n/**\n * Schema for a WooCommerce product tag.\n * What the Store API returns from /products/tags.\n */\nexport const productTagSchema = z.object({\n /** Tag unique identifier */\n id: z.number(),\n /** Tag display name, e.g. \"Vichy decembar 2025\" */\n name: z.string(),\n /** URL-friendly tag identifier */\n slug: z.string(),\n});\n\n/**\n * Product tag type (from the tags endpoint)\n */\nexport type ProductTag = z.infer<typeof productTagSchema>;\n\n/**\n * Query params for the tags endpoint.\n * `include` limits the list to these tag ids, e.g. to show one tag's name.\n */\nexport type ProductTagsParams = { include?: number[] };\n","import { z } from 'zod';\n\n/**\n * Order attribution schema\n *\n * WooCommerce order attribution data passed via the Store API checkout\n * extensions field under the 'woocommerce/order-attribution' namespace.\n *\n * This tells WooCommerce where the order originated from (e.g., mobile app,\n * web, referral) and is stored as order meta:\n * - _wc_order_attribution_source_type\n * - _wc_order_attribution_utm_source\n * - _wc_order_attribution_device_type\n *\n * @see https://developer.woocommerce.com/docs/order-attribution-tracking/\n */\nexport const orderAttributionSchema = z.object({\n /** Attribution source type (e.g., 'mobile_app', 'organic', 'referral') */\n source_type: z.string(),\n\n /** UTM source identifier (e.g., 'moja-apoteka-app', 'google') */\n utm_source: z.string(),\n\n /** Device type (e.g., 'mobile', 'desktop', 'tablet') */\n device_type: z.string(),\n});\n\nexport type OrderAttribution = z.infer<typeof orderAttributionSchema>;\n\n/**\n * WooCommerce Store API checkout extensions namespace for order attribution\n */\nexport const ORDER_ATTRIBUTION_NAMESPACE = 'woocommerce/order-attribution' as const;\n","/**\n * Cart API\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport type { CartAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiData, handleApiResponse, type ResponseOptions } from '../http';\nimport {\n batchResponseSchema,\n cartSchema,\n type BatchResponse,\n} from '@atomic-solutions/schemas/woocommerce/store-api';\n\nconst BATCH_MAX_REQUESTS = 25;\n\nconst chunk = <T>(list: T[], size: number): T[][] =>\n Array.from({ length: Math.ceil(list.length / size) }, (_, index) =>\n list.slice(index * size, index * size + size)\n );\n\nconst isAccepted = (status: number): boolean => status >= 200 && status < 300;\n\nconst bodyError = (body: unknown): { code?: string; message?: string } => {\n const data = body as { code?: unknown; message?: unknown } | null | undefined;\n\n return {\n code: typeof data?.code === 'string' ? data.code : undefined,\n message: typeof data?.message === 'string' ? data.message : undefined,\n };\n};\n\nexport const createCartAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions\n): CartAPI => ({\n get: async () => {\n const response = await client.get(endpoints.cart);\n return handleApiResponse(response, cartSchema, options);\n },\n\n addItem: async (input) => {\n const response = await client.post(endpoints.addItem, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n addItems: async ({ items }) => {\n const responses: BatchResponse['responses'] = [];\n let chunkFailed = false;\n\n for (const batch of chunk(items, BATCH_MAX_REQUESTS)) {\n try {\n const response = await client.post(endpoints.batch, {\n requests: batch.map((item) => ({\n method: 'POST' as const,\n path: endpoints.addItem,\n body: item,\n })),\n });\n\n responses.push(...handleApiResponse(response, batchResponseSchema, options).responses);\n } catch (error) {\n if (responses.length === 0) throw error;\n\n chunkFailed = true;\n break;\n }\n }\n\n const results = items.map((item, index) => {\n const entry = responses[index];\n const { code, message } = bodyError(entry?.body);\n\n return {\n item,\n status: entry?.status ?? 500,\n ...(code ? { code } : {}),\n ...(message ? { message } : {}),\n };\n });\n\n const lastAccepted = [...responses].reverse().find((entry) => isAccepted(entry.status));\n const batchCart = lastAccepted\n ? handleApiData(lastAccepted.body, cartSchema, options, endpoints.batch)\n : undefined;\n\n let cart = chunkFailed ? undefined : batchCart;\n\n if (!cart) {\n try {\n cart = handleApiResponse(await client.get(endpoints.cart), cartSchema, options);\n } catch (error) {\n if (!batchCart) throw error;\n\n cart = batchCart;\n }\n }\n\n return { cart, results };\n },\n\n updateItem: async (input) => {\n const response = await client.post(endpoints.updateItem, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n removeItem: async (input) => {\n const response = await client.post(endpoints.removeItem, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n applyCoupon: async (input) => {\n const response = await client.post(endpoints.applyCoupon, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n removeCoupon: async (input) => {\n const response = await client.post(endpoints.removeCoupon, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n // Same request headers (Nonce / Cart-Token / Bearer) as every cart POST.\n updateExtensions: async (input) => {\n const response = await client.post(endpoints.updateExtensions, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n updateCustomer: async (input) => {\n const response = await client.post(endpoints.updateCustomer, input);\n return handleApiResponse(response, cartSchema, options);\n },\n\n selectShippingRate: async (input) => {\n const response = await client.post(endpoints.selectShippingRate, input);\n return handleApiResponse(response, cartSchema, options);\n },\n});\n","/**\n * Checkout API\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport type { OrderAttribution } from '@atomic-solutions/schemas/woocommerce/store-api';\nimport { ORDER_ATTRIBUTION_NAMESPACE } from '@atomic-solutions/schemas/woocommerce/store-api';\n\nimport type { CheckoutAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport { checkoutSchema } from '@atomic-solutions/schemas/woocommerce/store-api';\n\nexport const createCheckoutAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions,\n orderAttribution?: OrderAttribution\n): CheckoutAPI => ({\n get: async () => {\n const response = await client.get(endpoints.checkout);\n return handleApiResponse(response, checkoutSchema, options);\n },\n\n process: async (input) => {\n const body = orderAttribution\n ? {\n ...input,\n extensions: {\n [ORDER_ATTRIBUTION_NAMESPACE]: orderAttribution,\n ...input.extensions,\n },\n }\n : input;\n\n const response = await client.post(endpoints.checkout, body);\n return handleApiResponse(response, checkoutSchema, options);\n },\n});\n","/**\n * Orders API\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { storeApiOrderSchema } from '@atomic-solutions/schemas/woocommerce/store-api';\n\nimport type { GetOrderInput, OrdersAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\n\nexport const createOrdersAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions\n): OrdersAPI => ({\n /**\n * Get a single order by ID\n * Uses Store API - supports guest lookup with billing_email + key\n */\n get: async (input: GetOrderInput) => {\n const { id, billing_email, key } = input;\n\n const params = billing_email && key ? { billing_email, key } : undefined;\n\n const response = await client.get(`${endpoints.order}/${id}`, { params });\n return handleApiResponse(response, storeApiOrderSchema, options);\n },\n});\n","/**\n * Products API\n */\n\nimport type { AxiosInstance } from 'axios';\nimport { z } from 'zod';\n\nimport type { ProductsAPI } from '../client/types';\nimport type { EndpointPaths } from '../constants/endpoints';\nimport { handleApiResponse, handlePaginatedApiResponse, type ResponseOptions } from '../http';\nimport {\n productCategorySchema,\n productSchema,\n productTagSchema,\n} from '@atomic-solutions/schemas/woocommerce/store-api';\n\nexport const createProductsAPI = (\n client: AxiosInstance,\n endpoints: EndpointPaths,\n options?: ResponseOptions\n): ProductsAPI => ({\n list: async (params) => {\n const response = await client.get(endpoints.products, { params });\n return handlePaginatedApiResponse(response, z.array(productSchema), params, options);\n },\n\n get: async (id) => {\n const response = await client.get(`${endpoints.products}/${id}`);\n return handleApiResponse(response, productSchema, options);\n },\n\n categories: async () => {\n const response = await client.get(endpoints.categories);\n return handleApiResponse(response, z.array(productCategorySchema), options);\n },\n\n // Tags, e.g. GET /products/tags?include=996,683.\n // The Store API wants include as a comma list, so join the ids.\n tags: async (params) => {\n const response = await client.get(endpoints.tags, {\n params: { include: params?.include?.join(',') },\n });\n return handleApiResponse(response, z.array(productTagSchema), options);\n },\n});\n","/**\n * WooCommerce Store API endpoints\n */\n\nimport type { StoreApiVersion } from '../client/types';\n\n/**\n * Create endpoints based on Store API version\n *\n * @param version - 'v1' for versioned endpoints, 'legacy' for non-versioned\n * @returns Endpoint paths object\n */\nexport const createEndpoints = (version: StoreApiVersion = 'legacy') => {\n const prefix = version === 'v1' ? '/wc/store/v1' : '/wc/store';\n\n return {\n // Products\n products: `${prefix}/products`,\n categories: `${prefix}/products/categories`,\n // Product tags, e.g. to turn a tag id into its name\n tags: `${prefix}/products/tags`,\n\n // Cart\n cart: `${prefix}/cart`,\n addItem: `${prefix}/cart/add-item`,\n updateItem: `${prefix}/cart/update-item`,\n removeItem: `${prefix}/cart/remove-item`,\n applyCoupon: `${prefix}/cart/apply-coupon`,\n removeCoupon: `${prefix}/cart/remove-coupon`,\n // Plugins change the cart through this one route (e.g. points discounts).\n updateExtensions: `${prefix}/cart/extensions`,\n updateCustomer: `${prefix}/cart/update-customer`,\n selectShippingRate: `${prefix}/cart/select-shipping-rate`,\n\n // Batch\n batch: `${prefix}/batch`,\n\n // Checkout\n checkout: `${prefix}/checkout`,\n\n // Orders\n order: `${prefix}/order`,\n } as const;\n};\n\n/** Endpoint paths type */\nexport type EndpointPaths = ReturnType<typeof createEndpoints>;\n\n/**\n * Default endpoints (legacy, non-versioned)\n * Kept for backwards compatibility - use createEndpoints(version) for new code\n */\nexport const Endpoints = createEndpoints('legacy');\n","/**\n * WooCommerce API client factory\n *\n * Creates a configured WooCommerce client with:\n * - Automatic nonce/cart-token injection for cart operations\n * - JWT authentication for user operations\n * - Response validation and nonce updates\n * - Error handling with WooCommerce-specific error codes\n */\n\nimport axios from 'axios';\n\nimport { createCartAPI } from '../api/cart';\nimport { createCheckoutAPI } from '../api/checkout';\nimport { createOrdersAPI } from '../api/orders';\nimport { createProductsAPI } from '../api/products';\nimport { createEndpoints } from '../constants/endpoints';\nimport {\n setupErrorInterceptor,\n setupRequestInterceptor,\n setupResponseInterceptor,\n} from '../http/interceptors';\nimport type { ErrorReporter, WooCommerceClient, WooCommerceConfig } from './types';\n\n/**\n * Default error reporter - logs errors to console\n */\nconst DEFAULT_ERROR_REPORTER: ErrorReporter = {\n report: (error: Error) => {\n console.error('[woocommerce-utils]', error);\n },\n};\n\n/**\n * Create a configured WooCommerce API client\n *\n * @param config - Client configuration\n * @returns Configured WooCommerce client instance\n *\n * @example\n * ```tsx\n * import { createClient } from '@atomic-solutions/woocommerce-utils';\n *\n * const cartHeadersAdapter = {\n * get: async () => ({\n * nonce: await AsyncStorage.getItem('woo_nonce'),\n * cartToken: await AsyncStorage.getItem('woo_cart_token'),\n * }),\n * save: async ({ nonce, cartToken }) => {\n * if (nonce) await AsyncStorage.setItem('woo_nonce', nonce);\n * if (cartToken) await AsyncStorage.setItem('woo_cart_token', cartToken);\n * },\n * clear: async () => {\n * await AsyncStorage.removeItem('woo_nonce');\n * await AsyncStorage.removeItem('woo_cart_token');\n * },\n * };\n *\n * const client = createClient({\n * baseURL: 'https://shop.com/wp-json',\n * cartHeaders: cartHeadersAdapter,\n * debug: process.env.DEBUG === 'true',\n * });\n *\n * // Use the client\n * const products = await client.products.list({ per_page: 20 });\n * ```\n */\nexport const createClient = (config: WooCommerceConfig): WooCommerceClient => {\n // Apply default error reporter if not provided\n const fullConfig: WooCommerceConfig = {\n ...config,\n errorReporter: config.errorReporter ?? DEFAULT_ERROR_REPORTER,\n };\n\n // Create axios instance\n const axiosInstance = axios.create({\n baseURL: fullConfig.baseURL,\n timeout: fullConfig.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...fullConfig.headers,\n },\n });\n\n // Create endpoints based on API version (default: 'legacy' for backwards compatibility)\n const endpoints = createEndpoints(fullConfig.storeApiVersion ?? 'legacy');\n\n // Response options with validation mode, error reporter, and validation error handler\n const responseOptions = {\n validationMode: fullConfig.validationMode,\n errorReporter: fullConfig.errorReporter?.report,\n onValidationError: fullConfig.onValidationError,\n };\n\n // Create client object FIRST\n const client: WooCommerceClient = {\n config: fullConfig,\n axios: axiosInstance,\n products: createProductsAPI(axiosInstance, endpoints, responseOptions),\n cart: createCartAPI(axiosInstance, endpoints, responseOptions),\n checkout: createCheckoutAPI(\n axiosInstance,\n endpoints,\n responseOptions,\n fullConfig.orderAttribution\n ),\n orders: createOrdersAPI(axiosInstance, endpoints, responseOptions),\n };\n\n // Setup interceptors with client reference\n setupRequestInterceptor(axiosInstance, fullConfig, client);\n setupResponseInterceptor(axiosInstance, fullConfig, client);\n setupErrorInterceptor(axiosInstance, fullConfig, client);\n\n return client;\n};\n","import axios from 'axios';\n\nexport interface AdminClient {\n /** Delete an order permanently (force=true skips trash) */\n deleteOrder: (id: number, force?: boolean) => Promise<void>;\n}\n\nexport function createAdminClient(options: {\n baseURL: string;\n consumerKey: string;\n consumerSecret: string;\n}): AdminClient {\n const client = axios.create({\n baseURL: options.baseURL,\n auth: {\n username: options.consumerKey,\n password: options.consumerSecret,\n },\n timeout: 15000,\n });\n\n return {\n deleteOrder: async (id: number, force = true) => {\n await client.delete(`/wc/v3/orders/${id}`, {\n params: { force },\n });\n },\n };\n}\n","import axios from 'axios';\n\nimport type { CartHeadersAdapter, JwtTokenAdapter } from '../client/types';\n\nexport const TEST_BILLING_ADDRESS = {\n first_name: 'E2E',\n last_name: 'Test',\n company: '',\n address_1: 'Ferhadija 10',\n address_2: '',\n city: 'Sarajevo',\n state: '',\n postcode: '71000',\n country: 'BA',\n phone: '+38761000000',\n email: 'e2e-test@atomic.ba',\n};\n\nexport const TEST_SHIPPING_ADDRESS = {\n first_name: 'E2E',\n last_name: 'Test',\n company: '',\n address_1: 'Ferhadija 10',\n address_2: '',\n city: 'Sarajevo',\n state: '',\n postcode: '71000',\n country: 'BA',\n phone: '+38761000000',\n};\n\nexport function createInMemoryCartAdapter(): CartHeadersAdapter {\n let stored: { nonce?: string; cartToken?: string } = {};\n return {\n get: async () => stored,\n save: async (headers) => {\n stored = { ...stored, ...headers };\n },\n clear: async () => {\n stored = {};\n },\n };\n}\n\nexport function createStaticJwtAdapter(token: string): JwtTokenAdapter {\n return {\n get: async () => token,\n };\n}\n\n// --- JWT login helper ---\n\nexport async function loginForJwt(\n baseURL: string,\n username: string,\n password: string\n): Promise<string> {\n const response = await axios.post(`${baseURL}/jwt-auth/v1/token`, {\n username,\n password,\n });\n return response.data.token;\n}\n\nexport function assertAddressMatch(\n actual: Record<string, unknown>,\n expected: Record<string, unknown>,\n expectFn: (value: unknown) => { toBe: (expected: unknown) => void }\n): void {\n const fields = ['first_name', 'last_name', 'address_1', 'city', 'postcode', 'country', 'phone'];\n for (const field of fields) {\n expectFn(actual[field]).toBe(expected[field]);\n }\n}\n","import { createClient } from '../../client/createClient';\nimport type { WooCommerceClient } from '../../client/types';\nimport { createAdminClient, type AdminClient } from '../adminClient';\nimport {\n assertAddressMatch,\n createInMemoryCartAdapter,\n createStaticJwtAdapter,\n loginForJwt,\n TEST_BILLING_ADDRESS,\n TEST_SHIPPING_ADDRESS,\n} from '../helpers';\nimport type { WooCommerceTestSuiteOptions } from '../types';\n\nexport function authenticatedCheckoutSuite(options: WooCommerceTestSuiteOptions): void {\n const { timeout = 30000 } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n const describeFn = options.describe || g.describe;\n const itFn = options.it || g.it;\n const expectFn = options.expect || g.expect;\n const beforeAllFn = options.beforeAll || g.beforeAll;\n const afterAllFn = options.afterAll || g.afterAll;\n\n if (!options.wpUsername || !options.wpPassword) {\n describeFn('Authenticated Checkout E2E', () => {\n itFn('skipped — no WP credentials provided', () => {\n console.warn('Authenticated checkout E2E skipped. Set wpUsername and wpPassword to run.');\n });\n });\n return;\n }\n\n describeFn('Authenticated Checkout E2E', () => {\n let client: WooCommerceClient;\n let adminClient: AdminClient;\n let createdOrderId: number | null = null;\n\n beforeAllFn(async () => {\n const token = await loginForJwt(options.baseURL, options.wpUsername!, options.wpPassword!);\n\n client = createClient({\n baseURL: options.baseURL,\n storeApiVersion: options.storeApiVersion ?? 'v1',\n cartHeaders: createInMemoryCartAdapter(),\n jwtToken: createStaticJwtAdapter(token),\n validationMode: 'strict',\n });\n\n adminClient = createAdminClient({\n baseURL: options.baseURL,\n consumerKey: options.consumerKey,\n consumerSecret: options.consumerSecret,\n });\n }, timeout);\n\n afterAllFn(async () => {\n if (createdOrderId) {\n try {\n await adminClient.deleteOrder(createdOrderId);\n } catch {\n console.warn(`[e2e cleanup] Failed to delete order ${createdOrderId}`);\n }\n }\n }, timeout);\n\n // --- Clear cart (authenticated user may have leftover items) ---\n\n itFn(\n 'should clear any existing cart items',\n async () => {\n const cart = await client.cart.get();\n for (const item of cart.items) {\n await client.cart.removeItem({ key: item.key });\n }\n const cleared = await client.cart.get();\n expectFn(cleared.items_count).toBe(0);\n },\n timeout\n );\n\n // --- Products ---\n\n let productId: number;\n\n itFn(\n 'should fetch products',\n async () => {\n const result = await client.products.list({ page: 1, per_page: 5 });\n expectFn(result.data.length).toBeGreaterThan(0);\n productId = result.data[0]!.id;\n },\n timeout\n );\n\n // --- Cart: add item ---\n\n let cartItemKey: string;\n\n itFn(\n 'should add item to cart with JWT auth',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.items[0]!.id).toBe(productId);\n cartItemKey = cart.items[0]!.key;\n },\n timeout\n );\n\n // --- Cart: fetch ---\n\n itFn(\n 'should fetch cart',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.needs_payment).toBe(true);\n },\n timeout\n );\n\n // --- Cart: update customer addresses ---\n\n itFn(\n 'should update customer addresses',\n async () => {\n const cart = await client.cart.updateCustomer({\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n assertAddressMatch(cart.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n },\n timeout\n );\n\n // --- Cart: verify addresses persisted ---\n\n itFn(\n 'should return persisted addresses on cart fetch',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n },\n timeout\n );\n\n // --- Cart: remove item ---\n\n itFn(\n 'should remove item from cart',\n async () => {\n const cart = await client.cart.removeItem({ key: cartItemKey });\n expectFn(cart.items_count).toBe(0);\n expectFn(cart.items.length).toBe(0);\n },\n timeout\n );\n\n // --- Cart: re-add item for checkout ---\n\n itFn(\n 'should re-add item to cart for checkout',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n },\n timeout\n );\n\n // --- Checkout: fetch state ---\n\n itFn(\n 'should fetch checkout state',\n async () => {\n const checkout = await client.checkout.get();\n expectFn(checkout).toHaveProperty('order_id');\n expectFn(checkout).toHaveProperty('billing_address');\n expectFn(checkout).toHaveProperty('shipping_address');\n expectFn(checkout).toHaveProperty('payment_method');\n },\n timeout\n );\n\n // --- Checkout: process (COD) ---\n\n itFn(\n 'should process checkout with COD payment',\n async () => {\n const checkout = await client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n expectFn(checkout.order_id).toBeGreaterThan(0);\n expectFn(checkout.order_key).toMatch(/^wc_order_/);\n expectFn(checkout.status).toBeTruthy();\n\n createdOrderId = checkout.order_id;\n },\n timeout\n );\n\n // --- Order: retrieve with JWT auth (no email/key needed) ---\n\n itFn(\n 'should retrieve order using JWT authentication',\n async () => {\n const order = await client.orders.get({\n id: createdOrderId!,\n });\n\n expectFn(order.id).toBe(createdOrderId);\n assertAddressMatch(order.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(order.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(order.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n expectFn(order.items.length).toBeGreaterThan(0);\n },\n timeout\n );\n });\n}\n","import { createClient } from '../../client/createClient';\nimport type { WooCommerceClient } from '../../client/types';\nimport { WooCommerceApiError } from '../../errors/classes/WooCommerceApiError';\nimport { createAdminClient, type AdminClient } from '../adminClient';\nimport { createInMemoryCartAdapter, TEST_BILLING_ADDRESS, TEST_SHIPPING_ADDRESS } from '../helpers';\nimport type { WooCommerceTestSuiteOptions } from '../types';\n\n/**\n * E2E suite for checkout validation errors.\n *\n * Tests that the WooCommerce Store API rejects invalid checkout payloads\n * with HTTP 400 responses (server-side validation).\n *\n * Each test uses its own client+cart session to avoid cross-contamination.\n * Discovery tests that succeed (e.g. phone acceptance) track the created\n * order IDs so they can be cleaned up via the admin client in afterAll.\n */\nexport function checkoutValidationSuite(options: WooCommerceTestSuiteOptions): void {\n const { timeout = 30000 } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n const describeFn = options.describe || g.describe;\n const itFn = options.it || g.it;\n const expectFn = options.expect || g.expect;\n const afterAllFn = options.afterAll || g.afterAll;\n\n describeFn('Checkout Validation E2E', () => {\n // Orders leaked by discovery tests (where the server unexpectedly accepts\n // the payload) are tracked here and deleted in afterAll.\n const leakedOrderIds: number[] = [];\n\n const adminClient: AdminClient = createAdminClient({\n baseURL: options.baseURL,\n consumerKey: options.consumerKey,\n consumerSecret: options.consumerSecret,\n });\n\n afterAllFn(async () => {\n for (const id of leakedOrderIds) {\n try {\n await adminClient.deleteOrder(id);\n } catch {\n console.warn(`[e2e cleanup] Failed to delete leaked order ${id}`);\n }\n }\n }, timeout);\n\n /**\n * Creates a fresh client, adds an item to cart, and returns the client.\n * Each validation test gets an isolated session.\n */\n async function createReadyClient(): Promise<WooCommerceClient> {\n const client = createClient({\n baseURL: options.baseURL,\n storeApiVersion: options.storeApiVersion ?? 'v1',\n cartHeaders: createInMemoryCartAdapter(),\n validationMode: 'strict',\n });\n\n const products = await client.products.list({ page: 1, per_page: 1 });\n if (products.data.length === 0) {\n throw new Error('No products available for checkout validation tests');\n }\n\n await client.cart.addItem({ id: products.data[0]!.id, quantity: 1 });\n return client;\n }\n\n /**\n * Asserts that a checkout attempt throws a WooCommerceApiError with HTTP 400.\n * Fails with a descriptive error if no exception was thrown (server accepted).\n * If the server unexpectedly accepts, the created order is tracked for cleanup.\n */\n async function expectRejection(\n label: string,\n checkoutCall: () => Promise<{ order_id: number }>\n ): Promise<void> {\n let thrown: unknown = null;\n let result: { order_id: number } | null = null;\n\n try {\n result = await checkoutCall();\n } catch (error) {\n thrown = error;\n }\n\n if (result) {\n if (result.order_id > 0) leakedOrderIds.push(result.order_id);\n throw new Error(\n `${label}: expected server rejection but checkout succeeded (order_id=${result.order_id})`\n );\n }\n\n expectFn(thrown).toBeInstanceOf(WooCommerceApiError);\n const wcError = thrown as WooCommerceApiError;\n expectFn(wcError.statusCode).toBe(400);\n }\n\n // --- Billing email ---\n\n itFn(\n 'should reject checkout when billing email is empty',\n async () => {\n const client = await createReadyClient();\n await expectRejection('empty billing email', () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, email: '' },\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n\n itFn(\n 'should reject checkout when billing email is invalid',\n async () => {\n const client = await createReadyClient();\n await expectRejection('invalid billing email', () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, email: 'not-an-email' },\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n\n // --- Billing required fields ---\n\n const billingRequiredFields = [\n 'first_name',\n 'last_name',\n 'address_1',\n 'city',\n 'postcode',\n ] as const;\n\n for (const field of billingRequiredFields) {\n itFn(\n `should reject checkout when billing ${field} is empty`,\n async () => {\n const client = await createReadyClient();\n await expectRejection(`empty billing ${field}`, () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, [field]: '' },\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n }\n\n // --- Phone number (discovery test) ---\n\n itFn(\n 'should document server behavior for empty billing phone',\n async () => {\n const client = await createReadyClient();\n let serverAccepted = false;\n let orderId = 0;\n\n try {\n const result = await client.checkout.process({\n payment_method: 'cod',\n billing_address: { ...TEST_BILLING_ADDRESS, phone: '' },\n shipping_address: { ...TEST_SHIPPING_ADDRESS, phone: '' },\n });\n serverAccepted = result.order_id > 0;\n orderId = result.order_id;\n } catch (error) {\n expectFn(error).toBeInstanceOf(WooCommerceApiError);\n }\n\n if (serverAccepted) {\n leakedOrderIds.push(orderId);\n }\n\n console.log(\n `[checkout-validation] Server ${serverAccepted ? 'ACCEPTED' : 'REJECTED'} checkout with empty phone`\n );\n expectFn(typeof serverAccepted).toBe('boolean');\n },\n timeout\n );\n\n // --- Shipping required fields ---\n\n const shippingRequiredFields = [\n 'first_name',\n 'last_name',\n 'address_1',\n 'city',\n 'postcode',\n ] as const;\n\n for (const field of shippingRequiredFields) {\n itFn(\n `should reject checkout when shipping ${field} is empty`,\n async () => {\n const client = await createReadyClient();\n await expectRejection(`empty shipping ${field}`, () =>\n client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: { ...TEST_SHIPPING_ADDRESS, [field]: '' },\n })\n );\n },\n timeout\n );\n }\n\n // --- Shipping phone (discovery test) ---\n\n itFn(\n 'should document server behavior for empty shipping phone',\n async () => {\n const client = await createReadyClient();\n let serverAccepted = false;\n let orderId = 0;\n\n try {\n const result = await client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: { ...TEST_SHIPPING_ADDRESS, phone: '' },\n });\n serverAccepted = result.order_id > 0;\n orderId = result.order_id;\n } catch (error) {\n expectFn(error).toBeInstanceOf(WooCommerceApiError);\n }\n\n if (serverAccepted) {\n leakedOrderIds.push(orderId);\n }\n\n console.log(\n `[checkout-validation] Server ${serverAccepted ? 'ACCEPTED' : 'REJECTED'} checkout with empty shipping phone`\n );\n expectFn(typeof serverAccepted).toBe('boolean');\n },\n timeout\n );\n\n // --- Missing payment method ---\n\n itFn(\n 'should reject checkout with empty payment method',\n async () => {\n const client = await createReadyClient();\n await expectRejection('empty payment method', () =>\n client.checkout.process({\n payment_method: '',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n })\n );\n },\n timeout\n );\n });\n}\n","import { createClient } from '../../client/createClient';\nimport type { WooCommerceClient } from '../../client/types';\nimport { createAdminClient, type AdminClient } from '../adminClient';\nimport {\n assertAddressMatch,\n createInMemoryCartAdapter,\n TEST_BILLING_ADDRESS,\n TEST_SHIPPING_ADDRESS,\n} from '../helpers';\nimport type { WooCommerceTestSuiteOptions } from '../types';\n\nexport function guestCheckoutSuite(options: WooCommerceTestSuiteOptions): void {\n const { timeout = 30000 } = options;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n const describeFn = options.describe || g.describe;\n const itFn = options.it || g.it;\n const expectFn = options.expect || g.expect;\n const beforeAllFn = options.beforeAll || g.beforeAll;\n const afterAllFn = options.afterAll || g.afterAll;\n\n describeFn('Guest Checkout E2E', () => {\n let client: WooCommerceClient;\n let adminClient: AdminClient;\n let createdOrderId: number | null = null;\n\n beforeAllFn(() => {\n client = createClient({\n baseURL: options.baseURL,\n storeApiVersion: options.storeApiVersion ?? 'v1',\n cartHeaders: createInMemoryCartAdapter(),\n validationMode: 'strict',\n });\n\n adminClient = createAdminClient({\n baseURL: options.baseURL,\n consumerKey: options.consumerKey,\n consumerSecret: options.consumerSecret,\n });\n }, timeout);\n\n afterAllFn(async () => {\n if (createdOrderId) {\n try {\n await adminClient.deleteOrder(createdOrderId);\n } catch {\n console.warn(`[e2e cleanup] Failed to delete order ${createdOrderId}`);\n }\n }\n }, timeout);\n\n // --- Products ---\n\n let productId: number;\n\n itFn(\n 'should fetch products and find at least one',\n async () => {\n const result = await client.products.list({ page: 1, per_page: 5 });\n expectFn(result.data.length).toBeGreaterThan(0);\n expectFn(result.pagination).toHaveProperty('total');\n productId = result.data[0]!.id;\n },\n timeout\n );\n\n // --- Cart: add item ---\n\n let cartItemKey: string;\n\n itFn(\n 'should add item to cart',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.items.length).toBe(1);\n expectFn(cart.items[0]!.id).toBe(productId);\n cartItemKey = cart.items[0]!.key;\n },\n timeout\n );\n\n // --- Cart: fetch ---\n\n itFn(\n 'should fetch cart with item present',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.items_count).toBe(1);\n expectFn(cart.needs_payment).toBe(true);\n },\n timeout\n );\n\n // --- Cart: update customer addresses ---\n\n itFn(\n 'should update customer billing and shipping addresses',\n async () => {\n const cart = await client.cart.updateCustomer({\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n assertAddressMatch(cart.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n },\n timeout\n );\n\n // --- Cart: verify addresses persisted ---\n\n itFn(\n 'should return persisted addresses on cart fetch',\n async () => {\n const cart = await client.cart.get();\n expectFn(cart.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n assertAddressMatch(cart.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n },\n timeout\n );\n\n // --- Cart: remove item ---\n\n itFn(\n 'should remove item from cart',\n async () => {\n const cart = await client.cart.removeItem({ key: cartItemKey });\n expectFn(cart.items_count).toBe(0);\n expectFn(cart.items.length).toBe(0);\n },\n timeout\n );\n\n // --- Cart: re-add item for checkout ---\n\n itFn(\n 'should re-add item to cart for checkout',\n async () => {\n const cart = await client.cart.addItem({ id: productId, quantity: 1 });\n expectFn(cart.items_count).toBe(1);\n },\n timeout\n );\n\n // --- Checkout: fetch state ---\n\n itFn(\n 'should fetch checkout state',\n async () => {\n const checkout = await client.checkout.get();\n expectFn(checkout).toHaveProperty('order_id');\n expectFn(checkout).toHaveProperty('billing_address');\n expectFn(checkout).toHaveProperty('shipping_address');\n expectFn(checkout).toHaveProperty('payment_method');\n },\n timeout\n );\n\n // --- Checkout: process (COD) ---\n\n let orderKey: string;\n\n itFn(\n 'should process checkout with COD payment',\n async () => {\n const checkout = await client.checkout.process({\n payment_method: 'cod',\n billing_address: TEST_BILLING_ADDRESS,\n shipping_address: TEST_SHIPPING_ADDRESS,\n });\n\n expectFn(checkout.order_id).toBeGreaterThan(0);\n expectFn(checkout.order_key).toMatch(/^wc_order_/);\n expectFn(checkout.status).toBeTruthy();\n\n createdOrderId = checkout.order_id;\n orderKey = checkout.order_key;\n },\n timeout\n );\n\n // --- Order: retrieve as guest (billing_email + key) ---\n\n itFn(\n 'should retrieve order as guest using billing email and order key',\n async () => {\n const order = await client.orders.get({\n id: createdOrderId!,\n billing_email: TEST_BILLING_ADDRESS.email,\n key: orderKey,\n });\n\n expectFn(order.id).toBe(createdOrderId);\n assertAddressMatch(order.billing_address, TEST_BILLING_ADDRESS, expectFn);\n assertAddressMatch(order.shipping_address, TEST_SHIPPING_ADDRESS, expectFn);\n expectFn(order.billing_address.email).toBe(TEST_BILLING_ADDRESS.email);\n expectFn(order.items.length).toBeGreaterThan(0);\n },\n timeout\n );\n });\n}\n","import { authenticatedCheckoutSuite } from './suites/authenticated-checkout.suite';\nimport { checkoutValidationSuite } from './suites/checkout-validation.suite';\nimport { guestCheckoutSuite } from './suites/guest-checkout.suite';\nimport type { WooCommerceTestSuiteOptions } from './types';\n\n/**\n * Create a WooCommerce E2E test suite\n *\n * Runs independent test flows against a live WooCommerce instance:\n * - Guest checkout (always runs)\n * - Authenticated checkout (skipped if jwtToken not provided)\n * - Checkout validation (verifies server-side rejection of invalid payloads)\n *\n * Requires WC REST Admin API credentials for order cleanup after each flow.\n *\n * @example\n * ```ts\n * import { createWooCommerceTestSuite } from '@atomic-solutions/woocommerce-utils/testing';\n *\n * createWooCommerceTestSuite({\n * baseURL: process.env.WC_BASE_URL!,\n * consumerKey: process.env.WC_CONSUMER_KEY!,\n * consumerSecret: process.env.WC_CONSUMER_SECRET!,\n * jwtToken: process.env.WC_JWT_TOKEN,\n * storeApiVersion: 'v1',\n * });\n * ```\n */\nexport function createWooCommerceTestSuite(options: WooCommerceTestSuiteOptions): void {\n guestCheckoutSuite(options);\n authenticatedCheckoutSuite(options);\n checkoutValidationSuite(options);\n}\n"]}