arky-sdk 0.1.2 → 0.3.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.
- package/dist/index.cjs +75 -195
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -4
- package/dist/index.d.ts +14 -4
- package/dist/index.js +76 -196
- package/dist/index.js.map +1 -1
- package/dist/utils.cjs +11 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +11 -2
- package/dist/utils.js.map +1 -1
- package/package.json +2 -10
- package/dist/config-CPkOgumU.d.cts +0 -16
- package/dist/config-CPkOgumU.d.ts +0 -16
- package/dist/stores.cjs +0 -2148
- package/dist/stores.cjs.map +0 -1
- package/dist/stores.d.cts +0 -218
- package/dist/stores.d.ts +0 -218
- package/dist/stores.js +0 -2111
- package/dist/stores.js.map +0 -1
package/dist/stores.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/utils/queryParams.ts","../src/services/http.ts","../src/api/reservation.ts","../src/services/auth.ts","../src/utils/currency.ts","../src/stores/business.ts","../src/api/eshop.ts","../src/utils/price.ts","../src/stores/eshop.ts","../src/utils/i18n.ts","../src/utils/validation.ts","../src/utils/timezone.ts","../src/stores/reservation.ts","../src/stores/cart.ts","../src/stores/index.ts"],"names":["currency","markets","json","deepMap","computed","persistentAtom","store","actions","date","reservationBlocks","mapQuoteError"],"mappings":"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","file":"stores.js","sourcesContent":["// SDK Configuration Types and Global State\n\nexport interface ArkyConfig {\n apiUrl: string;\n businessId: string;\n storageUrl?: string;\n auth?: {\n type: 'guest' | 'api-token';\n apiToken?: string;\n };\n}\n\n// Global configuration (set by initArky or ArkyClient)\nlet globalConfig: ArkyConfig | null = null;\n\nexport function setGlobalConfig(config: ArkyConfig): void {\n globalConfig = config;\n // Update module-level exports\n API_URL = config.apiUrl;\n BUSINESS_ID = config.businessId;\n STORAGE_URL = config.storageUrl || '';\n}\n\nexport function getGlobalConfig(): ArkyConfig {\n if (!globalConfig) {\n throw new Error(\n 'Arky SDK not initialized. Call initArky() or create an ArkyClient instance.'\n );\n }\n return globalConfig;\n}\n\n// Module-level exports (mutable, updated by setGlobalConfig)\nexport let API_URL = '';\nexport let BUSINESS_ID = '';\nexport let STORAGE_URL = '';\n","/**\n * Query parameter builder utility that maintains exact backward compatibility\n * with existing API parameter encoding patterns\n */\n\nexport interface QueryParams {\n [key: string]: string | number | boolean | string[] | number[] | null | undefined;\n}\n\n/**\n * Builds a query string from parameters following the exact encoding patterns\n * used by the existing API implementation:\n * - Arrays: JSON.stringify then encodeURIComponent\n * - Strings: encodeURIComponent\n * - Numbers: No encoding\n * - Null/undefined: Skip\n */\nexport function buildQueryString(params: QueryParams): string {\n const queryParts: string[] = [];\n \n Object.entries(params).forEach(([key, value]) => {\n // Skip null and undefined values\n if (value === null || value === undefined) {\n return;\n }\n \n // Handle arrays: JSON.stringify then encode\n if (Array.isArray(value)) {\n const jsonString = JSON.stringify(value);\n queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n }\n // Handle strings: encode\n else if (typeof value === 'string') {\n queryParts.push(`${key}=${encodeURIComponent(value)}`);\n }\n // Handle numbers and booleans: no encoding\n else if (typeof value === 'number' || typeof value === 'boolean') {\n queryParts.push(`${key}=${value}`);\n }\n // Handle objects (in case needed in future): JSON.stringify then encode\n else if (typeof value === 'object') {\n const jsonString = JSON.stringify(value);\n queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n }\n });\n \n return queryParts.length > 0 ? `?${queryParts.join('&')}` : '';\n}\n\n/**\n * Appends query string to a URL\n */\nexport function appendQueryString(url: string, params: QueryParams): string {\n const queryString = buildQueryString(params);\n return queryString ? `${url}${queryString}` : url;\n}","// Toast notifications should be handled by UI layer\n\nimport { appendQueryString } from '../utils/queryParams';\nimport type { QueryParams } from '../utils/queryParams';\n\ninterface HttpOptions {\n successMessage?: string;\n errorMessage?: string;\n schema?: any;\n params?: QueryParams;\n}\n\nexport interface HttpResponse<T = any> {\n value: T;\n success: boolean;\n error?: string;\n}\n\nasync function get<T = any>(url: string, options?: HttpOptions): Promise<HttpResponse<T>> {\n try {\n // Append query parameters if provided\n const finalUrl = options?.params ? appendQueryString(url, options.params) : url;\n const response = await fetch(finalUrl);\n \n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n \n const data = await response.json();\n \n // Success message should be handled by UI layer\n // if (options?.successMessage) {\n // showToast(options.successMessage, 'success');\n // }\n \n return {\n value: data,\n success: true\n };\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Unknown error occurred';\n \n // Error message should be handled by UI layer\n // if (options?.errorMessage) {\n // showToast(options.errorMessage, 'error');\n // }\n \n return {\n value: null as any,\n success: false,\n error: errorMsg\n };\n }\n}\n\nasync function post<T = any>(url: string, data: any, options?: HttpOptions): Promise<HttpResponse<T>> {\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data)\n });\n \n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n \n const responseData = await response.json();\n \n // Success message should be handled by UI layer\n // if (options?.successMessage) {\n // showToast(options.successMessage, 'success');\n // }\n \n return {\n value: responseData,\n success: true\n };\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Unknown error occurred';\n \n // Error message should be handled by UI layer\n // if (options?.errorMessage) {\n // showToast(options.errorMessage, 'error');\n // }\n \n return {\n value: null as any,\n success: false,\n error: errorMsg\n };\n }\n}\n\nconst httpClient = {\n get,\n post\n};\n\nexport default httpClient;","import { API_URL } from '../config';\nimport type { ApiResponse, Payment, Quote } from '../types';\nimport httpClient from '../services/http';\n\nexport const reservationApi = {\n // Get quote for reservation parts\n async getQuote({\n token,\n businessId,\n market,\n currency,\n userId,\n parts,\n paymentMethod = 'CASH',\n promoCode,\n }: {\n token: string;\n businessId: string;\n market: string;\n currency: string;\n userId: string;\n parts: any[];\n paymentMethod?: string;\n promoCode?: string;\n }): Promise<ApiResponse<Quote>> {\n try {\n const lines = parts.map(part => ({\n type: 'SERVICE',\n serviceId: part.serviceId,\n quantity: 1,\n }));\n\n const payload = {\n businessId,\n market,\n currency,\n userId,\n paymentMethod,\n lines,\n promoCode: promoCode || undefined,\n shippingMethodId: null,\n };\n\n const res = await fetch(`${API_URL}/v1/payments/quote`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n },\n body: JSON.stringify(payload),\n });\n\n const text = await res.text();\n if (!res.ok) {\n try {\n const json = JSON.parse(text);\n return { success: false, error: json.reason || json.error || 'Failed to fetch quote', code: json.code };\n } catch {\n return { success: false, error: text || 'Failed to fetch quote' };\n }\n }\n\n const quote = text ? JSON.parse(text) : null;\n return { success: true, data: quote };\n } catch (e: any) {\n return {\n success: false,\n error: e.message || 'Failed to fetch quote',\n };\n }\n },\n\n // Get available slots for a service\n async getAvailableSlots({\n businessId,\n serviceId,\n from,\n to,\n limit = 1000,\n providerId = null,\n }: {\n businessId: string;\n serviceId: string;\n from: number;\n to: number;\n limit?: number;\n providerId?: string | null;\n }) {\n const url = `${API_URL}/v1/businesses/${businessId}/services/${serviceId}/available-slots`;\n \n const response = await httpClient.get(url, {\n params: {\n from,\n to,\n limit,\n providerId\n }\n });\n\n if (response.success) {\n const json = response.value;\n return {\n success: true,\n data: json.data?.items || json.items || [],\n };\n } else {\n console.error(\"Error fetching available slots:\", response.error);\n return {\n success: false,\n error: response.error,\n data: [],\n };\n }\n },\n\n // Get all providers for a service\n async getProviders({ businessId, serviceId, limit = 50 }: { businessId: string; serviceId: string; limit?: number }) {\n const url = `${API_URL}/v1/businesses/${businessId}/providers`;\n \n const response = await httpClient.get(url, {\n params: {\n serviceId,\n limit\n }\n });\n\n if (response.success) {\n const json = response.value;\n return {\n success: true,\n data: json.items || [],\n };\n } else {\n console.error(\"Error loading providers:\", response.error);\n return {\n success: false,\n error: response.error,\n data: [],\n };\n }\n },\n\n // Get guest token or create a new one\n async getGuestToken(): Promise<ApiResponse<{ token: string }>> {\n try {\n const res = await fetch(`${API_URL}/v1/users/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ provider: \"GUEST\" }),\n });\n\n if (!res.ok) throw new Error(\"Guest login failed\");\n\n const json = await res.json();\n\n return {\n success: true,\n data: { token: json.accessToken },\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n };\n }\n },\n\n // Update user's phone number\n async updateProfilePhone({ token, phoneNumber }: { token: string; phoneNumber: string }) {\n try {\n const res = await fetch(`${API_URL}/v1/users/update`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n phoneNumber,\n phoneNumbers: [],\n addresses: [],\n }),\n });\n\n if (!res.ok) {\n const error = (await res.text()) || res.statusText;\n return {\n success: false,\n error,\n };\n }\n\n return {\n success: true,\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n };\n }\n },\n\n // Verify phone number with code\n async verifyPhoneCode({ token, phoneNumber, code }: { token: string; phoneNumber: string; code: string }) {\n try {\n const res = await fetch(`${API_URL}/v1/users/confirm/phone-number`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n phoneNumber,\n code,\n }),\n });\n\n if (!res.ok) {\n const error = (await res.text()) || res.statusText;\n return {\n success: false,\n error,\n };\n }\n\n return {\n success: true,\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n };\n }\n },\n\n // Complete reservation checkout - Backend calculates currency from market\n async checkout({\n token,\n businessId,\n parts,\n paymentMethod = \"CASH\",\n blocks = [],\n market = \"US\",\n promoCode\n }: {\n token: string;\n businessId: string;\n parts: any[];\n paymentMethod?: string;\n blocks?: any[];\n market?: string;\n promoCode?: string;\n }) {\n try {\n const payload: any = {\n businessId,\n blocks: blocks,\n market,\n parts: parts.map((p) => ({\n serviceId: p.serviceId,\n from: p.from,\n to: p.to,\n blocks: p.blocks,\n reservationMethod: p.reservationMethod,\n providerId: p.providerId,\n })),\n };\n\n // Only add payment method if it's defined (not for inquiry-only reservations)\n if (paymentMethod !== undefined) {\n payload.paymentMethod = paymentMethod;\n }\n\n // Add promo code if provided\n if (promoCode) {\n payload.promoCode = promoCode;\n }\n\n const res = await fetch(`${API_URL}/v1/reservations/checkout`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n const error = (await res.text()) || res.statusText;\n throw new Error(error);\n }\n\n const json = await res.json();\n return {\n success: true,\n data: json, // Should include reservationId and clientSecret for payments\n };\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n };\n }\n },\n};\n","import { reservationApi } from \"../api/reservation\";\nimport { API_URL } from \"../config\";\n\n// Shared guest token management\nexport async function getGuestToken(currentToken: string | null = null): Promise<string> {\n\tif (currentToken) return currentToken;\n\n\tconst response = await reservationApi.getGuestToken();\n\tif (response.success && response.data) {\n\t\treturn response.data.token;\n\t}\n\tthrow new Error(\"Failed to get guest token\");\n}\n\n// Shared phone verification\nexport async function updateProfilePhone(token: string, phoneNumber: string) {\n\tif (!phoneNumber) {\n\t\tthrow new Error(\"Phone number is required\");\n\t}\n\n\tconst response = await reservationApi.updateProfilePhone({ token, phoneNumber });\n\n\tif (response.success) {\n\t\treturn { success: true };\n\t} else {\n\t\tthrow new Error(response.error || \"Failed to send verification code\");\n\t}\n}\n\nexport async function verifyPhoneCode(token: string, phoneNumber: string, code: string) {\n\tif (!code) {\n\t\tthrow new Error(\"Verification code is required\");\n\t}\n\n\tconst response = await reservationApi.verifyPhoneCode({ token, phoneNumber, code });\n\n\tif (response.success) {\n\t\treturn { success: true };\n\t} else {\n\t\tthrow new Error(response.error || \"Invalid verification code\");\n\t}\n}\n\n// Shared business configuration fetching\nexport async function getBusinessConfig(businessId: string) {\n\ttry {\n\t\tconst response = await fetch(`${API_URL}/v1/businesses/${businessId}`, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch business config: ${response.status}`);\n\t\t}\n\n\t\tconst business = await response.json();\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: business,\n\t\t};\n\t} catch (error: any) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: error.message,\n\t\t};\n\t}\n}\n","/**\n * Maps currency codes to their display symbols\n */\nexport function getCurrencySymbol(currency: string): string {\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n CAD: 'C$',\n AUD: 'A$',\n JPY: '¥',\n CHF: 'CHF',\n SEK: 'kr',\n NOK: 'kr',\n DKK: 'kr',\n PLN: 'zł',\n CZK: 'Kč',\n HUF: 'Ft',\n RON: 'lei',\n BGN: 'лв',\n HRK: 'kn',\n RSD: 'дин',\n BAM: 'KM',\n MKD: 'ден',\n ALL: 'L',\n TRY: '₺',\n RUB: '₽',\n UAH: '₴',\n BYN: 'Br',\n CNY: '¥',\n INR: '₹',\n KRW: '₩',\n THB: '฿',\n VND: '₫',\n SGD: 'S$',\n MYR: 'RM',\n IDR: 'Rp',\n PHP: '₱',\n BRL: 'R$',\n ARS: '$',\n CLP: '$',\n COP: '$',\n PEN: 'S/',\n MXN: '$',\n ZAR: 'R',\n EGP: 'E£',\n NGN: '₦',\n KES: 'KSh',\n GHS: '₵',\n MAD: 'DH',\n TND: 'د.ت',\n DZD: 'د.ج',\n LYD: 'ل.د',\n AED: 'د.إ',\n SAR: 'ر.س',\n QAR: 'ر.ق',\n KWD: 'د.ك',\n BHD: 'ب.د',\n OMR: 'ر.ع',\n JOD: 'د.أ',\n LBP: 'ل.ل',\n SYP: 'ل.س',\n IQD: 'ع.د',\n IRR: '﷼',\n AFN: '؋',\n PKR: '₨',\n LKR: '₨',\n NPR: '₨',\n BDT: '৳',\n MMK: 'K',\n LAK: '₭',\n KHR: '៛',\n MNT: '₮',\n KZT: '₸',\n UZS: 'лв',\n KGS: 'лв',\n TJS: 'SM',\n TMT: 'T',\n AZN: '₼',\n GEL: '₾',\n AMD: '֏',\n BYR: 'p.',\n MDL: 'L'\n };\n\n return currencySymbols[currency.toUpperCase()] || currency;\n}\n\n/**\n * Formats a price with the appropriate currency symbol\n */\nexport function formatCurrencyAmount(amount: number, currency: string): string {\n const symbol = getCurrencySymbol(currency);\n const formattedAmount = (amount / 100).toFixed(2);\n\n // For some currencies, symbol goes after the amount\n const symbolAfterCurrencies = ['SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK'];\n\n if (symbolAfterCurrencies.includes(currency.toUpperCase())) {\n return `${formattedAmount} ${symbol}`;\n }\n\n return `${symbol}${formattedAmount}`;\n}","// Unified Business Store - Single Source of Truth\nimport { computed, deepMap } from \"nanostores\";\nimport { BUSINESS_ID } from \"../config\";\nimport * as authService from \"../services/auth\";\nimport type { Business, Market, Zone, ShippingMethod, BusinessPaymentMethod, PaymentProviderConfig } from \"../types\";\nimport { PaymentMethod } from \"../types\";\nimport { getCurrencySymbol } from \"../utils/currency\";\n\n// Core business state\nexport const businessStore = deepMap({\n data: null as Business | null,\n loading: false,\n error: null as string | null,\n initialized: false,\n});\n\n// Computed values derived from business data\nexport const selectedMarket = computed(businessStore, (state) => {\n if (!state.data?.configs?.markets) return null;\n\n const markets = state.data.configs.markets;\n // For arky website, always use 'us' market (hardcoded for headless)\n return markets.find(m => m.id === 'us') ||\n markets[0] ||\n null;\n});\n\nexport const currency = computed(selectedMarket, (market) => {\n return market?.currency || 'USD';\n});\n\nexport const currencySymbol = computed(selectedMarket, (market) => {\n return getCurrencySymbol(market?.currency || 'USD');\n});\n\nexport const markets = computed(businessStore, (state) => {\n if (!state.data?.configs?.markets) return [];\n return state.data.configs.markets;\n});\n\nexport const zones = computed(businessStore, (state) => {\n if (!state.data?.configs?.zones) return [];\n return state.data.configs.zones;\n});\n\n// Get zone by country code\nexport const getZoneByCountry = (countryCode: string): Zone | null => {\n const allZones = zones.get();\n return allZones.find(zone =>\n zone.countries.length === 0 || // Empty = all countries\n zone.countries.includes(countryCode.toUpperCase())\n ) || null;\n};\n\n// Get shipping methods for a specific country\nexport const getShippingMethodsForCountry = (countryCode: string): ShippingMethod[] => {\n const zone = getZoneByCountry(countryCode);\n return zone?.shippingMethods || [];\n};\n\nexport const paymentMethods = computed(selectedMarket, (market) => {\n if (!market) return ['CASH'];\n const methods = market.paymentMethods || [];\n return methods.map((pm: any) => pm.method || pm);\n});\n\nexport const paymentConfig = computed(businessStore, (state) => {\n if (!state.data?.configs) return { provider: null, enabled: false };\n\n const provider = state.data.configs.paymentProvider || null;\n const hasCreditCard = paymentMethods.get().includes('CREDIT_CARD');\n\n return {\n provider,\n enabled: hasCreditCard && !!provider\n };\n});\n\nexport const orderBlocks = computed(businessStore, (state) => {\n return state.data?.configs?.orderBlocks || [];\n});\n\nexport const reservationBlocks = computed(businessStore, (state) => {\n return state.data?.configs?.reservationBlocks || [];\n});\n\n// Actions\nexport const businessActions = {\n // Initialize business data - SINGLE API CALL for entire app\n async init(): Promise<void> {\n const state = businessStore.get();\n if (state.initialized && state.data) {\n // Already loaded, skip\n return;\n }\n\n try {\n businessStore.setKey('loading', true);\n businessStore.setKey('error', null);\n\n const result = await authService.getBusinessConfig(BUSINESS_ID);\n\n if (result.success) {\n businessStore.setKey('data', result.data);\n businessStore.setKey('initialized', true);\n } else {\n throw new Error(result.error || 'Failed to load business configuration');\n }\n } catch (error: any) {\n businessStore.setKey('error', error.message);\n console.error('Business store initialization failed:', error);\n } finally {\n businessStore.setKey('loading', false);\n }\n },\n\n // Reset store (useful for testing)\n reset(): void {\n businessStore.setKey('data', null);\n businessStore.setKey('loading', false);\n businessStore.setKey('error', null);\n businessStore.setKey('initialized', false);\n },\n\n // Get business data (with auto-init)\n async getBusiness(): Promise<Business | null> {\n const state = businessStore.get();\n if (!state.initialized || !state.data) {\n await this.init();\n }\n return businessStore.get().data;\n }\n};\n\n// Export everything for easy access\nexport {\n businessStore as store,\n businessActions as actions\n};\n\n// Auto-initialize on first import ONLY if config is already set\nif (typeof window !== 'undefined' && BUSINESS_ID) {\n businessActions.init().catch(console.error);\n}","import { API_URL } from '../config';\nimport type { ApiResponse, Payment, Quote } from '../types';\nimport { reservationApi } from './reservation';\nimport httpClient from '../services/http';\n\nexport const eshopApi = {\n // Get products\n async getProducts({ \n businessId, \n categoryIds = null, \n status = \"ACTIVE\", \n limit = 20, \n cursor = null \n }: {\n businessId: string;\n categoryIds?: string[] | null;\n status?: string;\n limit?: number;\n cursor?: string | null;\n }) {\n const url = `${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/products`;\n \n const response = await httpClient.get(url, {\n params: {\n categoryIds: categoryIds && categoryIds.length > 0 ? categoryIds : undefined,\n status,\n limit,\n cursor\n }\n });\n\n if (response.success) {\n const json = response.value;\n return {\n success: true,\n data: json.items || [],\n cursor: json.cursor,\n total: json.total || 0,\n };\n } else {\n console.error(\"Error fetching products:\", response.error);\n return {\n success: false,\n error: response.error,\n data: [],\n };\n }\n },\n\n // Get product by slug\n async getProductBySlug({ businessId, slug }: { businessId: string; slug: string }) {\n try {\n const url = `${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/products/slug/${encodeURIComponent(businessId)}/${encodeURIComponent(slug)}`;\n const res = await fetch(url);\n if (!res.ok) throw new Error(\"Product not found\");\n const json = await res.json();\n return {\n success: true,\n data: json,\n };\n } catch (e: any) {\n console.error(\"Error fetching product:\", e);\n return {\n success: false,\n error: e.message,\n data: null,\n };\n }\n },\n\n // Get quote for cart (pricing with promo codes, shipping, taxes)\n async getQuote({\n token,\n businessId,\n items,\n market,\n currency,\n userId,\n paymentMethod,\n shippingMethodId,\n promoCode\n }: {\n token: string;\n businessId: string;\n items: { productId: string; variantId: string; quantity: number }[];\n market: string;\n currency: string;\n userId: string;\n paymentMethod: string;\n shippingMethodId?: string;\n // location is provided via order blocks, not as a top-level param\n promoCode?: string;\n }): Promise<ApiResponse<Quote>> {\n try {\n const lines = items.map(item => ({\n type: 'PRODUCT_VARIANT',\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity\n }));\n\n const payload: any = {\n businessId,\n market,\n currency,\n userId,\n paymentMethod,\n lines,\n ...(shippingMethodId && { shippingMethodId }),\n ...(promoCode && { promoCode })\n };\n\n const res = await fetch(`${API_URL}/v1/payments/quote`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(payload),\n });\n\n const text = await res.text();\n if (!res.ok) {\n try {\n const json = JSON.parse(text);\n return { success: false, error: json.reason || json.error || res.statusText, code: json.code };\n } catch {\n return { success: false, error: text || res.statusText };\n }\n }\n\n const quote = text ? JSON.parse(text) : null;\n return { success: true, data: quote };\n } catch (e: any) {\n console.error('Quote fetch failed:', e);\n return {\n success: false,\n error: e.message,\n };\n }\n },\n\n // Checkout - Backend calculates currency from market\n async checkout({\n token,\n businessId,\n items,\n paymentMethod,\n blocks,\n market = \"US\",\n shippingMethodId,\n promoCode,\n paymentIntentId = null\n }: {\n token: string;\n businessId: string;\n items: any[];\n paymentMethod: string;\n blocks: any[];\n market?: string;\n shippingMethodId?: string;\n promoCode?: string;\n paymentIntentId?: string | null;\n }) {\n try {\n const payload: any = {\n businessId,\n items,\n paymentMethod,\n blocks,\n market,\n ...(shippingMethodId && { shippingMethodId }),\n ...(promoCode && { promoCode }),\n ...(paymentIntentId && { paymentIntentId }),\n };\n\n const res = await fetch(`${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/orders/checkout`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(payload),\n });\n\n const text = await res.text();\n if (!res.ok) {\n try {\n const json = JSON.parse(text);\n return { success: false, error: json.reason || json.error || res.statusText, code: json.code };\n } catch {\n return { success: false, error: text || res.statusText };\n }\n }\n\n const json = text ? JSON.parse(text) : null;\n return { success: true, data: json };\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n };\n }\n },\n\n // Create payment intent for Stripe\n async createPaymentIntent({ amount, currency, businessId }: { amount: number; currency: string; businessId: string }) {\n try {\n const tokenResponse = await reservationApi.getGuestToken();\n if (!tokenResponse.success || !tokenResponse.data) {\n throw new Error('Failed to get guest token');\n }\n const token = tokenResponse.data.token;\n \n const res = await fetch(`${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/payment/create-intent`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n amount,\n currency,\n businessId,\n }),\n });\n\n if (!res.ok) {\n const error = (await res.text()) || res.statusText;\n throw new Error(error);\n }\n\n const json = await res.json();\n return {\n success: true,\n data: json,\n };\n } catch (e: any) {\n console.error('Payment intent creation failed:', e);\n return {\n success: false,\n error: e.message,\n };\n }\n },\n};\n","// Price formatting utilities - Centralized currency and price operations\nimport type { Payment, PaymentMethod, Price } from '../types';\nimport { getCurrencySymbol } from './currency';\n\n// Market-based currency symbols mapping\nconst CURRENCY_SYMBOLS = {\n 'USD': '$',\n 'EUR': '€',\n 'GBP': '£',\n 'CAD': 'C$',\n 'AUD': 'A$'\n} as const;\n\nconst MARKET_CURRENCIES = {\n 'US': 'USD',\n 'EU': 'EUR',\n 'UK': 'GBP',\n 'CA': 'CAD',\n 'AU': 'AUD'\n} as const;\n\n// Convert minor units (cents) to major units (dollars)\nexport function convertToMajor(minorAmount: number): number {\n return (minorAmount ?? 0) / 100;\n}\n\n// Convert major units to minor units\nexport function convertToMinor(majorAmount: number): number {\n return Math.round((majorAmount ?? 0) * 100);\n}\n\n// Get currency symbol from currency code\nexport function getSymbol(currency: string): string {\n return CURRENCY_SYMBOLS[currency as keyof typeof CURRENCY_SYMBOLS] || '$';\n}\n\n// Get currency from market ID\nexport function getCurrencyFromMarket(marketId: string): string {\n return MARKET_CURRENCIES[marketId as keyof typeof MARKET_CURRENCIES] || 'USD';\n}\n\n// Format currency amount with symbol\nexport function formatCurrencyAmount(\n amount: number,\n currency: string,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n customSymbol?: string;\n } = {}\n): string {\n const { showSymbols = true, decimalPlaces = 2, customSymbol } = options;\n const roundedAmount = amount.toFixed(decimalPlaces);\n\n if (!showSymbols) {\n return `${roundedAmount} ${currency}`;\n }\n\n const symbol = customSymbol || getSymbol(currency);\n return `${symbol}${roundedAmount}`;\n}\n\n// Format minor units with currency\nexport function formatMinor(\n amountMinor: number,\n currency: string,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n customSymbol?: string;\n } = {}\n): string {\n const major = convertToMajor(amountMinor);\n return formatCurrencyAmount(major, currency, options);\n}\n\n// Format Payment structure for display\nexport function formatPayment(\n payment: Payment,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n showBreakdown?: boolean;\n } = {}\n): string {\n if (!payment) return '';\n\n const { showSymbols = true, decimalPlaces = 2, showBreakdown = false } = options;\n\n if (showBreakdown) {\n const subtotal = formatMinor(payment.subtotal, payment.currency, { showSymbols, decimalPlaces });\n const discount = (payment.discount ?? 0) > 0 ? formatMinor(payment.discount, payment.currency, { showSymbols, decimalPlaces }) : null;\n const tax = (payment.tax ?? 0) > 0 ? formatMinor(payment.tax, payment.currency, { showSymbols, decimalPlaces }) : null;\n const total = formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n\n let result = `Subtotal: ${subtotal}`;\n if (discount) result += `, Discount: -${discount}`;\n if (tax) result += `, Tax: ${tax}`;\n result += `, Total: ${total}`;\n return result;\n }\n\n return formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n}\n\n// Format market-based prices (from product variants)\nexport function getMarketPrice(\n prices: Price[],\n marketId: string,\n businessMarkets?: any[],\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n showCompareAt?: boolean;\n fallbackMarket?: string;\n } = {}\n): string {\n if (!prices || prices.length === 0) return '';\n\n const {\n showSymbols = true,\n decimalPlaces = 2,\n showCompareAt = true,\n fallbackMarket = 'US',\n } = options;\n\n // Find price for the specific market\n let price = prices.find(p => p.market === marketId);\n\n // Fallback to first available or fallback market\n if (!price) {\n price = prices.find(p => p.market === fallbackMarket) || prices[0];\n }\n\n if (!price) return '';\n\n let currency: string;\n let symbol: string;\n\n // If we have business markets, use the currency directly from market data\n if (businessMarkets) {\n const marketData = businessMarkets.find(m => m.id === price.market || m.code === price.market);\n if (marketData?.currency) {\n currency = marketData.currency;\n symbol = getCurrencySymbol(currency);\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getSymbol(currency);\n }\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getSymbol(currency);\n }\n\n // Format price with custom symbol\n const formattedPrice = formatMinor(price.amount ?? 0, currency, {\n showSymbols,\n decimalPlaces,\n customSymbol: symbol\n });\n\n // Add compare-at price if available\n if (showCompareAt && price.compareAt && price.compareAt > (price.amount ?? 0)) {\n const formattedCompareAt = formatMinor(price.compareAt, currency, {\n showSymbols,\n decimalPlaces,\n customSymbol: symbol\n });\n return `${formattedPrice} was ${formattedCompareAt}`;\n }\n\n return formattedPrice;\n}\n\n// Get price amount from market-based prices (for calculations)\nexport function getPriceAmount(prices: Price[], marketId: string, fallbackMarket: string = 'US'): number {\n if (!prices || prices.length === 0) return 0;\n\n const price = prices.find(p => p.market === marketId) ||\n prices.find(p => p.market === fallbackMarket) ||\n prices[0];\n\n // Amounts are stored in minor units (e.g., cents)\n return price?.amount || 0;\n}\n\n// Create Payment structure for checkout (all amounts in minor units)\nexport function createPaymentForCheckout(\n subtotalMinor: number,\n marketId: string,\n currency: string,\n paymentMethod: any,\n options: {\n discount?: number;\n tax?: number;\n promoCodeId?: string;\n } = {}\n): Payment {\n const { discount = 0, tax = 0, promoCodeId } = options;\n const total = subtotalMinor - discount + tax;\n\n return {\n currency,\n market: marketId,\n subtotal: subtotalMinor,\n shipping: 0,\n discount,\n tax,\n total,\n promoCodeId,\n method: paymentMethod,\n };\n}\n","// E-shop store with TypeScript - Simplified with Business Store\nimport { atom, computed, deepMap } from \"nanostores\";\nimport { persistentAtom } from \"@nanostores/persistent\";\nimport { BUSINESS_ID } from \"../config\";\nimport { eshopApi } from \"../api/eshop\";\nimport { createPaymentForCheckout, getPriceAmount, formatPayment, formatMinor } from \"../utils/price\";\nimport * as authService from \"../services/auth\";\nimport {\n selectedMarket,\n currency,\n getShippingMethodsForCountry,\n paymentMethods,\n paymentConfig,\n orderBlocks,\n businessActions\n} from \"./business\";\nimport type { EshopCartItem, EshopStoreState, Block, Price, Payment, Quote } from \"../types\";\nimport { PaymentMethod } from \"../types\";\n// Toast notifications should be handled by UI layer\n\n// Frontend cart items\nexport const cartItems = persistentAtom<EshopCartItem[]>(\"eshopCart\", [], {\n encode: JSON.stringify,\n decode: JSON.parse,\n});\n\n// Promo code state (not persisted - cleared on page reload)\nexport const promoCodeAtom = atom<string | null>(null);\n\n// Quote atom (fetched from backend)\nexport const quoteAtom = atom<Quote | null>(null);\n\n// Simplified store for cart-specific state only\nexport const store = deepMap({\n businessId: BUSINESS_ID,\n selectedShippingMethodId: null, // Selected shipping method ID\n shippingLocation: null, // Deprecated; kept for backward compat\n userToken: null,\n processingCheckout: false,\n loading: false,\n error: null,\n // Phone verification\n phoneNumber: \"\",\n phoneError: null,\n verificationCode: \"\",\n verifyError: null,\n // Quote fetching\n fetchingQuote: false,\n quoteError: null,\n});\n\n// Computed values using business store\nexport const cartTotal = computed([cartItems, selectedMarket, currency], (items, market, curr) => {\n // Return a Payment object with amounts in minor units\n const subtotalMinor = (items || []).reduce((sum, item) => {\n let amountMinor = 0;\n if ('amount' in item.price) {\n amountMinor = item.price.amount || 0;\n }\n return sum + (amountMinor * item.quantity);\n }, 0);\n\n const marketId = market?.id || 'us';\n const currencyCode = curr || 'USD';\n\n return createPaymentForCheckout(subtotalMinor, marketId, currencyCode, PaymentMethod.Cash);\n});\n\nexport const cartItemCount = computed(cartItems, (items) => {\n return items.reduce((sum, item) => sum + item.quantity, 0);\n});\n\n// Re-export business store computed values for convenience\nexport {\n currency,\n paymentConfig,\n orderBlocks\n};\n\n// Create alias for backward compatibility\nexport const allowedPaymentMethods = paymentMethods;\n\n// Actions\nexport const actions = {\n // Add item to cart\n addItem(product: any, variant: any, quantity: number = 1) {\n const items = cartItems.get();\n const market = selectedMarket.get();\n\n // Check if item already exists in cart\n const existingItemIndex = items.findIndex(\n (item) => item.productId === product.id && item.variantId === variant.id,\n );\n\n if (existingItemIndex !== -1) {\n // Update existing item quantity\n const updatedItems = [...items];\n updatedItems[existingItemIndex].quantity += quantity;\n cartItems.set(updatedItems);\n } else {\n // Add new item with market-based pricing\n let cartPrice: Price;\n\n if (variant.prices && Array.isArray(variant.prices)) {\n // Market-based pricing from backend (amounts are minor units)\n const marketCode = market?.id || 'us';\n const marketAmount = getPriceAmount(variant.prices, marketCode);\n cartPrice = {\n amount: marketAmount ?? 0,\n market: marketCode\n };\n } else {\n // Fallback\n cartPrice = { amount: 0, market: market?.id || 'us' } as Price;\n }\n\n const newItem: EshopCartItem = {\n id: crypto.randomUUID(),\n productId: product.id,\n variantId: variant.id,\n productName: product.name,\n productSlug: product.slug,\n variantAttributes: variant.attributes || {},\n price: cartPrice,\n quantity,\n addedAt: Date.now(),\n };\n\n cartItems.set([...items, newItem]);\n }\n\n // Toast notification should be handled by UI layer\n // showToast(`${product.name} added to cart!`, \"success\", 3000);\n },\n\n // Update item quantity\n updateQuantity(itemId: string, newQuantity: number) {\n const items = cartItems.get();\n const updatedItems = items.map((item) =>\n item.id === itemId ? { ...item, quantity: Math.max(1, newQuantity) } : item,\n );\n cartItems.set(updatedItems);\n },\n\n // Remove item from cart\n removeItem(itemId: string) {\n const items = cartItems.get();\n const updatedItems = items.filter((item) => item.id !== itemId);\n cartItems.set(updatedItems);\n // Toast notification should be handled by UI layer\n // showToast(\"Item removed from cart!\", \"success\", 2000);\n },\n\n // Clear entire cart\n clearCart() {\n cartItems.set([]);\n },\n\n\n // Get guest token\n async getGuestToken(): Promise<string> {\n const state = store.get();\n const token = await authService.getGuestToken(state.userToken);\n if (token !== state.userToken) {\n store.setKey(\"userToken\", token);\n }\n return token;\n },\n\n // Prepare order items for checkout API\n prepareOrderItems() {\n const items = cartItems.get();\n return items.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n }));\n },\n\n // Get order info blocks (they already have values from DynamicForm)\n getOrderInfoBlocks(): Block[] {\n return orderBlocks.get() || [];\n },\n\n // Process checkout - Updated to use Payment structure\n async checkout(paymentMethod: PaymentMethod = PaymentMethod.Cash, orderInfoBlocks?: Block[], promoCode?: string | null) {\n const items = cartItems.get();\n if (!items.length) {\n return { success: false, error: \"Cart is empty\" };\n }\n\n try {\n store.setKey(\"processingCheckout\", true);\n store.setKey(\"error\", null);\n\n const token = await this.getGuestToken();\n const orderItems = this.prepareOrderItems();\n const blocks = orderInfoBlocks || this.getOrderInfoBlocks();\n const state = store.get();\n\n const market = selectedMarket.get();\n if (!market) {\n throw new Error(\"No market selected\");\n }\n\n // Extract country code from location block\n const locationBlock = blocks.find(b => b.key === 'location' && b.type === 'GEO_LOCATION');\n const countryCode = locationBlock?.value?.[0]?.countryCode;\n\n if (!countryCode) {\n throw new Error(\"Country is required for checkout\");\n }\n\n // Get available shipping methods for the country\n const availableShippingMethods = getShippingMethodsForCountry(countryCode) || [];\n\n if (!availableShippingMethods || availableShippingMethods.length === 0) {\n throw new Error(`No shipping methods available for country: ${countryCode}`);\n }\n\n // Get selected shipping method or first available\n const shippingMethodId = state.selectedShippingMethodId;\n const shippingMethod = availableShippingMethods.find(sm => sm.id === shippingMethodId) ||\n availableShippingMethods[0];\n\n if (!shippingMethod) {\n throw new Error(\"No shipping method available\");\n }\n\n const promo = promoCode !== undefined ? promoCode : promoCodeAtom.get();\n const response = await eshopApi.checkout({\n token,\n businessId: BUSINESS_ID,\n items: orderItems,\n paymentMethod: paymentMethod,\n blocks,\n market: market.id,\n shippingMethodId: shippingMethod.id,\n promoCode: promo || undefined,\n });\n\n if (response.success) {\n return {\n success: true,\n data: {\n orderId: response.data.orderId,\n orderNumber: response.data.orderNumber,\n clientSecret: response.data.clientSecret,\n },\n };\n } else {\n throw new Error(response.error || \"Failed to place order\");\n }\n } catch (err: any) {\n const errorMessage = `Checkout failed: ${err.message}`;\n store.setKey(\"error\", errorMessage);\n console.error(\"Checkout error:\", err);\n return { success: false, error: errorMessage };\n } finally {\n store.setKey(\"processingCheckout\", false);\n }\n },\n\n // Phone verification for eshop\n async updateProfilePhone(): Promise<boolean> {\n try {\n const token = await this.getGuestToken();\n const phoneNumber = store.get().phoneNumber;\n\n await authService.updateProfilePhone(token, phoneNumber);\n store.setKey(\"phoneError\", null);\n return true;\n } catch (error: any) {\n console.error(\"Phone update error:\", error);\n store.setKey(\"phoneError\", error.message);\n return false;\n }\n },\n\n async verifyPhoneCode(): Promise<boolean> {\n try {\n const token = await this.getGuestToken();\n const phoneNumber = store.get().phoneNumber;\n const verificationCode = store.get().verificationCode;\n\n await authService.verifyPhoneCode(token, phoneNumber, verificationCode);\n store.setKey(\"verifyError\", null);\n return true;\n } catch (error: any) {\n console.error(\"Phone verification error:\", error);\n store.setKey(\"verifyError\", error.message);\n return false;\n }\n },\n\n formatPrice(priceOrPayment: Price | Payment): string {\n const currencyCode = currency.get();\n\n if ('total' in (priceOrPayment as any)) {\n return formatPayment(priceOrPayment as Payment, { showSymbols: true, decimalPlaces: 2 });\n }\n return formatMinor((priceOrPayment as Price).amount || 0, currencyCode);\n },\n\n getCartPayment(): Payment {\n const items = cartItems.get();\n const market = selectedMarket.get();\n const currencyCode = currency.get();\n\n const marketId = market?.id || 'us';\n\n if (!items || items.length === 0) {\n return createPaymentForCheckout(0, marketId, currencyCode, PaymentMethod.Cash);\n }\n\n const subtotalMinor = items.reduce((sum, item) => {\n let amountMinor = 0;\n if ('amount' in item.price) {\n amountMinor = item.price.amount || 0;\n }\n return sum + (amountMinor * item.quantity);\n }, 0);\n\n return createPaymentForCheckout(subtotalMinor, marketId, currencyCode, PaymentMethod.Cash);\n },\n\n // Get available payment methods for selected market\n getAvailablePaymentMethods(): PaymentMethod[] {\n return paymentMethods.get() || [PaymentMethod.Cash];\n },\n\n // Get shipping methods for a country code\n getShippingMethodsForCountry(countryCode: string) {\n return getShippingMethodsForCountry(countryCode);\n },\n\n // Fetch quote from backend\n async fetchQuote(promoCode?: string | null): Promise<void> {\n const items = cartItems.get();\n const market = selectedMarket.get();\n const currencyCode = currency.get();\n const state = store.get();\n const promo = promoCode !== undefined ? promoCode : promoCodeAtom.get();\n\n if (!items || items.length === 0) {\n quoteAtom.set(null);\n return;\n }\n\n if (!market) {\n console.error('No market selected for quote');\n return;\n }\n\n try {\n store.setKey('fetchingQuote', true);\n store.setKey('quoteError', null);\n\n const token = await this.getGuestToken();\n const shippingMethodId = state.selectedShippingMethodId || undefined;\n\n const response = await eshopApi.getQuote({\n token,\n businessId: BUSINESS_ID,\n items: items.map(item => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n })),\n market: market.id,\n currency: currencyCode,\n userId: token,\n paymentMethod: PaymentMethod.Cash,\n shippingMethodId,\n promoCode: promo || undefined,\n });\n\n if (response.success && response.data) {\n quoteAtom.set(response.data);\n } else {\n const friendly = mapQuoteError(response.code, response.error);\n store.setKey('quoteError', friendly);\n quoteAtom.set(null);\n }\n } catch (error: any) {\n console.error('Quote fetch error:', error);\n store.setKey('quoteError', error.message);\n quoteAtom.set(null);\n } finally {\n store.setKey('fetchingQuote', false);\n }\n },\n\n // Apply promo code\n async applyPromoCode(code: string): Promise<void> {\n promoCodeAtom.set(code);\n await this.fetchQuote();\n },\n\n // Remove promo code\n async removePromoCode(): Promise<void> {\n promoCodeAtom.set(null);\n await this.fetchQuote();\n },\n};\n\nfunction mapQuoteError(code?: string, fallback?: string): string {\n switch (code) {\n case 'PROMO.MIN_ORDER':\n return fallback || 'Promo requires a higher minimum order.';\n case 'PROMO.NOT_ACTIVE':\n return 'Promo code is not active.';\n case 'PROMO.NOT_YET_VALID':\n return 'Promo code is not yet valid.';\n case 'PROMO.EXPIRED':\n return 'Promo code has expired.';\n case 'PROMO.MAX_USES':\n return 'Promo code usage limit exceeded.';\n case 'PROMO.MAX_USES_PER_USER':\n return 'You have already used this promo code.';\n case 'PROMO.NOT_FOUND':\n return 'Promo code not found.';\n default:\n return fallback || 'Failed to fetch quote.';\n }\n}\n\n// Initialize the store\nexport function initEshopStore() {\n // Initialize business data (if not already initialized)\n businessActions.init();\n\n // Note: Shipping method selection now happens after user enters shipping address\n // and we determine their country → zone → available shipping methods\n}\n\nexport default {\n store,\n actions,\n cartItems,\n cartTotal,\n cartItemCount,\n currency,\n allowedPaymentMethods,\n initEshopStore\n};\n","// Simple i18n utilities for SDK\n// Can be enhanced or replaced by user's i18n library\n\nlet defaultLocale = 'en';\n\nexport function setDefaultLocale(locale: string): void {\n defaultLocale = locale;\n}\n\nexport function getLocale(): string {\n // Try to get from browser if available\n if (typeof window !== 'undefined' && window.navigator) {\n return window.navigator.language.split('-')[0] || defaultLocale;\n }\n return defaultLocale;\n}\n\nexport function getLocaleFromUrl(url: URL): string {\n // Simple implementation - can be enhanced\n const pathParts = url.pathname.split('/').filter(Boolean);\n const potentialLocale = pathParts[0];\n\n // Common locale codes\n const validLocales = ['en', 'fr', 'es', 'de', 'it', 'pt', 'ja', 'zh', 'ko', 'ru'];\n\n if (potentialLocale && validLocales.includes(potentialLocale)) {\n return potentialLocale;\n }\n\n return getLocale();\n}\n\nexport function getLocalizedString(value: any, locale?: string): string {\n if (!value) return '';\n\n // If it's already a string, return it\n if (typeof value === 'string') return value;\n\n // If it's an object with locale keys\n if (typeof value === 'object') {\n const targetLocale = locale || getLocale();\n return value[targetLocale] || value['en'] || value[Object.keys(value)[0]] || '';\n }\n\n return String(value);\n}\n","// Validation utilities\n\nexport interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n// Phone number validation\nexport function validatePhoneNumber(phone: string): ValidationResult {\n if (!phone) {\n return { isValid: false, error: 'Phone number is required' };\n }\n \n const cleaned = phone.replace(/\\D/g, '');\n \n if (cleaned.length < 8) {\n return { isValid: false, error: 'Phone number is too short' };\n }\n \n if (cleaned.length > 15) {\n return { isValid: false, error: 'Phone number is too long' };\n }\n \n return { isValid: true };\n}\n\n// Email validation\nexport function validateEmail(email: string): ValidationResult {\n if (!email) {\n return { isValid: false, error: 'Email is required' };\n }\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n \n if (!emailRegex.test(email)) {\n return { isValid: false, error: 'Please enter a valid email address' };\n }\n \n return { isValid: true };\n}\n\n// Verification code validation (4-digit codes)\nexport function validateVerificationCode(code: string): ValidationResult {\n if (!code) {\n return { isValid: false, error: 'Verification code is required' };\n }\n \n const cleaned = code.replace(/\\D/g, '');\n \n if (cleaned.length !== 4) {\n return { isValid: false, error: 'Please enter a 4-digit verification code' };\n }\n \n return { isValid: true };\n}\n\n// Generic required field validation\nexport function validateRequired(value: any, fieldName: string = 'This field'): ValidationResult {\n if (value === null || value === undefined || value === '') {\n return { isValid: false, error: `${fieldName} is required` };\n }\n \n return { isValid: true };\n}","// Timezone utilities (moved from Reservation folder)\n\nexport const tzGroups = [\n {\n label: \"US\",\n zones: [\n { label: \"Eastern Time\", value: \"America/New_York\" },\n { label: \"Central Time\", value: \"America/Chicago\" },\n { label: \"Mountain Time\", value: \"America/Denver\" },\n { label: \"Pacific Time\", value: \"America/Los_Angeles\" },\n ],\n },\n {\n label: \"Europe\",\n zones: [\n { label: \"London\", value: \"Europe/London\" },\n { label: \"Paris\", value: \"Europe/Paris\" },\n { label: \"Berlin\", value: \"Europe/Berlin\" },\n { label: \"Rome\", value: \"Europe/Rome\" },\n ],\n },\n {\n label: \"Asia\",\n zones: [\n { label: \"Tokyo\", value: \"Asia/Tokyo\" },\n { label: \"Shanghai\", value: \"Asia/Shanghai\" },\n { label: \"Mumbai\", value: \"Asia/Kolkata\" },\n { label: \"Dubai\", value: \"Asia/Dubai\" },\n ],\n },\n];\n\nexport function findTimeZone(groups: typeof tzGroups): string {\n try {\n const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n \n // Check if detected timezone is in our list\n for (const group of groups) {\n for (const zone of group.zones) {\n if (zone.value === detected) {\n return detected;\n }\n }\n }\n \n // Fallback to UTC if not found\n return \"UTC\";\n } catch (e) {\n // Fallback to UTC if detection fails\n return \"UTC\";\n }\n}","// Reservation store with TypeScript - Simplified with Business Store\nimport { computed, deepMap } from \"nanostores\";\nimport { persistentAtom } from \"@nanostores/persistent\";\nimport { getLocalizedString, getLocale, getLocaleFromUrl } from \"../utils/i18n\";\nimport { API_URL, BUSINESS_ID, STORAGE_URL } from \"../config\";\nimport { reservationApi } from \"../api/reservation\";\nimport { getMarketPrice, getPriceAmount, createPaymentForCheckout } from \"../utils/price\";\nimport * as authService from \"../services/auth\";\nimport { validatePhoneNumber } from \"../utils/validation\";\nimport { tzGroups, findTimeZone } from \"../utils/timezone\";\nimport {\n selectedMarket,\n currency,\n paymentMethods,\n paymentConfig,\n reservationBlocks,\n businessActions\n} from \"./business\";\nimport type { ReservationStoreState, ReservationCartPart, Business, Block, Payment } from \"../types\";\nimport { PaymentMethod } from \"../types\";\n\nexport const cartParts = persistentAtom<ReservationCartPart[]>(\"reservationCart\", [], {\n encode: JSON.stringify,\n decode: JSON.parse,\n});\n\nexport const store = deepMap({\n currentStep: 1,\n totalSteps: 4,\n steps: {\n 1: { name: \"method\", labelKey: \"method\" },\n 2: { name: \"provider\", labelKey: \"provider\" },\n 3: { name: \"datetime\", labelKey: \"datetime\" },\n 4: { name: \"review\", labelKey: \"review\" },\n },\n\n // Calendar data\n weekdays: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n monthYear: \"\",\n days: [],\n current: new Date(),\n\n // Selection state\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n selectedMethod: null,\n selectedProvider: null,\n providers: [],\n\n // Status flags\n loading: false,\n startDate: null,\n endDate: null,\n isMultiDay: false,\n\n // Phone verification\n phoneNumber: \"\",\n phoneError: null,\n phoneSuccess: null,\n verificationCode: \"\",\n verifyError: null,\n isPhoneVerified: false,\n isSendingCode: false,\n isVerifying: false,\n codeSentAt: null,\n canResendAt: null,\n\n // Quote state\n fetchingQuote: false,\n quote: null,\n quoteError: null,\n\n // Service & config\n guestToken: null,\n service: null,\n apiUrl: API_URL,\n businessId: BUSINESS_ID,\n storageUrl: STORAGE_URL,\n timezone: findTimeZone(tzGroups),\n tzGroups,\n parts: [],\n});\n\nexport const currentStepName = computed(store, (state) => {\n return state?.steps?.[state?.currentStep]?.name || \"\";\n});\n\nexport const canProceed = computed(store, (state) => {\n const stepName = state?.steps?.[state?.currentStep]?.name;\n switch (stepName) {\n case \"method\":\n return !!state.selectedMethod;\n case \"provider\":\n return !!state.selectedProvider;\n case \"datetime\":\n return state.isMultiDay\n ? !!(state.startDate && state.endDate && state.selectedSlot)\n : !!(state.selectedDate && state.selectedSlot);\n case \"review\":\n return true;\n default:\n return false;\n }\n});\n\nconst createCalendarGrid = (date: Date) => {\n const first = new Date(date.getFullYear(), date.getMonth(), 1);\n const last = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n const cells: any[] = [];\n\n // Leading blanks\n const pad = (first.getDay() + 6) % 7;\n for (let i = 0; i < pad; i++) cells.push({ key: `b-${i}`, blank: true });\n\n // Date cells\n for (let d = 1; d <= last.getDate(); d++) {\n cells.push({\n key: `d-${d}`,\n blank: false,\n date: new Date(date.getFullYear(), date.getMonth(), d),\n available: false,\n });\n }\n\n // Trailing blanks\n const suffix = (7 - (cells.length % 7)) % 7;\n for (let i = 0; i < suffix; i++) cells.push({ key: `b2-${i}`, blank: true });\n\n return cells;\n};\n\nconst formatTimeSlot = (from: number, to: number, timezone: string) => {\n const opts: Intl.DateTimeFormatOptions = { hour: \"2-digit\", minute: \"2-digit\", timeZone: timezone };\n return `${new Date(from * 1000).toLocaleTimeString([], opts)} – ${new Date(to * 1000).toLocaleTimeString([], opts)}`;\n};\n\n// Actions\nexport const actions = {\n // Calendar management\n updateCalendarGrid() {\n const state = store.get();\n const cur = state.current || new Date(new Date().getFullYear(), new Date().getMonth(), 1);\n const days = createCalendarGrid(cur);\n\n store.setKey(\"current\", cur);\n store.setKey(\"monthYear\", cur.toLocaleString(undefined, { month: \"long\", year: \"numeric\" }));\n store.setKey(\"days\", days);\n },\n\n updateCalendar() {\n this.updateCalendarGrid();\n const state = store.get();\n if (state.service) this.fetchAvailability(\"month\");\n },\n\n prevMonth() {\n const { current } = store.get();\n store.setKey(\"current\", new Date(current.getFullYear(), current.getMonth() - 1, 1));\n this.updateCalendar();\n },\n\n nextMonth() {\n const { current } = store.get();\n store.setKey(\"current\", new Date(current.getFullYear(), current.getMonth() + 1, 1));\n this.updateCalendar();\n },\n\n // Service initialization\n setService(service: any) {\n store.setKey(\"service\", service);\n store.setKey(\"selectedMethod\", null);\n store.setKey(\"selectedProvider\", null);\n store.setKey(\"providers\", []);\n store.setKey(\"selectedDate\", null);\n store.setKey(\"startDate\", null);\n store.setKey(\"endDate\", null);\n store.setKey(\"slots\", []);\n store.setKey(\"selectedSlot\", null);\n store.setKey(\"currentStep\", 1);\n store.setKey(\"isMultiDay\", !!service?.reservationConfigs?.isMultiDay);\n\n const now = new Date();\n store.setKey(\"current\", new Date(now.getFullYear(), now.getMonth(), 1));\n this.updateCalendarGrid();\n\n // Auto-select if only one method available\n if (service.reservationMethods?.length === 1) {\n const method = service.reservationMethods[0];\n store.setKey(\"selectedMethod\", method);\n this.determineTotalSteps();\n this.handleMethodSelection(method, false);\n } else {\n this.determineTotalSteps();\n }\n this.fetchAvailability(\"month\");\n },\n\n // Step management\n determineTotalSteps(): number {\n const state = store.get();\n if (!state.service) {\n store.setKey(\"totalSteps\", 1);\n return 1;\n }\n\n const active: any[] = [];\n if (state.service.reservationMethods?.length > 1) {\n active.push({ name: \"method\", label: \"Choose Reservation Type\" });\n }\n if (state.selectedMethod?.includes(\"SPECIFIC\")) {\n active.push({ name: \"provider\", label: \"Choose Provider\" });\n }\n if (state.selectedMethod && state.selectedMethod !== \"ORDER\") {\n active.push({\n name: \"datetime\",\n label: state.isMultiDay ? \"Choose Date Range\" : \"Choose Date & Time\",\n });\n }\n active.push({ name: \"review\", label: \"Review & Confirm\" });\n\n const stepObj: Record<number, any> = {};\n active.forEach((st, idx) => {\n stepObj[idx + 1] = st;\n });\n\n store.setKey(\"steps\", stepObj as any);\n store.setKey(\"totalSteps\", active.length);\n\n if (state.currentStep > active.length) {\n store.setKey(\"currentStep\", active.length);\n }\n return active.length;\n },\n\n async getGuestToken(): Promise<string> {\n const state = store.get();\n const token = await authService.getGuestToken(state.guestToken);\n if (token !== state.guestToken) {\n store.setKey(\"guestToken\", token);\n }\n return token;\n },\n\n getStepNumberByName(name: string): number | null {\n const { steps } = store.get();\n for (const [k, v] of Object.entries(steps)) {\n if (v.name === name) return Number(k);\n }\n return null;\n },\n\n nextStep() {\n const state = store.get();\n if (state.currentStep >= state.totalSteps || !canProceed.get()) return;\n\n const next = state.currentStep + 1;\n const name = state.steps[next]?.name;\n store.setKey(\"currentStep\", next);\n\n if (name === \"datetime\") {\n this.fetchAvailability(\"month\");\n if (!state.selectedDate && !state.startDate) {\n this.findFirstAvailable();\n }\n }\n },\n\n prevStep() {\n const state = store.get();\n if (state.currentStep <= 1) return;\n this.clearCurrentStepState();\n store.setKey(\"currentStep\", state.currentStep - 1);\n },\n\n clearCurrentStepState() {\n const name = currentStepName.get();\n if (name === \"method\") {\n store.setKey(\"selectedMethod\", null);\n } else if (name === \"provider\") {\n store.setKey(\"selectedProvider\", null);\n store.setKey(\"providers\", []);\n } else if (name === \"datetime\") {\n store.setKey(\"selectedDate\", null);\n store.setKey(\"startDate\", null);\n store.setKey(\"endDate\", null);\n store.setKey(\"slots\", []);\n store.setKey(\"selectedSlot\", null);\n }\n },\n\n goToStep(step: number) {\n const state = store.get();\n if (step < 1 || step > state.totalSteps) return;\n\n if (step < state.currentStep) {\n for (let i = state.currentStep; i > step; i--) {\n const n = state.steps[i]?.name;\n if (n === \"datetime\") {\n store.setKey(\"selectedDate\", null);\n store.setKey(\"startDate\", null);\n store.setKey(\"endDate\", null);\n store.setKey(\"slots\", []);\n store.setKey(\"selectedSlot\", null);\n } else if (n === \"provider\") {\n store.setKey(\"selectedProvider\", null);\n store.setKey(\"providers\", []);\n } else if (n === \"method\") {\n store.setKey(\"selectedMethod\", null);\n }\n }\n }\n\n store.setKey(\"currentStep\", step);\n\n if (state.steps[step]?.name === \"datetime\") {\n this.fetchAvailability(\"month\");\n if (!state.selectedDate && !state.startDate) {\n this.findFirstAvailable();\n }\n }\n },\n\n // Method selection\n async handleMethodSelection(method: string, advance: boolean = true) {\n store.setKey(\"selectedDate\", null);\n store.setKey(\"startDate\", null);\n store.setKey(\"endDate\", null);\n store.setKey(\"slots\", []);\n store.setKey(\"selectedSlot\", null);\n store.setKey(\"selectedMethod\", method);\n\n this.determineTotalSteps();\n\n if (method === \"ORDER\") {\n this.handleOrderMethod();\n if (advance) {\n const reviewStep = this.getStepNumberByName(\"review\");\n if (reviewStep) this.goToStep(reviewStep);\n return;\n }\n } else if (method.includes(\"SPECIFIC\")) {\n await this.loadProviders();\n const state = store.get();\n if (advance && state.providers.length === 1) {\n this.selectProvider(state.providers[0]);\n const datetimeStep = this.getStepNumberByName(\"datetime\");\n if (datetimeStep) this.goToStep(datetimeStep);\n return;\n }\n } else if (method === \"STANDARD\" && advance) {\n const datetimeStep = this.getStepNumberByName(\"datetime\");\n if (datetimeStep) this.goToStep(datetimeStep);\n return;\n }\n\n if (advance && store.get().currentStep < store.get().totalSteps) {\n this.nextStep();\n }\n },\n\n handleOrderMethod() {\n const state = store.get();\n const now = new Date();\n const dur = state.service.durations?.reduce((a: number, c: any) => a + c.duration, 0) || 3600;\n const from = Math.floor(now.getTime() / 1000);\n const to = from + dur;\n\n store.setKey(\"selectedSlot\", {\n from,\n to,\n timeText: formatTimeSlot(from, to, state.timezone),\n });\n },\n\n\n // Provider management\n async loadProviders() {\n store.setKey(\"loading\", true);\n store.setKey(\"providers\", []);\n\n try {\n const { businessId, service } = store.get();\n const res = await reservationApi.getProviders({ businessId, serviceId: service.id });\n store.setKey(\"providers\", res.success ? res.data : []);\n } catch (e) {\n console.error(\"Error loading providers:\", e);\n } finally {\n store.setKey(\"loading\", false);\n }\n },\n\n selectProvider(provider: any) {\n store.setKey(\"selectedProvider\", provider);\n store.setKey(\"selectedDate\", null);\n store.setKey(\"startDate\", null);\n store.setKey(\"endDate\", null);\n store.setKey(\"slots\", []);\n store.setKey(\"selectedSlot\", null);\n\n if (currentStepName.get() === \"datetime\") {\n this.fetchAvailability(\"month\");\n this.findFirstAvailable();\n }\n },\n\n // Availability and date management\n async fetchAvailability(type: string, date: string | Date | null = null) {\n const state = store.get();\n if (!state.service || currentStepName.get() !== \"datetime\") return;\n\n store.setKey(\"loading\", true);\n\n try {\n let from: number, to: number, limit: number;\n\n if (type === \"month\") {\n from = Math.floor(\n new Date(state.current.getFullYear(), state.current.getMonth(), 1).getTime() / 1000,\n );\n to = Math.floor(\n new Date(state.current.getFullYear(), state.current.getMonth() + 1, 0).getTime() / 1000,\n );\n limit = 100;\n } else if (type === \"day\" && date) {\n const dObj = typeof date === \"string\" ? new Date(date) : date;\n from = Math.floor(dObj.getTime() / 1000);\n to = from + 24 * 3600;\n limit = 100;\n } else if (type === \"first\") {\n const now = new Date();\n from = Math.floor(now.setHours(0, 0, 0, 0) / 1000);\n to = Math.floor(new Date(now.getFullYear(), now.getMonth() + 3, 0).getTime() / 1000);\n limit = 1;\n } else {\n store.setKey(\"loading\", false);\n return;\n }\n\n const params: any = { businessId: state.businessId, serviceId: state.service.id, from, to, limit };\n if (state.selectedProvider) params.providerId = state.selectedProvider.id;\n\n const result = await reservationApi.getAvailableSlots(params);\n if (!result.success) {\n console.error(`Error fetching availability (${type}):`, result.error);\n return;\n }\n\n if (type === \"month\") {\n const avail = new Set(\n result.data.map((i: any) => {\n const date = new Date(i.from * 1000);\n return date.toISOString().slice(0, 10);\n }),\n );\n store.setKey(\n \"days\",\n state.days.map((c: any) => {\n if (!c.blank && c.date) {\n const iso = c.date.toISOString().slice(0, 10);\n return { ...c, available: avail.has(iso) };\n }\n return c;\n }),\n );\n } else if (type === \"day\") {\n const slots = result.data.map((i: any, idx: number) => ({\n ...i,\n id: `slot-${i.from}-${idx}`,\n day: new Date(i.from * 1000).toISOString().slice(0, 10),\n timeText: formatTimeSlot(i.from, i.to, state.timezone),\n }));\n\n store.setKey(\"slots\", slots);\n if (slots.length && !state.selectedSlot) {\n store.setKey(\"selectedSlot\", slots[0]);\n }\n } else if (type === \"first\" && result.data.length) {\n const first = new Date(result.data[0].from * 1000);\n const iso = first.toISOString().slice(0, 10);\n\n store.setKey(\"current\", new Date(first.getFullYear(), first.getMonth(), 1));\n this.updateCalendarGrid();\n await this.fetchAvailability(\"month\");\n\n if (state.isMultiDay) {\n store.setKey(\"startDate\", iso);\n store.setKey(\"selectedDate\", iso);\n } else {\n store.setKey(\"selectedDate\", iso);\n await this.fetchAvailability(\"day\", iso);\n }\n }\n } catch (err) {\n console.error(`Error in fetchAvailability (${type}):`, err);\n } finally {\n store.setKey(\"loading\", false);\n }\n },\n\n findFirstAvailable() {\n if (currentStepName.get() === \"datetime\") this.fetchAvailability(\"first\");\n },\n\n // Date selection\n selectDate(cell: any) {\n if (!cell.date || !cell.available) return;\n // Store date components directly to avoid timezone issues\n const dateInfo = {\n year: cell.date.getFullYear(),\n month: cell.date.getMonth() + 1,\n day: cell.date.getDate(),\n iso: `${cell.date.getFullYear()}-${String(cell.date.getMonth() + 1).padStart(2, '0')}-${String(cell.date.getDate()).padStart(2, '0')}`\n };\n const state = store.get();\n\n if (state.isMultiDay) {\n if (!state.startDate) {\n store.setKey(\"startDate\", dateInfo.iso);\n store.setKey(\"selectedSlot\", null);\n store.setKey(\"selectedDate\", dateInfo.iso);\n store.setKey(\"endDate\", null);\n } else if (!state.endDate) {\n const start = new Date(state.startDate).getTime();\n const cellT = cell.date.getTime();\n if (cellT < start) {\n store.setKey(\"endDate\", state.startDate);\n store.setKey(\"startDate\", dateInfo.iso);\n } else {\n store.setKey(\"endDate\", dateInfo.iso);\n }\n } else {\n store.setKey(\"startDate\", dateInfo.iso);\n store.setKey(\"selectedDate\", dateInfo.iso);\n store.setKey(\"endDate\", null);\n store.setKey(\"selectedSlot\", null);\n }\n } else {\n store.setKey(\"selectedSlot\", null);\n store.setKey(\"selectedDate\", dateInfo.iso);\n this.fetchAvailability(\"day\", dateInfo.iso);\n }\n },\n\n createMultiDaySlot() {\n const state = store.get();\n if (!state.startDate || !state.endDate) return;\n\n const startDT = new Date(state.startDate);\n startDT.setHours(9, 0, 0, 0);\n const endDT = new Date(state.endDate);\n endDT.setHours(17, 0, 0, 0);\n\n const from = Math.floor(startDT.getTime() / 1000);\n const to = Math.floor(endDT.getTime() / 1000);\n\n const rangeSlot = {\n id: `multi-day-slot-${from}-${to}`,\n from,\n to,\n isMultiDay: true,\n timeText: `9:00 AM - 5:00 PM daily`,\n dateRange: `${this.formatDateDisplay(state.startDate)} to ${this.formatDateDisplay(state.endDate)}`,\n day: state.startDate,\n };\n\n store.setKey(\"slots\", [rangeSlot]);\n store.setKey(\"selectedSlot\", rangeSlot);\n },\n\n resetDateSelection() {\n store.setKey(\"startDate\", null);\n store.setKey(\"endDate\", null);\n store.setKey(\"selectedDate\", null);\n store.setKey(\"slots\", []);\n store.setKey(\"selectedSlot\", null);\n },\n\n selectTimeSlot(slot: any) {\n store.setKey(\"selectedSlot\", slot);\n },\n\n setSelectedTimeZone(zone: string) {\n const state = store.get();\n if (zone === state.timezone) return;\n\n store.setKey(\"timezone\", zone);\n\n if (currentStepName.get() === \"datetime\") {\n if (state.selectedDate) {\n this.fetchAvailability(\"day\", state.selectedDate);\n } else if (!state.selectedDate && !state.startDate) {\n this.findFirstAvailable();\n }\n }\n },\n\n // Calendar helpers\n isAvailable(cell: any): boolean {\n return cell.date && cell.available;\n },\n \n isSelectedDay(cell: any): boolean {\n if (cell.blank || !cell.date) return false;\n const iso = `${cell.date.getFullYear()}-${String(cell.date.getMonth() + 1).padStart(2, '0')}-${String(cell.date.getDate()).padStart(2, '0')}`;\n const state = store.get();\n return iso === state.startDate || iso === state.endDate || iso === state.selectedDate;\n },\n \n isInSelectedRange(cell: any): boolean {\n const state = store.get();\n if (cell.blank || !cell.date || !state.startDate || !state.endDate) return false;\n const t = cell.date.getTime();\n const a = new Date(state.startDate).getTime();\n const b = new Date(state.endDate).getTime();\n return t >= a && t <= b;\n },\n \n formatDateDisplay(ds: string | null): string {\n if (!ds) return \"\";\n const d = new Date(ds);\n return d.toLocaleDateString(getLocale(), { month: \"short\", day: \"numeric\" });\n },\n\n // Cart operations\n addToCart(slot: any) {\n const state = store.get();\n const id = crypto.randomUUID();\n\n let dateDisplay: string, timeText: string;\n if (state.isMultiDay && slot.isMultiDay) {\n const a = new Date(slot.from * 1000),\n b = new Date(slot.to * 1000);\n dateDisplay = `${a.toLocaleDateString(getLocale(), { month: \"short\", day: \"numeric\" })} - ${b.toLocaleDateString(getLocale(), { month: \"short\", day: \"numeric\", year: \"numeric\" })}`;\n timeText = slot.timeText;\n } else {\n const date = state.selectedDate ? new Date(state.selectedDate) : new Date(slot.from * 1000);\n dateDisplay = date.toLocaleDateString(getLocale(), {\n weekday: \"short\",\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n timeText = slot.timeText;\n }\n\n const blocks = (state.service?.reservationBlocks || []).map((f: any) => ({\n ...f,\n value: Array.isArray(f.value) ? f.value : [f.value],\n }));\n\n const newPart: ReservationCartPart = {\n id,\n serviceId: state.service.id,\n serviceName: getLocalizedString(state.service.name, getLocale()),\n date: dateDisplay,\n from: slot.from,\n to: slot.to,\n timeText,\n isMultiDay: state.isMultiDay && (!!state.endDate || slot.isMultiDay),\n reservationMethod: state.selectedMethod || '',\n providerId: state.selectedProvider?.id,\n blocks,\n };\n\n const newParts = [...state.parts, newPart];\n store.setKey(\"parts\", newParts);\n cartParts.set(newParts);\n\n this.resetDateSelection();\n store.setKey(\"currentStep\", 1);\n if (state.service.reservationMethods?.length > 1) {\n store.setKey(\"selectedMethod\", null);\n }\n },\n\n removePart(id: string) {\n const filteredParts = store.get().parts.filter((p) => p.id !== id);\n store.setKey(\"parts\", filteredParts);\n cartParts.set(filteredParts);\n },\n\n // Phone validation helper (using shared utility)\n validatePhoneNumber(phone: string): boolean {\n const result = validatePhoneNumber(phone);\n return result.isValid;\n },\n\n // Phone verification\n async updateProfilePhone(): Promise<boolean> {\n store.setKey(\"phoneError\", null);\n store.setKey(\"phoneSuccess\", null);\n store.setKey(\"isSendingCode\", true);\n\n try {\n const phoneNumber = store.get().phoneNumber;\n\n // Validate phone number format\n if (!this.validatePhoneNumber(phoneNumber)) {\n store.setKey(\"phoneError\", \"Please enter a valid phone number\");\n return false;\n }\n\n const token = await this.getGuestToken();\n await authService.updateProfilePhone(token, phoneNumber);\n \n store.setKey(\"phoneSuccess\", \"Verification code sent successfully!\");\n store.setKey(\"codeSentAt\", Date.now());\n return true;\n } catch (e: any) {\n store.setKey(\"phoneError\", e.message);\n return false;\n } finally {\n store.setKey(\"isSendingCode\", false);\n }\n },\n\n async verifyPhoneCode(): Promise<boolean> {\n store.setKey(\"verifyError\", null);\n store.setKey(\"isVerifying\", true);\n\n try {\n const { phoneNumber, verificationCode } = store.get();\n\n // Validate code format\n if (!verificationCode || verificationCode.length !== 4) {\n store.setKey(\"verifyError\", \"Please enter a 4-digit verification code\");\n return false;\n }\n\n const token = await this.getGuestToken();\n await authService.verifyPhoneCode(token, phoneNumber, verificationCode);\n \n store.setKey(\"isPhoneVerified\", true);\n store.setKey(\"phoneSuccess\", null);\n store.setKey(\"verificationCode\", \"\");\n return true;\n } catch (e: any) {\n // Provide user-friendly error messages\n let errorMessage = \"Invalid verification code\";\n if (e.message?.includes(\"expired\")) {\n errorMessage = \"Verification code has expired. Please request a new one.\";\n } else if (e.message?.includes(\"incorrect\") || e.message?.includes(\"invalid\")) {\n errorMessage = \"Incorrect verification code. Please try again.\";\n }\n store.setKey(\"verifyError\", errorMessage);\n return false;\n } finally {\n store.setKey(\"isVerifying\", false);\n }\n },\n\n async checkout(paymentMethod: PaymentMethod = PaymentMethod.Cash, reservationBlocks?: Block[], promoCode?: string) {\n const state = store.get();\n if (state.loading || !state.parts.length) return { success: false, error: \"No parts in cart\" };\n\n store.setKey(\"loading\", true);\n\n try {\n const token = await this.getGuestToken();\n\n const result = await reservationApi.checkout({\n token,\n businessId: state.businessId,\n blocks: reservationBlocks || [],\n parts: state.parts,\n paymentMethod,\n market: 'us',\n promoCode,\n });\n\n if (result.success) {\n return {\n success: true,\n data: {\n reservationId: result.data?.reservationId,\n clientSecret: result.data?.clientSecret,\n },\n };\n } else {\n throw new Error(result.error);\n }\n } catch (e: any) {\n console.error(\"Reservation checkout error:\", e);\n return { success: false, error: e.message };\n } finally {\n store.setKey(\"loading\", false);\n }\n },\n\n async fetchQuote(paymentMethod: PaymentMethod = PaymentMethod.Cash, promoCode?: string) {\n const state = store.get();\n\n console.log('fetchQuote called with promoCode:', promoCode);\n\n if (!state.parts.length) {\n store.setKey(\"quote\", null);\n store.setKey(\"quoteError\", null);\n return;\n }\n\n store.setKey(\"fetchingQuote\", true);\n store.setKey(\"quoteError\", null);\n\n try {\n const token = await this.getGuestToken();\n const marketObj = selectedMarket.get();\n const market = marketObj?.id || 'us';\n const curr = currency.get() || 'USD';\n\n console.log('Calling reservationApi.getQuote with:', { market, currency: curr, promoCode });\n\n const result = await reservationApi.getQuote({\n token,\n businessId: state.businessId,\n market,\n currency: curr,\n userId: token, // Use token as userId for guests\n parts: state.parts,\n paymentMethod,\n promoCode,\n });\n\n if (result.success && result.data) {\n console.log('Quote received:', result.data);\n store.setKey(\"quote\", result.data);\n store.setKey(\"quoteError\", null);\n } else {\n console.error('Quote error:', result.error);\n store.setKey(\"quote\", null);\n store.setKey(\"quoteError\", mapQuoteError(result.code, result.error));\n }\n } catch (e: any) {\n console.error(\"Fetch quote error:\", e);\n store.setKey(\"quote\", null);\n store.setKey(\"quoteError\", e.message || \"Failed to get quote\");\n } finally {\n store.setKey(\"fetchingQuote\", false);\n }\n },\n\n // Helpers\n getLabel(block: any, locale: string = getLocale()): string {\n if (!block) return \"\";\n\n if (block.properties?.label) {\n if (typeof block.properties.label === \"object\") {\n return (\n block.properties.label[locale] ||\n block.properties.label.en ||\n Object.values(block.properties.label)[0] ||\n \"\"\n );\n }\n if (typeof block.properties.label === \"string\") {\n return block.properties.label;\n }\n }\n return block.key || \"\";\n },\n\ngetServicePrice(): string {\n const state = store.get();\n if (state.service?.prices && Array.isArray(state.service.prices)) {\n // Market-based pricing (amounts are minor units)\n // TODO: Get market from business config instead of hardcoded 'us'\n return getMarketPrice(state.service.prices, 'us');\n }\n return '';\n },\n\n // NEW: Get reservation total as Payment structure\n getReservationPayment(): Payment {\n const state = store.get();\nconst subtotalMinor = state.parts.reduce((sum, part) => {\n const servicePrices = state.service?.prices || [];\n // amounts are in minor units\n const amountMinor = servicePrices.length > 0 ? getPriceAmount(servicePrices, 'US') : 0;\n return sum + amountMinor;\n }, 0);\n\n const currencyCode = currency.get();\n return createPaymentForCheckout(\n subtotalMinor,\n 'US',\n currencyCode,\n PaymentMethod.Cash\n );\n },\n};\n\nexport function initReservationStore() {\n actions.updateCalendarGrid();\n businessActions.init(); // Use unified business store\n\n const savedParts = cartParts.get();\n if (savedParts && savedParts.length > 0) {\n store.setKey(\"parts\", savedParts);\n }\n\n store.listen((state) => {\n if (\n state.isMultiDay &&\n state.startDate &&\n state.endDate &&\n currentStepName.get() === \"datetime\" &&\n (!state.slots.length || !state.slots[0].isMultiDay)\n ) {\n actions.createMultiDaySlot();\n }\n\n if (JSON.stringify(state.parts) !== JSON.stringify(cartParts.get())) {\n cartParts.set(state.parts);\n }\n });\n\n cartParts.listen((parts) => {\n const currentParts = store.get().parts;\n if (JSON.stringify(parts) !== JSON.stringify(currentParts)) {\n store.setKey(\"parts\", [...parts]);\n }\n });\n}\n\nfunction mapQuoteError(code?: string, fallback?: string): string {\n switch (code) {\n case 'PROMO.MIN_ORDER':\n return fallback || 'Promo requires a higher minimum order.';\n case 'PROMO.NOT_ACTIVE':\n return 'Promo code is not active.';\n case 'PROMO.NOT_YET_VALID':\n return 'Promo code is not yet valid.';\n case 'PROMO.EXPIRED':\n return 'Promo code has expired.';\n case 'PROMO.MAX_USES':\n return 'Promo code usage limit exceeded.';\n case 'PROMO.MAX_USES_PER_USER':\n return 'You have already used this promo code.';\n case 'PROMO.NOT_FOUND':\n return 'Promo code not found.';\n default:\n return fallback || 'Failed to get quote.';\n }\n}\n\nexport default { store, actions, initReservationStore };\n","// Unified cart store that manages both e-shop and reservation carts\nimport { computed } from \"nanostores\";\nimport { cartItems as eshopItems } from \"./eshop\";\nimport { cartParts as reservationItems } from \"./reservation\";\n\n// Combined cart count\nexport const totalCartItems = computed([eshopItems, reservationItems], (eshop, reservation) => {\n const eshopCount = eshop?.reduce((sum, item) => sum + item.quantity, 0) || 0;\n const reservationCount = reservation?.length || 0;\n return eshopCount + reservationCount;\n});\n\n// Cart state helpers\nexport const hasEshopItems = computed(eshopItems, (items) => items?.length > 0);\nexport const hasReservationItems = computed(reservationItems, (items) => items?.length > 0);\nexport const isCartEmpty = computed([eshopItems, reservationItems], (eshop, reservation) => {\n return (!eshop || eshop.length === 0) && (!reservation || reservation.length === 0);\n});\n\n// Cart section visibility logic\nexport const showEshopSection = computed([hasEshopItems, isCartEmpty], (hasEshop, isEmpty) => hasEshop || isEmpty);\nexport const showReservationSection = computed([hasReservationItems, isCartEmpty], (hasReservation, isEmpty) => hasReservation || isEmpty);\nexport const showBothSections = computed([hasEshopItems, hasReservationItems], (hasEshop, hasReservation) => hasEshop && hasReservation);","// Stores entry point (@arky/sdk/stores)\nimport { setGlobalConfig, type ArkyConfig } from '../config';\n\n// Re-export specific named exports (avoid conflicts)\nexport { businessStore, businessActions, selectedMarket, currency, currencySymbol, markets, zones, getZoneByCountry, getShippingMethodsForCountry, paymentMethods, paymentConfig, orderBlocks, reservationBlocks } from './business';\nexport { cartItems, cartTotal, cartItemCount, promoCodeAtom, quoteAtom, store as eshopStore, actions as eshopActions, initEshopStore, allowedPaymentMethods } from './eshop';\nexport { cartParts, store as reservationStore, actions as reservationActions, initReservationStore, canProceed, currentStepName } from './reservation';\n\n// Cart store (if it exists as separate file)\nexport * from './cart';\n\n// Initialize stores with config\nexport function initArky(config: ArkyConfig): ArkyConfig {\n if (!config.apiUrl) {\n throw new Error('apiUrl is required');\n }\n if (!config.businessId) {\n throw new Error('businessId is required');\n }\n\n setGlobalConfig(config);\n return config;\n}\n"]}
|