arky-sdk 0.3.142 → 0.3.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +12 -13
- package/dist/types.d.ts +12 -13
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/index.ts","../src/utils/errors.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/user.ts","../src/api/business.ts","../src/api/media.ts","../src/api/role.ts","../src/api/notification.ts","../src/api/promoCode.ts","../src/api/analytics.ts","../src/utils/blocks.ts","../src/api/cms.ts","../src/api/eshop.ts","../src/api/reservation.ts","../src/api/database.ts","../src/api/featureFlags.ts","../src/api/location.ts","../src/api/network.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/validation.ts","../src/utils/timezone.ts","../src/utils/text.ts","../src/utils/svg.ts","../src/utils/keyValidation.ts","../src/index.ts"],"names":["PaymentMethodType","url","locale"],"mappings":"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","file":"index.cjs","sourcesContent":["export * from './api';\n\nexport interface PaymentRefund {\n\tid: string;\n\tentity: string;\n\ttotal: number;\n\tproviderRefundId?: string;\n\tstatus: string;\n\tcreatedAt: number;\n}\n\nexport interface Payment {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttotal: number;\n\tpaid: number;\n\ttax?: {\n\t\tamount: number;\n\t\tmodeSnapshot?: string;\n\t\trateBps: number;\n\t\tlines: Array<{ rateBps: number; amount: number; label?: string; scope?: string }>;\n\t};\n\tpromoCode?: {\n\t\tid: string;\n\t\tcode: string;\n\t\ttype: string;\n\t\tvalue: number;\n\t};\n\ttype: PaymentMethodType;\n\tprovider?: {\n\t\tcustomerId: string;\n\t\tpaymentIntentId?: string;\n\t\tsubscriptionId?: string;\n\t\tpriceId?: string;\n\t};\n\trefunds: PaymentRefund[];\n\tzoneId?: string;\n\tpaymentMethodId?: string;\n\tshippingMethodId?: string;\n}\n\nexport enum PaymentMethodType {\n\tCash = \"CASH\",\n\tCreditCard = \"CREDIT_CARD\",\n\tFree = \"FREE\",\n}\n\nexport interface PromoCodeValidation {\n\tpromoCodeId: string;\n\tcode: string;\n\tdiscounts: any[];\n\tconditions: any[];\n}\n\nexport interface Quote {\n\tmarket: string;\n\tzone: Zone;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttax: number;\n\ttotal: number;\n\tshippingMethod: ShippingMethod | null;\n\tpaymentMethod: PaymentMethod | null;\n\tpromoCode: PromoCodeValidation | null;\n\tpayment: Payment;\n\tchargeAmount: number;\n\tid?: string;\n\texpiresAt?: number;\n}\n\nexport interface Price {\n\tmarket: string;\n\tamount: number;\n\tcompareAt?: number;\n}\n\nexport interface Location {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tstate?: string | null;\n\tpostalCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\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;\n\tquantity: number;\n\taddedAt: number;\n}\n\nexport interface ReservationCartItem {\n\tid: string;\n\tserviceId: string;\n\tserviceName: string;\n\tdate: string;\n\tfrom: number;\n\tto: number;\n\ttimeText: string;\n\tproviderId?: string;\n\tblocks: any[];\n}\n\nexport interface PaymentProviderConfig {\n\ttype: \"STRIPE\";\n\tpublicKey: string;\n\tsecretKey: string;\n\twebhookSecret: string;\n}\n\nexport interface ShippingWeightTier {\n\tupToGrams: number;\n\tamount: number;\n}\n\nexport interface PaymentMethod {\n\tid: string;\n\ttype: PaymentMethodType;\n}\n\nexport interface ShippingMethod {\n\tid: string;\n\ttaxable: boolean;\n\tetaText: string;\n\tpickupLocation?: Location;\n\tamount: number;\n\tfreeAbove?: number;\n\tweightTiers?: ShippingWeightTier[];\n}\n\nexport type ZoneScope = \"ORDER\" | \"RESERVATION\";\n\nexport interface Zone {\n\tid: string;\n\tmarketId: string;\n\tscope: ZoneScope;\n\tcountries: string[];\n\tstates: string[];\n\tpostalCodes: string[];\n\ttaxBps: number;\n\tpaymentMethods: PaymentMethod[];\n\tshippingMethods: ShippingMethod[];\n}\n\nexport interface Market {\n\tid: string;\n\tcurrency: string;\n\ttaxMode: \"EXCLUSIVE\" | \"INCLUSIVE\";\n}\n\nexport interface Language {\n\tid: string;\n}\n\nexport interface BusinessEmails {\n\tbilling: string;\n\tsupport: string;\n}\n\nexport interface BusinessConfig {\n\tlanguages: Language[];\n\tmarkets: Market[];\n\tzones: Zone[];\n\tbuildHooks: string[];\n\twebhooks: any[];\n\tpaymentProvider?: PaymentProviderConfig;\n\taiProvider?: any;\n\temails: BusinessEmails;\n}\n\nexport interface Subscription {\n\tid: string;\n\ttarget: string;\n\tplanId: string;\n\tpendingPlanId: string | null;\n\tpayment: any;\n\tstatuses: StatusEvent[];\n\tendDate: number;\n\tusage: Record<string, any>;\n\ttoken: string;\n}\n\nexport interface Business {\n\tid: string;\n\tname: string;\n\tnetworkKey: string | null;\n\ttimezone: string;\n\tconfigs?: BusinessConfig;\n\tsubscriptions?: Subscription[];\n\tstatuses?: StatusEvent[];\n}\n\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}\n\nexport interface Block {\n\tid: string;\n\tkey: string;\n\ttype: string;\n\tproperties?: any;\n\tvalue?: any;\n}\n\nexport type BlockType =\n\t| \"TEXT\"\n\t| \"LOCALIZED_TEXT\"\n\t| \"NUMBER\"\n\t| \"BOOLEAN\"\n\t| \"BLOCK\"\n\t| \"RELATIONSHIP_ENTRY\"\n\t| \"RELATIONSHIP_MEDIA\"\n\t| \"MARKDOWN\"\n\t| \"EMAIL\"\n\t| \"PHONE\"\n\t| \"ADDRESS\";\n\nexport type AddressType = \"SHIPPING\" | \"BILLING\";\n\nexport interface EmailBlockProperties {\n\tminValues?: number;\n\tmaxValues?: number;\n\tisNotificationTarget?: boolean;\n}\n\nexport interface PhoneBlockProperties {\n\tminValues?: number;\n\tmaxValues?: number;\n\tisNotificationTarget?: boolean;\n}\n\nexport interface AddressBlockProperties {\n\tminValues?: number;\n\tmaxValues?: number;\n\taddressType: AddressType;\n}\n\nexport interface GeoLocationValue {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tstate?: string | null;\n\tpostalCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\nexport interface EmailBlock extends Block {\n\ttype: \"EMAIL\";\n\tproperties: EmailBlockProperties;\n\tvalue: string[];\n}\n\nexport interface PhoneBlock extends Block {\n\ttype: \"PHONE\";\n\tproperties: PhoneBlockProperties;\n\tvalue: string[];\n}\n\nexport interface AddressBlock extends Block {\n\ttype: \"ADDRESS\";\n\tproperties: AddressBlockProperties;\n\tvalue: GeoLocationValue[];\n}\n\nexport interface Seo {\n\tslug: Record<string, string>;\n\tmetaTitle: Record<string, string>;\n\tmetaDescription: Record<string, string>;\n\tcanonicalUrl: Record<string, string>;\n\togImage: string;\n}\n\nexport interface MediaResolution {\n\tid: string;\n\tsize: string;\n\turl: string;\n}\n\nexport interface Media {\n\tid: string;\n\tresolutions: { [key: string]: MediaResolution };\n\tmimeType: string;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\talt?: string | null;\n\tentity: string;\n\tmetadata?: string | null;\n\tuploadedAt: string;\n\tseo: Seo;\n}\n\nexport interface ApiResponse<T> {\n\tsuccess: boolean;\n\tdata?: T;\n\terror?: string;\n\tcursor?: string;\n\ttotal?: 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\nexport interface ReservationStoreState {\n\tcurrentStep: number;\n\ttotalSteps: number;\n\tsteps: Record<number, { name: string; labelKey: string }>;\n\tweekdays: string[];\n\tmonthYear: string;\n\tdays: any[];\n\tcurrent: Date;\n\tselectedDate: string | null;\n\tslots: any[];\n\tselectedSlot: any | null;\n\tselectedProvider: any | null;\n\tproviders: any[];\n\tloading: boolean;\n\tstartDate: string | null;\n\tendDate: string | null;\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\ttimezone: string;\n\ttzGroups: any;\n\titems: ReservationCartItem[];\n\tallowedPaymentMethods: string[];\n\tpaymentConfig: {\n\t\tprovider: PaymentProviderConfig | null;\n\t\tenabled: boolean;\n\t};\n}\n\nexport interface StatusEvent {\n\tid: string;\n\tchangedBy: 'BUSINESS' | 'USER' | 'SYSTEM';\n\tuserId?: string;\n\tstatus: string;\n\tnote?: string;\n\ttimestamp: number;\n}\n\nexport interface ReservationItem {\n\tid: string;\n\tserviceId: string;\n\tproviderId: string;\n\tbusinessId: string;\n\treservationId: string;\n\tuserId: string;\n\tfrom: number;\n\tto: number;\n\tblocks: Block[];\n\tprice: Price;\n}\n\nexport interface Reservation {\n\tid: string;\n\tnumber: string;\n\tuserId: string;\n\tblocks: Block[];\n\tbusinessId: string;\n\tstatuses: StatusEvent[];\n\tserviceIds: string[];\n\tproviderIds: string[];\n\tpayment: Payment;\n\tbusiness?: Business;\n\tuser?: any;\n\titems: ReservationItem[];\n\temail?: string;\n\tphone?: string;\n\tcreatedAt: number;\n\tlastModified: number;\n}\n\n// ===== CMS Types =====\n\nexport interface NodeNotifications {\n\temails: string[];\n}\n\nexport interface NodeConfig {\n\tisPubliclyReadable: boolean;\n\tisPubliclyWritable: boolean;\n}\n\nexport interface SubscriptionPlan {\n\tid: string;\n\tproviderPriceId?: string;\n\tproviderProductId?: string;\n\tname: string;\n\ttier: number;\n\tamount: number;\n\tcurrency: string;\n\tinterval: string;\n\tintervalCount: number;\n\ttrialPeriodDays: number;\n\tfeatures: Record<string, any>;\n}\n\nexport type SendStatus = 'SCHEDULED' | 'SENDING' | 'SENT' | 'CANCELLED' | 'FAILED';\n\nexport interface NewsletterSend {\n\tid: string;\n\tscheduledAt: number;\n\tstatus: SendStatus;\n\tsentCount: number;\n\tfailedCount: number;\n\tcreatedAt: number;\n}\n\nexport interface Node {\n\tid: string;\n\tkey: string;\n\tbusinessId: string;\n\tblocks: Block[];\n\tparentId?: string | null;\n\thasChildren: boolean;\n\tstatuses: StatusEvent[];\n\tseo: Seo;\n\tnotifications: NodeNotifications;\n\tconfig: NodeConfig;\n\temailSubject?: Record<string, string>;\n\tplans?: SubscriptionPlan[];\n\tsends?: NewsletterSend[];\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\n// ===== Reservation Domain Types =====\n\nexport interface ServiceDuration {\n\tduration: number;\n\tisPause?: boolean;\n}\n\nexport interface ServiceProvider {\n\tid: string;\n\tproviderId: string;\n\tworkingTime: {\n\t\tworkingDays: Array<{ day: string; workingHours: Array<{ from: number; to: number }> }>;\n\t\toutcastDates: Array<{ month: number; day: number; workingHours: Array<{ from: number; to: number }> }>;\n\t\tspecificDates: Array<{ date: number; workingHours: Array<{ from: number; to: number }> }>;\n\t};\n\tprovider?: Provider;\n}\n\nexport interface Service {\n\tid: string;\n\tkey: string;\n\tseo: Seo;\n\tbusinessId: string;\n\tprices: Price[];\n\tdurations: ServiceDuration[];\n\tblocks: Block[];\n\tnodeIds: string[];\n\tisApprovalRequired: boolean;\n\tproviders: ServiceProvider[];\n\tcreatedAt: number;\n\tupdatedAt: number;\n\tstatuses: StatusEvent[];\n}\n\nexport interface ProviderTimelinePoint {\n\ttimestamp: number;\n\tconcurrent: number;\n}\n\nexport interface Provider {\n\tid: string;\n\tkey: string;\n\tseo: Seo;\n\tbusinessId: string;\n\tstatuses: StatusEvent[];\n\tconcurrentLimit: number;\n\tnodeIds: string[];\n\tblocks: Block[];\n\ttimeline: ProviderTimelinePoint[];\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\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 message: string;\n error: string;\n statusCode: number;\n validationErrors: {\n field: string;\n error: string;\n }[];\n};\n\nexport type ValidationError = {\n field: string;\n error: 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\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 error = issue.message;\n\n if (\n !customErrors.some(\n (customError) =>\n customError.field === field && customError.error === error\n )\n ) {\n customErrors.push({ field, error });\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 error: validationError.error || \"GENERAL.VALIDATION_ERROR\",\n };\n }),\n };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;\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}","import {\n\tconvertServerErrorToRequestError,\n\ttype ServerError\n} from '../utils/errors';\nimport { buildQueryString, type QueryParams } from '../utils/queryParams';\n\nexport interface AuthTokens {\n\taccessToken: string;\n\trefreshToken?: string;\n\tprovider?: string;\n\texpiresAt?: number;\n\tuserId?: string;\n\tisGuest?: boolean;\n}\n\nexport interface HttpClientConfig {\n\tbaseUrl: string;\n\n\tbusinessId: string;\n\n\tgetToken: () => Promise<AuthTokens> | AuthTokens;\n\n\tsetToken: (tokens: AuthTokens) => void;\n\n\tautoGuest?: boolean;\n\n\tlogout: () => void;\n\n\tnavigate?: (path: string) => void;\n\n\tloginFallbackPath?: string;\n\n\tisAuthenticated?: () => boolean;\n}\n\ntype SuccessCallback<T = any> = (ctx: {\n\tdata: T;\n\tmethod: string;\n\turl: string;\n\tstatus: number;\n\trequest?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n}) => void | Promise<void>;\n\ntype ErrorCallback = (ctx: {\n\terror: any;\n\tmethod: string;\n\turl: string;\n\tstatus?: number;\n\trequest?: any;\n\tresponse?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n\taborted?: boolean;\n}) => void | Promise<void>;\n\nexport function createHttpClient(cfg: HttpClientConfig) {\n\tconst refreshEndpoint = `${cfg.baseUrl}/v1/users/refresh-access-token`;\n\tlet refreshPromise: Promise<void> | null = null;\n\n\tasync function ensureFreshToken() {\n\t\tif (refreshPromise) {\n\t\t\treturn refreshPromise;\n\t\t}\n\n\t\trefreshPromise = (async () => {\n\t\t\tconst { refreshToken, provider } = await cfg.getToken();\n\t\t\tif (!refreshToken) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('No refresh token available');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst refRes = await fetch(refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { Accept: 'application/json', 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ provider, refreshToken })\n\t\t\t});\n\n\t\t\tif (!refRes.ok) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('Token refresh failed');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst data = await refRes.json();\n\t\t\tcfg.setToken(data);\n\t\t})().finally(() => {\n\t\t\trefreshPromise = null;\n\t\t});\n\n\t\treturn refreshPromise;\n\t}\n\n\tasync function request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: any,\n\t\toptions?: {\n\t\t\tonSuccess?: SuccessCallback<T>;\n\t\t\tonError?: ErrorCallback;\n\t\t\theaders?: Record<string, string>;\n\t\t\ttransformRequest?: (data: any) => any;\n\t\t\tparams?: QueryParams;\n\t\t\t_retried?: boolean;\n\t\t}\n\t): Promise<T> {\n\t\tif (options?.transformRequest) {\n\t\t\tbody = options.transformRequest(body);\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(options?.headers || {})\n\t\t};\n\n\tlet { accessToken, expiresAt, provider } = await cfg.getToken();\n\n\tconst nowSec = Date.now() / 1000;\n\tif (expiresAt && nowSec > expiresAt) {\n\t\tawait ensureFreshToken();\n\t\tconst tokens = await cfg.getToken();\n\t\taccessToken = tokens.accessToken;\n\t\tprovider = tokens.provider;\n\t}\n\n\tif (accessToken) {\n\t\t// Use X-API-Key header for API tokens, Authorization for JWT/OAuth\n\t\tif (provider === 'API') {\n\t\t\theaders['X-API-Key'] = accessToken;\n\t\t} else {\n\t\t\theaders['Authorization'] = `Bearer ${accessToken}`;\n\t\t}\n\t}\n\n\t\tconst finalPath = options?.params ? path + buildQueryString(options.params) : path;\n\n\t\tconst fetchOpts: any = { method, headers };\n\t\tif (!['GET', 'DELETE'].includes(method) && body !== undefined) {\n\t\t\tfetchOpts.body = JSON.stringify(body);\n\t\t}\n\n\t\tconst fullUrl = `${cfg.baseUrl}${finalPath}`;\n\t\tlet res: Response;\n\t\tlet data: any;\n\t\tconst startedAt = Date.now();\n\n\t\ttry {\n\t\t\tres = await fetch(fullUrl, fetchOpts);\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error(error instanceof Error ? error.message : 'Network request failed');\n\t\t\terr.name = 'NetworkError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, aborted: false })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\t// Handle 401: refresh and retry once\n\t\tif (res.status === 401 && !options?.['_retried']) {\n\t\t\ttry {\n\t\t\t\tawait ensureFreshToken();\n\t\t\t\tconst tokens = await cfg.getToken();\n\t\t\t\theaders['Authorization'] = `Bearer ${tokens.accessToken}`;\n\t\t\t\tfetchOpts.headers = headers;\n\t\t\t\treturn request<T>(method, path, body, { ...options, _retried: true });\n\t\t\t} catch (refreshError) {\n\t\t\t\t// Fall through to normal error handling\n\t\t\t}\n\t\t}\n\n\t\t// Safe JSON parsing: handle 204, empty body, non-JSON\n\t\ttry {\n\t\t\tconst contentLength = res.headers.get('content-length');\n\t\t\tconst contentType = res.headers.get('content-type');\n\t\t\tif (res.status === 204 || contentLength === '0' || !contentType?.includes('application/json')) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\tdata = await res.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error('Failed to parse response');\n\t\t\terr.name = 'ParseError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\terr.status = res.status;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, status: res.status })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (!res.ok) {\n\t\t\tconst serverErr: ServerError = data;\n\t\t\tconst reqErr = convertServerErrorToRequestError(serverErr);\n\t\t\tconst err: any = new Error(serverErr.message || 'Request failed');\n\t\t\terr.name = 'ApiError';\n\t\t\terr.statusCode = serverErr.statusCode || res.status;\n\t\t\terr.validationErrors = reqErr.validationErrors;\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tif (requestId) err.requestId = requestId;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\turl: fullUrl,\n\t\t\t\t\t\tstatus: res.status,\n\t\t\t\t\t\tresponse: serverErr,\n\t\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t\t})\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\nif (options?.onSuccess && method !== 'GET') {\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tPromise.resolve(\n\t\t\t\toptions.onSuccess({\n\t\t\t\t\tdata: data as T,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl: fullUrl,\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t})\n\t\t\t).catch(() => {});\n\t\t}\n\t\treturn data as T;\n\t}\n\n\treturn {\n\t\tget: <T>(path: string, opts?: any) => request<T>('GET', path, undefined, opts),\n\t\tpost: <T>(path: string, body: any, opts?: any) => request<T>('POST', path, body, opts),\n\t\tput: <T>(path: string, body: any, opts?: any) => request<T>('PUT', path, body, opts),\n\t\tpatch: <T>(path: string, body: any, opts?: any) => request<T>('PATCH', path, body, opts),\n\t\tdelete: <T>(path: string, opts?: any) => request<T>('DELETE', path, undefined, opts)\n\t};\n}\n","import type { ApiConfig } from '../index';\nimport type {\n UpdateUserProfileParams,\n LoginUserParams,\n RegisterUserParams,\n AddPhoneNumberParams,\n PhoneNumberConfirmParams,\n SearchUsersParams,\n SetRoleParams,\n ConfirmUserParams,\n GetLoginUrlParams,\n ForgotPasswordParams,\n ResetForgotPasswordParams,\n ResetPasswordParams,\n DeleteUserParams,\n GetMeParams,\n LogoutParams,\n UserSubscribeParams,\n RequestOptions\n} from '../types/api';\n\nexport const createUserApi = (apiConfig: ApiConfig) => {\n return {\n // ===== USER PROFILE =====\n\n async updateUser(params: UpdateUserProfileParams, options?: RequestOptions) {\n const payload: any = {};\n\n if (params.name !== undefined) payload.name = params.name;\n if (params.phoneNumbers !== undefined) payload.phoneNumbers = params.phoneNumbers;\n if (params.addresses !== undefined) payload.addresses = params.addresses;\n if (params.apiTokens !== undefined) payload.apiTokens = params.apiTokens;\n\n return apiConfig.httpClient.put('/v1/users', payload, options);\n },\n\n async deleteUser(params: DeleteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete('/v1/users', options);\n },\n\n async addPhoneNumber(params: AddPhoneNumberParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number', params, options);\n },\n\n async phoneNumberConfirm(params: PhoneNumberConfirmParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number/confirm', params, options);\n },\n\n async getMe(params: GetMeParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/me', options);\n },\n\n async searchUsers(params: SearchUsersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/search', {\n ...options,\n params: {\n ...params,\n businessId: apiConfig.businessId\n }\n });\n },\n\n async setRole(params: SetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/set-role', params, options);\n },\n\n // ===== AUTHENTICATION =====\n\n async loginUser(params: LoginUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/login', params, options);\n },\n\n async registerUser(params: RegisterUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/register', params, options);\n },\n\n async logout(params: LogoutParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/logout', {}, options);\n },\n\n async confirmUser(params: ConfirmUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/confirm', params, options);\n },\n\n async getLoginUrl(params: GetLoginUrlParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/login/url', {\n ...options,\n params\n });\n },\n\n // ===== PASSWORD MANAGEMENT =====\n\n async forgotPassword(params: ForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/forgot-password', params, options);\n },\n\n async resetForgotPassword(params: ResetForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-forgot-password', params, options);\n },\n\n async resetPassword(params: ResetPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-password', params, options);\n },\n\n async subscribe(params: UserSubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/subscribe', params, options);\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateBusinessParams,\n UpdateBusinessParams,\n DeleteBusinessParams,\n GetBusinessParams,\n GetBusinessesParams,\n GetBusinessParentsParams,\n TriggerBuildsParams,\n GetSubscriptionParams,\n GetSubscriptionPlansParams,\n SubscribeParams,\n CreatePortalSessionParams,\n InviteUserParams,\n HandleInvitationParams,\n TestWebhookParams,\n GetBusinessMediaParams2,\n ProcessRefundParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createBusinessApi = (apiConfig: ApiConfig) => {\n return {\n async createBusiness(\n params: CreateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(`/v1/businesses`, params, options);\n },\n\n async updateBusiness(\n params: UpdateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${params.id}`,\n params,\n options\n );\n },\n\n async deleteBusiness(\n params: DeleteBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${params.id}`,\n options\n );\n },\n\n async getBusiness(params: GetBusinessParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}`,\n options\n );\n },\n\n async getBusinesses(params?: GetBusinessesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/businesses`, {\n ...options,\n params,\n });\n },\n\n async getBusinessParents(\n params: GetBusinessParentsParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/parents`,\n options\n );\n },\n\n async triggerBuilds(params: TriggerBuildsParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${params.id}/trigger-builds`,\n {},\n options\n );\n },\n\n async getSubscriptionPlans(\n params: GetSubscriptionPlansParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\"/v1/businesses/plans\", options);\n },\n\n async getSubscription(\n params: GetSubscriptionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/subscription`,\n options\n );\n },\n async subscribe(params: SubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/subscribe`,\n params,\n options\n );\n },\n\n async createPortalSession(\n params: CreatePortalSessionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/subscription/portal`,\n params,\n options\n );\n },\n\n async inviteUser(params: InviteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n async handleInvitation(\n params: HandleInvitationParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n\n async testWebhook(params: TestWebhookParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/webhooks/test`,\n params.webhook,\n options\n );\n },\n\n async getBusinessMedia(\n params: GetBusinessMediaParams2,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {\n limit: params.limit,\n };\n if (params.cursor) queryParams.cursor = params.cursor;\n if (params.ids && params.ids.length > 0) queryParams.ids = params.ids.join(',');\n if (params.query) queryParams.query = params.query;\n if (params.mimeType) queryParams.mimeType = params.mimeType;\n if (params.sortField) queryParams.sortField = params.sortField;\n if (params.sortDirection) queryParams.sortDirection = params.sortDirection;\n\n return apiConfig.httpClient.get(`/v1/businesses/${params.id}/media`, {\n ...options,\n params: queryParams,\n });\n },\n\n async processRefund(params: ProcessRefundParams, options?: RequestOptions) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${id}/refund`,\n payload,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n UploadBusinessMediaParams,\n DeleteBusinessMediaParams,\n GetBusinessMediaParams,\n UpdateMediaParams,\n RequestOptions\n} from '../types/api';\n\nexport const createMediaApi = (apiConfig: ApiConfig) => {\n return {\n async uploadBusinessMedia(params: UploadBusinessMediaParams, options?: RequestOptions) {\n const _options = options;\n const { businessId, files = [], urls = [] } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const url = `${apiConfig.baseUrl}/v1/businesses/${targetBusinessId}/media`;\n\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n urls.forEach((url) => formData.append('urls', url));\n\n const tokens = await apiConfig.getToken();\n const response = await fetch(url, {\n method: 'POST',\n body: formData,\n headers: {\n Authorization: `Bearer ${tokens.accessToken}`\n }\n });\n\n if (!response.ok) {\n throw new Error('Upload failed, server said no');\n }\n\n return await response.json();\n },\n\n async deleteBusinessMedia(params: DeleteBusinessMediaParams, options?: RequestOptions) {\n const { id, mediaId } = params;\n\n return apiConfig.httpClient.delete(\n `/v1/businesses/${id}/media/${mediaId}`,\n options\n );\n },\n\n async getBusinessMedia(params: GetBusinessMediaParams, options?: RequestOptions) {\n const { businessId, cursor, limit, ids, query, mimeType, sortField, sortDirection } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const url = `${apiConfig.baseUrl}/v1/businesses/${targetBusinessId}/media`;\n\n const queryParams: Record<string, string> = { limit: String(limit) };\n if (cursor) queryParams.cursor = cursor;\n if (ids && ids.length > 0) queryParams.ids = ids.join(',');\n if (query) queryParams.query = query;\n if (mimeType) queryParams.mimeType = mimeType;\n if (sortField) queryParams.sortField = sortField;\n if (sortDirection) queryParams.sortDirection = sortDirection;\n\n const queryString = new URLSearchParams(queryParams).toString();\n\n const tokens = await apiConfig.getToken();\n const response = await fetch(`${url}?${queryString}`, {\n headers: {\n Authorization: `Bearer ${tokens.accessToken}`\n }\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => null);\n throw new Error(errorData?.message || 'Failed to fetch media');\n }\n\n return await response.json();\n },\n\n async updateMedia(params: UpdateMediaParams, options?: RequestOptions) {\n const { mediaId, businessId, ...updateData } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/media/${mediaId}`,\n updateData,\n options\n );\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateRoleParams,\n UpdateRoleParams,\n DeleteRoleParams,\n GetRoleParams,\n GetRolesParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createRoleApi = (apiConfig: ApiConfig) => {\n return {\n async createRole(\n params: CreateRoleParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/roles`,\n params,\n options,\n );\n },\n\n async updateRole(params: UpdateRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/roles/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteRole(params: DeleteRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/roles/${params.id}`,\n options,\n );\n },\n\n async getRole(params: GetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/roles/${params.id}`,\n options,\n );\n },\n\n async getRoles(params: GetRolesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/roles`,\n {\n ...options,\n params: {\n action: params.action,\n ids: params.ids,\n },\n },\n );\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tTrackEmailOpenParams,\n\tGetDeliveryStatsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createNotificationApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync trackEmailOpen(params: TrackEmailOpenParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/email/${params.trackingPixelId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getDeliveryStats(params: GetDeliveryStatsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/stats/${apiConfig.businessId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tCreatePromoCodeParams,\n\tUpdatePromoCodeParams,\n\tDeletePromoCodeParams,\n\tGetPromoCodeParams,\n\tGetPromoCodesParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createPromoCodeApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync createPromoCode(params: CreatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.post(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync updatePromoCode(params: UpdatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.put(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync deletePromoCode(params: DeletePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.delete(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCode(params: GetPromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCodes(params: GetPromoCodesParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/businesses/${apiConfig.businessId}/promo-codes`, {\n\t\t\t\t...options,\n\t\t\t\tparams\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tGetAnalyticsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createAnalyticsApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync getAnalytics(params: GetAnalyticsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/analytics/${apiConfig.businessId}`, {\n\t\t\t\t...options,\n\t\t\t\tparams: params\n\t\t\t});\n\t\t}\n\t};\n};\n","// Block utilities (extracted from index.ts)\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 entity: string;\n}\n\nexport interface CollectionEntry {\n id: string;\n collection_id: string;\n blocks: Block[];\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 (\n block.key\n ?.replace(/_/g, \" \")\n .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 (\n block.properties?.variant === \"DATE\" ||\n block.properties?.variant === \"DATE_TIME\"\n ) {\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 const isLocalized = block.type === \"LOCALIZED_TEXT\" || block.type === \"MARKDOWN\";\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\n ? block.value[0][locale] || block.value[0][\"en\"]\n : block.value[0];\n}\n\nexport const getBlockObjectValues = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\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 = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\n if (!entry) {\n return {};\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n if (!values || !Array.isArray(values)) {\n return {};\n }\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 if (\n imageBlock.type === \"RELATIONSHIP_MEDIA\" &&\n Array.isArray(imageBlock.value)\n ) {\n const mediaValue = imageBlock.value[0];\n if (mediaValue && mediaValue.mimeType) {\n // Handle media with resolutions structure\n if (\n mediaValue.resolutions &&\n mediaValue.resolutions.original &&\n mediaValue.resolutions.original.url\n ) {\n return mediaValue.resolutions.original.url;\n }\n\n // Handle direct URL on media\n if (mediaValue.url) {\n return mediaValue.url;\n }\n }\n return null;\n }\n\n if (isBlock) {\n if (typeof imageBlock === \"string\") {\n return imageBlock;\n }\n\n if (imageBlock.url) {\n return imageBlock.url;\n }\n }\n\n if (\n imageBlock.resolutions &&\n imageBlock.resolutions.original &&\n imageBlock.resolutions.original.url\n ) {\n return imageBlock.resolutions.original.url;\n }\n\n return null;\n};\n\nexport const translateMap = (\n labels: any,\n lang: string,\n fallback = \"unknown\"\n) => {\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};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateNodeParams,\n UpdateNodeParams,\n DeleteNodeParams,\n GetNodeParams,\n GetNodesParams,\n GetNodeChildrenParams,\n GenerateBlocksParams,\n GetVariableMetadataParams,\n RequestOptions,\n} from \"../types/api\";\nimport {\n getBlockFromArray,\n getBlockObjectValues,\n getImageUrl,\n} from \"../utils/blocks\";\n\nexport const createCmsApi = (apiConfig: ApiConfig) => {\n return {\n async createNode(params: CreateNodeParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/nodes`,\n payload,\n options\n );\n },\n\n async updateNode(params: UpdateNodeParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/nodes/${params.id}`,\n payload,\n options\n );\n },\n\n async deleteNode(params: DeleteNodeParams, options?: RequestOptions) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.delete(\n `/v1/businesses/${targetBusinessId}/nodes/${params.id}`,\n options\n );\n },\n\n async getNode(params: GetNodeParams, options?: RequestOptions) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${targetBusinessId}:${apiConfig.locale}:${params.slug}`;\n } else if (params.key) {\n identifier = `${targetBusinessId}:${params.key}`;\n } else {\n throw new Error(\"GetNodeParams requires id, slug, or key\");\n }\n\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/nodes/${identifier}`,\n options\n );\n\n return {\n ...response,\n getBlock(key: string) {\n return getBlockFromArray(response, key, apiConfig.locale);\n },\n getBlockValues(key: string) {\n return getBlockObjectValues(response, key, apiConfig.locale);\n },\n getImage(key: string) {\n const block = getBlockFromArray(response, key, apiConfig.locale);\n return getImageUrl(block, true);\n },\n };\n },\n\n async getNodes(params: GetNodesParams, options?: RequestOptions) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/nodes`,\n {\n ...options,\n params: queryParams,\n }\n );\n },\n\n async getNodeChildren(params: GetNodeChildrenParams, options?: RequestOptions) {\n const { id, businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/nodes/${id}/children`,\n {\n ...options,\n params: queryParams,\n }\n );\n },\n\n async generateBlocks(params: GenerateBlocksParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/nodes/blocks/generate`,\n params,\n options\n );\n },\n\n async getVariableMetadata(params: GetVariableMetadataParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/nodes/types/${params.nodeType}/variables`,\n options\n );\n },\n\n /**\n * Send a node to all subscribers (schedule or immediate)\n * @param params.entryId - The node ID to send\n * @param params.subject - Email subject for this send\n * @param params.scheduledAt - Optional unix timestamp to schedule the send\n */\n async sendNode(params: { entryId: string; subject: string; scheduledAt?: number }, options?: RequestOptions) {\n const { entryId, ...body } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/nodes/${entryId}/send`,\n body,\n options\n );\n },\n\n /**\n * Cancel a scheduled send\n */\n async cancelSend(params: { nodeId: string; sendId: string }, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/nodes/${params.nodeId}/send/${params.sendId}/cancel`,\n {},\n options\n );\n },\n\n /**\n * Get subscribers for a node\n */\n async getSubscribers(params: { nodeId: string }, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/nodes/${params.nodeId}/subscribers`,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateProductParams,\n UpdateProductParams,\n DeleteProductParams,\n GetProductParams,\n GetProductsParams,\n GetQuoteParams,\n OrderCheckoutParams,\n CreateOrderParams,\n UpdateOrderParams,\n GetOrderParams,\n GetOrdersParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createEshopApi = (apiConfig: ApiConfig) => {\n return {\n // ===== PRODUCTS =====\n\n async createProduct(params: CreateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/products`,\n params,\n options,\n );\n },\n\n async updateProduct(params: UpdateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteProduct(params: DeleteProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n options,\n );\n },\n\n async getProduct(params: GetProductParams, options?: RequestOptions) {\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${apiConfig.businessId}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProductParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/products/${identifier}`,\n options,\n );\n },\n\n async getProducts(params: GetProductsParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${encodeURIComponent(apiConfig.businessId)}/products`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== ORDERS =====\n\n async createOrder(params: CreateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n params,\n options,\n );\n },\n\n async updateOrder(params: UpdateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n params,\n options,\n );\n },\n\n async getOrder(params: GetOrderParams, options?: RequestOptions) {\n // Orders use UUID only - no SEO slug support\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n options,\n );\n },\n\n async getOrders(params: GetOrdersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== PAYMENTS =====\n\n async getQuote(params: GetQuoteParams, options?: RequestOptions) {\n const payload = {\n market: apiConfig.market,\n items: params.items,\n blocks: params.blocks || [],\n paymentMethodId: params.paymentMethodId,\n shippingMethodId: params.shippingMethodId,\n promoCode: params.promoCode,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders/quote`,\n payload,\n options,\n );\n },\n\n async checkout(params: OrderCheckoutParams, options?: RequestOptions) {\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n items: params.items,\n blocks: params.blocks || [],\n paymentMethodId: params.paymentMethodId,\n shippingMethodId: params.shippingMethodId,\n promoCodeId: params.promoCodeId,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders/checkout`,\n payload,\n options,\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateReservationParams,\n UpdateReservationParams,\n ReservationCheckoutParams,\n GetReservationParams,\n SearchReservationsParams,\n CreateServiceParams,\n UpdateServiceParams,\n DeleteServiceParams,\n GetServiceParams,\n GetServicesParams,\n BulkScheduleParams,\n CreateProviderParams,\n UpdateProviderParams,\n DeleteProviderParams,\n GetProviderParams,\n GetProvidersParams,\n GetBusinessServiceWorkingTimeParams,\n GetReservationQuoteParams,\n RequestOptions,\n Slot,\n} from \"../types/api\";\n\nexport const createReservationApi = (apiConfig: ApiConfig) => {\n // Cart state for multiple slots\n let cart: Slot[] = [];\n\n return {\n // ===== CART =====\n\n addToCart(slot: Slot) {\n cart.push(slot);\n },\n\n removeFromCart(slotId: string) {\n cart = cart.filter((s) => s.id !== slotId);\n },\n\n getCart(): Slot[] {\n return [...cart];\n },\n\n clearCart() {\n cart = [];\n },\n\n // ===== RESERVATIONS =====\n\n async createReservation(\n params: CreateReservationParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...rest } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const payload = {\n market: apiConfig.market,\n ...rest,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/reservations`,\n payload,\n options,\n );\n },\n\n async updateReservation(\n params: UpdateReservationParams,\n options?: RequestOptions,\n ) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/reservations/${id}`,\n payload,\n options,\n );\n },\n\n async checkout(\n params?: Partial<ReservationCheckoutParams>,\n options?: RequestOptions,\n ) {\n const { businessId, ...rest } = params || {};\n const targetBusinessId = businessId || apiConfig.businessId;\n // Use cart if no items provided\n const items = rest?.items || cart.map((s) => ({\n serviceId: s.serviceId,\n providerId: s.providerId,\n from: s.from,\n to: s.to,\n }));\n\n const payload = {\n market: apiConfig.market,\n ...rest,\n items,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/reservations/checkout`,\n payload,\n options,\n );\n },\n\n async getReservation(\n params: GetReservationParams,\n options?: RequestOptions,\n ) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/reservations/${params.id}`,\n options,\n );\n },\n\n async searchReservations(\n params: SearchReservationsParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/reservations`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n // ===== QUOTES =====\n\n async getQuote(\n params: GetReservationQuoteParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...rest } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const payload = {\n market: apiConfig.market,\n ...rest,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/reservations/quote`,\n payload,\n options,\n );\n },\n\n // ===== SERVICES =====\n\n async createService(params: CreateServiceParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/services`,\n payload,\n options,\n );\n },\n\n async updateService(params: UpdateServiceParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/services/${params.id}`,\n payload,\n options,\n );\n },\n\n async deleteService(params: DeleteServiceParams, options?: RequestOptions) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.delete(\n `/v1/businesses/${targetBusinessId}/services/${params.id}`,\n options,\n );\n },\n\n async bulkSchedule(params: BulkScheduleParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/services/bulk-schedule`,\n params,\n options,\n );\n },\n\n async getService(params: GetServiceParams, options?: RequestOptions) {\n const businessId = params.businessId || apiConfig.businessId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${businessId}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetServiceParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${businessId}/services/${identifier}`,\n options,\n );\n },\n\n async getServices(params: GetServicesParams, options?: RequestOptions) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/services`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n // ===== PROVIDERS =====\n\n async createProvider(\n params: CreateProviderParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/providers`,\n payload,\n options,\n );\n },\n\n async updateProvider(\n params: UpdateProviderParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/providers/${params.id}`,\n payload,\n options,\n );\n },\n\n async deleteProvider(\n params: DeleteProviderParams,\n options?: RequestOptions,\n ) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.delete(\n `/v1/businesses/${targetBusinessId}/providers/${params.id}`,\n options,\n );\n },\n\n async getProvider(params: GetProviderParams, options?: RequestOptions) {\n const businessId = params.businessId || apiConfig.businessId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${businessId}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProviderParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${businessId}/providers/${identifier}`,\n options,\n );\n },\n\n async getProviders(params: GetProvidersParams, options?: RequestOptions) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n async getProviderWorkingTime(\n params: GetBusinessServiceWorkingTimeParams,\n options?: RequestOptions,\n ) {\n const { providerId, ...queryParams } = params;\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers/${providerId}/working-time`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface ScanDataParams {\n key: string;\n limit?: number;\n}\n\nexport interface PutDataParams {\n key: string;\n value: any;\n oldKey?: string;\n}\n\nexport interface DeleteDataParams {\n key: string;\n}\n\nexport interface RunScriptParams {\n name: string;\n value?: string;\n username?: string;\n password?: string;\n}\n\nexport interface RunScriptResponse {\n success: boolean;\n message: string;\n}\n\nexport const createDatabaseApi = (apiConfig: ApiConfig) => {\n return {\n async scanData(\n params: ScanDataParams,\n options?: RequestOptions\n ): Promise<any[]> {\n const response = await apiConfig.httpClient.get(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n limit: params.limit || 200,\n },\n }\n );\n return response.value || [];\n },\n\n async putData(\n params: PutDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(\n `/v1/operations/data`,\n params,\n options\n );\n },\n\n async deleteData(\n params: DeleteDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.delete(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n },\n }\n );\n },\n\n async runScript(\n params: RunScriptParams,\n options?: RequestOptions\n ): Promise<RunScriptResponse> {\n return apiConfig.httpClient.post(`/v1/operations/scripts`, params, options);\n },\n };\n};\n","import type {\n CreateFeatureFlagParams,\n DeleteFeatureFlagParams,\n FeatureFlag,\n FlagResults,\n GetFeatureFlagParams,\n GetFeatureFlagResultsParams,\n GetFeatureFlagsParams,\n GetVariantParams,\n GetVariantResponse,\n RequestOptions,\n TrackEventParams,\n TrackEventResponse,\n UpdateFeatureFlagParams,\n} from \"../types/api\";\n\ninterface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nexport const createFeatureFlagsApi = (apiConfig: ApiConfig) => {\n return {\n /**\n * Create a new feature flag\n */\n async createFlag(\n params: CreateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n params,\n options\n );\n },\n\n /**\n * Get a feature flag by ID\n */\n async getFlag(\n params: GetFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * List all feature flags for the business\n */\n async getFlags(\n params?: GetFeatureFlagsParams,\n options?: RequestOptions<FeatureFlag[]>\n ): Promise<FeatureFlag[]> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n {\n ...options,\n params: params,\n }\n );\n },\n\n /**\n * Update a feature flag\n */\n async updateFlag(\n params: UpdateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n const { id, ...body } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${id}`,\n body,\n options\n );\n },\n\n /**\n * Delete a feature flag\n */\n async deleteFlag(\n params: DeleteFeatureFlagParams,\n options?: RequestOptions<{ deleted: boolean }>\n ): Promise<{ deleted: boolean }> {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * Get experiment results for a feature flag\n */\n async getResults(\n params: GetFeatureFlagResultsParams,\n options?: RequestOptions<FlagResults>\n ): Promise<FlagResults> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}/results`,\n options\n );\n },\n\n /**\n * Get the variant assignment for the current user\n * This is the main method for feature flag evaluation\n */\n async getVariant(\n params: GetVariantParams,\n options?: RequestOptions<GetVariantResponse>\n ): Promise<GetVariantResponse> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/key/${params.flagKey}/variant`,\n options\n );\n },\n\n /**\n * Track a conversion event for A/B testing\n */\n async trackEvent(\n params: TrackEventParams,\n options?: RequestOptions<TrackEventResponse>\n ): Promise<TrackEventResponse> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/track`,\n params,\n options\n );\n },\n\n // ===== CONVENIENCE METHODS =====\n\n /**\n * Check if a feature is enabled (returns true if variant is not 'control')\n * Convenience method for simple on/off flags\n */\n async isEnabled(flagKey: string): Promise<boolean> {\n try {\n const response = await this.getVariant({ flagKey });\n return response.variantKey !== \"control\";\n } catch {\n return false;\n }\n },\n\n /**\n * Get variant with payload, returning a default if flag not found\n * Useful for getting configuration values from variants\n */\n async getVariantWithDefault<T = any>(\n flagKey: string,\n defaultValue: T\n ): Promise<{ variantKey: string; payload: T }> {\n try {\n const response = await this.getVariant({ flagKey });\n return {\n variantKey: response.variantKey,\n payload: response.payload ?? defaultValue,\n };\n } catch {\n return {\n variantKey: \"control\",\n payload: defaultValue,\n };\n }\n },\n\n /**\n * Activate a draft flag\n */\n async activateFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ACTIVE\" });\n },\n\n /**\n * Archive an active flag\n */\n async archiveFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ARCHIVED\" });\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface LocationState {\n code: string;\n name: string;\n}\n\nexport interface LocationCountry {\n code: string;\n name: string;\n states: LocationState[];\n}\n\nexport interface GetCountriesResponse {\n items: LocationCountry[];\n cursor: string | null;\n}\n\nexport const createLocationApi = (apiConfig: ApiConfig) => {\n return {\n async getCountries(options?: RequestOptions): Promise<GetCountriesResponse> {\n return apiConfig.httpClient.get(`/v1/operations/location/countries`, options);\n },\n\n async getCountryStates(\n countryCode: string,\n options?: RequestOptions\n ): Promise<LocationCountry> {\n return apiConfig.httpClient.get(\n `/v1/operations/location/countries/${countryCode}/states`,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface NetworkSearchParams {\n query?: string;\n limit?: number;\n cursor?: string;\n nodeId?: string;\n nodeIds?: string[];\n statuses?: string[];\n blocks?: any[];\n sortField?: string;\n sortDirection?: \"asc\" | \"desc\";\n createdAtFrom?: number;\n createdAtTo?: number;\n priceFrom?: number;\n priceTo?: number;\n matchAll?: boolean;\n}\n\nexport const createNetworkApi = (apiConfig: ApiConfig) => {\n return {\n /**\n * Search services across all businesses that have opted into a network\n * @param networkKey - The network key (e.g., \"delfin\")\n * @param params - Search parameters\n */\n async searchServices(\n networkKey: string,\n params?: NetworkSearchParams,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {};\n\n if (params?.limit !== undefined) queryParams.limit = params.limit;\n if (params?.cursor) queryParams.cursor = params.cursor;\n if (params?.query) queryParams.query = params.query;\n if (params?.nodeId) queryParams.nodeId = params.nodeId;\n if (params?.nodeIds && params.nodeIds.length > 0)\n queryParams.nodeIds = params.nodeIds.join(\",\");\n if (params?.statuses && params.statuses.length > 0)\n queryParams.statuses = params.statuses.join(\",\");\n if (params?.sortField) queryParams.sortField = params.sortField;\n if (params?.sortDirection) queryParams.sortDirection = params.sortDirection;\n if (params?.createdAtFrom !== undefined)\n queryParams.createdAtFrom = params.createdAtFrom;\n if (params?.createdAtTo !== undefined)\n queryParams.createdAtTo = params.createdAtTo;\n if (params?.priceFrom !== undefined) queryParams.priceFrom = params.priceFrom;\n if (params?.priceTo !== undefined) queryParams.priceTo = params.priceTo;\n if (params?.matchAll !== undefined) queryParams.matchAll = params.matchAll;\n if (params?.blocks && params.blocks.length > 0)\n queryParams.blocks = JSON.stringify(params.blocks);\n\n return apiConfig.httpClient.get(`/v1/networks/${networkKey}/services`, {\n ...options,\n params: queryParams,\n });\n },\n\n /**\n * Search products across all businesses that have opted into a network\n * @param networkKey - The network key (e.g., \"delfin\")\n * @param params - Search parameters\n */\n async searchProducts(\n networkKey: string,\n params?: NetworkSearchParams,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {};\n\n if (params?.limit !== undefined) queryParams.limit = params.limit;\n if (params?.cursor) queryParams.cursor = params.cursor;\n if (params?.query) queryParams.query = params.query;\n if (params?.nodeId) queryParams.nodeId = params.nodeId;\n if (params?.nodeIds && params.nodeIds.length > 0)\n queryParams.nodeIds = params.nodeIds.join(\",\");\n if (params?.statuses && params.statuses.length > 0)\n queryParams.statuses = params.statuses.join(\",\");\n if (params?.sortField) queryParams.sortField = params.sortField;\n if (params?.sortDirection) queryParams.sortDirection = params.sortDirection;\n if (params?.createdAtFrom !== undefined)\n queryParams.createdAtFrom = params.createdAtFrom;\n if (params?.createdAtTo !== undefined)\n queryParams.createdAtTo = params.createdAtTo;\n if (params?.priceFrom !== undefined) queryParams.priceFrom = params.priceFrom;\n if (params?.priceTo !== undefined) queryParams.priceTo = params.priceTo;\n if (params?.matchAll !== undefined) queryParams.matchAll = params.matchAll;\n if (params?.blocks && params.blocks.length > 0)\n queryParams.blocks = JSON.stringify(params.blocks);\n\n return apiConfig.httpClient.get(`/v1/networks/${networkKey}/products`, {\n ...options,\n params: queryParams,\n });\n },\n\n /**\n * Search providers across all businesses that have opted into a network\n * @param networkKey - The network key (e.g., \"delfin\")\n * @param params - Search parameters\n */\n async searchProviders(\n networkKey: string,\n params?: NetworkSearchParams,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {};\n\n if (params?.limit !== undefined) queryParams.limit = params.limit;\n if (params?.cursor) queryParams.cursor = params.cursor;\n if (params?.query) queryParams.query = params.query;\n if (params?.nodeId) queryParams.nodeId = params.nodeId;\n if (params?.nodeIds && params.nodeIds.length > 0)\n queryParams.nodeIds = params.nodeIds.join(\",\");\n if (params?.statuses && params.statuses.length > 0)\n queryParams.statuses = params.statuses.join(\",\");\n if (params?.sortField) queryParams.sortField = params.sortField;\n if (params?.sortDirection) queryParams.sortDirection = params.sortDirection;\n if (params?.createdAtFrom !== undefined)\n queryParams.createdAtFrom = params.createdAtFrom;\n if (params?.createdAtTo !== undefined)\n queryParams.createdAtTo = params.createdAtTo;\n if (params?.matchAll !== undefined) queryParams.matchAll = params.matchAll;\n if (params?.blocks && params.blocks.length > 0)\n queryParams.blocks = JSON.stringify(params.blocks);\n\n return apiConfig.httpClient.get(`/v1/networks/${networkKey}/providers`, {\n ...options,\n params: queryParams,\n });\n },\n };\n};\n","/**\n * Maps currency codes to their display symbols\n */\nexport function getCurrencySymbol(currency: string): string {\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n CAD: 'C$',\n AUD: 'A$',\n JPY: '¥',\n CHF: 'CHF',\n SEK: 'kr',\n NOK: 'kr',\n DKK: 'kr',\n PLN: 'zł',\n CZK: 'Kč',\n HUF: 'Ft',\n RON: 'lei',\n BGN: 'лв',\n HRK: 'kn',\n RSD: 'дин',\n BAM: 'KM',\n MKD: 'ден',\n ALL: 'L',\n TRY: '₺',\n RUB: '₽',\n UAH: '₴',\n BYN: 'Br',\n CNY: '¥',\n INR: '₹',\n KRW: '₩',\n THB: '฿',\n VND: '₫',\n SGD: 'S$',\n MYR: 'RM',\n IDR: 'Rp',\n PHP: '₱',\n BRL: 'R$',\n ARS: '$',\n CLP: '$',\n COP: '$',\n PEN: 'S/',\n MXN: '$',\n ZAR: 'R',\n EGP: 'E£',\n NGN: '₦',\n KES: 'KSh',\n GHS: '₵',\n MAD: 'DH',\n TND: 'د.ت',\n DZD: 'د.ج',\n LYD: 'ل.د',\n AED: 'د.إ',\n SAR: 'ر.س',\n QAR: 'ر.ق',\n KWD: 'د.ك',\n BHD: 'ب.د',\n OMR: 'ر.ع',\n JOD: 'د.أ',\n LBP: 'ل.ل',\n SYP: 'ل.س',\n IQD: 'ع.د',\n IRR: '﷼',\n AFN: '؋',\n PKR: '₨',\n LKR: '₨',\n NPR: '₨',\n BDT: '৳',\n MMK: 'K',\n LAK: '₭',\n KHR: '៛',\n MNT: '₮',\n KZT: '₸',\n UZS: 'лв',\n KGS: 'лв',\n TJS: 'SM',\n TMT: 'T',\n AZN: '₼',\n GEL: '₾',\n AMD: '֏',\n BYR: 'p.',\n MDL: 'L'\n };\n\n return currencySymbols[currency.toUpperCase()] || currency;\n}\n\n/**\n * List of currencies where the symbol appears after the amount\n */\nexport const SYMBOL_AFTER_CURRENCIES = ['SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK'];\n\n/**\n * Check if currency symbol should be placed after the amount\n */\nexport function isSymbolAfterCurrency(currency: string): boolean {\n return SYMBOL_AFTER_CURRENCIES.includes(currency.toUpperCase());\n}","// Price formatting utilities - Centralized currency and price operations\nimport type { Payment, PaymentMethodType, Price } from '../types';\nimport { getCurrencySymbol, isSymbolAfterCurrency } from './currency';\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 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 (locale-aware positioning)\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 || getCurrencySymbol(currency);\n\n // Use locale-specific symbol positioning\n if (isSymbolAfterCurrency(currency)) {\n return `${roundedAmount} ${symbol}`;\n }\n\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 taxAmount = payment.tax?.amount ?? 0;\n const tax = taxAmount > 0 ? formatMinor(taxAmount, 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,\n } = options;\n\n // Find price for the specific market\n let price = prices.find(p => p.market === marketId);\n\n // Fallback to fallback market (if provided) or first available\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = 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 = getCurrencySymbol(currency);\n }\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getCurrencySymbol(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): number {\n if (!prices || prices.length === 0) return 0;\n\n let price = prices.find(p => p.market === marketId);\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = prices[0];\n }\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 taxAmount?: number;\n taxRateBps?: number;\n promoCode?: {\n id: string;\n code: string;\n type: string;\n value: number;\n };\n } = {}\n): Payment {\n const { discount = 0, taxAmount = 0, taxRateBps = 0, promoCode } = options;\n const total = subtotalMinor - discount + taxAmount;\n\n return {\n currency,\n market: marketId,\n subtotal: subtotalMinor,\n shipping: 0,\n discount,\n total,\n paid: 0,\n refunds: [],\n type: paymentMethod,\n ...(taxAmount > 0 && {\n tax: {\n amount: taxAmount,\n rateBps: taxRateBps,\n lines: [],\n },\n }),\n ...(promoCode && { promoCode }),\n };\n}\n","// Validation utilities\n\nexport interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n// Phone number validation\nexport function validatePhoneNumber(phone: string): ValidationResult {\n if (!phone) {\n return { isValid: false, error: 'Phone number is required' };\n }\n \n const cleaned = phone.replace(/\\D/g, '');\n \n if (cleaned.length < 8) {\n return { isValid: false, error: 'Phone number is too short' };\n }\n \n if (cleaned.length > 15) {\n return { isValid: false, error: 'Phone number is too long' };\n }\n \n return { isValid: true };\n}\n\n// Email validation\nexport function validateEmail(email: string): ValidationResult {\n if (!email) {\n return { isValid: false, error: 'Email is required' };\n }\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n \n if (!emailRegex.test(email)) {\n return { isValid: false, error: 'Please enter a valid email address' };\n }\n \n return { isValid: true };\n}\n\n// Verification code validation (4-digit codes)\nexport function validateVerificationCode(code: string): ValidationResult {\n if (!code) {\n return { isValid: false, error: 'Verification code is required' };\n }\n \n const cleaned = code.replace(/\\D/g, '');\n \n if (cleaned.length !== 4) {\n return { isValid: false, error: 'Please enter a 4-digit verification code' };\n }\n \n return { isValid: true };\n}\n\n// Generic required field validation\nexport function validateRequired(value: any, fieldName: string = 'This field'): ValidationResult {\n if (value === null || value === undefined || value === '') {\n return { isValid: false, error: `${fieldName} is required` };\n }\n \n return { isValid: true };\n}","// Timezone utilities (moved from Reservation folder)\n\nexport const tzGroups = [\n {\n label: \"US\",\n zones: [\n { label: \"Eastern Time\", value: \"America/New_York\" },\n { label: \"Central Time\", value: \"America/Chicago\" },\n { label: \"Mountain Time\", value: \"America/Denver\" },\n { label: \"Pacific Time\", value: \"America/Los_Angeles\" },\n ],\n },\n {\n label: \"Europe\",\n zones: [\n { label: \"London\", value: \"Europe/London\" },\n { label: \"Paris\", value: \"Europe/Paris\" },\n { label: \"Berlin\", value: \"Europe/Berlin\" },\n { label: \"Rome\", value: \"Europe/Rome\" },\n ],\n },\n {\n label: \"Asia\",\n zones: [\n { label: \"Tokyo\", value: \"Asia/Tokyo\" },\n { label: \"Shanghai\", value: \"Asia/Shanghai\" },\n { label: \"Mumbai\", value: \"Asia/Kolkata\" },\n { label: \"Dubai\", value: \"Asia/Dubai\" },\n ],\n },\n];\n\nexport function findTimeZone(groups: typeof tzGroups): string {\n try {\n const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n \n // Check if detected timezone is in our list\n for (const group of groups) {\n for (const zone of group.zones) {\n if (zone.value === detected) {\n return detected;\n }\n }\n }\n \n // Fallback to UTC if not found\n return \"UTC\";\n } catch (e) {\n // Fallback to UTC if detection fails\n return \"UTC\";\n }\n}","// 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}","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}","/**\n * Key Validation Utilities\n *\n * Keys must contain only:\n * - Letters (a-z, A-Z)\n * - Numbers (0-9)\n * - Underscore (_)\n * - Hyphen (-)\n */\n\nconst KEY_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\n/**\n * Validates if a key is valid\n * @param key - The key to validate\n * @returns true if key is valid, false otherwise\n */\nexport function isValidKey(key: string): boolean {\n if (!key || key.length === 0) return false;\n return KEY_PATTERN.test(key);\n}\n\n/**\n * Validates a key and returns validation result with error message\n * @param key - The key to validate\n * @returns Validation result object\n */\nexport function validateKey(key: string): { valid: boolean; error?: string } {\n if (!key || key.length === 0) {\n return { valid: false, error: \"Key is required\" };\n }\n\n if (key.length > 255) {\n return { valid: false, error: \"Key must be 255 characters or less\" };\n }\n\n if (!KEY_PATTERN.test(key)) {\n return {\n valid: false,\n error:\n \"Key can only contain letters, numbers, underscores (_) and hyphens (-)\",\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Converts a string to a valid key format\n * - Converts to lowercase\n * - Replaces spaces with underscores\n * - Removes invalid characters\n * - Trims leading/trailing underscores/hyphens\n *\n * @param input - The string to convert\n * @returns A valid key string\n */\nexport function toKey(input: string): string {\n if (!input) return \"\";\n\n return input\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"_\") // Replace spaces with underscores\n .replace(/[^a-z0-9_-]/g, \"\") // Remove invalid characters\n .replace(/^[-_]+|[-_]+$/g, \"\") // Trim leading/trailing underscores/hyphens\n .replace(/[-_]{2,}/g, \"_\"); // Replace multiple consecutive special chars\n}\n\n/**\n * Generates a key from a name/title\n * @param name - The name to convert\n * @returns A valid key\n */\nexport function nameToKey(name: string): string {\n return toKey(name);\n}\n","// Export types\nexport type {\n ApiResponse,\n EshopCartItem,\n EshopStoreState,\n ReservationStoreState,\n ReservationCartItem,\n Business,\n BusinessConfig,\n Block,\n Price,\n Payment,\n PaymentRefund,\n PaymentMethod,\n PaymentProviderConfig,\n ShippingMethod,\n ShippingWeightTier,\n Zone,\n Market,\n Location,\n Quote,\n PromoCodeValidation,\n PaginatedResponse,\n Language,\n Seo,\n Media,\n MediaResolution,\n ProviderWithTimeline,\n Node,\n} from \"./types\";\n\n// Export enums (must be exported as values, not types)\nexport { PaymentMethodType } from \"./types\";\n\n// Export reservation types\nexport type {\n GetSlotsForDateParams,\n GetAvailabilityParams,\n DayAvailability,\n Slot,\n SystemTemplateKey,\n} from \"./types/api\";\n\n// Export location types\nexport type {\n LocationState,\n LocationCountry,\n GetCountriesResponse,\n} from \"./api/location\";\n\n\nexport const SDK_VERSION = \"0.3.136\";\nexport const SUPPORTED_FRAMEWORKS = [\n \"astro\",\n \"react\",\n \"vue\",\n \"svelte\",\n \"vanilla\",\n] as const;\n\nexport interface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nimport {\n createHttpClient,\n type HttpClientConfig,\n} from \"./services/createHttpClient\";\nimport { createUserApi } from \"./api/user\";\nimport { createBusinessApi } from \"./api/business\";\nimport { createMediaApi } from \"./api/media\";\nimport { createRoleApi } from \"./api/role\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createReservationApi } from \"./api/reservation\";\nimport { createDatabaseApi } from \"./api/database\";\nimport { createFeatureFlagsApi } from \"./api/featureFlags\";\nimport { createLocationApi } from \"./api/location\";\nimport { createNetworkApi } from \"./api/network\";\nimport {\n getImageUrl,\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n} from \"./utils/price\";\nimport { getCurrencySymbol } from \"./utils/currency\";\nimport { validatePhoneNumber } from \"./utils/validation\";\nimport { tzGroups, findTimeZone } from \"./utils/timezone\";\nimport { slugify, humanize, categorify, formatDate } from \"./utils/text\";\nimport {\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n} from \"./utils/svg\";\nimport {\n isValidKey,\n validateKey,\n toKey,\n nameToKey,\n} from \"./utils/keyValidation\";\n\nexport async function createArkySDK(\n config: HttpClientConfig & { market: string; locale?: string }\n) {\n const locale = config.locale || \"en\";\n\n const httpClient = createHttpClient(config);\n\n const apiConfig: ApiConfig = {\n httpClient,\n businessId: config.businessId,\n baseUrl: config.baseUrl,\n market: config.market,\n locale,\n setToken: config.setToken,\n getToken: config.getToken,\n };\n\n const userApi = createUserApi(apiConfig);\n\n const autoGuest = config.autoGuest !== undefined ? config.autoGuest : true;\n\n // If autoGuest, login before returning SDK\n if (autoGuest) {\n try {\n const tokens = await config.getToken();\n if (!tokens.accessToken && !tokens.refreshToken) {\n const result: any = await httpClient.post(\"/v1/users/login\", {\n provider: \"GUEST\",\n });\n const token = result.accessToken || result.token || \"\";\n if (token) {\n config.setToken(result);\n }\n }\n } catch (error) {\n // Silent fail - guest auth is optional\n }\n }\n\n const sdk = {\n user: userApi,\n business: createBusinessApi(apiConfig),\n media: createMediaApi(apiConfig),\n role: createRoleApi(apiConfig),\n notification: createNotificationApi(apiConfig),\n promoCode: createPromoCodeApi(apiConfig),\n analytics: createAnalyticsApi(apiConfig),\n cms: createCmsApi(apiConfig),\n eshop: createEshopApi(apiConfig),\n reservation: createReservationApi(apiConfig),\n database: createDatabaseApi(apiConfig),\n featureFlags: createFeatureFlagsApi(apiConfig),\n location: createLocationApi(apiConfig),\n network: createNetworkApi(apiConfig),\n\n setBusinessId: (businessId: string) => {\n apiConfig.businessId = businessId;\n },\n\n getBusinessId: () => apiConfig.businessId,\n\n setMarket: (market: string) => {\n apiConfig.market = market;\n },\n\n getMarket: () => apiConfig.market,\n\n setLocale: (locale: string) => {\n apiConfig.locale = locale;\n },\n\n getLocale: () => apiConfig.locale,\n\n isAuthenticated: config.isAuthenticated || (() => false),\n logout: config.logout,\n setToken: config.setToken,\n\n // Top-level block utilities for convenience\n extractBlockValues,\n\n utils: {\n // Block utilities\n getImageUrl: (imageBlock: any, isBlock = true) =>\n getImageUrl(imageBlock, isBlock),\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n\n // Price utilities\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n\n // Currency utilities\n getCurrencySymbol,\n\n // Validation utilities\n validatePhoneNumber,\n\n // Timezone utilities\n tzGroups,\n findTimeZone,\n\n // Text utilities\n slugify,\n humanize,\n categorify,\n formatDate,\n\n // SVG utilities\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n\n // Key validation utilities\n isValidKey,\n validateKey,\n toKey,\n nameToKey,\n },\n };\n\n return sdk;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/index.ts","../src/utils/errors.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/user.ts","../src/api/business.ts","../src/api/media.ts","../src/api/role.ts","../src/api/notification.ts","../src/api/promoCode.ts","../src/api/analytics.ts","../src/utils/blocks.ts","../src/api/cms.ts","../src/api/eshop.ts","../src/api/reservation.ts","../src/api/database.ts","../src/api/featureFlags.ts","../src/api/location.ts","../src/api/network.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/validation.ts","../src/utils/timezone.ts","../src/utils/text.ts","../src/utils/svg.ts","../src/utils/keyValidation.ts","../src/index.ts"],"names":["PaymentMethodType","url","locale"],"mappings":"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","file":"index.cjs","sourcesContent":["export * from './api';\n\nexport interface PaymentRefund {\n\tid: string;\n\tentity: string;\n\ttotal: number;\n\tproviderRefundId?: string;\n\tstatus: string;\n\tcreatedAt: number;\n}\n\nexport interface Payment {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttotal: number;\n\tpaid: number;\n\ttax?: {\n\t\tamount: number;\n\t\tmodeSnapshot?: string;\n\t\trateBps: number;\n\t\tlines: Array<{ rateBps: number; amount: number; label?: string; scope?: string }>;\n\t};\n\tpromoCode?: {\n\t\tid: string;\n\t\tcode: string;\n\t\ttype: string;\n\t\tvalue: number;\n\t};\n\ttype: PaymentMethodType;\n\tprovider?: {\n\t\tcustomerId: string;\n\t\tpaymentIntentId?: string;\n\t\tsubscriptionId?: string;\n\t\tpriceId?: string;\n\t};\n\trefunds: PaymentRefund[];\n\tzoneId?: string;\n\tpaymentMethodId?: string;\n\tshippingMethodId?: string;\n}\n\nexport enum PaymentMethodType {\n\tCash = \"CASH\",\n\tCreditCard = \"CREDIT_CARD\",\n\tFree = \"FREE\",\n}\n\nexport interface PromoCodeValidation {\n\tpromoCodeId: string;\n\tcode: string;\n\tdiscounts: any[];\n\tconditions: any[];\n}\n\nexport interface Quote {\n\tmarket: string;\n\tzone: Zone;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttax: number;\n\ttotal: number;\n\tshippingMethod: ShippingMethod | null;\n\tpaymentMethod: PaymentMethod | null;\n\tpromoCode: PromoCodeValidation | null;\n\tpayment: Payment;\n\tchargeAmount: number;\n\tid?: string;\n\texpiresAt?: number;\n}\n\nexport interface Price {\n\tmarket: string;\n\tamount: number;\n\tcompareAt?: number;\n}\n\nexport interface Location {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tstate?: string | null;\n\tpostalCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\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;\n\tquantity: number;\n\taddedAt: number;\n}\n\nexport interface ReservationCartItem {\n\tid: string;\n\tserviceId: string;\n\tserviceName: string;\n\tdate: string;\n\tfrom: number;\n\tto: number;\n\ttimeText: string;\n\tproviderId?: string;\n\tblocks: any[];\n}\n\nexport interface PaymentProviderConfig {\n\ttype: \"STRIPE\";\n\tpublicKey: string;\n\tsecretKey: string;\n\twebhookSecret: string;\n}\n\nexport interface ShippingWeightTier {\n\tupToGrams: number;\n\tamount: number;\n}\n\nexport interface PaymentMethod {\n\tid: string;\n\ttype: PaymentMethodType;\n}\n\nexport interface ShippingMethod {\n\tid: string;\n\ttaxable: boolean;\n\tetaText: string;\n\tpickupLocation?: Location;\n\tamount: number;\n\tfreeAbove?: number;\n\tweightTiers?: ShippingWeightTier[];\n}\n\nexport type ZoneScope = \"ORDER\" | \"RESERVATION\";\n\nexport interface Zone {\n\tid: string;\n\tmarketId: string;\n\tscope: ZoneScope;\n\tcountries: string[];\n\tstates: string[];\n\tpostalCodes: string[];\n\ttaxBps: number;\n\tpaymentMethods: PaymentMethod[];\n\tshippingMethods: ShippingMethod[];\n}\n\nexport interface Market {\n\tid: string;\n\tcurrency: string;\n\ttaxMode: \"EXCLUSIVE\" | \"INCLUSIVE\";\n}\n\nexport interface Language {\n\tid: string;\n}\n\nexport interface BusinessEmails {\n\tbilling: string;\n\tsupport: string;\n}\n\nexport interface BusinessConfig {\n\tlanguages: Language[];\n\tmarkets: Market[];\n\tzones: Zone[];\n\tbuildHooks: string[];\n\twebhooks: any[];\n\tpaymentProvider?: PaymentProviderConfig;\n\taiProvider?: any;\n\temails: BusinessEmails;\n}\n\nexport interface Subscription {\n\tid: string;\n\ttarget: string;\n\tplanId: string;\n\tpendingPlanId: string | null;\n\tpayment: any;\n\tstatuses: StatusEvent[];\n\tendDate: number;\n\tusage: Record<string, any>;\n\ttoken: string;\n}\n\nexport interface Business {\n\tid: string;\n\tkey: string;\n\tnetworkKey: string | null;\n\ttimezone: string;\n\tconfigs?: BusinessConfig;\n\tsubscriptions?: Subscription[];\n\tstatuses?: StatusEvent[];\n}\n\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}\n\nexport interface Block {\n\tid: string;\n\tkey: string;\n\ttype: string;\n\tproperties?: any;\n\tvalue?: any;\n}\n\nexport type BlockType =\n\t| \"TEXT\"\n\t| \"LOCALIZED_TEXT\"\n\t| \"NUMBER\"\n\t| \"BOOLEAN\"\n\t| \"BLOCK\"\n\t| \"RELATIONSHIP_ENTRY\"\n\t| \"RELATIONSHIP_MEDIA\"\n\t| \"MARKDOWN\"\n\t| \"EMAIL\"\n\t| \"PHONE\"\n\t| \"ADDRESS\";\n\nexport type AddressType = \"SHIPPING\" | \"BILLING\";\n\nexport interface EmailBlockProperties {\n\tminValues?: number;\n\tmaxValues?: number;\n\tisNotificationTarget?: boolean;\n}\n\nexport interface PhoneBlockProperties {\n\tminValues?: number;\n\tmaxValues?: number;\n\tisNotificationTarget?: boolean;\n}\n\nexport interface AddressBlockProperties {\n\tminValues?: number;\n\tmaxValues?: number;\n\taddressType: AddressType;\n}\n\nexport interface GeoLocationValue {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tstate?: string | null;\n\tpostalCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\nexport interface EmailBlock extends Block {\n\ttype: \"EMAIL\";\n\tproperties: EmailBlockProperties;\n\tvalue: string[];\n}\n\nexport interface PhoneBlock extends Block {\n\ttype: \"PHONE\";\n\tproperties: PhoneBlockProperties;\n\tvalue: string[];\n}\n\nexport interface AddressBlock extends Block {\n\ttype: \"ADDRESS\";\n\tproperties: AddressBlockProperties;\n\tvalue: GeoLocationValue[];\n}\n\nexport interface Seo {\n\tslug: Record<string, string>;\n\tmetaTitle: Record<string, string>;\n\tmetaDescription: Record<string, string>;\n\tcanonicalUrl: Record<string, string>;\n\togImage: string;\n}\n\nexport interface MediaResolution {\n\tid: string;\n\tsize: string;\n\turl: string;\n}\n\nexport interface Media {\n\tid: string;\n\tresolutions: { [key: string]: MediaResolution };\n\tmimeType: string;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\talt?: string | null;\n\tentity: string;\n\tmetadata?: string | null;\n\tuploadedAt: string;\n\tseo: Seo;\n}\n\nexport interface ApiResponse<T> {\n\tsuccess: boolean;\n\tdata?: T;\n\terror?: string;\n\tcursor?: string;\n\ttotal?: 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\nexport interface ReservationStoreState {\n\tcurrentStep: number;\n\ttotalSteps: number;\n\tsteps: Record<number, { name: string; labelKey: string }>;\n\tweekdays: string[];\n\tmonthYear: string;\n\tdays: any[];\n\tcurrent: Date;\n\tselectedDate: string | null;\n\tslots: any[];\n\tselectedSlot: any | null;\n\tselectedProvider: any | null;\n\tproviders: any[];\n\tloading: boolean;\n\tstartDate: string | null;\n\tendDate: string | null;\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\ttimezone: string;\n\ttzGroups: any;\n\titems: ReservationCartItem[];\n\tallowedPaymentMethods: string[];\n\tpaymentConfig: {\n\t\tprovider: PaymentProviderConfig | null;\n\t\tenabled: boolean;\n\t};\n}\n\nexport interface StatusEvent {\n\tid: string;\n\tchangedBy: 'BUSINESS' | 'USER' | 'SYSTEM';\n\tuserId?: string;\n\tstatus: string;\n\tnote?: string;\n\ttimestamp: number;\n}\n\nexport interface ReservationItem {\n\tid: string;\n\tserviceId: string;\n\tproviderId: string;\n\tbusinessId: string;\n\treservationId: string;\n\tuserId: string;\n\tfrom: number;\n\tto: number;\n\tblocks: Block[];\n\tprice: Price;\n}\n\nexport interface Reservation {\n\tid: string;\n\tnumber: string;\n\tuserId: string;\n\tblocks: Block[];\n\tbusinessId: string;\n\tstatuses: StatusEvent[];\n\tserviceIds: string[];\n\tproviderIds: string[];\n\tpayment: Payment;\n\tbusiness?: Business;\n\tuser?: any;\n\titems: ReservationItem[];\n\temail?: string;\n\tphone?: string;\n\tcreatedAt: number;\n\tlastModified: number;\n}\n\n// ===== CMS Types =====\n\nexport interface NodeNotifications {\n\temails: string[];\n}\n\nexport interface NodeConfig {\n\tparentId?: string | null;\n\tisPubliclyReadable: boolean;\n\tisPubliclyWritable: boolean;\n}\n\nexport interface SubscriptionPlan {\n\tid: string;\n\tproviderPriceId?: string;\n\tproviderProductId?: string;\n\tname: string;\n\ttier: number;\n\tamount: number;\n\tcurrency: string;\n\tinterval: string;\n\tintervalCount: number;\n\ttrialPeriodDays: number;\n\tfeatures: Record<string, any>;\n}\n\nexport type SendStatus = 'SCHEDULED' | 'SENDING' | 'SENT' | 'CANCELLED' | 'FAILED';\n\nexport interface NodeSend {\n\tid: string;\n\tscheduledAt: number;\n\tstatus: SendStatus;\n\tsentCount: number;\n\tfailedCount: number;\n\tcreatedAt: number;\n}\n\nexport interface Node {\n\tid: string;\n\tkey: string;\n\tbusinessId: string;\n\tblocks: Block[];\n\tstatuses: StatusEvent[];\n\tseo: Seo;\n\tnotifications: NodeNotifications;\n\tconfig: NodeConfig;\n\temailSubject?: Record<string, string>;\n\tplans: SubscriptionPlan[];\n\tsends: NodeSend[];\n\tchildren: Node[];\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\n// ===== Reservation Domain Types =====\n\nexport interface ServiceDuration {\n\tduration: number;\n\tisPause?: boolean;\n}\n\nexport interface ServiceProvider {\n\tid: string;\n\tproviderId: string;\n\tworkingTime: {\n\t\tworkingDays: Array<{ day: string; workingHours: Array<{ from: number; to: number }> }>;\n\t\toutcastDates: Array<{ month: number; day: number; workingHours: Array<{ from: number; to: number }> }>;\n\t\tspecificDates: Array<{ date: number; workingHours: Array<{ from: number; to: number }> }>;\n\t};\n\tprovider?: Provider;\n}\n\nexport interface Service {\n\tid: string;\n\tkey: string;\n\tseo: Seo;\n\tbusinessId: string;\n\tprices: Price[];\n\tdurations: ServiceDuration[];\n\tblocks: Block[];\n\tnodeIds: string[];\n\tisApprovalRequired: boolean;\n\tproviders: ServiceProvider[];\n\tcreatedAt: number;\n\tupdatedAt: number;\n\tstatuses: StatusEvent[];\n}\n\nexport interface ProviderTimelinePoint {\n\ttimestamp: number;\n\tconcurrent: number;\n}\n\nexport interface Provider {\n\tid: string;\n\tkey: string;\n\tseo: Seo;\n\tbusinessId: string;\n\tstatuses: StatusEvent[];\n\tconcurrentLimit: number;\n\tnodeIds: string[];\n\tblocks: Block[];\n\ttimeline: ProviderTimelinePoint[];\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\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 message: string;\n error: string;\n statusCode: number;\n validationErrors: {\n field: string;\n error: string;\n }[];\n};\n\nexport type ValidationError = {\n field: string;\n error: 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\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 error = issue.message;\n\n if (\n !customErrors.some(\n (customError) =>\n customError.field === field && customError.error === error\n )\n ) {\n customErrors.push({ field, error });\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 error: validationError.error || \"GENERAL.VALIDATION_ERROR\",\n };\n }),\n };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;\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}","import {\n\tconvertServerErrorToRequestError,\n\ttype ServerError\n} from '../utils/errors';\nimport { buildQueryString, type QueryParams } from '../utils/queryParams';\n\nexport interface AuthTokens {\n\taccessToken: string;\n\trefreshToken?: string;\n\tprovider?: string;\n\texpiresAt?: number;\n\tuserId?: string;\n\tisGuest?: boolean;\n}\n\nexport interface HttpClientConfig {\n\tbaseUrl: string;\n\n\tbusinessId: string;\n\n\tgetToken: () => Promise<AuthTokens> | AuthTokens;\n\n\tsetToken: (tokens: AuthTokens) => void;\n\n\tautoGuest?: boolean;\n\n\tlogout: () => void;\n\n\tnavigate?: (path: string) => void;\n\n\tloginFallbackPath?: string;\n\n\tisAuthenticated?: () => boolean;\n}\n\ntype SuccessCallback<T = any> = (ctx: {\n\tdata: T;\n\tmethod: string;\n\turl: string;\n\tstatus: number;\n\trequest?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n}) => void | Promise<void>;\n\ntype ErrorCallback = (ctx: {\n\terror: any;\n\tmethod: string;\n\turl: string;\n\tstatus?: number;\n\trequest?: any;\n\tresponse?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n\taborted?: boolean;\n}) => void | Promise<void>;\n\nexport function createHttpClient(cfg: HttpClientConfig) {\n\tconst refreshEndpoint = `${cfg.baseUrl}/v1/users/refresh-access-token`;\n\tlet refreshPromise: Promise<void> | null = null;\n\n\tasync function ensureFreshToken() {\n\t\tif (refreshPromise) {\n\t\t\treturn refreshPromise;\n\t\t}\n\n\t\trefreshPromise = (async () => {\n\t\t\tconst { refreshToken, provider } = await cfg.getToken();\n\t\t\tif (!refreshToken) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('No refresh token available');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst refRes = await fetch(refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { Accept: 'application/json', 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ provider, refreshToken })\n\t\t\t});\n\n\t\t\tif (!refRes.ok) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('Token refresh failed');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst data = await refRes.json();\n\t\t\tcfg.setToken(data);\n\t\t})().finally(() => {\n\t\t\trefreshPromise = null;\n\t\t});\n\n\t\treturn refreshPromise;\n\t}\n\n\tasync function request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: any,\n\t\toptions?: {\n\t\t\tonSuccess?: SuccessCallback<T>;\n\t\t\tonError?: ErrorCallback;\n\t\t\theaders?: Record<string, string>;\n\t\t\ttransformRequest?: (data: any) => any;\n\t\t\tparams?: QueryParams;\n\t\t\t_retried?: boolean;\n\t\t}\n\t): Promise<T> {\n\t\tif (options?.transformRequest) {\n\t\t\tbody = options.transformRequest(body);\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(options?.headers || {})\n\t\t};\n\n\tlet { accessToken, expiresAt, provider } = await cfg.getToken();\n\n\tconst nowSec = Date.now() / 1000;\n\tif (expiresAt && nowSec > expiresAt) {\n\t\tawait ensureFreshToken();\n\t\tconst tokens = await cfg.getToken();\n\t\taccessToken = tokens.accessToken;\n\t\tprovider = tokens.provider;\n\t}\n\n\tif (accessToken) {\n\t\t// Use X-API-Key header for API tokens, Authorization for JWT/OAuth\n\t\tif (provider === 'API') {\n\t\t\theaders['X-API-Key'] = accessToken;\n\t\t} else {\n\t\t\theaders['Authorization'] = `Bearer ${accessToken}`;\n\t\t}\n\t}\n\n\t\tconst finalPath = options?.params ? path + buildQueryString(options.params) : path;\n\n\t\tconst fetchOpts: any = { method, headers };\n\t\tif (!['GET', 'DELETE'].includes(method) && body !== undefined) {\n\t\t\tfetchOpts.body = JSON.stringify(body);\n\t\t}\n\n\t\tconst fullUrl = `${cfg.baseUrl}${finalPath}`;\n\t\tlet res: Response;\n\t\tlet data: any;\n\t\tconst startedAt = Date.now();\n\n\t\ttry {\n\t\t\tres = await fetch(fullUrl, fetchOpts);\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error(error instanceof Error ? error.message : 'Network request failed');\n\t\t\terr.name = 'NetworkError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, aborted: false })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\t// Handle 401: refresh and retry once\n\t\tif (res.status === 401 && !options?.['_retried']) {\n\t\t\ttry {\n\t\t\t\tawait ensureFreshToken();\n\t\t\t\tconst tokens = await cfg.getToken();\n\t\t\t\theaders['Authorization'] = `Bearer ${tokens.accessToken}`;\n\t\t\t\tfetchOpts.headers = headers;\n\t\t\t\treturn request<T>(method, path, body, { ...options, _retried: true });\n\t\t\t} catch (refreshError) {\n\t\t\t\t// Fall through to normal error handling\n\t\t\t}\n\t\t}\n\n\t\t// Safe JSON parsing: handle 204, empty body, non-JSON\n\t\ttry {\n\t\t\tconst contentLength = res.headers.get('content-length');\n\t\t\tconst contentType = res.headers.get('content-type');\n\t\t\tif (res.status === 204 || contentLength === '0' || !contentType?.includes('application/json')) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\tdata = await res.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error('Failed to parse response');\n\t\t\terr.name = 'ParseError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\terr.status = res.status;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, status: res.status })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (!res.ok) {\n\t\t\tconst serverErr: ServerError = data;\n\t\t\tconst reqErr = convertServerErrorToRequestError(serverErr);\n\t\t\tconst err: any = new Error(serverErr.message || 'Request failed');\n\t\t\terr.name = 'ApiError';\n\t\t\terr.statusCode = serverErr.statusCode || res.status;\n\t\t\terr.validationErrors = reqErr.validationErrors;\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tif (requestId) err.requestId = requestId;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\turl: fullUrl,\n\t\t\t\t\t\tstatus: res.status,\n\t\t\t\t\t\tresponse: serverErr,\n\t\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t\t})\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\nif (options?.onSuccess && method !== 'GET') {\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tPromise.resolve(\n\t\t\t\toptions.onSuccess({\n\t\t\t\t\tdata: data as T,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl: fullUrl,\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t})\n\t\t\t).catch(() => {});\n\t\t}\n\t\treturn data as T;\n\t}\n\n\treturn {\n\t\tget: <T>(path: string, opts?: any) => request<T>('GET', path, undefined, opts),\n\t\tpost: <T>(path: string, body: any, opts?: any) => request<T>('POST', path, body, opts),\n\t\tput: <T>(path: string, body: any, opts?: any) => request<T>('PUT', path, body, opts),\n\t\tpatch: <T>(path: string, body: any, opts?: any) => request<T>('PATCH', path, body, opts),\n\t\tdelete: <T>(path: string, opts?: any) => request<T>('DELETE', path, undefined, opts)\n\t};\n}\n","import type { ApiConfig } from '../index';\nimport type {\n UpdateUserProfileParams,\n LoginUserParams,\n RegisterUserParams,\n AddPhoneNumberParams,\n PhoneNumberConfirmParams,\n SearchUsersParams,\n SetRoleParams,\n ConfirmUserParams,\n GetLoginUrlParams,\n ForgotPasswordParams,\n ResetForgotPasswordParams,\n ResetPasswordParams,\n DeleteUserParams,\n GetMeParams,\n LogoutParams,\n UserSubscribeParams,\n RequestOptions\n} from '../types/api';\n\nexport const createUserApi = (apiConfig: ApiConfig) => {\n return {\n // ===== USER PROFILE =====\n\n async updateUser(params: UpdateUserProfileParams, options?: RequestOptions) {\n const payload: any = {};\n\n if (params.name !== undefined) payload.name = params.name;\n if (params.phoneNumbers !== undefined) payload.phoneNumbers = params.phoneNumbers;\n if (params.addresses !== undefined) payload.addresses = params.addresses;\n if (params.apiTokens !== undefined) payload.apiTokens = params.apiTokens;\n\n return apiConfig.httpClient.put('/v1/users', payload, options);\n },\n\n async deleteUser(params: DeleteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete('/v1/users', options);\n },\n\n async addPhoneNumber(params: AddPhoneNumberParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number', params, options);\n },\n\n async phoneNumberConfirm(params: PhoneNumberConfirmParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number/confirm', params, options);\n },\n\n async getMe(params: GetMeParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/me', options);\n },\n\n async searchUsers(params: SearchUsersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/search', {\n ...options,\n params: {\n ...params,\n businessId: apiConfig.businessId\n }\n });\n },\n\n async setRole(params: SetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/set-role', params, options);\n },\n\n // ===== AUTHENTICATION =====\n\n async loginUser(params: LoginUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/login', params, options);\n },\n\n async registerUser(params: RegisterUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/register', params, options);\n },\n\n async logout(params: LogoutParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/logout', {}, options);\n },\n\n async confirmUser(params: ConfirmUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/confirm', params, options);\n },\n\n async getLoginUrl(params: GetLoginUrlParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/login/url', {\n ...options,\n params\n });\n },\n\n // ===== PASSWORD MANAGEMENT =====\n\n async forgotPassword(params: ForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/forgot-password', params, options);\n },\n\n async resetForgotPassword(params: ResetForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-forgot-password', params, options);\n },\n\n async resetPassword(params: ResetPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-password', params, options);\n },\n\n async subscribe(params: UserSubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/subscribe', params, options);\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateBusinessParams,\n UpdateBusinessParams,\n DeleteBusinessParams,\n GetBusinessParams,\n GetBusinessesParams,\n GetBusinessParentsParams,\n TriggerBuildsParams,\n GetSubscriptionParams,\n GetSubscriptionPlansParams,\n SubscribeParams,\n CreatePortalSessionParams,\n InviteUserParams,\n HandleInvitationParams,\n TestWebhookParams,\n GetBusinessMediaParams2,\n ProcessRefundParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createBusinessApi = (apiConfig: ApiConfig) => {\n return {\n async createBusiness(\n params: CreateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(`/v1/businesses`, params, options);\n },\n\n async updateBusiness(\n params: UpdateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${params.id}`,\n params,\n options\n );\n },\n\n async deleteBusiness(\n params: DeleteBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${params.id}`,\n options\n );\n },\n\n async getBusiness(params: GetBusinessParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}`,\n options\n );\n },\n\n async getBusinesses(params?: GetBusinessesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/businesses`, {\n ...options,\n params,\n });\n },\n\n async getBusinessParents(\n params: GetBusinessParentsParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/parents`,\n options\n );\n },\n\n async triggerBuilds(params: TriggerBuildsParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${params.id}/trigger-builds`,\n {},\n options\n );\n },\n\n async getSubscriptionPlans(\n params: GetSubscriptionPlansParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\"/v1/businesses/plans\", options);\n },\n\n async getSubscription(\n params: GetSubscriptionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/subscription`,\n options\n );\n },\n async subscribe(params: SubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/subscribe`,\n params,\n options\n );\n },\n\n async createPortalSession(\n params: CreatePortalSessionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/subscription/portal`,\n params,\n options\n );\n },\n\n async inviteUser(params: InviteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n async handleInvitation(\n params: HandleInvitationParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n\n async testWebhook(params: TestWebhookParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/webhooks/test`,\n params.webhook,\n options\n );\n },\n\n async getBusinessMedia(\n params: GetBusinessMediaParams2,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {\n limit: params.limit,\n };\n if (params.cursor) queryParams.cursor = params.cursor;\n if (params.ids && params.ids.length > 0) queryParams.ids = params.ids.join(',');\n if (params.query) queryParams.query = params.query;\n if (params.mimeType) queryParams.mimeType = params.mimeType;\n if (params.sortField) queryParams.sortField = params.sortField;\n if (params.sortDirection) queryParams.sortDirection = params.sortDirection;\n\n return apiConfig.httpClient.get(`/v1/businesses/${params.id}/media`, {\n ...options,\n params: queryParams,\n });\n },\n\n async processRefund(params: ProcessRefundParams, options?: RequestOptions) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${id}/refund`,\n payload,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n UploadBusinessMediaParams,\n DeleteBusinessMediaParams,\n GetBusinessMediaParams,\n UpdateMediaParams,\n RequestOptions\n} from '../types/api';\n\nexport const createMediaApi = (apiConfig: ApiConfig) => {\n return {\n async uploadBusinessMedia(params: UploadBusinessMediaParams, options?: RequestOptions) {\n const _options = options;\n const { businessId, files = [], urls = [] } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const url = `${apiConfig.baseUrl}/v1/businesses/${targetBusinessId}/media`;\n\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n urls.forEach((url) => formData.append('urls', url));\n\n const tokens = await apiConfig.getToken();\n const response = await fetch(url, {\n method: 'POST',\n body: formData,\n headers: {\n Authorization: `Bearer ${tokens.accessToken}`\n }\n });\n\n if (!response.ok) {\n throw new Error('Upload failed, server said no');\n }\n\n return await response.json();\n },\n\n async deleteBusinessMedia(params: DeleteBusinessMediaParams, options?: RequestOptions) {\n const { id, mediaId } = params;\n\n return apiConfig.httpClient.delete(\n `/v1/businesses/${id}/media/${mediaId}`,\n options\n );\n },\n\n async getBusinessMedia(params: GetBusinessMediaParams, options?: RequestOptions) {\n const { businessId, cursor, limit, ids, query, mimeType, sortField, sortDirection } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const url = `${apiConfig.baseUrl}/v1/businesses/${targetBusinessId}/media`;\n\n const queryParams: Record<string, string> = { limit: String(limit) };\n if (cursor) queryParams.cursor = cursor;\n if (ids && ids.length > 0) queryParams.ids = ids.join(',');\n if (query) queryParams.query = query;\n if (mimeType) queryParams.mimeType = mimeType;\n if (sortField) queryParams.sortField = sortField;\n if (sortDirection) queryParams.sortDirection = sortDirection;\n\n const queryString = new URLSearchParams(queryParams).toString();\n\n const tokens = await apiConfig.getToken();\n const response = await fetch(`${url}?${queryString}`, {\n headers: {\n Authorization: `Bearer ${tokens.accessToken}`\n }\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => null);\n throw new Error(errorData?.message || 'Failed to fetch media');\n }\n\n return await response.json();\n },\n\n async updateMedia(params: UpdateMediaParams, options?: RequestOptions) {\n const { mediaId, businessId, ...updateData } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/media/${mediaId}`,\n updateData,\n options\n );\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateRoleParams,\n UpdateRoleParams,\n DeleteRoleParams,\n GetRoleParams,\n GetRolesParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createRoleApi = (apiConfig: ApiConfig) => {\n return {\n async createRole(\n params: CreateRoleParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/roles`,\n params,\n options,\n );\n },\n\n async updateRole(params: UpdateRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/roles/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteRole(params: DeleteRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/roles/${params.id}`,\n options,\n );\n },\n\n async getRole(params: GetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/roles/${params.id}`,\n options,\n );\n },\n\n async getRoles(params: GetRolesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/roles`,\n {\n ...options,\n params: {\n action: params.action,\n ids: params.ids,\n },\n },\n );\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tTrackEmailOpenParams,\n\tGetDeliveryStatsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createNotificationApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync trackEmailOpen(params: TrackEmailOpenParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/email/${params.trackingPixelId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getDeliveryStats(params: GetDeliveryStatsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/stats/${apiConfig.businessId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tCreatePromoCodeParams,\n\tUpdatePromoCodeParams,\n\tDeletePromoCodeParams,\n\tGetPromoCodeParams,\n\tGetPromoCodesParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createPromoCodeApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync createPromoCode(params: CreatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.post(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync updatePromoCode(params: UpdatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.put(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync deletePromoCode(params: DeletePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.delete(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCode(params: GetPromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCodes(params: GetPromoCodesParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/businesses/${apiConfig.businessId}/promo-codes`, {\n\t\t\t\t...options,\n\t\t\t\tparams\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tGetAnalyticsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createAnalyticsApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync getAnalytics(params: GetAnalyticsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/analytics/${apiConfig.businessId}`, {\n\t\t\t\t...options,\n\t\t\t\tparams: params\n\t\t\t});\n\t\t}\n\t};\n};\n","// Block utilities (extracted from index.ts)\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 entity: string;\n}\n\nexport interface CollectionEntry {\n id: string;\n collection_id: string;\n blocks: Block[];\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 (\n block.key\n ?.replace(/_/g, \" \")\n .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 (\n block.properties?.variant === \"DATE\" ||\n block.properties?.variant === \"DATE_TIME\"\n ) {\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 const isLocalized = block.type === \"LOCALIZED_TEXT\" || block.type === \"MARKDOWN\";\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\n ? block.value[0][locale] || block.value[0][\"en\"]\n : block.value[0];\n}\n\nexport const getBlockObjectValues = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\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 = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\n if (!entry) {\n return {};\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n if (!values || !Array.isArray(values)) {\n return {};\n }\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 if (\n imageBlock.type === \"RELATIONSHIP_MEDIA\" &&\n Array.isArray(imageBlock.value)\n ) {\n const mediaValue = imageBlock.value[0];\n if (mediaValue && mediaValue.mimeType) {\n // Handle media with resolutions structure\n if (\n mediaValue.resolutions &&\n mediaValue.resolutions.original &&\n mediaValue.resolutions.original.url\n ) {\n return mediaValue.resolutions.original.url;\n }\n\n // Handle direct URL on media\n if (mediaValue.url) {\n return mediaValue.url;\n }\n }\n return null;\n }\n\n if (isBlock) {\n if (typeof imageBlock === \"string\") {\n return imageBlock;\n }\n\n if (imageBlock.url) {\n return imageBlock.url;\n }\n }\n\n if (\n imageBlock.resolutions &&\n imageBlock.resolutions.original &&\n imageBlock.resolutions.original.url\n ) {\n return imageBlock.resolutions.original.url;\n }\n\n return null;\n};\n\nexport const translateMap = (\n labels: any,\n lang: string,\n fallback = \"unknown\"\n) => {\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};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateNodeParams,\n UpdateNodeParams,\n DeleteNodeParams,\n GetNodeParams,\n GetNodesParams,\n GetNodeChildrenParams,\n GenerateBlocksParams,\n GetVariableMetadataParams,\n RequestOptions,\n} from \"../types/api\";\nimport {\n getBlockFromArray,\n getBlockObjectValues,\n getImageUrl,\n} from \"../utils/blocks\";\n\nexport const createCmsApi = (apiConfig: ApiConfig) => {\n return {\n async createNode(params: CreateNodeParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/nodes`,\n payload,\n options\n );\n },\n\n async updateNode(params: UpdateNodeParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/nodes/${params.id}`,\n payload,\n options\n );\n },\n\n async deleteNode(params: DeleteNodeParams, options?: RequestOptions) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.delete(\n `/v1/businesses/${targetBusinessId}/nodes/${params.id}`,\n options\n );\n },\n\n async getNode(params: GetNodeParams, options?: RequestOptions) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${targetBusinessId}:${apiConfig.locale}:${params.slug}`;\n } else if (params.key) {\n identifier = `${targetBusinessId}:${params.key}`;\n } else {\n throw new Error(\"GetNodeParams requires id, slug, or key\");\n }\n\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/nodes/${identifier}`,\n options\n );\n\n return {\n ...response,\n getBlock(key: string) {\n return getBlockFromArray(response, key, apiConfig.locale);\n },\n getBlockValues(key: string) {\n return getBlockObjectValues(response, key, apiConfig.locale);\n },\n getImage(key: string) {\n const block = getBlockFromArray(response, key, apiConfig.locale);\n return getImageUrl(block, true);\n },\n };\n },\n\n async getNodes(params: GetNodesParams, options?: RequestOptions) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/nodes`,\n {\n ...options,\n params: queryParams,\n }\n );\n },\n\n async getNodeChildren(params: GetNodeChildrenParams, options?: RequestOptions) {\n const { id, businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/nodes/${id}/children`,\n {\n ...options,\n params: queryParams,\n }\n );\n },\n\n async generateBlocks(params: GenerateBlocksParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/nodes/blocks/generate`,\n params,\n options\n );\n },\n\n async getVariableMetadata(params: GetVariableMetadataParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/nodes/types/${params.nodeType}/variables`,\n options\n );\n },\n\n /**\n * Send a node to all subscribers (schedule or immediate)\n * @param params.entryId - The node ID to send\n * @param params.subject - Email subject for this send\n * @param params.scheduledAt - Optional unix timestamp to schedule the send\n */\n async sendNode(params: { entryId: string; subject: string; scheduledAt?: number }, options?: RequestOptions) {\n const { entryId, ...body } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/nodes/${entryId}/send`,\n body,\n options\n );\n },\n\n /**\n * Cancel a scheduled send\n */\n async cancelSend(params: { nodeId: string; sendId: string }, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/nodes/${params.nodeId}/send/${params.sendId}/cancel`,\n {},\n options\n );\n },\n\n /**\n * Get subscribers for a node\n */\n async getSubscribers(params: { nodeId: string }, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/nodes/${params.nodeId}/subscribers`,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateProductParams,\n UpdateProductParams,\n DeleteProductParams,\n GetProductParams,\n GetProductsParams,\n GetQuoteParams,\n OrderCheckoutParams,\n CreateOrderParams,\n UpdateOrderParams,\n GetOrderParams,\n GetOrdersParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createEshopApi = (apiConfig: ApiConfig) => {\n return {\n // ===== PRODUCTS =====\n\n async createProduct(params: CreateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/products`,\n params,\n options,\n );\n },\n\n async updateProduct(params: UpdateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteProduct(params: DeleteProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n options,\n );\n },\n\n async getProduct(params: GetProductParams, options?: RequestOptions) {\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${apiConfig.businessId}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProductParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/products/${identifier}`,\n options,\n );\n },\n\n async getProducts(params: GetProductsParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${encodeURIComponent(apiConfig.businessId)}/products`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== ORDERS =====\n\n async createOrder(params: CreateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n params,\n options,\n );\n },\n\n async updateOrder(params: UpdateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n params,\n options,\n );\n },\n\n async getOrder(params: GetOrderParams, options?: RequestOptions) {\n // Orders use UUID only - no SEO slug support\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n options,\n );\n },\n\n async getOrders(params: GetOrdersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== PAYMENTS =====\n\n async getQuote(params: GetQuoteParams, options?: RequestOptions) {\n const payload = {\n market: apiConfig.market,\n items: params.items,\n blocks: params.blocks || [],\n paymentMethodId: params.paymentMethodId,\n shippingMethodId: params.shippingMethodId,\n promoCode: params.promoCode,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders/quote`,\n payload,\n options,\n );\n },\n\n async checkout(params: OrderCheckoutParams, options?: RequestOptions) {\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n items: params.items,\n blocks: params.blocks || [],\n paymentMethodId: params.paymentMethodId,\n shippingMethodId: params.shippingMethodId,\n promoCodeId: params.promoCodeId,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders/checkout`,\n payload,\n options,\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateReservationParams,\n UpdateReservationParams,\n ReservationCheckoutParams,\n GetReservationParams,\n SearchReservationsParams,\n CreateServiceParams,\n UpdateServiceParams,\n DeleteServiceParams,\n GetServiceParams,\n GetServicesParams,\n BulkScheduleParams,\n CreateProviderParams,\n UpdateProviderParams,\n DeleteProviderParams,\n GetProviderParams,\n GetProvidersParams,\n GetBusinessServiceWorkingTimeParams,\n GetReservationQuoteParams,\n RequestOptions,\n Slot,\n} from \"../types/api\";\n\nexport const createReservationApi = (apiConfig: ApiConfig) => {\n // Cart state for multiple slots\n let cart: Slot[] = [];\n\n return {\n // ===== CART =====\n\n addToCart(slot: Slot) {\n cart.push(slot);\n },\n\n removeFromCart(slotId: string) {\n cart = cart.filter((s) => s.id !== slotId);\n },\n\n getCart(): Slot[] {\n return [...cart];\n },\n\n clearCart() {\n cart = [];\n },\n\n // ===== RESERVATIONS =====\n\n async createReservation(\n params: CreateReservationParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...rest } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const payload = {\n market: apiConfig.market,\n ...rest,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/reservations`,\n payload,\n options,\n );\n },\n\n async updateReservation(\n params: UpdateReservationParams,\n options?: RequestOptions,\n ) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/reservations/${id}`,\n payload,\n options,\n );\n },\n\n async checkout(\n params?: Partial<ReservationCheckoutParams>,\n options?: RequestOptions,\n ) {\n const { businessId, ...rest } = params || {};\n const targetBusinessId = businessId || apiConfig.businessId;\n // Use cart if no items provided\n const items = rest?.items || cart.map((s) => ({\n serviceId: s.serviceId,\n providerId: s.providerId,\n from: s.from,\n to: s.to,\n }));\n\n const payload = {\n market: apiConfig.market,\n ...rest,\n items,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/reservations/checkout`,\n payload,\n options,\n );\n },\n\n async getReservation(\n params: GetReservationParams,\n options?: RequestOptions,\n ) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/reservations/${params.id}`,\n options,\n );\n },\n\n async searchReservations(\n params: SearchReservationsParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/reservations`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n // ===== QUOTES =====\n\n async getQuote(\n params: GetReservationQuoteParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...rest } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n const payload = {\n market: apiConfig.market,\n ...rest,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/reservations/quote`,\n payload,\n options,\n );\n },\n\n // ===== SERVICES =====\n\n async createService(params: CreateServiceParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/services`,\n payload,\n options,\n );\n },\n\n async updateService(params: UpdateServiceParams, options?: RequestOptions) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/services/${params.id}`,\n payload,\n options,\n );\n },\n\n async deleteService(params: DeleteServiceParams, options?: RequestOptions) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.delete(\n `/v1/businesses/${targetBusinessId}/services/${params.id}`,\n options,\n );\n },\n\n async bulkSchedule(params: BulkScheduleParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/services/bulk-schedule`,\n params,\n options,\n );\n },\n\n async getService(params: GetServiceParams, options?: RequestOptions) {\n const businessId = params.businessId || apiConfig.businessId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${businessId}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetServiceParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${businessId}/services/${identifier}`,\n options,\n );\n },\n\n async getServices(params: GetServicesParams, options?: RequestOptions) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/services`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n // ===== PROVIDERS =====\n\n async createProvider(\n params: CreateProviderParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.post(\n `/v1/businesses/${targetBusinessId}/providers`,\n payload,\n options,\n );\n },\n\n async updateProvider(\n params: UpdateProviderParams,\n options?: RequestOptions,\n ) {\n const { businessId, ...payload } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.put(\n `/v1/businesses/${targetBusinessId}/providers/${params.id}`,\n payload,\n options,\n );\n },\n\n async deleteProvider(\n params: DeleteProviderParams,\n options?: RequestOptions,\n ) {\n const targetBusinessId = params.businessId || apiConfig.businessId;\n return apiConfig.httpClient.delete(\n `/v1/businesses/${targetBusinessId}/providers/${params.id}`,\n options,\n );\n },\n\n async getProvider(params: GetProviderParams, options?: RequestOptions) {\n const businessId = params.businessId || apiConfig.businessId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${businessId}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProviderParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${businessId}/providers/${identifier}`,\n options,\n );\n },\n\n async getProviders(params: GetProvidersParams, options?: RequestOptions) {\n const { businessId, ...queryParams } = params;\n const targetBusinessId = businessId || apiConfig.businessId;\n return apiConfig.httpClient.get(\n `/v1/businesses/${targetBusinessId}/providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n async getProviderWorkingTime(\n params: GetBusinessServiceWorkingTimeParams,\n options?: RequestOptions,\n ) {\n const { providerId, ...queryParams } = params;\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers/${providerId}/working-time`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface ScanDataParams {\n key: string;\n limit?: number;\n}\n\nexport interface PutDataParams {\n key: string;\n value: any;\n oldKey?: string;\n}\n\nexport interface DeleteDataParams {\n key: string;\n}\n\nexport interface RunScriptParams {\n name: string;\n value?: string;\n username?: string;\n password?: string;\n}\n\nexport interface RunScriptResponse {\n success: boolean;\n message: string;\n}\n\nexport const createDatabaseApi = (apiConfig: ApiConfig) => {\n return {\n async scanData(\n params: ScanDataParams,\n options?: RequestOptions\n ): Promise<any[]> {\n const response = await apiConfig.httpClient.get(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n limit: params.limit || 200,\n },\n }\n );\n return response.value || [];\n },\n\n async putData(\n params: PutDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(\n `/v1/operations/data`,\n params,\n options\n );\n },\n\n async deleteData(\n params: DeleteDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.delete(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n },\n }\n );\n },\n\n async runScript(\n params: RunScriptParams,\n options?: RequestOptions\n ): Promise<RunScriptResponse> {\n return apiConfig.httpClient.post(`/v1/operations/scripts`, params, options);\n },\n };\n};\n","import type {\n CreateFeatureFlagParams,\n DeleteFeatureFlagParams,\n FeatureFlag,\n FlagResults,\n GetFeatureFlagParams,\n GetFeatureFlagResultsParams,\n GetFeatureFlagsParams,\n GetVariantParams,\n GetVariantResponse,\n RequestOptions,\n TrackEventParams,\n TrackEventResponse,\n UpdateFeatureFlagParams,\n} from \"../types/api\";\n\ninterface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nexport const createFeatureFlagsApi = (apiConfig: ApiConfig) => {\n return {\n /**\n * Create a new feature flag\n */\n async createFlag(\n params: CreateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n params,\n options\n );\n },\n\n /**\n * Get a feature flag by ID\n */\n async getFlag(\n params: GetFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * List all feature flags for the business\n */\n async getFlags(\n params?: GetFeatureFlagsParams,\n options?: RequestOptions<FeatureFlag[]>\n ): Promise<FeatureFlag[]> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n {\n ...options,\n params: params,\n }\n );\n },\n\n /**\n * Update a feature flag\n */\n async updateFlag(\n params: UpdateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n const { id, ...body } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${id}`,\n body,\n options\n );\n },\n\n /**\n * Delete a feature flag\n */\n async deleteFlag(\n params: DeleteFeatureFlagParams,\n options?: RequestOptions<{ deleted: boolean }>\n ): Promise<{ deleted: boolean }> {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * Get experiment results for a feature flag\n */\n async getResults(\n params: GetFeatureFlagResultsParams,\n options?: RequestOptions<FlagResults>\n ): Promise<FlagResults> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}/results`,\n options\n );\n },\n\n /**\n * Get the variant assignment for the current user\n * This is the main method for feature flag evaluation\n */\n async getVariant(\n params: GetVariantParams,\n options?: RequestOptions<GetVariantResponse>\n ): Promise<GetVariantResponse> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/key/${params.flagKey}/variant`,\n options\n );\n },\n\n /**\n * Track a conversion event for A/B testing\n */\n async trackEvent(\n params: TrackEventParams,\n options?: RequestOptions<TrackEventResponse>\n ): Promise<TrackEventResponse> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/track`,\n params,\n options\n );\n },\n\n // ===== CONVENIENCE METHODS =====\n\n /**\n * Check if a feature is enabled (returns true if variant is not 'control')\n * Convenience method for simple on/off flags\n */\n async isEnabled(flagKey: string): Promise<boolean> {\n try {\n const response = await this.getVariant({ flagKey });\n return response.variantKey !== \"control\";\n } catch {\n return false;\n }\n },\n\n /**\n * Get variant with payload, returning a default if flag not found\n * Useful for getting configuration values from variants\n */\n async getVariantWithDefault<T = any>(\n flagKey: string,\n defaultValue: T\n ): Promise<{ variantKey: string; payload: T }> {\n try {\n const response = await this.getVariant({ flagKey });\n return {\n variantKey: response.variantKey,\n payload: response.payload ?? defaultValue,\n };\n } catch {\n return {\n variantKey: \"control\",\n payload: defaultValue,\n };\n }\n },\n\n /**\n * Activate a draft flag\n */\n async activateFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ACTIVE\" });\n },\n\n /**\n * Archive an active flag\n */\n async archiveFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ARCHIVED\" });\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface LocationState {\n code: string;\n name: string;\n}\n\nexport interface LocationCountry {\n code: string;\n name: string;\n states: LocationState[];\n}\n\nexport interface GetCountriesResponse {\n items: LocationCountry[];\n cursor: string | null;\n}\n\nexport const createLocationApi = (apiConfig: ApiConfig) => {\n return {\n async getCountries(options?: RequestOptions): Promise<GetCountriesResponse> {\n return apiConfig.httpClient.get(`/v1/operations/location/countries`, options);\n },\n\n async getCountryStates(\n countryCode: string,\n options?: RequestOptions\n ): Promise<LocationCountry> {\n return apiConfig.httpClient.get(\n `/v1/operations/location/countries/${countryCode}/states`,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface NetworkSearchParams {\n query?: string;\n limit?: number;\n cursor?: string;\n nodeId?: string;\n nodeIds?: string[];\n statuses?: string[];\n blocks?: any[];\n sortField?: string;\n sortDirection?: \"asc\" | \"desc\";\n createdAtFrom?: number;\n createdAtTo?: number;\n priceFrom?: number;\n priceTo?: number;\n matchAll?: boolean;\n}\n\nexport const createNetworkApi = (apiConfig: ApiConfig) => {\n return {\n /**\n * Search services across all businesses that have opted into a network\n * @param networkKey - The network key (e.g., \"delfin\")\n * @param params - Search parameters\n */\n async searchServices(\n networkKey: string,\n params?: NetworkSearchParams,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {};\n\n if (params?.limit !== undefined) queryParams.limit = params.limit;\n if (params?.cursor) queryParams.cursor = params.cursor;\n if (params?.query) queryParams.query = params.query;\n if (params?.nodeId) queryParams.nodeId = params.nodeId;\n if (params?.nodeIds && params.nodeIds.length > 0)\n queryParams.nodeIds = params.nodeIds.join(\",\");\n if (params?.statuses && params.statuses.length > 0)\n queryParams.statuses = params.statuses.join(\",\");\n if (params?.sortField) queryParams.sortField = params.sortField;\n if (params?.sortDirection) queryParams.sortDirection = params.sortDirection;\n if (params?.createdAtFrom !== undefined)\n queryParams.createdAtFrom = params.createdAtFrom;\n if (params?.createdAtTo !== undefined)\n queryParams.createdAtTo = params.createdAtTo;\n if (params?.priceFrom !== undefined) queryParams.priceFrom = params.priceFrom;\n if (params?.priceTo !== undefined) queryParams.priceTo = params.priceTo;\n if (params?.matchAll !== undefined) queryParams.matchAll = params.matchAll;\n if (params?.blocks && params.blocks.length > 0)\n queryParams.blocks = JSON.stringify(params.blocks);\n\n return apiConfig.httpClient.get(`/v1/networks/${networkKey}/services`, {\n ...options,\n params: queryParams,\n });\n },\n\n /**\n * Search products across all businesses that have opted into a network\n * @param networkKey - The network key (e.g., \"delfin\")\n * @param params - Search parameters\n */\n async searchProducts(\n networkKey: string,\n params?: NetworkSearchParams,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {};\n\n if (params?.limit !== undefined) queryParams.limit = params.limit;\n if (params?.cursor) queryParams.cursor = params.cursor;\n if (params?.query) queryParams.query = params.query;\n if (params?.nodeId) queryParams.nodeId = params.nodeId;\n if (params?.nodeIds && params.nodeIds.length > 0)\n queryParams.nodeIds = params.nodeIds.join(\",\");\n if (params?.statuses && params.statuses.length > 0)\n queryParams.statuses = params.statuses.join(\",\");\n if (params?.sortField) queryParams.sortField = params.sortField;\n if (params?.sortDirection) queryParams.sortDirection = params.sortDirection;\n if (params?.createdAtFrom !== undefined)\n queryParams.createdAtFrom = params.createdAtFrom;\n if (params?.createdAtTo !== undefined)\n queryParams.createdAtTo = params.createdAtTo;\n if (params?.priceFrom !== undefined) queryParams.priceFrom = params.priceFrom;\n if (params?.priceTo !== undefined) queryParams.priceTo = params.priceTo;\n if (params?.matchAll !== undefined) queryParams.matchAll = params.matchAll;\n if (params?.blocks && params.blocks.length > 0)\n queryParams.blocks = JSON.stringify(params.blocks);\n\n return apiConfig.httpClient.get(`/v1/networks/${networkKey}/products`, {\n ...options,\n params: queryParams,\n });\n },\n\n /**\n * Search providers across all businesses that have opted into a network\n * @param networkKey - The network key (e.g., \"delfin\")\n * @param params - Search parameters\n */\n async searchProviders(\n networkKey: string,\n params?: NetworkSearchParams,\n options?: RequestOptions\n ) {\n const queryParams: Record<string, any> = {};\n\n if (params?.limit !== undefined) queryParams.limit = params.limit;\n if (params?.cursor) queryParams.cursor = params.cursor;\n if (params?.query) queryParams.query = params.query;\n if (params?.nodeId) queryParams.nodeId = params.nodeId;\n if (params?.nodeIds && params.nodeIds.length > 0)\n queryParams.nodeIds = params.nodeIds.join(\",\");\n if (params?.statuses && params.statuses.length > 0)\n queryParams.statuses = params.statuses.join(\",\");\n if (params?.sortField) queryParams.sortField = params.sortField;\n if (params?.sortDirection) queryParams.sortDirection = params.sortDirection;\n if (params?.createdAtFrom !== undefined)\n queryParams.createdAtFrom = params.createdAtFrom;\n if (params?.createdAtTo !== undefined)\n queryParams.createdAtTo = params.createdAtTo;\n if (params?.matchAll !== undefined) queryParams.matchAll = params.matchAll;\n if (params?.blocks && params.blocks.length > 0)\n queryParams.blocks = JSON.stringify(params.blocks);\n\n return apiConfig.httpClient.get(`/v1/networks/${networkKey}/providers`, {\n ...options,\n params: queryParams,\n });\n },\n };\n};\n","/**\n * Maps currency codes to their display symbols\n */\nexport function getCurrencySymbol(currency: string): string {\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n CAD: 'C$',\n AUD: 'A$',\n JPY: '¥',\n CHF: 'CHF',\n SEK: 'kr',\n NOK: 'kr',\n DKK: 'kr',\n PLN: 'zł',\n CZK: 'Kč',\n HUF: 'Ft',\n RON: 'lei',\n BGN: 'лв',\n HRK: 'kn',\n RSD: 'дин',\n BAM: 'KM',\n MKD: 'ден',\n ALL: 'L',\n TRY: '₺',\n RUB: '₽',\n UAH: '₴',\n BYN: 'Br',\n CNY: '¥',\n INR: '₹',\n KRW: '₩',\n THB: '฿',\n VND: '₫',\n SGD: 'S$',\n MYR: 'RM',\n IDR: 'Rp',\n PHP: '₱',\n BRL: 'R$',\n ARS: '$',\n CLP: '$',\n COP: '$',\n PEN: 'S/',\n MXN: '$',\n ZAR: 'R',\n EGP: 'E£',\n NGN: '₦',\n KES: 'KSh',\n GHS: '₵',\n MAD: 'DH',\n TND: 'د.ت',\n DZD: 'د.ج',\n LYD: 'ل.د',\n AED: 'د.إ',\n SAR: 'ر.س',\n QAR: 'ر.ق',\n KWD: 'د.ك',\n BHD: 'ب.د',\n OMR: 'ر.ع',\n JOD: 'د.أ',\n LBP: 'ل.ل',\n SYP: 'ل.س',\n IQD: 'ع.د',\n IRR: '﷼',\n AFN: '؋',\n PKR: '₨',\n LKR: '₨',\n NPR: '₨',\n BDT: '৳',\n MMK: 'K',\n LAK: '₭',\n KHR: '៛',\n MNT: '₮',\n KZT: '₸',\n UZS: 'лв',\n KGS: 'лв',\n TJS: 'SM',\n TMT: 'T',\n AZN: '₼',\n GEL: '₾',\n AMD: '֏',\n BYR: 'p.',\n MDL: 'L'\n };\n\n return currencySymbols[currency.toUpperCase()] || currency;\n}\n\n/**\n * List of currencies where the symbol appears after the amount\n */\nexport const SYMBOL_AFTER_CURRENCIES = ['SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK'];\n\n/**\n * Check if currency symbol should be placed after the amount\n */\nexport function isSymbolAfterCurrency(currency: string): boolean {\n return SYMBOL_AFTER_CURRENCIES.includes(currency.toUpperCase());\n}","// Price formatting utilities - Centralized currency and price operations\nimport type { Payment, PaymentMethodType, Price } from '../types';\nimport { getCurrencySymbol, isSymbolAfterCurrency } from './currency';\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 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 (locale-aware positioning)\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 || getCurrencySymbol(currency);\n\n // Use locale-specific symbol positioning\n if (isSymbolAfterCurrency(currency)) {\n return `${roundedAmount} ${symbol}`;\n }\n\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 taxAmount = payment.tax?.amount ?? 0;\n const tax = taxAmount > 0 ? formatMinor(taxAmount, 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,\n } = options;\n\n // Find price for the specific market\n let price = prices.find(p => p.market === marketId);\n\n // Fallback to fallback market (if provided) or first available\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = 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 = getCurrencySymbol(currency);\n }\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getCurrencySymbol(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): number {\n if (!prices || prices.length === 0) return 0;\n\n let price = prices.find(p => p.market === marketId);\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = prices[0];\n }\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 taxAmount?: number;\n taxRateBps?: number;\n promoCode?: {\n id: string;\n code: string;\n type: string;\n value: number;\n };\n } = {}\n): Payment {\n const { discount = 0, taxAmount = 0, taxRateBps = 0, promoCode } = options;\n const total = subtotalMinor - discount + taxAmount;\n\n return {\n currency,\n market: marketId,\n subtotal: subtotalMinor,\n shipping: 0,\n discount,\n total,\n paid: 0,\n refunds: [],\n type: paymentMethod,\n ...(taxAmount > 0 && {\n tax: {\n amount: taxAmount,\n rateBps: taxRateBps,\n lines: [],\n },\n }),\n ...(promoCode && { promoCode }),\n };\n}\n","// Validation utilities\n\nexport interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n// Phone number validation\nexport function validatePhoneNumber(phone: string): ValidationResult {\n if (!phone) {\n return { isValid: false, error: 'Phone number is required' };\n }\n \n const cleaned = phone.replace(/\\D/g, '');\n \n if (cleaned.length < 8) {\n return { isValid: false, error: 'Phone number is too short' };\n }\n \n if (cleaned.length > 15) {\n return { isValid: false, error: 'Phone number is too long' };\n }\n \n return { isValid: true };\n}\n\n// Email validation\nexport function validateEmail(email: string): ValidationResult {\n if (!email) {\n return { isValid: false, error: 'Email is required' };\n }\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n \n if (!emailRegex.test(email)) {\n return { isValid: false, error: 'Please enter a valid email address' };\n }\n \n return { isValid: true };\n}\n\n// Verification code validation (4-digit codes)\nexport function validateVerificationCode(code: string): ValidationResult {\n if (!code) {\n return { isValid: false, error: 'Verification code is required' };\n }\n \n const cleaned = code.replace(/\\D/g, '');\n \n if (cleaned.length !== 4) {\n return { isValid: false, error: 'Please enter a 4-digit verification code' };\n }\n \n return { isValid: true };\n}\n\n// Generic required field validation\nexport function validateRequired(value: any, fieldName: string = 'This field'): ValidationResult {\n if (value === null || value === undefined || value === '') {\n return { isValid: false, error: `${fieldName} is required` };\n }\n \n return { isValid: true };\n}","// Timezone utilities (moved from Reservation folder)\n\nexport const tzGroups = [\n {\n label: \"US\",\n zones: [\n { label: \"Eastern Time\", value: \"America/New_York\" },\n { label: \"Central Time\", value: \"America/Chicago\" },\n { label: \"Mountain Time\", value: \"America/Denver\" },\n { label: \"Pacific Time\", value: \"America/Los_Angeles\" },\n ],\n },\n {\n label: \"Europe\",\n zones: [\n { label: \"London\", value: \"Europe/London\" },\n { label: \"Paris\", value: \"Europe/Paris\" },\n { label: \"Berlin\", value: \"Europe/Berlin\" },\n { label: \"Rome\", value: \"Europe/Rome\" },\n ],\n },\n {\n label: \"Asia\",\n zones: [\n { label: \"Tokyo\", value: \"Asia/Tokyo\" },\n { label: \"Shanghai\", value: \"Asia/Shanghai\" },\n { label: \"Mumbai\", value: \"Asia/Kolkata\" },\n { label: \"Dubai\", value: \"Asia/Dubai\" },\n ],\n },\n];\n\nexport function findTimeZone(groups: typeof tzGroups): string {\n try {\n const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n \n // Check if detected timezone is in our list\n for (const group of groups) {\n for (const zone of group.zones) {\n if (zone.value === detected) {\n return detected;\n }\n }\n }\n \n // Fallback to UTC if not found\n return \"UTC\";\n } catch (e) {\n // Fallback to UTC if detection fails\n return \"UTC\";\n }\n}","// 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}","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}","/**\n * Key Validation Utilities\n *\n * Keys must contain only:\n * - Letters (a-z, A-Z)\n * - Numbers (0-9)\n * - Underscore (_)\n * - Hyphen (-)\n */\n\nconst KEY_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\n/**\n * Validates if a key is valid\n * @param key - The key to validate\n * @returns true if key is valid, false otherwise\n */\nexport function isValidKey(key: string): boolean {\n if (!key || key.length === 0) return false;\n return KEY_PATTERN.test(key);\n}\n\n/**\n * Validates a key and returns validation result with error message\n * @param key - The key to validate\n * @returns Validation result object\n */\nexport function validateKey(key: string): { valid: boolean; error?: string } {\n if (!key || key.length === 0) {\n return { valid: false, error: \"Key is required\" };\n }\n\n if (key.length > 255) {\n return { valid: false, error: \"Key must be 255 characters or less\" };\n }\n\n if (!KEY_PATTERN.test(key)) {\n return {\n valid: false,\n error:\n \"Key can only contain letters, numbers, underscores (_) and hyphens (-)\",\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Converts a string to a valid key format\n * - Converts to lowercase\n * - Replaces spaces with underscores\n * - Removes invalid characters\n * - Trims leading/trailing underscores/hyphens\n *\n * @param input - The string to convert\n * @returns A valid key string\n */\nexport function toKey(input: string): string {\n if (!input) return \"\";\n\n return input\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"_\") // Replace spaces with underscores\n .replace(/[^a-z0-9_-]/g, \"\") // Remove invalid characters\n .replace(/^[-_]+|[-_]+$/g, \"\") // Trim leading/trailing underscores/hyphens\n .replace(/[-_]{2,}/g, \"_\"); // Replace multiple consecutive special chars\n}\n\n/**\n * Generates a key from a name/title\n * @param name - The name to convert\n * @returns A valid key\n */\nexport function nameToKey(name: string): string {\n return toKey(name);\n}\n","// Export types\nexport type {\n ApiResponse,\n EshopCartItem,\n EshopStoreState,\n ReservationStoreState,\n ReservationCartItem,\n Business,\n BusinessConfig,\n Block,\n Price,\n Payment,\n PaymentRefund,\n PaymentMethod,\n PaymentProviderConfig,\n ShippingMethod,\n ShippingWeightTier,\n Zone,\n Market,\n Location,\n Quote,\n PromoCodeValidation,\n PaginatedResponse,\n Language,\n Seo,\n Media,\n MediaResolution,\n ProviderWithTimeline,\n Node,\n} from \"./types\";\n\n// Export enums (must be exported as values, not types)\nexport { PaymentMethodType } from \"./types\";\n\n// Export reservation types\nexport type {\n GetSlotsForDateParams,\n GetAvailabilityParams,\n DayAvailability,\n Slot,\n SystemTemplateKey,\n} from \"./types/api\";\n\n// Export location types\nexport type {\n LocationState,\n LocationCountry,\n GetCountriesResponse,\n} from \"./api/location\";\n\n\nexport const SDK_VERSION = \"0.3.136\";\nexport const SUPPORTED_FRAMEWORKS = [\n \"astro\",\n \"react\",\n \"vue\",\n \"svelte\",\n \"vanilla\",\n] as const;\n\nexport interface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nimport {\n createHttpClient,\n type HttpClientConfig,\n} from \"./services/createHttpClient\";\nimport { createUserApi } from \"./api/user\";\nimport { createBusinessApi } from \"./api/business\";\nimport { createMediaApi } from \"./api/media\";\nimport { createRoleApi } from \"./api/role\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createReservationApi } from \"./api/reservation\";\nimport { createDatabaseApi } from \"./api/database\";\nimport { createFeatureFlagsApi } from \"./api/featureFlags\";\nimport { createLocationApi } from \"./api/location\";\nimport { createNetworkApi } from \"./api/network\";\nimport {\n getImageUrl,\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n} from \"./utils/price\";\nimport { getCurrencySymbol } from \"./utils/currency\";\nimport { validatePhoneNumber } from \"./utils/validation\";\nimport { tzGroups, findTimeZone } from \"./utils/timezone\";\nimport { slugify, humanize, categorify, formatDate } from \"./utils/text\";\nimport {\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n} from \"./utils/svg\";\nimport {\n isValidKey,\n validateKey,\n toKey,\n nameToKey,\n} from \"./utils/keyValidation\";\n\nexport async function createArkySDK(\n config: HttpClientConfig & { market: string; locale?: string }\n) {\n const locale = config.locale || \"en\";\n\n const httpClient = createHttpClient(config);\n\n const apiConfig: ApiConfig = {\n httpClient,\n businessId: config.businessId,\n baseUrl: config.baseUrl,\n market: config.market,\n locale,\n setToken: config.setToken,\n getToken: config.getToken,\n };\n\n const userApi = createUserApi(apiConfig);\n\n const autoGuest = config.autoGuest !== undefined ? config.autoGuest : true;\n\n // If autoGuest, login before returning SDK\n if (autoGuest) {\n try {\n const tokens = await config.getToken();\n if (!tokens.accessToken && !tokens.refreshToken) {\n const result: any = await httpClient.post(\"/v1/users/login\", {\n provider: \"GUEST\",\n });\n const token = result.accessToken || result.token || \"\";\n if (token) {\n config.setToken(result);\n }\n }\n } catch (error) {\n // Silent fail - guest auth is optional\n }\n }\n\n const sdk = {\n user: userApi,\n business: createBusinessApi(apiConfig),\n media: createMediaApi(apiConfig),\n role: createRoleApi(apiConfig),\n notification: createNotificationApi(apiConfig),\n promoCode: createPromoCodeApi(apiConfig),\n analytics: createAnalyticsApi(apiConfig),\n cms: createCmsApi(apiConfig),\n eshop: createEshopApi(apiConfig),\n reservation: createReservationApi(apiConfig),\n database: createDatabaseApi(apiConfig),\n featureFlags: createFeatureFlagsApi(apiConfig),\n location: createLocationApi(apiConfig),\n network: createNetworkApi(apiConfig),\n\n setBusinessId: (businessId: string) => {\n apiConfig.businessId = businessId;\n },\n\n getBusinessId: () => apiConfig.businessId,\n\n setMarket: (market: string) => {\n apiConfig.market = market;\n },\n\n getMarket: () => apiConfig.market,\n\n setLocale: (locale: string) => {\n apiConfig.locale = locale;\n },\n\n getLocale: () => apiConfig.locale,\n\n isAuthenticated: config.isAuthenticated || (() => false),\n logout: config.logout,\n setToken: config.setToken,\n\n // Top-level block utilities for convenience\n extractBlockValues,\n\n utils: {\n // Block utilities\n getImageUrl: (imageBlock: any, isBlock = true) =>\n getImageUrl(imageBlock, isBlock),\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n\n // Price utilities\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n\n // Currency utilities\n getCurrencySymbol,\n\n // Validation utilities\n validatePhoneNumber,\n\n // Timezone utilities\n tzGroups,\n findTimeZone,\n\n // Text utilities\n slugify,\n humanize,\n categorify,\n formatDate,\n\n // SVG utilities\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n\n // Key validation utilities\n isValidKey,\n validateKey,\n toKey,\n nameToKey,\n },\n };\n\n return sdk;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n"]}
|