arky-sdk 0.2.0 → 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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/types/index.ts","../src/utils/queryParams.ts","../src/services/http.ts","../src/api/cms.ts","../src/api/reservation.ts","../src/api/eshop.ts","../src/api/newsletter.ts","../src/services/auth.ts","../src/utils/blocks.ts","../src/utils/errors.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/svg.ts","../src/utils/text.ts","../src/utils/timezone.ts","../src/utils/validation.ts","../src/index.ts"],"names":["PaymentMethod","json"],"mappings":"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","file":"index.js","sourcesContent":["// SDK Configuration Types\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// Simple global config storage (no module-level exports)\nlet globalConfig: ArkyConfig | null = null;\n\nexport function setGlobalConfig(config: ArkyConfig): void {\n globalConfig = config;\n}\n\nexport function getGlobalConfig(): ArkyConfig {\n if (!globalConfig) {\n throw new Error(\n 'Arky SDK not initialized. Call initArky() first.'\n );\n }\n return globalConfig;\n}\n","// Core type definitions\n// All types are exported individually for better tree-shaking\n\n// NEW: Payment structure (matches backend)\nexport interface Payment {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttax: number;\n\ttotal: number;\n\tpromoCodeId?: string;\n\tpromoCode?: string;\n\tpromoType?: string;\n\tpromoValue?: number;\n\tmethod: PaymentMethod;\n\tcustomerId?: string;\n\tpaymentIntentId?: string;\n\tsubscriptionId?: string;\n\tpriceId?: string;\n}\n\nexport enum PaymentMethod {\n\tCash = \"CASH\",\n\tCreditCard = \"CREDIT_CARD\",\n\tFree = \"FREE\",\n}\n\n// Quote line item (from quote engine)\nexport interface QuoteLineItem {\n\titemType: string;\n\tid: string;\n\tname: string;\n\tquantity: number;\n\tunitPrice: number;\n\ttotal: number;\n}\n\n// Promo code validation result\nexport interface PromoCodeValidation {\n\tid: string;\n\tcode: string;\n\tdiscountType: any;\n\tdiscountValue: number;\n\tconditions: any[];\n}\n\n// Quote response from backend (full pricing breakdown)\nexport interface Quote {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttax: number;\n\ttotal: number;\n\tlineItems: QuoteLineItem[];\n\tshippingMethod: ShippingMethod | null;\n\tpromoCode: PromoCodeValidation | null;\n\tpayment: Payment;\n\tchargeAmount: number;\n}\n\n// Market-based price structure (for product variants)\nexport interface Price {\n\tmarket: string;\n\tamount: number;\n\tcompareAt?: number;\n}\n\n// Location structure (for shipping addresses, pickup points, etc.)\nexport interface Location {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tpostalCode?: string | null;\n\tcountryCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\n// Zone structure (logistics grouping - countries, tax rates, shipping methods)\nexport interface Zone {\n\tid: string;\n\tname: string;\n\tcountries: string[]; // Empty array = \"All Countries\"\n\ttaxBps: number;\n\tshippingMethods: ShippingMethod[];\n}\n\n// Cart types\nexport interface EshopCartItem {\n\tid: string;\n\tproductId: string;\n\tvariantId: string;\n\tproductName: string;\n\tproductSlug: string;\n\tvariantAttributes: Record<string, any>;\n\tprice: Price; // Minor units (backend format)\n\tquantity: number;\n\taddedAt: number;\n}\n\nexport interface ReservationCartPart {\n\tid: string;\n\tserviceId: string;\n\tserviceName: string;\n\tdate: string;\n\tfrom: number;\n\tto: number;\n\ttimeText: string;\n\tisMultiDay: boolean;\n\treservationMethod: string;\n\tproviderId?: string;\n\tblocks: any[];\n}\n\n// Payment provider types\nexport interface PaymentProviderConfig {\n\ttype: \"STRIPE\";\n\tpublicKey: string;\n\tsecretKey: string;\n\twebhookSecret: string;\n}\n\n// Market types (business-owned) - camelCase for frontend\nexport interface Market {\n\tid: string;\n\tname: string;\n\tcurrency: string;\n\ttaxMode: \"INCLUSIVE\" | \"EXCLUSIVE\";\n\ttaxBps: number;\n\tpaymentMethods: BusinessPaymentMethod[];\n}\n\nexport interface ShippingMethod {\n id: string;\n type: 'SHIPPING' | 'PICKUP';\n prices: Price[]; // Market-based pricing with free thresholds\n taxable: boolean;\n etaText: string; // e.g., \"3-5 business days\"\n location?: Location; // Pickup address (only for PICKUP type)\n}\n\nexport interface BusinessPaymentMethod {\n\tmethod: PaymentMethod;\n}\n\n// Business types\nexport interface BusinessConfig {\n\torderBlocks?: any[];\n\treservationBlocks?: any[];\n\tmarkets?: Market[];\n\tzones?: Zone[];\n\tpaymentProvider?: PaymentProviderConfig;\n\taiProvider?: any;\n}\n\nexport interface Business {\n\tid: string;\n\tname: string;\n\tconfigs?: BusinessConfig;\n}\n\n// Store state types - Simplified (business data moved to business store)\nexport interface EshopStoreState {\n\tbusinessId: string;\n\tselectedShippingMethodId: string | null;\n\tuserToken: string | null;\n\tprocessingCheckout: boolean;\n\tloading: boolean;\n\terror: string | null;\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n}\n\nexport interface Block {\n\tid: string;\n\tkey: string;\n\ttype: string;\n\tproperties?: any;\n\tvalue?: any;\n}\n\n// API Response types\nexport interface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n code?: string;\n cursor?: string;\n total?: number;\n}\n\nexport interface PaginatedResponse<T> {\n\tdata: T[];\n\tmeta?: {\n\t\ttotal: number;\n\t\tpage: number;\n\t\tper_page: number;\n\t};\n}\n\n// Newsletter types\nexport interface Newsletter {\n\tid: string;\n\tbusinessId: string;\n\tname: string;\n\tdescription: string;\n\tnewsletterType: \"FREE\" | \"PAID\";\n\tstatuses: any[];\n\tprices: Price[]; // NEW: Market-based pricing\n\tpaymentProduct?: {\n\t\tpriceId: string;\n\t};\n\tunsubscribeRedirectUrl: string;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\n// Legacy types - kept for compatibility\nexport interface MarketConfigClient {\n\tcurrency: string;\n\ttaxMode: string;\n\tdefaultTaxRate: number;\n\tpaymentMethods: string[];\n\tshowTaxIncluded: boolean;\n\tshippingMethods?: ShippingMethod[];\n}\n\nexport interface ReservationStoreState {\n\tcurrentStep: number;\n\ttotalSteps: number;\n\tsteps: Record<number, { name: string; labelKey: string }>;\n\n\t// Calendar data\n\tweekdays: string[];\n\tmonthYear: string;\n\tdays: any[];\n\tcurrent: Date;\n\n\t// Selection state\n\tselectedDate: string | null;\n\tslots: any[];\n\tselectedSlot: any | null;\n\tselectedMethod: string | null;\n\tselectedProvider: any | null;\n\tproviders: any[];\n\n\t// Status flags\n\tloading: boolean;\n\tstartDate: string | null;\n\tendDate: string | null;\n\tisMultiDay: boolean;\n\n\t// Phone verification\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tphoneSuccess: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n\tisPhoneVerified: boolean;\n\tisSendingCode: boolean;\n\tisVerifying: boolean;\n\tcodeSentAt: number | null;\n\tcanResendAt: number | null;\n\n\t// Service & config\n\tguestToken: string | null;\n\tservice: any | null;\n\tbusiness: Business | null;\n\tcurrency: string;\n\treservationBlocks: Block[];\n\tapiUrl: string;\n\tbusinessId: string;\n\tstorageUrl: string;\n\ttimezone: string;\n\ttzGroups: any;\n\tparts: ReservationCartPart[];\n\n\t// Payment configuration\n\tallowedPaymentMethods: string[];\n\tpaymentConfig: {\n\t\tprovider: PaymentProviderConfig | null;\n\t\tenabled: boolean;\n\t};\n}\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 { getGlobalConfig } from '../config';\nimport httpClient from '../services/http';\nimport { ApiResponse } from '../types';\n\nconst getCollection = async (id: string) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${id}`;\n const { value } = await httpClient.get(url);\n return value;\n};\n\nconst getCollections = async ({ name = null, ids = null }: { name?: string | null; ids?: string[] | null }) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections`;\n\n const response = await httpClient.get(url, {\n params: { name, ids }\n });\n return response.value;\n};\n\nconst getCollectionEntries = async ({\n collectionId,\n limit,\n cursor,\n ids = null\n}: {\n collectionId: string;\n limit?: number;\n cursor?: string;\n ids?: string[] | null;\n}) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${collectionId}/entries`;\n\n const response = await httpClient.get(url, {\n params: { limit, cursor, ids }\n });\n return response.value;\n};\n\nconst createCollectionEntry = async (collectionEntryData: any) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${collectionEntryData.collectionId}/entries`;\n\n const result = await httpClient.post(url, collectionEntryData, {\n successMessage: \"Created successfully\",\n errorMessage: \"Failed to create collection\",\n });\n\n return result;\n};\n\nconst getCollectionEntry = async ({ collectionId, id }: { collectionId: string; id: string }) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${collectionId}/entries/${id}`;\n\n const response = await httpClient.get(url);\n\n return response;\n};\n\nexport const cmsApi = {\n getCollection,\n getCollections,\n getCollectionEntries,\n getCollectionEntry,\n createCollectionEntry,\n};","import { getGlobalConfig } 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 config = getGlobalConfig();\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(`${config.apiUrl}/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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\n const res = await fetch(`${config.apiUrl}/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 config = getGlobalConfig();\n const res = await fetch(`${config.apiUrl}/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 config = getGlobalConfig();\n const res = await fetch(`${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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 { getGlobalConfig } 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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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","import { getGlobalConfig } from '../config';\nimport type { Newsletter, PaginatedResponse, Payment } from '../types';\n\nexport interface NewsletterFindPayload {\n\tbusiness_id: string;\n}\n\nexport interface NewsletterResponse {\n\tdata: Newsletter[];\n\tmeta?: {\n\t\ttotal: number;\n\t\tpage: number;\n\t\tper_page: number;\n\t};\n}\n\nexport interface NewsletterSubscribePayload {\n\tnewsletterId: string;\n\temail: string;\n\tcustomerId?: string;\n\tpayment?: Payment; // NEW: For paid newsletter subscriptions\n}\n\nexport const newsletterApi = {\n\tasync find(payload: NewsletterFindPayload): Promise<PaginatedResponse<Newsletter>> {\n\t\tconst config = getGlobalConfig();\n\t\tconst params = new URLSearchParams({\n\t\t\tbusinessId: payload.business_id,\n\t\t});\n\n\t\tconst url = `${config.apiUrl}/v1/newsletters?${params.toString()}`;\n\n\t\tconst response = await fetch(url);\n\t\t\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t}\n\n\t\tconst backendResponse = await response.json();\n\t\t\n\t\t// Backend returns {items: [], cursor: null}, we need {data: [], meta: {...}}\n\t\treturn {\n\t\t\tdata: backendResponse.items || [],\n\t\t\tmeta: {\n\t\t\t\ttotal: backendResponse.items?.length || 0,\n\t\t\t\tpage: 1,\n\t\t\t\tper_page: backendResponse.items?.length || 0,\n\t\t\t}\n\t\t};\n\t},\n\n\tasync get(id: string): Promise<Newsletter> {\n\t\tconst config = getGlobalConfig();\n\t\tconst url = `${config.apiUrl}/v1/newsletters/${id}`;\n\n\t\tconst response = await fetch(url);\n\t\t\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t}\n\n\t\treturn await response.json();\n\t},\n\n\n\tasync subscribe(payload: NewsletterSubscribePayload) {\n\t\ttry {\n\t\t\tconst config = getGlobalConfig();\n\t\t\tconst url = `${config.apiUrl}/v1/newsletters/${payload.newsletterId}/subscribe`;\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tnewsletterId: payload.newsletterId,\n\t\t\t\t\temail: payload.email,\n\t\t\t\t\tmarket: \"US\", // Backend resolves currency from market\n\t\t\t\t\t...(payload.customerId && { customerId: payload.customerId }),\n\t\t\t\t\t...(payload.payment && { payment: payload.payment }),\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorData = await response.json().catch(() => ({}));\n\t\t\t\tthrow new Error(errorData.message || `HTTP error! status: ${response.status}`);\n\t\t\t}\n\n\t\t\tconst data = await response.json();\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tdata,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error('Newsletter subscription error:', error);\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : 'Failed to subscribe to newsletter',\n\t\t\t};\n\t\t}\n\t},\n};","import { reservationApi } from \"../api/reservation\";\nimport { getGlobalConfig } 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 config = getGlobalConfig();\n\t\tconst response = await fetch(`${config.apiUrl}/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","// Block utilities (extracted from index.ts)\nimport { getGlobalConfig } from '../config';\n\nexport interface Block {\n id: string;\n key: string;\n type: string;\n properties: any;\n value: any;\n}\n\nexport interface Collection {\n id: string;\n blocks: Block[];\n}\n\nexport interface CollectionEntry {\n id: string;\n collection_id: string;\n blocks: Block[];\n}\n\n\nexport function getBlockLabel(block: any, locale: string = 'en'): 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 \n // Convert key to readable format\n return block.key?.replace(/_/g, ' ').replace(/\\b\\w/g, (l: string) => l.toUpperCase()) || \"\";\n}\n\n\nexport function formatBlockValue(block: any): string {\n if (!block || block.value === null || block.value === undefined) {\n return \"\";\n }\n\n switch (block.type) {\n case \"BOOLEAN\":\n return block.value ? \"Yes\" : \"No\";\n case \"NUMBER\":\n // Handle date/datetime variants\n if (block.properties?.variant === \"DATE\" || block.properties?.variant === \"DATE_TIME\") {\n try {\n return new Date(block.value).toLocaleDateString();\n } catch (e) {\n return String(block.value);\n }\n }\n return String(block.value);\n case \"RELATIONSHIP\":\n if (Array.isArray(block.value) && block.value.length > 0) {\n const firstValue = block.value[0];\n if (firstValue && firstValue.mimeType) {\n return firstValue.name || firstValue.id || \"Media\";\n }\n return firstValue.title || firstValue.name || firstValue.id || \"Entry\";\n }\n return String(block.value);\n default:\n return String(block.value);\n }\n}\n\nexport function prepareBlocksForSubmission(formData: any): any[] {\n const preparedBlocks = [];\n\n Object.keys(formData).forEach((key) => {\n if (formData[key] !== null && formData[key] !== undefined) {\n preparedBlocks.push({\n key,\n value: [formData[key]],\n });\n }\n });\n\n return preparedBlocks;\n}\n\nexport function extractBlockValues(blocks: any[]): Record<string, any> {\n const values: Record<string, any> = {};\n\n blocks.forEach((block) => {\n if (block.value && block.value.length > 0) {\n values[block.key] = block.value[0];\n } else {\n values[block.key] = null;\n }\n });\n\n return values;\n}\n\n// Extract localized text value from a block, handling multilingual content\nexport function getBlockTextValue(block: any, locale: string = 'en'): string {\n if (!block || !block.value || block.value.length === 0) return '';\n \n const firstValue = block.value[0];\n \n // Handle multilingual object\n if (typeof firstValue === 'object' && firstValue !== null) {\n // Try specified locale first, then 'en', then first available language\n if (firstValue[locale]) return firstValue[locale];\n if (firstValue.en) return firstValue.en;\n const values = Object.values(firstValue);\n return String(values[0] || '');\n }\n \n // Handle simple string\n return String(firstValue);\n}\n\n// Legacy functions for backward compatibility\nexport const getBlockValue = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value[0];\n};\n\nexport const getBlockValues = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value;\n};\n\nfunction unwrapBlock(block: any, locale: string) {\n if (!block?.type || block.value === undefined) return block;\n\n // Nested objects / lists → recurse for every child\n if (block.type === \"BLOCK\") {\n return block.value.map((obj: Record<string, any>) => {\n const parsed: Record<string, any> = {};\n for (const [k, v] of Object.entries(obj)) {\n parsed[k] = unwrapBlock(v, locale);\n }\n return parsed;\n });\n }\n\n // Primitive leaves (text/number/boolean/media …)\n const isLocalized = block.type === \"TEXT\";\n const isList =\n block.properties?.ui === \"list\" ||\n (block.properties?.maxValues ?? 1) > 1 ||\n block.value.length > 1;\n\n if (isList) {\n return isLocalized\n ? block.value.map((v: Record<string, any>) => v[locale] || v[\"en\"])\n : [...block.value];\n }\n\n return isLocalized ? block.value[0][locale] || block.value[0][\"en\"] : block.value[0];\n}\n\nexport const getBlockObjectValues = (entry: any, blockKey: string, locale = \"en\") => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n const parsed = values.map((obj: Record<string, any>) => {\n const res = obj.value.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n\n return acc;\n }, {});\n\n return res;\n });\n\n return parsed;\n};\n\nexport const getBlockFromArray = (entry: any, blockKey: string, locale = \"en\") => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n return values.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n return acc;\n });\n};\n\nexport const getImageUrl = (imageBlock: any, isBlock = true) => {\n if (!imageBlock) return null;\n\n const config = getGlobalConfig();\n const storageUrl = config.storageUrl || \"https://storage.arky.io/dev\";\n\n // Helper to check if URL is external\n const isExternalUrl = (url: string) => {\n return url.startsWith('http://') || url.startsWith('https://');\n };\n\n // Handle relationship blocks with media\n if (imageBlock.type === 'RELATIONSHIP' && Array.isArray(imageBlock.value)) {\n const mediaValue = imageBlock.value[0];\n if (mediaValue && mediaValue.mimeType) {\n // Handle media with resolutions structure\n if (mediaValue.resolutions && mediaValue.resolutions.original && mediaValue.resolutions.original.url) {\n const url = mediaValue.resolutions.original.url;\n return isExternalUrl(url) ? url : `${storageUrl}/${url}`;\n }\n \n // Handle direct URL on media\n if (mediaValue.url) {\n return isExternalUrl(mediaValue.url) ? mediaValue.url : `${storageUrl}/${mediaValue.url}`;\n }\n }\n return null;\n }\n\n if (isBlock) {\n if (typeof imageBlock === \"string\") {\n // Check if it's already a full URL\n if (isExternalUrl(imageBlock)) {\n return imageBlock;\n }\n return `${storageUrl}/${imageBlock}`;\n }\n\n if (imageBlock.url) {\n // Check if it's already a full URL\n if (isExternalUrl(imageBlock.url)) {\n return imageBlock.url;\n }\n return `${storageUrl}/${imageBlock.url}`;\n }\n }\n\n if (\n imageBlock.resolutions &&\n imageBlock.resolutions.original &&\n imageBlock.resolutions.original.url\n ) {\n const url = imageBlock.resolutions.original.url;\n // Check if it's already a full URL\n if (isExternalUrl(url)) {\n return url;\n }\n return `${storageUrl}/${url}`;\n }\n\n return null;\n};\n\nexport function getGalleryThumbnail(gallery: any) {\n if (!gallery?.length) return null;\n const item = gallery.find((g: any) => g.settings.isThumbnail) || gallery[0];\n const res = item.media.resolutions.thumbnail || item.media.resolutions.original;\n return res?.url || null;\n}\n\n// full URL or null\nexport function thumbnailUrl(service: any) {\n const config = getGlobalConfig();\n const storageUrl = config.storageUrl || \"\";\n const path = getGalleryThumbnail(service.gallery);\n return path ? `${storageUrl}/${path}` : null;\n}\n\nexport const translateMap = (labels: any, lang: string, fallback = \"unknown\") => {\n let parsedLang = \"en\";\n\n if (lang === \"sr\") {\n parsedLang = \"bih\";\n }\n\n if (!labels) {\n return fallback;\n }\n\n const label = labels[parsedLang];\n if (!label) {\n return fallback;\n }\n\n return label;\n};","// Error handling utilities (combined from errorCodes.ts and errorHelpers.ts)\n\n// Comprehensive error code system with both numeric codes and named constants\nexport const ERROR_CODES = {\n // General errors\n \"GENERAL.001\": \"GENERAL.BAD_REQUEST\",\n \"GENERAL.002\": \"GENERAL.VALIDATION_ERROR\",\n \"GENERAL.003\": \"GENERAL.FORBIDDEN_ERROR\",\n \"GENERAL.004\": \"GENERAL.INTERNAL_SERVER_ERROR\",\n \"GENERAL.005\": \"GENERAL.UNAUTHORIZED\",\n \"GENERAL.006\": \"GENERAL.UNAUTHENTICATED\",\n\n // Google/OAuth errors\n \"GOOGLE.001\": \"GOOGLE.INVALID_ORIGIN_URI\",\n \"GOOGLE.002\": \"GOOGLE.INVALID_REDIRECT_URI\",\n \"GOOGLE.003\": \"GOOGLE.FAILED_TO_CALL_API\",\n \"GOOGLE.004\": \"GOOGLE.FAILED_LOGIN\",\n \"GOOGLE.005\": \"GOOGLE.FAILED_LOGOUT\",\n \"GOOGLE.006\": \"GOOGLE.FAILED_REFRESH_TOKEN\",\n \"GOOGLE.007\": \"GOOGLE.INVALID_PROVIDER_PASSED\",\n\n // User errors\n \"USER.001\": \"USER.NOT_FOUND\",\n \"USER.002\": \"USER.FAILED_TO_CREATE\",\n \"USER.003\": \"USER.FAILED_TO_UPDATE\",\n \"USER.004\": \"USER.FAILED_TO_DELETE\",\n \"USER.005\": \"USER.EMAIL_EXISTS\",\n \"USER.006\": \"USER.FAILED_TO_GET_UPLOAD_URL\",\n\n // Business errors\n \"BUSINESS.001\": \"BUSINESS.NOT_FOUND\",\n \"BUSINESS.002\": \"BUSINESS.FAILED_TO_CREATE\",\n \"BUSINESS.003\": \"BUSINESS.FAILED_TO_UPDATE\",\n \"BUSINESS.004\": \"BUSINESS.FAILED_TO_DELETE\",\n \"BUSINESS.005\": \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n \"BUSINESS.006\": \"BUSINESS.NAME_REQUIRED\",\n \"BUSINESS.007\": \"BUSINESS.BUSINESS_ID_REQUIRED\",\n \"BUSINESS.010\": \"BUSINESS.DESCRIPTION_REQUIRED\",\n \"BUSINESS.011\": \"BUSINESS.SLUG_INVALID\",\n\n // Provider errors \n \"PROVIDER.001\": \"PROVIDER.NOT_FOUND\",\n \"PROVIDER.002\": \"PROVIDER.FAILED_TO_CREATE\",\n \"PROVIDER.003\": \"PROVIDER.FAILED_TO_UPDATE\",\n \"PROVIDER.004\": \"PROVIDER.FAILED_TO_DELETE\",\n \"PROVIDER.005\": \"PROVIDER.FAILED_TO_GET_UPLOAD_URL\",\n \"PROVIDER.006\": \"PROVIDER.NAME_REQUIRED\",\n \"PROVIDER.007\": \"PROVIDER.BUSINESS_ID_REQUIRED\",\n \"PROVIDER.008\": \"PROVIDER.DESCRIPTION_REQUIRED\",\n};\n\n// Named error constants for direct access\nexport const ERROR_CONSTANTS = {\n GENERAL: {\n BAD_REQUEST: \"GENERAL.BAD_REQUEST\",\n VALIDATION_ERROR: \"GENERAL.VALIDATION_ERROR\",\n FORBIDDEN_ERROR: \"GENERAL.FORBIDDEN_ERROR\",\n INTERNAL_SERVER_ERROR: \"GENERAL.INTERNAL_SERVER_ERROR\",\n UNAUTHORIZED: \"GENERAL.UNAUTHORIZED\",\n UNAUTHENTICATED: \"GENERAL.UNAUTHENTICATED\",\n },\n USER: {\n NOT_FOUND: \"USER.NOT_FOUND\",\n FAILED_TO_CREATE: \"USER.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"USER.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"USER.FAILED_TO_DELETE\",\n EMAIL_EXISTS: \"USER.EMAIL_EXISTS\",\n FAILED_TO_GET_UPLOAD_URL: \"USER.FAILED_TO_GET_UPLOAD_URL\",\n },\n BUSINESS: {\n NOT_FOUND: \"BUSINESS.NOT_FOUND\",\n FAILED_TO_CREATE: \"BUSINESS.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"BUSINESS.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"BUSINESS.FAILED_TO_DELETE\",\n FAILED_TO_GET_UPLOAD_URL: \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n NAME_REQUIRED: \"BUSINESS.NAME_REQUIRED\",\n BUSINESS_ID_REQUIRED: \"BUSINESS.BUSINESS_ID_REQUIRED\",\n DESCRIPTION_REQUIRED: \"BUSINESS.DESCRIPTION_REQUIRED\",\n SLUG_INVALID: \"BUSINESS.SLUG_INVALID\",\n },\n};\n\nexport type ServerError = {\n error: string;\n reason: string;\n code: string;\n statusCode: number;\n validationErrors: {\n field: string;\n code: string;\n }[];\n};\n\nexport type ValidationError = {\n field: string;\n message: string;\n};\n\nexport type RequestError = {\n validationErrors: ValidationError[];\n};\n\n// Utility functions for error handling\nexport function getErrorMessage(code: string): string {\n return ERROR_CODES[code as keyof typeof ERROR_CODES] || code;\n}\n\nexport function isErrorCode(code: string): boolean {\n return code in ERROR_CODES;\n}\n\n// Note: transformErrors requires zod which is not a dependency\n// If you need zod validation, add it to package.json dependencies\nexport const transformErrors = (zodError: any): ValidationError[] => {\n const customErrors: ValidationError[] = [];\n\n if (!zodError.issues) return customErrors;\n\n zodError.issues.forEach((issue: any) => {\n const field = issue.path.join(\".\");\n const message = issue.message;\n\n if (\n !customErrors.some(\n (customError) => customError.field === field && customError.message === message,\n )\n ) {\n customErrors.push({ field, message });\n }\n });\n\n return customErrors;\n};\n\nexport const convertServerErrorToRequestError = (\n serverError: ServerError,\n renameRules?: { [key: string]: string },\n): RequestError => {\n return {\n ...serverError,\n validationErrors: serverError.validationErrors.map((validationError) => {\n const field =\n renameRules && renameRules[validationError.field]\n ? renameRules[validationError.field]\n : validationError.field;\n\n return {\n field: field,\n message: ERROR_CODES[validationError.code as keyof typeof ERROR_CODES] || \"Unknown error\",\n };\n }),\n };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;","/**\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}","// 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","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: any): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\n\ttry {\n\t\tconst response = await fetch(svgUrl);\n\n\t\tif (!response.ok) {\n\t\t\tconsole.error(`Failed to fetch SVG: ${response.status} ${response.statusText}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst svgContent = await response.text();\n\t\treturn svgContent;\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching SVG:\", error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Server-side helper for Astro components to fetch SVG content during SSR\n *\n * @param mediaObject The media object from the CMS\n * @returns The SVG content as a string, or empty string on failure\n */\nexport async function getSvgContentForAstro(mediaObject: any): Promise<string> {\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\t\treturn svgContent || \"\";\n\t} catch (error) {\n\t\tconsole.error(\"Error getting SVG content for Astro:\", error);\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Client-side helper to fetch and inject SVG content into DOM elements\n *\n * @param mediaObject The media object from the CMS\n * @param targetElement The DOM element to inject the SVG into\n * @param className Optional CSS class to add to the SVG\n */\nexport async function injectSvgIntoElement(\n\tmediaObject: any,\n\ttargetElement: HTMLElement,\n\tclassName?: string,\n): Promise<void> {\n\tif (!targetElement) return;\n\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\n\t\tif (svgContent) {\n\t\t\ttargetElement.innerHTML = svgContent;\n\n\t\t\t// Add class if provided\n\t\t\tif (className) {\n\t\t\t\tconst svgElement = targetElement.querySelector(\"svg\");\n\t\t\t\tif (svgElement) {\n\t\t\t\t\tsvgElement.classList.add(...className.split(\" \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Error injecting SVG:\", error);\n\t}\n}","// Define locales inline since we don't have @lib/i18n in SDK\nconst locales = ['en', 'sr-latn'] as const;\nconst localeMap: Record<typeof locales[number], string> = {\n\t'en': 'en-US',\n\t'sr-latn': 'sr-RS'\n};\n\n/**\n * * returns \"slugified\" text.\n * @param text: string - text to slugify\n */\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase() // convert to lowercase\n\t\t.replace(/\\s+/g, \"-\") // replace spaces with -\n\t\t.replace(/[^\\w-]+/g, \"\") // remove all non-word chars\n\t\t.replace(/--+/g, \"-\") // replace multiple dashes with single dash\n\t\t.replace(/^-+/, \"\") // trim dash from start of text\n\t\t.replace(/-+$/, \"\"); // trim dash from end of text\n}\n\n/**\n * * returns \"humanized\" text. runs slugify() and then replaces - with space and upper case first letter of every word, and lower case the rest\n * @param text: string - text to humanize\n */\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t\t// .toLowerCase();\n\t\t\t.replace(\n\t\t\t\t// upper case first letter of every word, and lower case the rest\n\t\t\t\t/\\w\\S*/g,\n\t\t\t\t(w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(),\n\t\t\t)\n\t);\n}\n\n// --------------------------------------------------------\n/**\n * * returns \"categorified\" text. runs slugify() and then replaces - with space and upper cases everything\n * @param text: string - text to categorify\n * @returns string - categorified text\n */\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t.toUpperCase();\n}\n\n// --------------------------------------------------------\n/**\n * * returns a nicely formatted string of the date passed\n * @param date: string | number | Date - date to format\n * @param locale: string - locale to format the date in\n * @returns string - formatted date\n */\nexport function formatDate(date: string | number | Date, locale: (typeof locales)[number]): string {\n\tlet localeString = \"en-US\";\n\n\tif (locales.includes(locale)) {\n\t\tlocaleString = localeMap[locale];\n\t}\n\n\treturn new Date(date).toLocaleDateString(localeString, {\n\t\ttimeZone: \"UTC\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\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}","// 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}","// Main export file for @arky/sdk\n\n// Configuration\nexport * from './config';\nexport type { ArkyConfig } from './config';\n\n// Types\nexport * from './types';\nexport type {\n ApiResponse,\n EshopCartItem,\n EshopStoreState,\n ReservationStoreState,\n ReservationCartPart,\n Business,\n Block,\n Price\n} from './types';\n\n// APIs\nexport * from './api';\n\n// Services\nexport * from './services/auth';\nexport { default as httpClient } from './services/http';\n\n// NOTE: Stores are exported via separate entry point: @arky/sdk/stores\n// This keeps the main bundle small for API-only users\n\n// Utilities\nexport * from './utils/blocks';\nexport * from './utils/errors';\nexport * from './utils/price';\nexport * from './utils/svg';\nexport * from './utils/text';\nexport * from './utils/timezone';\nexport * from './utils/validation';\n\n// Re-export commonly used functions for convenience\n\nexport { \n // Validation utilities\n validatePhoneNumber,\n validateEmail,\n validateVerificationCode,\n validateRequired\n} from './utils/validation';\n\nexport { \n // Block utilities\n getBlockLabel,\n getBlockTextValue,\n getBlockValue,\n getBlockValues,\n getImageUrl,\n thumbnailUrl\n} from './utils/blocks';\n\nexport { \n // Auth utilities\n getGuestToken,\n updateProfilePhone,\n verifyPhoneCode,\n getBusinessConfig\n} from './services/auth';\n\nexport { \n // SVG utilities\n fetchSvgContent,\n getSvgContentForAstro,\n injectSvgIntoElement\n} from './utils/svg';\n\nexport { \n // Text utilities\n slugify,\n humanize,\n categorify,\n formatDate\n} from './utils/text';\n\nexport { \n // Timezone utilities\n findTimeZone,\n tzGroups\n} from './utils/timezone';\n\nexport { \n // Error utilities\n getErrorMessage,\n isErrorCode,\n ERROR_CODES,\n ERROR_CONSTANTS\n} from './utils/errors';\n\n// SDK Version\nexport const SDK_VERSION = '0.2.0';\nexport const SUPPORTED_FRAMEWORKS = ['astro', 'react', 'vue', 'svelte', 'vanilla'] as const;\n\n// SDK initialization function\nimport { setGlobalConfig, type ArkyConfig } from './config';\n\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}"]}
1
+ {"version":3,"sources":["../src/config.ts","../src/types/index.ts","../src/utils/queryParams.ts","../src/services/http.ts","../src/api/cms.ts","../src/api/reservation.ts","../src/api/eshop.ts","../src/api/newsletter.ts","../src/services/auth.ts","../src/utils/blocks.ts","../src/utils/errors.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/svg.ts","../src/utils/text.ts","../src/utils/timezone.ts","../src/utils/validation.ts","../src/index.ts"],"names":["PaymentMethod","json"],"mappings":"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","file":"index.js","sourcesContent":["// SDK Configuration Types\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// Simple global config storage (no module-level exports)\nlet globalConfig: ArkyConfig | null = null;\n\nexport function setGlobalConfig(config: ArkyConfig): void {\n globalConfig = config;\n}\n\nexport function getGlobalConfig(): ArkyConfig {\n if (!globalConfig) {\n throw new Error(\n 'Arky SDK not initialized. Call initArky() first.'\n );\n }\n return globalConfig;\n}\n","// Core type definitions\n// All types are exported individually for better tree-shaking\n\n// NEW: Payment structure (matches backend)\nexport interface Payment {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttax: number;\n\ttotal: number;\n\tpromoCodeId?: string;\n\tpromoCode?: string;\n\tpromoType?: string;\n\tpromoValue?: number;\n\tmethod: PaymentMethod;\n\tcustomerId?: string;\n\tpaymentIntentId?: string;\n\tsubscriptionId?: string;\n\tpriceId?: string;\n}\n\nexport enum PaymentMethod {\n\tCash = \"CASH\",\n\tCreditCard = \"CREDIT_CARD\",\n\tFree = \"FREE\",\n}\n\n// Quote line item (from quote engine)\nexport interface QuoteLineItem {\n\titemType: string;\n\tid: string;\n\tname: string;\n\tquantity: number;\n\tunitPrice: number;\n\ttotal: number;\n}\n\n// Promo code validation result\nexport interface PromoCodeValidation {\n\tid: string;\n\tcode: string;\n\tdiscountType: any;\n\tdiscountValue: number;\n\tconditions: any[];\n}\n\n// Quote response from backend (full pricing breakdown)\nexport interface Quote {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttax: number;\n\ttotal: number;\n\tlineItems: QuoteLineItem[];\n\tshippingMethod: ShippingMethod | null;\n\tpromoCode: PromoCodeValidation | null;\n\tpayment: Payment;\n\tchargeAmount: number;\n}\n\n// Market-based price structure (for product variants)\nexport interface Price {\n\tmarket: string;\n\tamount: number;\n\tcompareAt?: number;\n}\n\n// Location structure (for shipping addresses, pickup points, etc.)\nexport interface Location {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tpostalCode?: string | null;\n\tcountryCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\n// Zone structure (logistics grouping - countries, tax rates, shipping methods)\nexport interface Zone {\n\tid: string;\n\tname: string;\n\tcountries: string[]; // Empty array = \"All Countries\"\n\ttaxBps: number;\n\tshippingMethods: ShippingMethod[];\n}\n\n// Cart types\nexport interface EshopCartItem {\n\tid: string;\n\tproductId: string;\n\tvariantId: string;\n\tproductName: string;\n\tproductSlug: string;\n\tvariantAttributes: Record<string, any>;\n\tprice: Price; // Minor units (backend format)\n\tquantity: number;\n\taddedAt: number;\n}\n\nexport interface ReservationCartPart {\n\tid: string;\n\tserviceId: string;\n\tserviceName: string;\n\tdate: string;\n\tfrom: number;\n\tto: number;\n\ttimeText: string;\n\tisMultiDay: boolean;\n\treservationMethod: string;\n\tproviderId?: string;\n\tblocks: any[];\n}\n\n// Payment provider types\nexport interface PaymentProviderConfig {\n\ttype: \"STRIPE\";\n\tpublicKey: string;\n\tsecretKey: string;\n\twebhookSecret: string;\n}\n\n// Market types (business-owned) - camelCase for frontend\nexport interface Market {\n\tid: string;\n\tname: string;\n\tcurrency: string;\n\ttaxMode: \"INCLUSIVE\" | \"EXCLUSIVE\";\n\ttaxBps: number;\n\tpaymentMethods: BusinessPaymentMethod[];\n}\n\nexport interface ShippingMethod {\n id: string;\n type: 'SHIPPING' | 'PICKUP';\n prices: Price[]; // Market-based pricing with free thresholds\n taxable: boolean;\n etaText: string; // e.g., \"3-5 business days\"\n location?: Location; // Pickup address (only for PICKUP type)\n}\n\nexport interface BusinessPaymentMethod {\n\tmethod: PaymentMethod;\n}\n\n// Business types\nexport interface BusinessConfig {\n\torderBlocks?: any[];\n\treservationBlocks?: any[];\n\tmarkets?: Market[];\n\tzones?: Zone[];\n\tpaymentProvider?: PaymentProviderConfig;\n\taiProvider?: any;\n}\n\nexport interface Business {\n\tid: string;\n\tname: string;\n\tconfigs?: BusinessConfig;\n}\n\n// Store state types - Simplified (business data moved to business store)\nexport interface EshopStoreState {\n\tbusinessId: string;\n\tselectedShippingMethodId: string | null;\n\tuserToken: string | null;\n\tprocessingCheckout: boolean;\n\tloading: boolean;\n\terror: string | null;\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n}\n\nexport interface Block {\n\tid: string;\n\tkey: string;\n\ttype: string;\n\tproperties?: any;\n\tvalue?: any;\n}\n\n// API Response types\nexport interface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n code?: string;\n cursor?: string;\n total?: number;\n}\n\nexport interface PaginatedResponse<T> {\n\tdata: T[];\n\tmeta?: {\n\t\ttotal: number;\n\t\tpage: number;\n\t\tper_page: number;\n\t};\n}\n\n// Newsletter types\nexport interface Newsletter {\n\tid: string;\n\tbusinessId: string;\n\tname: string;\n\tdescription: string;\n\tnewsletterType: \"FREE\" | \"PAID\";\n\tstatuses: any[];\n\tprices: Price[]; // NEW: Market-based pricing\n\tpaymentProduct?: {\n\t\tpriceId: string;\n\t};\n\tunsubscribeRedirectUrl: string;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\n// Legacy types - kept for compatibility\nexport interface MarketConfigClient {\n\tcurrency: string;\n\ttaxMode: string;\n\tdefaultTaxRate: number;\n\tpaymentMethods: string[];\n\tshowTaxIncluded: boolean;\n\tshippingMethods?: ShippingMethod[];\n}\n\nexport interface ReservationStoreState {\n\tcurrentStep: number;\n\ttotalSteps: number;\n\tsteps: Record<number, { name: string; labelKey: string }>;\n\n\t// Calendar data\n\tweekdays: string[];\n\tmonthYear: string;\n\tdays: any[];\n\tcurrent: Date;\n\n\t// Selection state\n\tselectedDate: string | null;\n\tslots: any[];\n\tselectedSlot: any | null;\n\tselectedMethod: string | null;\n\tselectedProvider: any | null;\n\tproviders: any[];\n\n\t// Status flags\n\tloading: boolean;\n\tstartDate: string | null;\n\tendDate: string | null;\n\tisMultiDay: boolean;\n\n\t// Phone verification\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tphoneSuccess: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n\tisPhoneVerified: boolean;\n\tisSendingCode: boolean;\n\tisVerifying: boolean;\n\tcodeSentAt: number | null;\n\tcanResendAt: number | null;\n\n\t// Service & config\n\tguestToken: string | null;\n\tservice: any | null;\n\tbusiness: Business | null;\n\tcurrency: string;\n\treservationBlocks: Block[];\n\tapiUrl: string;\n\tbusinessId: string;\n\tstorageUrl: string;\n\ttimezone: string;\n\ttzGroups: any;\n\tparts: ReservationCartPart[];\n\n\t// Payment configuration\n\tallowedPaymentMethods: string[];\n\tpaymentConfig: {\n\t\tprovider: PaymentProviderConfig | null;\n\t\tenabled: boolean;\n\t};\n}\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 { getGlobalConfig } from '../config';\nimport httpClient from '../services/http';\nimport { ApiResponse } from '../types';\n\nconst getCollection = async (id: string) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${id}`;\n const { value } = await httpClient.get(url);\n return value;\n};\n\nconst getCollections = async ({ name = null, ids = null }: { name?: string | null; ids?: string[] | null }) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections`;\n\n const response = await httpClient.get(url, {\n params: { name, ids }\n });\n return response.value;\n};\n\nconst getCollectionEntries = async ({\n collectionId,\n limit,\n cursor,\n ids = null\n}: {\n collectionId: string;\n limit?: number;\n cursor?: string;\n ids?: string[] | null;\n}) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${collectionId}/entries`;\n\n const response = await httpClient.get(url, {\n params: { limit, cursor, ids }\n });\n return response.value;\n};\n\nconst createCollectionEntry = async (collectionEntryData: any) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${collectionEntryData.collectionId}/entries`;\n\n const result = await httpClient.post(url, collectionEntryData, {\n successMessage: \"Created successfully\",\n errorMessage: \"Failed to create collection\",\n });\n\n return result;\n};\n\nconst getCollectionEntry = async ({ collectionId, id }: { collectionId: string; id: string }) => {\n const config = getGlobalConfig();\n const url = `${config.apiUrl}/v1/businesses/${config.businessId}/collections/${collectionId}/entries/${id}`;\n\n const response = await httpClient.get(url);\n\n return response;\n};\n\nexport const cmsApi = {\n getCollection,\n getCollections,\n getCollectionEntries,\n getCollectionEntry,\n createCollectionEntry,\n};","import { getGlobalConfig } 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 config = getGlobalConfig();\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(`${config.apiUrl}/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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\n const res = await fetch(`${config.apiUrl}/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 config = getGlobalConfig();\n const res = await fetch(`${config.apiUrl}/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 config = getGlobalConfig();\n const res = await fetch(`${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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 { getGlobalConfig } 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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\n const url = `${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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 config = getGlobalConfig();\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(`${config.apiUrl}/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","import { getGlobalConfig } from '../config';\nimport type { Newsletter, PaginatedResponse, Payment } from '../types';\n\nexport interface NewsletterFindPayload {\n\tbusiness_id: string;\n}\n\nexport interface NewsletterResponse {\n\tdata: Newsletter[];\n\tmeta?: {\n\t\ttotal: number;\n\t\tpage: number;\n\t\tper_page: number;\n\t};\n}\n\nexport interface NewsletterSubscribePayload {\n\tnewsletterId: string;\n\temail: string;\n\tcustomerId?: string;\n\tpayment?: Payment; // NEW: For paid newsletter subscriptions\n}\n\nexport const newsletterApi = {\n\tasync find(payload: NewsletterFindPayload): Promise<PaginatedResponse<Newsletter>> {\n\t\tconst config = getGlobalConfig();\n\t\tconst params = new URLSearchParams({\n\t\t\tbusinessId: payload.business_id,\n\t\t});\n\n\t\tconst url = `${config.apiUrl}/v1/newsletters?${params.toString()}`;\n\n\t\tconst response = await fetch(url);\n\t\t\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t}\n\n\t\tconst backendResponse = await response.json();\n\t\t\n\t\t// Backend returns {items: [], cursor: null}, we need {data: [], meta: {...}}\n\t\treturn {\n\t\t\tdata: backendResponse.items || [],\n\t\t\tmeta: {\n\t\t\t\ttotal: backendResponse.items?.length || 0,\n\t\t\t\tpage: 1,\n\t\t\t\tper_page: backendResponse.items?.length || 0,\n\t\t\t}\n\t\t};\n\t},\n\n\tasync get(id: string): Promise<Newsletter> {\n\t\tconst config = getGlobalConfig();\n\t\tconst url = `${config.apiUrl}/v1/newsletters/${id}`;\n\n\t\tconst response = await fetch(url);\n\t\t\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t}\n\n\t\treturn await response.json();\n\t},\n\n\n\tasync subscribe(payload: NewsletterSubscribePayload) {\n\t\ttry {\n\t\t\tconst config = getGlobalConfig();\n\t\t\tconst url = `${config.apiUrl}/v1/newsletters/${payload.newsletterId}/subscribe`;\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tnewsletterId: payload.newsletterId,\n\t\t\t\t\temail: payload.email,\n\t\t\t\t\tmarket: \"US\", // Backend resolves currency from market\n\t\t\t\t\t...(payload.customerId && { customerId: payload.customerId }),\n\t\t\t\t\t...(payload.payment && { payment: payload.payment }),\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorData = await response.json().catch(() => ({}));\n\t\t\t\tthrow new Error(errorData.message || `HTTP error! status: ${response.status}`);\n\t\t\t}\n\n\t\t\tconst data = await response.json();\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tdata,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error('Newsletter subscription error:', error);\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : 'Failed to subscribe to newsletter',\n\t\t\t};\n\t\t}\n\t},\n};","import { reservationApi } from \"../api/reservation\";\nimport { getGlobalConfig } 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 config = getGlobalConfig();\n\t\tconst response = await fetch(`${config.apiUrl}/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","// Block utilities (extracted from index.ts)\nimport { getGlobalConfig } from '../config';\n\nexport interface Block {\n id: string;\n key: string;\n type: string;\n properties: any;\n value: any;\n}\n\nexport interface Collection {\n id: string;\n blocks: Block[];\n}\n\nexport interface CollectionEntry {\n id: string;\n collection_id: string;\n blocks: Block[];\n}\n\n\nexport function getBlockLabel(block: any, locale: string = 'en'): 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 \n // Convert key to readable format\n return block.key?.replace(/_/g, ' ').replace(/\\b\\w/g, (l: string) => l.toUpperCase()) || \"\";\n}\n\n\nexport function formatBlockValue(block: any): string {\n if (!block || block.value === null || block.value === undefined) {\n return \"\";\n }\n\n switch (block.type) {\n case \"BOOLEAN\":\n return block.value ? \"Yes\" : \"No\";\n case \"NUMBER\":\n // Handle date/datetime variants\n if (block.properties?.variant === \"DATE\" || block.properties?.variant === \"DATE_TIME\") {\n try {\n return new Date(block.value).toLocaleDateString();\n } catch (e) {\n return String(block.value);\n }\n }\n return String(block.value);\n case \"RELATIONSHIP\":\n if (Array.isArray(block.value) && block.value.length > 0) {\n const firstValue = block.value[0];\n if (firstValue && firstValue.mimeType) {\n return firstValue.name || firstValue.id || \"Media\";\n }\n return firstValue.title || firstValue.name || firstValue.id || \"Entry\";\n }\n return String(block.value);\n default:\n return String(block.value);\n }\n}\n\nexport function prepareBlocksForSubmission(formData: any): any[] {\n const preparedBlocks = [];\n\n Object.keys(formData).forEach((key) => {\n if (formData[key] !== null && formData[key] !== undefined) {\n preparedBlocks.push({\n key,\n value: [formData[key]],\n });\n }\n });\n\n return preparedBlocks;\n}\n\nexport function extractBlockValues(blocks: any[]): Record<string, any> {\n const values: Record<string, any> = {};\n\n blocks.forEach((block) => {\n if (block.value && block.value.length > 0) {\n values[block.key] = block.value[0];\n } else {\n values[block.key] = null;\n }\n });\n\n return values;\n}\n\n// Extract localized text value from a block, handling multilingual content\nexport function getBlockTextValue(block: any, locale: string = 'en'): string {\n if (!block || !block.value || block.value.length === 0) return '';\n \n const firstValue = block.value[0];\n \n // Handle multilingual object\n if (typeof firstValue === 'object' && firstValue !== null) {\n // Try specified locale first, then 'en', then first available language\n if (firstValue[locale]) return firstValue[locale];\n if (firstValue.en) return firstValue.en;\n const values = Object.values(firstValue);\n return String(values[0] || '');\n }\n \n // Handle simple string\n return String(firstValue);\n}\n\n// Legacy functions for backward compatibility\nexport const getBlockValue = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value[0];\n};\n\nexport const getBlockValues = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value;\n};\n\nfunction unwrapBlock(block: any, locale: string) {\n if (!block?.type || block.value === undefined) return block;\n\n // Nested objects / lists → recurse for every child\n if (block.type === \"BLOCK\") {\n return block.value.map((obj: Record<string, any>) => {\n const parsed: Record<string, any> = {};\n for (const [k, v] of Object.entries(obj)) {\n parsed[k] = unwrapBlock(v, locale);\n }\n return parsed;\n });\n }\n\n // Primitive leaves (text/number/boolean/media …)\n const isLocalized = block.type === \"TEXT\";\n const isList =\n block.properties?.ui === \"list\" ||\n (block.properties?.maxValues ?? 1) > 1 ||\n block.value.length > 1;\n\n if (isList) {\n return isLocalized\n ? block.value.map((v: Record<string, any>) => v[locale] || v[\"en\"])\n : [...block.value];\n }\n\n return isLocalized ? block.value[0][locale] || block.value[0][\"en\"] : block.value[0];\n}\n\nexport const getBlockObjectValues = (entry: any, blockKey: string, locale = \"en\") => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n const parsed = values.map((obj: Record<string, any>) => {\n const res = obj.value.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n\n return acc;\n }, {});\n\n return res;\n });\n\n return parsed;\n};\n\nexport const getBlockFromArray = (entry: any, blockKey: string, locale = \"en\") => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n return values.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n return acc;\n });\n};\n\nexport const getImageUrl = (imageBlock: any, isBlock = true) => {\n if (!imageBlock) return null;\n\n const config = getGlobalConfig();\n const storageUrl = config.storageUrl || \"https://storage.arky.io/dev\";\n\n // Helper to check if URL is external\n const isExternalUrl = (url: string) => {\n return url.startsWith('http://') || url.startsWith('https://');\n };\n\n // Handle relationship blocks with media\n if (imageBlock.type === 'RELATIONSHIP' && Array.isArray(imageBlock.value)) {\n const mediaValue = imageBlock.value[0];\n if (mediaValue && mediaValue.mimeType) {\n // Handle media with resolutions structure\n if (mediaValue.resolutions && mediaValue.resolutions.original && mediaValue.resolutions.original.url) {\n const url = mediaValue.resolutions.original.url;\n return isExternalUrl(url) ? url : `${storageUrl}/${url}`;\n }\n \n // Handle direct URL on media\n if (mediaValue.url) {\n return isExternalUrl(mediaValue.url) ? mediaValue.url : `${storageUrl}/${mediaValue.url}`;\n }\n }\n return null;\n }\n\n if (isBlock) {\n if (typeof imageBlock === \"string\") {\n // Check if it's already a full URL\n if (isExternalUrl(imageBlock)) {\n return imageBlock;\n }\n return `${storageUrl}/${imageBlock}`;\n }\n\n if (imageBlock.url) {\n // Check if it's already a full URL\n if (isExternalUrl(imageBlock.url)) {\n return imageBlock.url;\n }\n return `${storageUrl}/${imageBlock.url}`;\n }\n }\n\n if (\n imageBlock.resolutions &&\n imageBlock.resolutions.original &&\n imageBlock.resolutions.original.url\n ) {\n const url = imageBlock.resolutions.original.url;\n // Check if it's already a full URL\n if (isExternalUrl(url)) {\n return url;\n }\n return `${storageUrl}/${url}`;\n }\n\n return null;\n};\n\nexport function getGalleryThumbnail(gallery: any) {\n if (!gallery?.length) return null;\n const item = gallery.find((g: any) => g.settings.isThumbnail) || gallery[0];\n const res = item.media.resolutions.thumbnail || item.media.resolutions.original;\n return res?.url || null;\n}\n\n// full URL or null\nexport function thumbnailUrl(service: any) {\n const config = getGlobalConfig();\n const storageUrl = config.storageUrl || \"\";\n const path = getGalleryThumbnail(service.gallery);\n return path ? `${storageUrl}/${path}` : null;\n}\n\nexport const translateMap = (labels: any, lang: string, fallback = \"unknown\") => {\n let parsedLang = \"en\";\n\n if (lang === \"sr\") {\n parsedLang = \"bih\";\n }\n\n if (!labels) {\n return fallback;\n }\n\n const label = labels[parsedLang];\n if (!label) {\n return fallback;\n }\n\n return label;\n};","// Error handling utilities (combined from errorCodes.ts and errorHelpers.ts)\n\n// Comprehensive error code system with both numeric codes and named constants\nexport const ERROR_CODES = {\n // General errors\n \"GENERAL.001\": \"GENERAL.BAD_REQUEST\",\n \"GENERAL.002\": \"GENERAL.VALIDATION_ERROR\",\n \"GENERAL.003\": \"GENERAL.FORBIDDEN_ERROR\",\n \"GENERAL.004\": \"GENERAL.INTERNAL_SERVER_ERROR\",\n \"GENERAL.005\": \"GENERAL.UNAUTHORIZED\",\n \"GENERAL.006\": \"GENERAL.UNAUTHENTICATED\",\n\n // Google/OAuth errors\n \"GOOGLE.001\": \"GOOGLE.INVALID_ORIGIN_URI\",\n \"GOOGLE.002\": \"GOOGLE.INVALID_REDIRECT_URI\",\n \"GOOGLE.003\": \"GOOGLE.FAILED_TO_CALL_API\",\n \"GOOGLE.004\": \"GOOGLE.FAILED_LOGIN\",\n \"GOOGLE.005\": \"GOOGLE.FAILED_LOGOUT\",\n \"GOOGLE.006\": \"GOOGLE.FAILED_REFRESH_TOKEN\",\n \"GOOGLE.007\": \"GOOGLE.INVALID_PROVIDER_PASSED\",\n\n // User errors\n \"USER.001\": \"USER.NOT_FOUND\",\n \"USER.002\": \"USER.FAILED_TO_CREATE\",\n \"USER.003\": \"USER.FAILED_TO_UPDATE\",\n \"USER.004\": \"USER.FAILED_TO_DELETE\",\n \"USER.005\": \"USER.EMAIL_EXISTS\",\n \"USER.006\": \"USER.FAILED_TO_GET_UPLOAD_URL\",\n\n // Business errors\n \"BUSINESS.001\": \"BUSINESS.NOT_FOUND\",\n \"BUSINESS.002\": \"BUSINESS.FAILED_TO_CREATE\",\n \"BUSINESS.003\": \"BUSINESS.FAILED_TO_UPDATE\",\n \"BUSINESS.004\": \"BUSINESS.FAILED_TO_DELETE\",\n \"BUSINESS.005\": \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n \"BUSINESS.006\": \"BUSINESS.NAME_REQUIRED\",\n \"BUSINESS.007\": \"BUSINESS.BUSINESS_ID_REQUIRED\",\n \"BUSINESS.010\": \"BUSINESS.DESCRIPTION_REQUIRED\",\n \"BUSINESS.011\": \"BUSINESS.SLUG_INVALID\",\n\n // Provider errors \n \"PROVIDER.001\": \"PROVIDER.NOT_FOUND\",\n \"PROVIDER.002\": \"PROVIDER.FAILED_TO_CREATE\",\n \"PROVIDER.003\": \"PROVIDER.FAILED_TO_UPDATE\",\n \"PROVIDER.004\": \"PROVIDER.FAILED_TO_DELETE\",\n \"PROVIDER.005\": \"PROVIDER.FAILED_TO_GET_UPLOAD_URL\",\n \"PROVIDER.006\": \"PROVIDER.NAME_REQUIRED\",\n \"PROVIDER.007\": \"PROVIDER.BUSINESS_ID_REQUIRED\",\n \"PROVIDER.008\": \"PROVIDER.DESCRIPTION_REQUIRED\",\n};\n\n// Named error constants for direct access\nexport const ERROR_CONSTANTS = {\n GENERAL: {\n BAD_REQUEST: \"GENERAL.BAD_REQUEST\",\n VALIDATION_ERROR: \"GENERAL.VALIDATION_ERROR\",\n FORBIDDEN_ERROR: \"GENERAL.FORBIDDEN_ERROR\",\n INTERNAL_SERVER_ERROR: \"GENERAL.INTERNAL_SERVER_ERROR\",\n UNAUTHORIZED: \"GENERAL.UNAUTHORIZED\",\n UNAUTHENTICATED: \"GENERAL.UNAUTHENTICATED\",\n },\n USER: {\n NOT_FOUND: \"USER.NOT_FOUND\",\n FAILED_TO_CREATE: \"USER.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"USER.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"USER.FAILED_TO_DELETE\",\n EMAIL_EXISTS: \"USER.EMAIL_EXISTS\",\n FAILED_TO_GET_UPLOAD_URL: \"USER.FAILED_TO_GET_UPLOAD_URL\",\n },\n BUSINESS: {\n NOT_FOUND: \"BUSINESS.NOT_FOUND\",\n FAILED_TO_CREATE: \"BUSINESS.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"BUSINESS.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"BUSINESS.FAILED_TO_DELETE\",\n FAILED_TO_GET_UPLOAD_URL: \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n NAME_REQUIRED: \"BUSINESS.NAME_REQUIRED\",\n BUSINESS_ID_REQUIRED: \"BUSINESS.BUSINESS_ID_REQUIRED\",\n DESCRIPTION_REQUIRED: \"BUSINESS.DESCRIPTION_REQUIRED\",\n SLUG_INVALID: \"BUSINESS.SLUG_INVALID\",\n },\n};\n\nexport type ServerError = {\n error: string;\n reason: string;\n code: string;\n statusCode: number;\n validationErrors: {\n field: string;\n code: string;\n }[];\n};\n\nexport type ValidationError = {\n field: string;\n message: string;\n};\n\nexport type RequestError = {\n validationErrors: ValidationError[];\n};\n\n// Utility functions for error handling\nexport function getErrorMessage(code: string): string {\n return ERROR_CODES[code as keyof typeof ERROR_CODES] || code;\n}\n\nexport function isErrorCode(code: string): boolean {\n return code in ERROR_CODES;\n}\n\n// Note: transformErrors requires zod which is not a dependency\n// If you need zod validation, add it to package.json dependencies\nexport const transformErrors = (zodError: any): ValidationError[] => {\n const customErrors: ValidationError[] = [];\n\n if (!zodError.issues) return customErrors;\n\n zodError.issues.forEach((issue: any) => {\n const field = issue.path.join(\".\");\n const message = issue.message;\n\n if (\n !customErrors.some(\n (customError) => customError.field === field && customError.message === message,\n )\n ) {\n customErrors.push({ field, message });\n }\n });\n\n return customErrors;\n};\n\nexport const convertServerErrorToRequestError = (\n serverError: ServerError,\n renameRules?: { [key: string]: string },\n): RequestError => {\n return {\n ...serverError,\n validationErrors: serverError.validationErrors.map((validationError) => {\n const field =\n renameRules && renameRules[validationError.field]\n ? renameRules[validationError.field]\n : validationError.field;\n\n return {\n field: field,\n message: ERROR_CODES[validationError.code as keyof typeof ERROR_CODES] || \"Unknown error\",\n };\n }),\n };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;","/**\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}","// 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","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: any): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\n\ttry {\n\t\tconst response = await fetch(svgUrl);\n\n\t\tif (!response.ok) {\n\t\t\tconsole.error(`Failed to fetch SVG: ${response.status} ${response.statusText}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst svgContent = await response.text();\n\t\treturn svgContent;\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching SVG:\", error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Server-side helper for Astro components to fetch SVG content during SSR\n *\n * @param mediaObject The media object from the CMS\n * @returns The SVG content as a string, or empty string on failure\n */\nexport async function getSvgContentForAstro(mediaObject: any): Promise<string> {\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\t\treturn svgContent || \"\";\n\t} catch (error) {\n\t\tconsole.error(\"Error getting SVG content for Astro:\", error);\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Client-side helper to fetch and inject SVG content into DOM elements\n *\n * @param mediaObject The media object from the CMS\n * @param targetElement The DOM element to inject the SVG into\n * @param className Optional CSS class to add to the SVG\n */\nexport async function injectSvgIntoElement(\n\tmediaObject: any,\n\ttargetElement: HTMLElement,\n\tclassName?: string,\n): Promise<void> {\n\tif (!targetElement) return;\n\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\n\t\tif (svgContent) {\n\t\t\ttargetElement.innerHTML = svgContent;\n\n\t\t\t// Add class if provided\n\t\t\tif (className) {\n\t\t\t\tconst svgElement = targetElement.querySelector(\"svg\");\n\t\t\t\tif (svgElement) {\n\t\t\t\t\tsvgElement.classList.add(...className.split(\" \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Error injecting SVG:\", error);\n\t}\n}","// Define locales inline since we don't have @lib/i18n in SDK\nconst locales = ['en', 'sr-latn'] as const;\nconst localeMap: Record<typeof locales[number], string> = {\n\t'en': 'en-US',\n\t'sr-latn': 'sr-RS'\n};\n\n/**\n * * returns \"slugified\" text.\n * @param text: string - text to slugify\n */\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase() // convert to lowercase\n\t\t.replace(/\\s+/g, \"-\") // replace spaces with -\n\t\t.replace(/[^\\w-]+/g, \"\") // remove all non-word chars\n\t\t.replace(/--+/g, \"-\") // replace multiple dashes with single dash\n\t\t.replace(/^-+/, \"\") // trim dash from start of text\n\t\t.replace(/-+$/, \"\"); // trim dash from end of text\n}\n\n/**\n * * returns \"humanized\" text. runs slugify() and then replaces - with space and upper case first letter of every word, and lower case the rest\n * @param text: string - text to humanize\n */\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t\t// .toLowerCase();\n\t\t\t.replace(\n\t\t\t\t// upper case first letter of every word, and lower case the rest\n\t\t\t\t/\\w\\S*/g,\n\t\t\t\t(w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(),\n\t\t\t)\n\t);\n}\n\n// --------------------------------------------------------\n/**\n * * returns \"categorified\" text. runs slugify() and then replaces - with space and upper cases everything\n * @param text: string - text to categorify\n * @returns string - categorified text\n */\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t.toUpperCase();\n}\n\n// --------------------------------------------------------\n/**\n * * returns a nicely formatted string of the date passed\n * @param date: string | number | Date - date to format\n * @param locale: string - locale to format the date in\n * @returns string - formatted date\n */\nexport function formatDate(date: string | number | Date, locale: (typeof locales)[number]): string {\n\tlet localeString = \"en-US\";\n\n\tif (locales.includes(locale)) {\n\t\tlocaleString = localeMap[locale];\n\t}\n\n\treturn new Date(date).toLocaleDateString(localeString, {\n\t\ttimeZone: \"UTC\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\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}","// 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}","// Main export file for @arky/sdk\n\n// Configuration\nexport * from './config';\nexport type { ArkyConfig } from './config';\n\n// Types\nexport * from './types';\nexport type {\n ApiResponse,\n EshopCartItem,\n EshopStoreState,\n ReservationStoreState,\n ReservationCartPart,\n Business,\n Block,\n Price\n} from './types';\n\n// APIs\nexport * from './api';\n\n// Services\nexport * from './services/auth';\nexport { default as httpClient } from './services/http';\n\n// NOTE: Stores are exported via separate entry point: @arky/sdk/stores\n// This keeps the main bundle small for API-only users\n\n// Utilities\nexport * from './utils/blocks';\nexport * from './utils/errors';\nexport * from './utils/price';\nexport * from './utils/svg';\nexport * from './utils/text';\nexport * from './utils/timezone';\nexport * from './utils/validation';\n\n// Re-export commonly used functions for convenience\n\nexport { \n // Validation utilities\n validatePhoneNumber,\n validateEmail,\n validateVerificationCode,\n validateRequired\n} from './utils/validation';\n\nexport { \n // Block utilities\n getBlockLabel,\n getBlockTextValue,\n getBlockValue,\n getBlockValues,\n getImageUrl,\n thumbnailUrl\n} from './utils/blocks';\n\nexport { \n // Auth utilities\n getGuestToken,\n updateProfilePhone,\n verifyPhoneCode,\n getBusinessConfig\n} from './services/auth';\n\nexport { \n // SVG utilities\n fetchSvgContent,\n getSvgContentForAstro,\n injectSvgIntoElement\n} from './utils/svg';\n\nexport { \n // Text utilities\n slugify,\n humanize,\n categorify,\n formatDate\n} from './utils/text';\n\nexport { \n // Timezone utilities\n findTimeZone,\n tzGroups\n} from './utils/timezone';\n\nexport { \n // Error utilities\n getErrorMessage,\n isErrorCode,\n ERROR_CODES,\n ERROR_CONSTANTS\n} from './utils/errors';\n\n// SDK Version\nexport const SDK_VERSION = '0.3.0';\nexport const SUPPORTED_FRAMEWORKS = ['astro', 'react', 'vue', 'svelte', 'vanilla'] as const;\n\n// SDK initialization function\nimport { setGlobalConfig, type ArkyConfig } from './config';\n\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}"]}