arky-sdk 0.9.18 → 0.9.19
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/{admin-CBgRGUCX.d.cts → admin-CgER0AZn.d.cts} +1 -1
- package/dist/{admin-yoFJKZB8.d.ts → admin-CqasPNLl.d.ts} +1 -1
- package/dist/admin.cjs +9 -22
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.d.cts +1 -1
- package/dist/admin.d.ts +1 -1
- package/dist/admin.js +9 -22
- package/dist/admin.js.map +1 -1
- package/dist/index.cjs +10 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -23
- package/dist/index.js.map +1 -1
- package/dist/storefront.cjs +9 -22
- package/dist/storefront.cjs.map +1 -1
- package/dist/storefront.d.cts +2 -2
- package/dist/storefront.d.ts +2 -2
- package/dist/storefront.js +9 -22
- package/dist/storefront.js.map +1 -1
- package/package.json +1 -1
package/dist/storefront.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/orderItems.ts","../src/api/storefront.ts","../src/cartController.ts","../src/utils/errors.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/support.ts","../src/utils/blocks.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/utils/inventory.ts","../src/index.ts","../src/payments/stripe.ts","../src/storefrontStore/utils.ts","../src/storefrontStore/initialize.ts"],"names":["isRecord","isBlock","findBlock","atom","computed","map","entry"],"mappings":"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","file":"storefront.cjs","sourcesContent":["import type { OrderCheckoutItemInput } from \"../types/api\";\n\nexport function sanitizePublicCheckoutItems(\n items: OrderCheckoutItemInput[],\n): OrderCheckoutItemInput[] {\n return items.map((item) => {\n if (item.type === \"product\") {\n return {\n type: \"product\",\n ...(item.id ? { id: item.id } : {}),\n product_id: item.product_id,\n variant_id: item.variant_id,\n quantity: item.quantity,\n };\n }\n return {\n type: \"service\",\n ...(item.id ? { id: item.id } : {}),\n service_id: item.service_id,\n provider_id: item.provider_id,\n slots: item.slots,\n ...(item.forms ? { forms: item.forms } : {}),\n };\n });\n}\n","import type { ApiConfig, ContactSessionUpdater } from \"../index\";\nimport type {\n RequestOptions,\n GetCollectionParams,\n GetEntryParams,\n GetEntriesParams,\n GetFormParams,\n SubmitFormParams,\n GetTaxonomyParams,\n GetTaxonomyChildrenParams,\n GetProductParams,\n GetProductsParams,\n GetOrderParams,\n GetOrdersParams,\n FindDigitalAccessGrantsParams,\n GetDigitalAccessGrantParams,\n DownloadDigitalAccessParams,\n GetAvailabilityParams,\n AvailabilityResponse,\n GetServiceParams,\n GetServicesParams,\n FindServiceProvidersParams,\n GetProviderParams,\n GetProvidersParams,\n GetContactListParams,\n FindStorefrontContactListPlansParams,\n FindStorefrontContactListsParams,\n FindStorefrontContactListMembershipsParams,\n SubscribeContactListParams,\n ContactListAccessParams,\n ContactListContentAccessParams,\n GetCurrentCartParams,\n GetCartParams,\n UpdateCartParams,\n AddCartItemParams,\n RemoveCartItemParams,\n ClearCartParams,\n QuoteCartParams,\n CheckoutCartParams,\n VerificationChallengeResponse,\n} from \"../types/api\";\nimport type {\n CollectionEntry,\n Collection,\n Form,\n FormSubmission,\n Taxonomy,\n StorefrontContactList,\n StorefrontContactListPlan,\n ContactListAccessResponse,\n ContactListContentAccessResponse,\n ContactListManagementResponse,\n ContactListSubscribeResponse,\n StorefrontContactListMembership,\n Service,\n ServiceProvider,\n Provider,\n Store,\n Location,\n Market,\n OrderQuote,\n Order,\n DigitalAccessGrant,\n DigitalAccessDownloadResponse,\n OrderCheckoutResult,\n Product,\n Contact,\n ContactSessionIssued,\n Cart,\n PaginatedResponse,\n} from \"../types\";\nimport { sanitizePublicCheckoutItems } from \"../utils/orderItems\";\n\nexport type IdentifyResponse = {\n contact: Contact;\n token: ContactSessionIssued | null;\n store: Store;\n market: Market | null;\n verification_challenge: VerificationChallengeResponse | null;\n};\n\nexport type VerifyResponse = {\n contact: Contact;\n token: ContactSessionIssued;\n};\ntype LogoutResponse = void;\ntype Country = {\n code: string;\n name: string;\n states: { code: string; name: string }[];\n};\ntype CountriesResponse = { items: Country[]; cursor: string | null };\n\nexport interface StorefrontAction {\n store_id: string;\n contact_id: string;\n key: string;\n payload: Record<string, unknown>;\n created_at: number;\n}\n\nexport interface TrackActionParams {\n key: string;\n payload?: Record<string, unknown>;\n}\n\nexport const COMMON_ACTION_KEYS = [\n \"page.view\",\n \"product.view\",\n \"service.view\",\n \"provider.view\",\n \"cart.added\",\n \"cart.removed\",\n \"checkout.started\",\n \"order.created\",\n \"signin\",\n \"signup\",\n \"verified.email\",\n \"search\",\n \"share\",\n \"wishlist.added\",\n] as const;\n\nexport type CommonActionKey = (typeof COMMON_ACTION_KEYS)[number];\n\nexport interface UseExperimentParams {\n key: string;\n store_id?: string;\n}\n\nexport interface ExperimentUseResponse {\n experiment_key: string;\n experiment_version: number;\n variant_key: string;\n goal_action_key: string;\n}\n\nexport const createActionApi = (apiConfig: ApiConfig) => ({\n COMMON_ACTION_KEYS,\n async track(params: TrackActionParams): Promise<void> {\n try {\n await apiConfig.httpClient.post<void>(\n `/v1/storefront/${apiConfig.storeId}/actions/track`,\n { key: params.key, payload: params.payload },\n );\n } catch {}\n },\n});\n\nexport const createStorefrontApi = (\n apiConfig: ApiConfig,\n updateContactSession: ContactSessionUpdater,\n) => {\n const base = (storeId = apiConfig.storeId) => `/v1/storefront/${storeId}`;\n const pendingVerifications = new Map<\n string,\n Pick<IdentifyResponse, \"store\" | \"market\">\n >();\n\n function persistIdentification(result: IdentifyResponse): IdentifyResponse {\n const issued = result.token;\n if (issued?.token) {\n updateContactSession(() => ({\n access_token: issued.token,\n contact: result.contact,\n store: result.store,\n market: result.market,\n }));\n } else {\n if (result.verification_challenge) {\n pendingVerifications.set(result.verification_challenge.challenge_id, {\n store: result.store,\n market: result.market,\n });\n }\n updateContactSession((current) =>\n current\n ? {\n ...current,\n contact: result.contact,\n store: result.store,\n market: result.market,\n }\n : null,\n );\n }\n return result;\n }\n\n async function submitIdentification(\n path: \"identify\" | \"code\",\n params?: { email?: string; market?: string },\n options?: RequestOptions,\n ): Promise<IdentifyResponse> {\n const store_id = apiConfig.storeId;\n const result = await apiConfig.httpClient.post<IdentifyResponse>(\n `${base(store_id)}/account/${path}`,\n {\n store_id,\n market: params?.market || apiConfig.market || null,\n email: params?.email,\n },\n options,\n );\n return persistIdentification(result);\n }\n\n return {\n store: {\n getStore(options?: RequestOptions): Promise<Store> {\n return apiConfig.httpClient.get<Store>(base(), options);\n },\n\n location: {\n getCountries(options?: RequestOptions): Promise<CountriesResponse> {\n return apiConfig.httpClient.get<CountriesResponse>(\n `/v1/platform/countries`,\n options,\n );\n },\n\n getCountry(\n countryCode: string,\n options?: RequestOptions,\n ): Promise<Country> {\n return apiConfig.httpClient.get<Country>(\n `/v1/platform/countries/${countryCode}`,\n options,\n );\n },\n\n list(options?: RequestOptions): Promise<Location[]> {\n return apiConfig.httpClient.get<Location[]>(\n `${base()}/locations`,\n options,\n );\n },\n\n get(id: string, options?: RequestOptions): Promise<Location> {\n return apiConfig.httpClient.get<Location>(\n `${base()}/locations/${id}`,\n options,\n );\n },\n },\n\n market: {\n list(options?: RequestOptions): Promise<Market[]> {\n return apiConfig.httpClient.get<Market[]>(\n `${base()}/markets`,\n options,\n );\n },\n\n get(id: string, options?: RequestOptions): Promise<Market> {\n return apiConfig.httpClient.get<Market>(\n `${base()}/markets/${id}`,\n options,\n );\n },\n },\n },\n\n cms: {\n collection: {\n get(\n params: GetCollectionParams,\n options?: RequestOptions,\n ): Promise<Collection> {\n const store_id = params.store_id || apiConfig.storeId;\n const identifier = params.id !== undefined\n ? params.id\n : `${store_id}:${params.key}`;\n return apiConfig.httpClient.get<Collection>(\n `${base(store_id)}/collections/${identifier}`,\n options,\n );\n },\n },\n\n entry: {\n get(\n params: GetEntryParams,\n options?: RequestOptions,\n ): Promise<CollectionEntry> {\n const store_id = params.store_id || apiConfig.storeId;\n if (!params.id) {\n throw new Error(\"GetEntryParams requires id\");\n }\n return apiConfig.httpClient.get<CollectionEntry>(\n `${base(store_id)}/entries/${params.id}`,\n options,\n );\n },\n\n find(\n params: GetEntriesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<CollectionEntry>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<CollectionEntry>>(\n `${base(store_id)}/entries`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n },\n\n form: {\n get(params: GetFormParams, options?: RequestOptions): Promise<Form> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.key) {\n identifier = `${store_id}:${params.key}`;\n } else {\n throw new Error(\"GetFormParams requires id or key\");\n }\n\n return apiConfig.httpClient.get<Form>(\n `${base(store_id)}/forms/${identifier}`,\n options,\n );\n },\n\n submit(\n params: SubmitFormParams,\n options?: RequestOptions,\n ): Promise<FormSubmission> {\n const { store_id, form_id, ...payload } = params;\n const target_store_id = store_id || apiConfig.storeId;\n if (!form_id) {\n throw new Error(\"SubmitFormParams requires form_id\");\n }\n\n return apiConfig.httpClient.post<FormSubmission>(\n `${base(target_store_id)}/forms/${form_id}/submissions`,\n { ...payload, form_id, store_id: target_store_id },\n options,\n );\n },\n },\n\n taxonomy: {\n get(\n params: GetTaxonomyParams,\n options?: RequestOptions,\n ): Promise<Taxonomy> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.key) {\n identifier = `${store_id}:${params.key}`;\n } else {\n throw new Error(\"GetTaxonomyParams requires id or key\");\n }\n\n return apiConfig.httpClient.get<Taxonomy>(\n `${base(store_id)}/taxonomies/${identifier}`,\n options,\n );\n },\n\n getChildren(\n params: GetTaxonomyChildrenParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Taxonomy>> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<PaginatedResponse<Taxonomy>>(\n `${base(store_id)}/taxonomies/${params.id}/children`,\n options,\n );\n },\n },\n },\n\n eshop: {\n product: {\n get(\n params: GetProductParams,\n options?: RequestOptions,\n ): Promise<Product> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${store_id}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProductParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get<Product>(\n `${base(store_id)}/products/${identifier}`,\n options,\n );\n },\n\n find(\n params: GetProductsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Product>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Product>>(\n `${base(store_id)}/products`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n },\n\n cart: {\n current(\n params: GetCurrentCartParams = {},\n options?: RequestOptions,\n ): Promise<Cart> {\n const store_id = params.store_id || apiConfig.storeId;\n const { store_id: _store_id, ...payload } = params;\n return apiConfig.httpClient.post<Cart>(\n `${base(store_id)}/carts/current`,\n {\n ...payload,\n store_id,\n market: payload.market || apiConfig.market,\n },\n options,\n );\n },\n\n get(params: GetCartParams, options?: RequestOptions): Promise<Cart> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<Cart>(\n `${base(store_id)}/carts/${params.id}`,\n {\n ...options,\n params: params.token ? { token: params.token } : options?.params,\n },\n );\n },\n\n update(\n params: UpdateCartParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const { store_id, items, ...payload } = params;\n const target = store_id || apiConfig.storeId;\n return apiConfig.httpClient.put<Cart>(\n `${base(target)}/carts/${params.id}`,\n {\n ...payload,\n store_id: target,\n ...(items ? { items: sanitizePublicCheckoutItems(items) } : {}),\n },\n options,\n );\n },\n\n addItem(\n params: AddCartItemParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const { store_id, item, ...payload } = params;\n const target = store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<Cart>(\n `${base(target)}/carts/${params.id}/items`,\n {\n ...payload,\n store_id: target,\n item: sanitizePublicCheckoutItems([item])[0],\n },\n options,\n );\n },\n\n removeItem(\n params: RemoveCartItemParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const { store_id, ...payload } = params;\n const target = store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<Cart>(\n `${base(target)}/carts/${params.id}/items/remove`,\n { ...payload, store_id: target },\n options,\n );\n },\n\n clear(\n params: ClearCartParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<Cart>(\n `${base(store_id)}/carts/${params.id}/clear`,\n { id: params.id, store_id },\n options,\n );\n },\n\n quote(\n params: QuoteCartParams,\n options?: RequestOptions,\n ): Promise<OrderQuote> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<OrderQuote>(\n `${base(store_id)}/carts/${params.id}/quote`,\n { id: params.id, store_id },\n options,\n );\n },\n\n checkout(\n params: CheckoutCartParams,\n options?: RequestOptions,\n ): Promise<OrderCheckoutResult> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<OrderCheckoutResult>(\n `${base(store_id)}/carts/${params.id}/checkout`,\n {\n id: params.id,\n store_id,\n payment_method_key: params.payment_method_key,\n confirmation_token_id: params.confirmation_token_id,\n return_url: params.return_url,\n },\n options,\n );\n },\n },\n\n order: {\n get(params: GetOrderParams, options?: RequestOptions): Promise<Order> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<Order>(\n `${base(store_id)}/orders/${params.id}`,\n options,\n );\n },\n\n find(\n params: GetOrdersParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Order>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Order>>(\n `${base(store_id)}/orders`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n downloadDigitalAccess(\n params: DownloadDigitalAccessParams,\n options?: RequestOptions,\n ): Promise<DigitalAccessDownloadResponse> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<DigitalAccessDownloadResponse>(\n `${base(store_id)}/orders/${params.order_id}/digital-access/${params.grant_id}/download`,\n {},\n options,\n );\n },\n\n findDigitalAccess(\n params: FindDigitalAccessGrantsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<DigitalAccessGrant>> {\n const { order_id, store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<DigitalAccessGrant>>(\n `${base(store_id)}/orders/${order_id}/digital-access`,\n { ...options, params: queryParams },\n );\n },\n\n getDigitalAccess(\n params: GetDigitalAccessGrantParams,\n options?: RequestOptions,\n ): Promise<DigitalAccessGrant> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<DigitalAccessGrant>(\n `${base(store_id)}/orders/${params.order_id}/digital-access/${params.grant_id}`,\n options,\n );\n },\n },\n\n service: {\n get(\n params: GetServiceParams,\n options?: RequestOptions,\n ): Promise<Service> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${store_id}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetServiceParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get<Service>(\n `${base(store_id)}/services/${identifier}`,\n options,\n );\n },\n\n find(\n params: GetServicesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Service>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Service>>(\n `${base(store_id)}/services`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n findProviders(\n params: FindServiceProvidersParams,\n options?: RequestOptions,\n ): Promise<ServiceProvider[]> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<ServiceProvider[]>(\n `${base(store_id)}/service-providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n getAvailability(\n params: GetAvailabilityParams,\n options?: RequestOptions,\n ): Promise<AvailabilityResponse> {\n const { store_id, ...queryParams } = params;\n const target_store_id = store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<AvailabilityResponse>(\n `${base(target_store_id)}/services/availability`,\n { ...options, params: queryParams },\n );\n },\n },\n\n provider: {\n get(\n params: GetProviderParams,\n options?: RequestOptions,\n ): Promise<Provider> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${store_id}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProviderParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get<Provider>(\n `${base(store_id)}/providers/${identifier}`,\n options,\n );\n },\n\n find(\n params: GetProvidersParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Provider>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Provider>>(\n `${base(store_id)}/providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n },\n },\n\n crm: {\n contact: {\n identify(\n params?: { email?: string; market?: string },\n options?: RequestOptions,\n ): Promise<IdentifyResponse> {\n return submitIdentification(\"identify\", params, options);\n },\n\n requestCode(\n params?: { email?: string; market?: string },\n options?: RequestOptions,\n ): Promise<IdentifyResponse> {\n return submitIdentification(\"code\", params, options);\n },\n\n async verify(\n params: { challenge_id: string; code: string },\n options?: RequestOptions,\n ): Promise<VerifyResponse> {\n const store_id = apiConfig.storeId;\n const result = await apiConfig.httpClient.post<VerifyResponse>(\n `${base(store_id)}/account/verify`,\n { store_id, challenge_id: params.challenge_id, code: params.code },\n options,\n );\n if (result?.token?.token) {\n const pending = pendingVerifications.get(params.challenge_id);\n const identifiedStore =\n pending?.store ||\n (await apiConfig.httpClient.get<Store>(base(store_id), options));\n updateContactSession((prev) =>\n prev\n ? {\n ...prev,\n access_token: result.token.token,\n contact: result.contact,\n }\n : {\n access_token: result.token.token,\n contact: result.contact,\n store: identifiedStore,\n market: pending?.market || null,\n },\n );\n pendingVerifications.delete(params.challenge_id);\n }\n return result;\n },\n\n async logout(options?: RequestOptions): Promise<LogoutResponse> {\n const store_id = apiConfig.storeId;\n try {\n await apiConfig.httpClient.post<void>(\n `${base(store_id)}/account/logout`,\n {},\n options,\n );\n } finally {\n updateContactSession(() => null);\n }\n },\n\n getMe(options?: RequestOptions): Promise<Contact> {\n return apiConfig.httpClient.get<Contact>(\n `${base()}/account/me`,\n options,\n );\n },\n },\n\n contactList: {\n get(\n params: GetContactListParams,\n options?: RequestOptions,\n ): Promise<StorefrontContactList> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<StorefrontContactList>(\n `${base(store_id)}/contact-lists/${params.id}`,\n options,\n );\n },\n\n find(\n params?: FindStorefrontContactListsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<StorefrontContactList>> {\n const { store_id, ...queryParams } = params || {};\n return apiConfig.httpClient.get<PaginatedResponse<StorefrontContactList>>(\n `${base(store_id)}/contact-lists`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n plans: {\n find(\n params: FindStorefrontContactListPlansParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<StorefrontContactListPlan>> {\n const { store_id, contact_list_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<StorefrontContactListPlan>>(\n `${base(store_id)}/contact-lists/${contact_list_id}/plans`,\n { ...options, params: queryParams },\n );\n },\n },\n\n memberships: {\n find(\n params?: FindStorefrontContactListMembershipsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<StorefrontContactListMembership>> {\n const { store_id, ...queryParams } = params || {};\n return apiConfig.httpClient.get<\n PaginatedResponse<StorefrontContactListMembership>\n >(`${base(store_id)}/contact-lists/memberships`, {\n ...options,\n params: queryParams,\n });\n },\n },\n\n subscribe(\n params: SubscribeContactListParams,\n options?: RequestOptions,\n ): Promise<ContactListSubscribeResponse> {\n const { store_id, id, ...payload } = params;\n return apiConfig.httpClient.post<ContactListSubscribeResponse>(\n `${base(store_id)}/contact-lists/${id}/subscribe`,\n payload,\n options,\n );\n },\n\n checkAccess(\n params: ContactListAccessParams,\n options?: RequestOptions,\n ): Promise<ContactListAccessResponse> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<ContactListAccessResponse>(\n `${base(store_id)}/contact-lists/${params.id}/access`,\n options,\n );\n },\n\n checkContentAccess(\n params: ContactListContentAccessParams,\n options?: RequestOptions,\n ): Promise<ContactListContentAccessResponse> {\n const { store_id, ...payload } = params;\n return apiConfig.httpClient.post<ContactListContentAccessResponse>(\n `${base(store_id)}/contact-lists/access`,\n payload,\n options,\n );\n },\n\n manage(\n token: string,\n options?: RequestOptions,\n ): Promise<ContactListManagementResponse> {\n return apiConfig.httpClient.post<ContactListManagementResponse>(\n `${base()}/contact-lists/manage`,\n { token },\n options,\n );\n },\n\n unsubscribe(\n token: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean }> {\n const headers = { ...options?.headers };\n for (const name of Object.keys(headers)) {\n if (name.toLowerCase() === \"content-type\") delete headers[name];\n }\n return apiConfig.httpClient.post<{ success: boolean }>(\n `${base()}/contact-lists/unsubscribe`,\n new URLSearchParams({ \"List-Unsubscribe\": \"One-Click\" }),\n {\n ...options,\n params: { ...(options?.params || {}), token },\n headers: {\n ...headers,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n },\n );\n },\n\n confirm(\n token: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean }> {\n return apiConfig.httpClient.post<{ success: boolean }>(\n `${base()}/contact-lists/confirm`,\n { token },\n options,\n );\n },\n },\n },\n\n action: createActionApi(apiConfig),\n experiments: {\n use(\n params: UseExperimentParams,\n options?: RequestOptions,\n ): Promise<ExperimentUseResponse> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<ExperimentUseResponse>(\n `${base(store_id)}/experiments/use`,\n { key: params.key },\n options,\n );\n },\n },\n };\n};\n","import type {\n AddCartItemParams,\n CheckoutCartParams,\n ClearCartParams,\n GetCartParams,\n GetCurrentCartParams,\n QuoteCartParams,\n RemoveCartItemParams,\n RequestOptions,\n UpdateCartParams,\n} from \"./types/api\";\nimport type { Cart, OrderCheckoutResult, OrderQuote } from \"./types\";\n\nexport interface CartApi {\n current(params?: GetCurrentCartParams, options?: RequestOptions): Promise<Cart>;\n get(params: GetCartParams, options?: RequestOptions): Promise<Cart>;\n update(params: UpdateCartParams, options?: RequestOptions): Promise<Cart>;\n addItem(params: AddCartItemParams, options?: RequestOptions): Promise<Cart>;\n removeItem(params: RemoveCartItemParams, options?: RequestOptions): Promise<Cart>;\n clear(params: ClearCartParams, options?: RequestOptions): Promise<Cart>;\n quote(params: QuoteCartParams, options?: RequestOptions): Promise<OrderQuote>;\n checkout(params: CheckoutCartParams, options?: RequestOptions): Promise<OrderCheckoutResult>;\n}\n\nexport interface CartControllerState {\n cart: Cart | null;\n quote: OrderQuote | null;\n checkoutResult: OrderCheckoutResult | null;\n loading: boolean;\n initialized: boolean;\n error: unknown;\n}\n\nexport type CartControllerListener = (state: CartControllerState) => void;\n\nexport type CartControllerInitParams = GetCurrentCartParams | GetCartParams;\nexport type CartControllerRefreshParams = GetCurrentCartParams | GetCartParams;\nexport type CartControllerUpdateParams = Omit<UpdateCartParams, \"id\"> & { id?: string };\nexport type CartControllerAddItemParams = Omit<AddCartItemParams, \"id\"> & { id?: string };\nexport type CartControllerRemoveItemParams = RemoveCartItemParams extends infer Params\n ? Params extends { id: string }\n ? Omit<Params, \"id\"> & { id?: string }\n : never\n : never;\nexport type CartControllerClearParams = Omit<ClearCartParams, \"id\"> & { id?: string };\nexport type CartControllerQuoteParams = Omit<QuoteCartParams, \"id\"> & { id?: string };\nexport type CartControllerCheckoutParams = Omit<CheckoutCartParams, \"id\"> & { id?: string };\n\nexport interface CartController {\n subscribe(listener: CartControllerListener): () => void;\n getState(): CartControllerState;\n init(params?: CartControllerInitParams, options?: RequestOptions): Promise<Cart>;\n refresh(params?: CartControllerRefreshParams, options?: RequestOptions): Promise<Cart>;\n addItem(params: CartControllerAddItemParams, options?: RequestOptions): Promise<Cart>;\n update(params: CartControllerUpdateParams, options?: RequestOptions): Promise<Cart>;\n removeItem(params: CartControllerRemoveItemParams, options?: RequestOptions): Promise<Cart>;\n clear(params?: CartControllerClearParams, options?: RequestOptions): Promise<Cart>;\n quote(params?: CartControllerQuoteParams, options?: RequestOptions): Promise<OrderQuote>;\n checkout(params?: CartControllerCheckoutParams, options?: RequestOptions): Promise<OrderCheckoutResult>;\n}\n\nfunction hasCartId(params: CartControllerInitParams): params is GetCartParams {\n return \"id\" in params && typeof params.id === \"string\" && params.id.length > 0;\n}\n\nexport function createCartController(cartApi: CartApi): CartController {\n const listeners = new Set<CartControllerListener>();\n let state: CartControllerState = {\n cart: null,\n quote: null,\n checkoutResult: null,\n loading: false,\n initialized: false,\n error: null,\n };\n\n function emit(): void {\n for (const listener of listeners) {\n Promise.resolve()\n .then(() => listener(state))\n .catch(() => {});\n }\n }\n\n function setState(patch: Partial<CartControllerState>): CartControllerState {\n state = { ...state, ...patch };\n emit();\n return state;\n }\n\n function currentCartId(id?: string): string {\n const cartId = id || state.cart?.id;\n if (!cartId) {\n throw new Error(\"Cart has not been initialized and no cart id was provided\");\n }\n return cartId;\n }\n\n async function runCartMutation(operation: () => Promise<Cart>): Promise<Cart> {\n setState({ loading: true, error: null });\n try {\n const cart = await operation();\n setState({\n cart,\n quote: null,\n checkoutResult: null,\n loading: false,\n initialized: true,\n error: null,\n });\n return cart;\n } catch (error) {\n setState({ loading: false, error });\n throw error;\n }\n }\n\n return {\n subscribe(listener) {\n listeners.add(listener);\n Promise.resolve()\n .then(() => listener(state))\n .catch(() => {});\n return () => {\n listeners.delete(listener);\n };\n },\n\n getState() {\n return state;\n },\n\n init(params = {}, options) {\n if (state.initialized && state.cart) {\n return Promise.resolve(state.cart);\n }\n return this.refresh(params, options);\n },\n\n refresh(params = {}, options) {\n return runCartMutation(() =>\n hasCartId(params)\n ? cartApi.get(params, options)\n : cartApi.current(params, options),\n );\n },\n\n addItem(params, options) {\n return runCartMutation(() =>\n cartApi.addItem({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n update(params, options) {\n return runCartMutation(() =>\n cartApi.update({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n removeItem(params, options) {\n return runCartMutation(() =>\n cartApi.removeItem({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n clear(params = {}, options) {\n return runCartMutation(() =>\n cartApi.clear({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n async quote(params = {}, options) {\n setState({ loading: true, error: null });\n try {\n const quote = await cartApi.quote(\n { ...params, id: currentCartId(params.id) },\n options,\n );\n setState({ quote, loading: false, error: null });\n return quote;\n } catch (error) {\n setState({ loading: false, error });\n throw error;\n }\n },\n\n async checkout(params = {}, options) {\n setState({ loading: true, error: null });\n try {\n const checkoutResult = await cartApi.checkout(\n { ...params, id: currentCartId(params.id) },\n options,\n );\n setState({ checkoutResult, loading: false, error: null });\n return checkoutResult;\n } catch (error) {\n setState({ loading: false, error });\n throw error;\n }\n },\n };\n}\n","\nexport const ERROR_CODES = {\n \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.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.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 \"STORE.001\": \"STORE.NOT_FOUND\",\n \"STORE.002\": \"STORE.FAILED_TO_CREATE\",\n \"STORE.003\": \"STORE.FAILED_TO_UPDATE\",\n \"STORE.004\": \"STORE.FAILED_TO_DELETE\",\n \"STORE.005\": \"STORE.FAILED_TO_GET_UPLOAD_URL\",\n \"STORE.006\": \"STORE.NAME_REQUIRED\",\n \"STORE.007\": \"STORE.STORE_ID_REQUIRED\",\n \"STORE.010\": \"STORE.DESCRIPTION_REQUIRED\",\n \"STORE.011\": \"STORE.SLUG_INVALID\",\n\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.STORE_ID_REQUIRED\",\n \"PROVIDER.008\": \"PROVIDER.DESCRIPTION_REQUIRED\",\n};\n\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 STORE: {\n NOT_FOUND: \"STORE.NOT_FOUND\",\n FAILED_TO_CREATE: \"STORE.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"STORE.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"STORE.FAILED_TO_DELETE\",\n FAILED_TO_GET_UPLOAD_URL: \"STORE.FAILED_TO_GET_UPLOAD_URL\",\n NAME_REQUIRED: \"STORE.NAME_REQUIRED\",\n STORE_ID_REQUIRED: \"STORE.STORE_ID_REQUIRED\",\n DESCRIPTION_REQUIRED: \"STORE.DESCRIPTION_REQUIRED\",\n SLUG_INVALID: \"STORE.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\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 const validationErrors = serverError?.validationErrors ?? [];\n\n return {\n ...serverError,\n validationErrors: 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\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;\n","export type QueryParams = object;\n\nexport function buildQueryString(params: QueryParams): string {\n const queryParts = Object.entries(params as Record<string, unknown>).flatMap(\n ([key, value]) => {\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") {\n return [`${key}=${encodeURIComponent(value)}`];\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return [`${key}=${value}`];\n }\n if (Array.isArray(value) || typeof value === \"object\") {\n return [`${key}=${encodeURIComponent(JSON.stringify(value))}`];\n }\n return [];\n },\n );\n\n return queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\";\n}\n\nexport function appendQueryString(url: string, params: QueryParams): string {\n const queryString = buildQueryString(params);\n return queryString ? `${url}${queryString}` : url;\n}\n","import {\n convertServerErrorToRequestError,\n type ServerError,\n} from \"../utils/errors\";\nimport { buildQueryString, type QueryParams } from \"../utils/queryParams\";\n\nexport interface TokenSet {\n access_token: string;\n refresh_token?: string;\n access_expires_at?: number;\n}\n\nexport interface AuthStorage {\n getTokens(): TokenSet | null;\n onTokensRefreshed(tokens: TokenSet): void;\n onForcedLogout(): void;\n}\n\nexport interface RequestSuccessContext<T = unknown> {\n data: T;\n method: string;\n url: string;\n status: number;\n request?: unknown;\n duration_ms?: number;\n request_id?: string | null;\n}\n\nexport interface RequestErrorContext {\n error: unknown;\n method: string;\n url: string;\n status?: number;\n request?: unknown;\n response?: unknown;\n duration_ms?: number;\n request_id?: string | null;\n aborted?: boolean;\n}\n\nexport interface RequestOptions<T = unknown> {\n headers?: Record<string, string>;\n params?: QueryParams;\n signal?: AbortSignal;\n transformRequest?: (data: unknown) => unknown;\n onSuccess?: (ctx: RequestSuccessContext<T>) => void | Promise<void>;\n onError?: (ctx: RequestErrorContext) => void | Promise<void>;\n}\n\nexport interface HttpClient {\n get<T>(path: string, opts?: RequestOptions<T>): Promise<T>;\n post<T>(path: string, body: unknown, opts?: RequestOptions<T>): Promise<T>;\n put<T>(path: string, body: unknown, opts?: RequestOptions<T>): Promise<T>;\n patch<T>(path: string, body: unknown, opts?: RequestOptions<T>): Promise<T>;\n delete<T>(path: string, opts?: RequestOptions<T>): Promise<T>;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n storeId: string;\n authStorage: AuthStorage;\n refreshPath?: string | (() => string);\n navigate?: (path: string) => void;\n loginFallbackPath?: string;\n}\n\ninterface HttpRequestErrorDetails {\n statusCode?: number;\n validationErrors?: ServerError[\"validationErrors\"];\n method?: string;\n url?: string;\n requestId?: string;\n aborted?: boolean;\n}\n\nfunction requestError(\n name: \"ApiError\" | \"NetworkError\" | \"ParseError\" | \"AbortError\",\n message: string,\n details: HttpRequestErrorDetails = {},\n): Error & HttpRequestErrorDetails {\n return Object.assign(new Error(message), { name }, details);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isTokenSet(value: unknown): value is TokenSet {\n return (\n isRecord(value) &&\n typeof value.access_token === \"string\" &&\n (value.refresh_token === undefined ||\n typeof value.refresh_token === \"string\") &&\n (value.access_expires_at === undefined ||\n typeof value.access_expires_at === \"number\")\n );\n}\n\nfunction isValidationError(\n value: unknown,\n): value is ServerError[\"validationErrors\"][number] {\n return (\n isRecord(value) &&\n typeof value.field === \"string\" &&\n typeof value.error === \"string\"\n );\n}\n\nfunction toServerError(value: unknown, statusCode: number): ServerError {\n const payload = isRecord(value) ? value : {};\n const validationErrors = Array.isArray(payload.validationErrors)\n ? payload.validationErrors.filter(isValidationError)\n : [];\n\n return {\n message:\n typeof payload.message === \"string\" ? payload.message : \"Request failed\",\n error: typeof payload.error === \"string\" ? payload.error : \"REQUEST_FAILED\",\n statusCode:\n typeof payload.statusCode === \"number\" ? payload.statusCode : statusCode,\n validationErrors,\n };\n}\n\nexport function createHttpClient(cfg: HttpClientConfig): HttpClient {\n const { authStorage } = cfg;\n let refreshPromise: Promise<void> | null = null;\n\n function getRefreshEndpoint() {\n const refreshPath =\n typeof cfg.refreshPath === \"function\"\n ? cfg.refreshPath()\n : cfg.refreshPath || \"/v1/auth/refresh\";\n return `${cfg.baseUrl}${refreshPath}`;\n }\n\n async function ensureFreshToken() {\n if (refreshPromise) {\n return refreshPromise;\n }\n\n refreshPromise = (async () => {\n const tokens = authStorage.getTokens();\n const refresh_token = tokens?.refresh_token;\n if (!refresh_token) {\n authStorage.onForcedLogout();\n throw requestError(\"ApiError\", \"No refresh token available\", {\n statusCode: 401,\n });\n }\n\n const refRes = await fetch(getRefreshEndpoint(), {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ refresh_token }),\n });\n\n if (!refRes.ok) {\n authStorage.onForcedLogout();\n throw requestError(\"ApiError\", \"Token refresh failed\", {\n statusCode: 401,\n });\n }\n\n const data: unknown = await refRes.json();\n if (!isTokenSet(data)) {\n authStorage.onForcedLogout();\n throw requestError(\n \"ParseError\",\n \"Token refresh returned an invalid response\",\n { statusCode: refRes.status },\n );\n }\n authStorage.onTokensRefreshed(data);\n })().finally(() => {\n refreshPromise = null;\n });\n\n return refreshPromise;\n }\n\n async function request<T>(\n method: string,\n path: string,\n body?: unknown,\n options?: RequestOptions<T>,\n retried = false,\n ): Promise<T> {\n if (!retried && options?.transformRequest) {\n body = options.transformRequest(body);\n }\n\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...(options?.headers || {}),\n };\n\n let tokens = authStorage.getTokens();\n const nowSec = Date.now() / 1000;\n if (tokens?.access_expires_at && nowSec > tokens.access_expires_at) {\n await ensureFreshToken();\n tokens = authStorage.getTokens();\n }\n\n if (tokens?.access_token) {\n headers[\"Authorization\"] = `Bearer ${tokens.access_token}`;\n }\n\n const finalPath = options?.params\n ? path + buildQueryString(options.params)\n : path;\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal: options?.signal,\n };\n if (![\"GET\", \"DELETE\"].includes(method) && body !== undefined) {\n fetchOptions.body =\n body instanceof URLSearchParams\n ? body.toString()\n : JSON.stringify(body);\n }\n\n const fullUrl = `${cfg.baseUrl}${finalPath}`;\n let res: Response;\n let data: unknown;\n const startedAt = Date.now();\n\n try {\n res = await fetch(fullUrl, fetchOptions);\n } catch (error) {\n const aborted =\n options?.signal?.aborted ||\n (error instanceof Error && error.name === \"AbortError\");\n const err = requestError(\n aborted ? \"AbortError\" : \"NetworkError\",\n error instanceof Error ? error.message : \"Network request failed\",\n { method, url: fullUrl, aborted },\n );\n if (options?.onError && method !== \"GET\") {\n Promise.resolve(\n options.onError({ error: err, method, url: fullUrl, aborted }),\n ).catch(() => {});\n }\n throw err;\n }\n\n if (res.status === 401 && !retried) {\n await ensureFreshToken();\n return request<T>(method, path, body, options, true);\n }\n\n try {\n const contentLength = res.headers.get(\"content-length\");\n const contentType = res.headers.get(\"content-type\");\n if (\n res.status === 204 ||\n contentLength === \"0\" ||\n !contentType?.includes(\"application/json\")\n ) {\n data = {};\n } else {\n data = await res.json();\n }\n } catch (error) {\n const err = requestError(\"ParseError\", \"Failed to parse response\", {\n method,\n url: fullUrl,\n statusCode: res.status,\n });\n if (options?.onError && method !== \"GET\") {\n Promise.resolve(\n options.onError({\n error: err,\n method,\n url: fullUrl,\n status: res.status,\n }),\n ).catch(() => {});\n }\n throw err;\n }\n\n if (!res.ok) {\n const serverErr = toServerError(data, res.status);\n const reqErr = convertServerErrorToRequestError(serverErr);\n const requestId =\n res.headers.get(\"x-request-id\") || res.headers.get(\"request-id\");\n const err = requestError(\"ApiError\", serverErr.message, {\n statusCode: serverErr.statusCode,\n validationErrors: reqErr.validationErrors,\n method,\n url: fullUrl,\n requestId: requestId || undefined,\n });\n if (options?.onError && method !== \"GET\") {\n Promise.resolve(\n options.onError({\n error: err,\n method,\n url: fullUrl,\n status: res.status,\n response: serverErr,\n request_id: requestId || null,\n duration_ms: Date.now() - startedAt,\n }),\n ).catch(() => {});\n }\n throw err;\n }\n\n if (options?.onSuccess && method !== \"GET\") {\n const requestId =\n res.headers.get(\"x-request-id\") || res.headers.get(\"request-id\");\n Promise.resolve(\n options.onSuccess({\n data: data as T,\n method,\n url: fullUrl,\n status: res.status,\n request_id: requestId || null,\n duration_ms: Date.now() - startedAt,\n }),\n ).catch(() => {});\n }\n return data as T;\n }\n\n return {\n get: <T>(path: string, opts?: RequestOptions<T>) =>\n request<T>(\"GET\", path, undefined, opts),\n post: <T>(path: string, body: unknown, opts?: RequestOptions<T>) =>\n request<T>(\"POST\", path, body, opts),\n put: <T>(path: string, body: unknown, opts?: RequestOptions<T>) =>\n request<T>(\"PUT\", path, body, opts),\n patch: <T>(path: string, body: unknown, opts?: RequestOptions<T>) =>\n request<T>(\"PATCH\", path, body, opts),\n delete: <T>(path: string, opts?: RequestOptions<T>) =>\n request<T>(\"DELETE\", path, undefined, opts),\n };\n}\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport type SupportAgentStatus = \"draft\" | \"active\" | \"archived\";\nexport type SupportChannelStatus = \"draft\" | \"active\" | \"disabled\" | \"archived\";\nexport type SupportChannelType = \"web\" | \"email\";\n\nexport interface SupportAgentNode {\n type: \"message\" | \"input\" | \"ai_handoff\" | \"action\";\n text?: string;\n buttons?: string[];\n prompt?: string;\n field?: string;\n input_type?: \"text\" | \"email\" | \"phone\";\n validation?: string;\n system_prompt_override?: string;\n tools?: string[];\n action?: SupportAction;\n}\n\nexport interface SupportAction {\n type: \"end_conversation\" | \"human_handoff\";\n message?: string;\n}\n\nexport interface SupportAgentEdge {\n source: string;\n target: string;\n trigger: EdgeTrigger;\n}\n\nexport type EdgeTrigger =\n | { type: \"button\"; label: string }\n | { type: \"input\"; field: string }\n | { type: \"default\" };\n\nexport interface SupportAgentAiConfig {\n system_prompt: string;\n tools: string[];\n max_context_messages: number;\n}\n\nexport interface SupportAgent {\n id: string;\n key: string;\n store_id: string;\n name: string;\n status: SupportAgentStatus;\n entry_node_id: string;\n nodes: Record<string, SupportAgentNode>;\n edges: SupportAgentEdge[];\n ai_config?: SupportAgentAiConfig;\n channel_ids: string[];\n notes?: string | null;\n created_at: number;\n updated_at: number;\n}\n\nexport type SupportChannelConfig =\n | {\n type: \"web\";\n widget_key: string;\n allowed_origins?: string[];\n }\n | {\n type: \"email\";\n mailbox_id: string;\n };\n\nexport interface SupportChannel {\n id: string;\n store_id: string;\n key: string;\n name: string;\n status: SupportChannelStatus;\n channel_type: SupportChannelType;\n config: SupportChannelConfig;\n created_at: number;\n updated_at: number;\n}\n\nexport type SupportConversationChannelContext =\n | {\n type: \"web\";\n visitor_id?: string | null;\n session_id?: string | null;\n }\n | {\n type: \"email\";\n thread_id: string;\n reply_to: string;\n message_id?: string | null;\n references: string[];\n };\n\nexport interface SupportConversation {\n id: string;\n store_id: string;\n agent_id?: string;\n channel_id?: string | null;\n channel_type: SupportChannelType;\n channel_context: SupportConversationChannelContext;\n current_node_id?: string;\n contact_id?: string;\n assigned_account_id?: string | null;\n status: \"active\" | \"ai_mode\" | \"escalated\" | \"resolved\";\n data: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: number;\n updated_at: number;\n}\n\nexport interface SupportMessage {\n id: string;\n store_id: string;\n conversation_id: string;\n role: \"system\" | \"user\" | \"assistant\" | \"staff\" | \"action\";\n content: string;\n buttons?: string[];\n metadata: Record<string, unknown>;\n created_at: number;\n}\n\nexport interface SupportConversationResponse {\n conversation: SupportConversation;\n messages: SupportMessage[];\n}\n\nexport interface SupportConversationStartResponse extends SupportConversationResponse {\n support_token: string;\n}\n\nexport interface StartSupportConversationParams {\n store_id: string;\n agent_key?: string;\n channel_id?: string;\n visitor_id?: string;\n session_id?: string;\n contact_id?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SendSupportMessageParams {\n message_id: string;\n store_id: string;\n conversation_id: string;\n input: { type: \"button\"; label: string } | { type: \"text\"; content: string };\n}\n\nexport interface ReceiveSupportChannelMessageParams {\n store_id: string;\n channel_id: string;\n channel_context: SupportConversationChannelContext;\n external_message_id?: string;\n content: string;\n metadata?: Record<string, unknown>;\n received_at?: number;\n}\n\nexport interface ReplySupportConversationParams {\n message_id: string;\n store_id: string;\n conversation_id: string;\n content: string;\n resolve?: boolean;\n}\n\nexport interface ResolveSupportConversationParams {\n store_id: string;\n conversation_id: string;\n}\n\nexport interface AssignSupportConversationParams {\n store_id: string;\n conversation_id: string;\n account_id?: string | null;\n}\n\nexport interface GetSupportConversationParams {\n store_id: string;\n conversation_id: string;\n message_limit?: number;\n after_created_at?: number;\n after_id?: string;\n}\n\nexport type StorefrontSendSupportMessageParams = Omit<\n SendSupportMessageParams,\n \"store_id\"\n> & { support_token: string };\n\nexport type StorefrontGetSupportConversationParams = Omit<\n GetSupportConversationParams,\n \"store_id\"\n> & { support_token: string };\n\nexport interface FindSupportConversationsParams {\n store_id: string;\n status?: string;\n agent_id?: string;\n channel_id?: string;\n channel_type?: SupportChannelType;\n query?: string;\n limit?: number;\n cursor?: string;\n}\n\nfunction supportConversationQuery(params: GetSupportConversationParams): string {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.message_limit) qs.set(\"message_limit\", String(params.message_limit));\n if (typeof params.after_created_at === \"number\") qs.set(\"after_created_at\", String(params.after_created_at));\n if (params.after_id) qs.set(\"after_id\", params.after_id);\n return qs.toString();\n}\n\nfunction storefrontSupportOptions(\n supportToken: string,\n options?: RequestOptions,\n): RequestOptions {\n if (!/^[0-9a-f]{64}$/.test(supportToken)) {\n throw new Error(\"support_token must be a 64-character lowercase hexadecimal token\");\n }\n const headers = { ...options?.headers };\n for (const name of Object.keys(headers)) {\n if (name.toLowerCase() === \"x-arky-support-token\") delete headers[name];\n }\n return {\n ...options,\n headers: {\n ...headers,\n \"X-Arky-Support-Token\": supportToken,\n },\n };\n}\n\nexport function createStorefrontSupportApi(config: ApiConfig) {\n const { httpClient } = config;\n\n return {\n async startConversation(\n params: Omit<StartSupportConversationParams, \"store_id\"> = {},\n opts?: RequestOptions\n ): Promise<SupportConversationStartResponse> {\n const storeId = config.storeId;\n return httpClient.post<SupportConversationStartResponse>(\n `/v1/storefront/${storeId}/support/conversations`,\n { ...params, store_id: storeId },\n opts\n );\n },\n\n async sendMessage(\n params: StorefrontSendSupportMessageParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n const { support_token, ...request } = params;\n const storeId = config.storeId;\n return httpClient.post<SupportConversationResponse>(\n `/v1/storefront/${storeId}/support/conversations/${request.conversation_id}/messages`,\n { ...request, store_id: storeId },\n storefrontSupportOptions(support_token, opts)\n );\n },\n\n async getConversation(\n params: StorefrontGetSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n const { support_token, ...request } = params;\n const storeId = config.storeId;\n const qs = supportConversationQuery({ ...request, store_id: storeId });\n return httpClient.get<SupportConversationResponse>(\n `/v1/storefront/${storeId}/support/conversations/${request.conversation_id}?${qs}`,\n storefrontSupportOptions(support_token, opts)\n );\n },\n };\n}\n\nexport interface CreateSupportAgentParams {\n store_id: string;\n key: string;\n name: string;\n status?: SupportAgentStatus;\n entry_node_id: string;\n nodes: Record<string, SupportAgentNode>;\n edges: SupportAgentEdge[];\n ai_config?: SupportAgentAiConfig;\n channel_ids?: string[];\n notes?: string | null;\n}\n\nexport interface UpdateSupportAgentParams {\n store_id: string;\n id: string;\n name?: string;\n status?: SupportAgentStatus;\n entry_node_id?: string;\n nodes?: Record<string, SupportAgentNode>;\n edges?: SupportAgentEdge[];\n ai_config?: SupportAgentAiConfig;\n channel_ids?: string[];\n notes?: string | null;\n}\n\nexport interface CreateSupportChannelParams {\n store_id: string;\n key: string;\n name: string;\n status?: SupportChannelStatus;\n channel_type: SupportChannelType;\n config: SupportChannelConfig;\n}\n\nexport interface UpdateSupportChannelParams {\n store_id: string;\n id: string;\n key?: string;\n name?: string;\n status?: SupportChannelStatus;\n channel_type?: SupportChannelType;\n config?: SupportChannelConfig;\n}\n\nexport interface FindSupportChannelsParams {\n store_id: string;\n status?: SupportChannelStatus;\n channel_type?: SupportChannelType;\n limit?: number;\n cursor?: string;\n}\n\nexport function createAdminSupportApi(config: ApiConfig) {\n const { httpClient } = config;\n\n return {\n channel: {\n async create(\n params: CreateSupportChannelParams,\n opts?: RequestOptions\n ): Promise<SupportChannel> {\n return httpClient.post<SupportChannel>(\n `/v1/stores/${params.store_id}/support/channels`,\n params,\n opts\n );\n },\n\n async get(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<SupportChannel> {\n return httpClient.get<SupportChannel>(\n `/v1/stores/${params.store_id}/support/channels/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n\n async find(\n params: FindSupportChannelsParams,\n opts?: RequestOptions\n ): Promise<{ items: SupportChannel[]; cursor?: string }> {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.status) qs.set(\"status\", params.status);\n if (params.channel_type) qs.set(\"channel_type\", params.channel_type);\n if (params.limit) qs.set(\"limit\", String(params.limit));\n if (params.cursor) qs.set(\"cursor\", params.cursor);\n return httpClient.get<{ items: SupportChannel[]; cursor?: string }>(\n `/v1/stores/${params.store_id}/support/channels?${qs}`,\n opts\n );\n },\n\n async update(\n params: UpdateSupportChannelParams,\n opts?: RequestOptions\n ): Promise<SupportChannel> {\n return httpClient.put<SupportChannel>(\n `/v1/stores/${params.store_id}/support/channels/${params.id}`,\n params,\n opts\n );\n },\n\n async delete(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<void> {\n return httpClient.delete<void>(\n `/v1/stores/${params.store_id}/support/channels/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n\n async receiveMessage(\n params: ReceiveSupportChannelMessageParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n return httpClient.post<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/channels/${params.channel_id}/messages`,\n params,\n opts\n );\n },\n },\n\n agent: {\n async create(\n params: CreateSupportAgentParams,\n opts?: RequestOptions\n ): Promise<SupportAgent> {\n return httpClient.post<SupportAgent>(\n `/v1/stores/${params.store_id}/support/agents`,\n params,\n opts\n );\n },\n\n async get(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<SupportAgent> {\n return httpClient.get<SupportAgent>(\n `/v1/stores/${params.store_id}/support/agents/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n\n async find(\n params: { store_id: string; status?: string; limit?: number; cursor?: string },\n opts?: RequestOptions\n ): Promise<{ items: SupportAgent[]; cursor?: string }> {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.status) qs.set(\"status\", params.status);\n if (params.limit) qs.set(\"limit\", String(params.limit));\n if (params.cursor) qs.set(\"cursor\", params.cursor);\n return httpClient.get<{ items: SupportAgent[]; cursor?: string }>(\n `/v1/stores/${params.store_id}/support/agents?${qs}`,\n opts\n );\n },\n\n async update(\n params: UpdateSupportAgentParams,\n opts?: RequestOptions\n ): Promise<SupportAgent> {\n return httpClient.put<SupportAgent>(\n `/v1/stores/${params.store_id}/support/agents/${params.id}`,\n params,\n opts\n );\n },\n\n async delete(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<void> {\n return httpClient.delete<void>(\n `/v1/stores/${params.store_id}/support/agents/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n },\n\n conversation: {\n async find(\n params: FindSupportConversationsParams,\n opts?: RequestOptions\n ): Promise<{ items: SupportConversation[]; cursor?: string }> {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.status) qs.set(\"status\", params.status);\n if (params.agent_id) qs.set(\"agent_id\", params.agent_id);\n if (params.channel_id) qs.set(\"channel_id\", params.channel_id);\n if (params.channel_type) qs.set(\"channel_type\", params.channel_type);\n if (params.query) qs.set(\"query\", params.query);\n if (params.limit) qs.set(\"limit\", String(params.limit));\n if (params.cursor) qs.set(\"cursor\", params.cursor);\n return httpClient.get<{ items: SupportConversation[]; cursor?: string }>(\n `/v1/stores/${params.store_id}/support/conversations?${qs}`,\n opts\n );\n },\n\n async get(\n params: GetSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n const qs = supportConversationQuery(params);\n return httpClient.get<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}?${qs}`,\n opts\n );\n },\n\n async sendMessage(\n params: SendSupportMessageParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n return httpClient.post<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/messages`,\n params,\n opts\n );\n },\n\n async reply(\n params: ReplySupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n return httpClient.post<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/reply`,\n params,\n opts\n );\n },\n\n async resolve(\n params: ResolveSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversation> {\n return httpClient.post<SupportConversation>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/resolve`,\n params,\n opts\n );\n },\n\n async assign(\n params: AssignSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversation> {\n return httpClient.post<SupportConversation>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/assign`,\n params,\n opts\n );\n },\n },\n };\n}\n","import type { Block } from \"../types\";\n\ntype BlockContainer = { blocks?: readonly Block[] | null };\ntype UnknownRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isBlock(value: unknown): value is Block {\n return isRecord(value) && typeof value.key === \"string\" && typeof value.type === \"string\";\n}\n\nfunction recordFromBlocks(values: readonly unknown[], locale: string): UnknownRecord {\n const result: UnknownRecord = {};\n for (const value of values) {\n if (!isBlock(value)) continue;\n result[value.key] = unwrapBlock(value, locale);\n }\n return result;\n}\n\nfunction localizedValue(value: unknown, locale: string): string {\n if (typeof value === \"string\") return value;\n if (!isRecord(value)) return \"\";\n const selected = value[locale] ?? value.en;\n return typeof selected === \"string\" ? selected : \"\";\n}\n\nfunction unwrapBlock(value: unknown, locale: string): unknown {\n if (!isBlock(value)) return value;\n if (value.type === \"localized_text\" || value.type === \"markdown\") {\n return localizedValue(value.value, locale);\n }\n if (value.type === \"array\") {\n if (!Array.isArray(value.value)) return [];\n return value.value.map((item) => {\n if (isBlock(item)) return unwrapBlock(item, locale);\n if (isRecord(item) && Array.isArray(item.value)) {\n return recordFromBlocks(item.value, locale);\n }\n if (!isRecord(item)) return item;\n return Object.fromEntries(\n Object.entries(item).map(([key, nested]) => [key, unwrapBlock(nested, locale)]),\n );\n });\n }\n if (value.type === \"object\") {\n if (Array.isArray(value.value)) return recordFromBlocks(value.value, locale);\n if (!isRecord(value.value)) return {};\n return Object.fromEntries(\n Object.entries(value.value).map(([key, nested]) => [key, unwrapBlock(nested, locale)]),\n );\n }\n return value.value;\n}\n\nfunction blockContentArray(values: readonly unknown[], locale: string): unknown {\n const blocks = values.filter(isBlock);\n if (blocks.length === 0) return [];\n if (blocks.every((block) => block.key === blocks[0].key)) {\n return blocks.map((block) => blockContentValue(block, locale));\n }\n return Object.fromEntries(\n blocks.map((block) => [block.key, blockContentValue(block, locale)]),\n );\n}\n\nfunction blockContentValue(block: Block, locale: string): unknown {\n if (block.type === \"localized_text\" || block.type === \"markdown\") {\n return localizedValue(block.value, locale);\n }\n if (block.type === \"media\") return block.value ?? null;\n if (block.type === \"array\") {\n return Array.isArray(block.value) ? blockContentArray(block.value, locale) : [];\n }\n if (block.type === \"object\") {\n if (Array.isArray(block.value)) return blockContentArray(block.value, locale);\n if (!isRecord(block.value)) return {};\n return Object.fromEntries(\n Object.entries(block.value).map(([key, value]) => [\n key,\n isBlock(value) ? blockContentValue(value, locale) : value,\n ]),\n );\n }\n return block.value;\n}\n\nexport function findBlock(entry: BlockContainer | null | undefined, key: string): Block | undefined {\n return entry?.blocks?.find((block) => block.key === key);\n}\n\nexport function getBlockLabel(block: Pick<Block, \"key\"> | null | undefined): string {\n return block?.key.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase()) ?? \"\";\n}\n\nexport function formatBlockValue(block: Block | null | undefined): string {\n if (block?.value === null || block?.value === undefined) return \"\";\n if (block.type === \"boolean\") return block.value ? \"Yes\" : \"No\";\n if (block.type === \"number\") {\n const properties = isRecord(block.properties) ? block.properties : {};\n if (properties.variant === \"DATE\" || properties.variant === \"DATE_TIME\") {\n return new Date(Number(block.value)).toLocaleDateString();\n }\n }\n if (block.type === \"media\" && isRecord(block.value)) {\n const label = block.value.name ?? block.value.title ?? block.value.id;\n return typeof label === \"string\" ? label : \"\";\n }\n return String(block.value);\n}\n\nexport function prepareBlocksForSubmission(\n formData: Readonly<Record<string, unknown>>,\n blockTypes: Readonly<Record<string, string>> = {},\n): Array<{ key: string; value: unknown }> {\n return Object.entries(formData)\n .filter(([, value]) => value !== null && value !== undefined)\n .map(([key, value]) => ({\n key,\n value: blockTypes[key] === \"array\" && !Array.isArray(value) ? [value] : value,\n }));\n}\n\nexport function extractBlockValues(blocks: readonly Block[]): Record<string, unknown> {\n return Object.fromEntries(blocks.map((block) => [block.key, block.value ?? null]));\n}\n\nexport function getBlockValue<T = unknown>(\n entry: BlockContainer | null | undefined,\n key: string,\n): T | null {\n return (findBlock(entry, key)?.value as T | undefined) ?? null;\n}\n\nexport function getBlockTextValue(block: Block | null | undefined, locale = \"en\"): string {\n if (!block || block.value === null || block.value === undefined) return \"\";\n if (block.type === \"localized_text\" || block.type === \"markdown\") {\n return localizedValue(block.value, locale);\n }\n return typeof block.value === \"string\" ? block.value : String(block.value);\n}\n\nexport function getBlockContentValue(\n entry: BlockContainer | null | undefined,\n key: string,\n locale = \"en\",\n): unknown {\n const block = findBlock(entry, key);\n return block ? blockContentValue(block, locale) : null;\n}\n\nexport function getBlockValues<T = unknown>(\n entry: BlockContainer | null | undefined,\n key: string,\n): T[] {\n const block = findBlock(entry, key);\n return block?.type === \"array\" && Array.isArray(block.value) ? (block.value as T[]) : [];\n}\n\nexport function getBlockObjectValues(\n entry: BlockContainer | null | undefined,\n key: string,\n locale = \"en\",\n): UnknownRecord[] {\n return getBlockValues(entry, key).map((value) => {\n if (isRecord(value) && Array.isArray(value.value)) {\n return recordFromBlocks(value.value, locale);\n }\n return isRecord(value)\n ? Object.fromEntries(\n Object.entries(value).map(([field, nested]) => [field, unwrapBlock(nested, locale)]),\n )\n : {};\n });\n}\n\nexport function getBlockFromArray(\n entry: BlockContainer | null | undefined,\n key: string,\n locale = \"en\",\n): UnknownRecord {\n const block = findBlock(entry, key);\n if (!block) return {};\n const value = unwrapBlock(block, locale);\n if (isRecord(value)) return value;\n if (Array.isArray(block.value)) return recordFromBlocks(block.value, locale);\n return { [block.key]: value };\n}\n\nfunction nestedUrl(value: UnknownRecord): string | null {\n const resolutions = isRecord(value.resolutions) ? value.resolutions : null;\n const original = resolutions && isRecord(resolutions.original) ? resolutions.original : null;\n if (typeof original?.url === \"string\") return original.url;\n return typeof value.url === \"string\" ? value.url : null;\n}\n\nexport function getImageUrl(value: unknown, isBlock = true): string | null {\n if (typeof value === \"string\") return value;\n if (!isRecord(value)) return null;\n if (value.type === \"media\" && isRecord(value.value)) return nestedUrl(value.value);\n if (isBlock && typeof value.url === \"string\") return value.url;\n return nestedUrl(value);\n}\n\nexport function translateMap(labels: unknown, language: string): unknown {\n return isRecord(labels) ? labels[language] : undefined;\n}\n","import type { OrderMoney, Price } from '../types';\n\ntype OrderTotal = Pick<OrderMoney, 'total' | 'currency'>;\n\nexport const SUPPORTED_STORE_CURRENCIES = Object.freeze([\n 'USD', 'EUR', 'GBP', 'JPY', 'CNY', 'CHF', 'AUD', 'CAD', 'HKD', 'SGD',\n 'NZD', 'KRW', 'SEK', 'NOK', 'DKK', 'INR', 'MXN', 'BRL', 'ZAR', 'RUB',\n 'TRY', 'PLN', 'THB', 'IDR', 'MYR', 'PHP', 'CZK', 'ILS', 'AED', 'SAR',\n 'HUF', 'RON', 'BGN', 'HRK', 'BAM', 'RSD', 'MKD', 'ALL',\n] as const);\n\nconst SUPPORTED_STORE_CURRENCY_SET: ReadonlySet<string> = Object.freeze(\n new Set<string>(SUPPORTED_STORE_CURRENCIES),\n);\n\nconst ZERO_MINOR_UNIT_STORE_CURRENCIES: ReadonlySet<string> = Object.freeze(\n new Set<string>(['JPY', 'KRW']),\n);\n\nfunction formatCurrency(amount: number, currencyCode: string, locale: string = 'en'): string {\n const normalized = currencyCode.trim().toUpperCase();\n if (!normalized) return '';\n const minorUnits = getCurrencyMinorUnits(normalized);\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: normalized,\n minimumFractionDigits: minorUnits,\n maximumFractionDigits: minorUnits,\n }).format(amount);\n}\n\nexport function getCurrencyMinorUnits(currency: string): number {\n const normalized = currency.trim().toUpperCase();\n if (!SUPPORTED_STORE_CURRENCY_SET.has(normalized)) {\n throw new RangeError(`Unsupported currency '${currency}'`);\n }\n return ZERO_MINOR_UNIT_STORE_CURRENCIES.has(normalized) ? 0 : 2;\n}\n\nexport function convertToMajor(minorAmount: number, currency: string): number {\n const units = getCurrencyMinorUnits(currency);\n return minorAmount / Math.pow(10, units);\n}\n\nexport function convertToMinor(majorAmount: number, currency: string): number {\n const units = getCurrencyMinorUnits(currency);\n return Math.round(majorAmount * Math.pow(10, units));\n}\n\nexport function getCurrencySymbol(currency: string): string {\n try {\n return new Intl.NumberFormat('en', {\n style: 'currency',\n currency: currency.toUpperCase(),\n currencyDisplay: 'narrowSymbol'\n }).formatToParts(0).find(p => p.type === 'currency')?.value || currency.toUpperCase();\n } catch {\n return currency.toUpperCase();\n }\n}\n\nexport function getCurrencyName(currency: string): string {\n try {\n return new Intl.DisplayNames(['en'], { type: 'currency' }).of(currency.toUpperCase()) || currency.toUpperCase();\n } catch {\n return currency.toUpperCase();\n }\n}\n\nexport function formatMinor(amountMinor: number, currency: string): string {\n if (!Number.isSafeInteger(amountMinor)) {\n throw new RangeError('Minor-unit amount must be a safe integer');\n }\n return formatCurrency(convertToMajor(amountMinor, currency), currency);\n}\n\nexport function formatPayment(payment: OrderTotal): string {\n return formatMinor(payment.total, payment.currency);\n}\n\nexport function formatPrice(prices: Price[], marketId?: string): string {\n if (!prices || prices.length === 0 || !marketId) return '';\n\n const price = prices.find(p => p.market === marketId);\n if (!price || !Number.isSafeInteger(price.amount) || price.amount < 0 || !price.currency) return '';\n\n return formatMinor(price.amount, price.currency);\n}\n\nexport function getPriceAmount(prices: Price[], marketId: string): number | null {\n if (!prices || prices.length === 0 || !marketId) return null;\n const price = prices.find(p => p.market === marketId);\n return price && Number.isSafeInteger(price.amount) && price.amount >= 0 ? price.amount : null;\n}\n","\nexport interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\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\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\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\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}\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 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 return \"UTC\";\n } catch (e) {\n \n return \"UTC\";\n }\n}\n","\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\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase()\n\t\t.replace(/\\s+/g, \"-\")\n\t\t.replace(/[^\\w-]+/g, \"\")\n\t\t.replace(/--+/g, \"-\")\n\t\t.replace(/^-+/, \"\")\n\t\t.replace(/-+$/, \"\");\n}\n\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \")\n\t\t\t\n\t\t\t.replace(\n\t\t\t\t\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\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \")\n\t\t.toUpperCase();\n}\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}\n","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: unknown): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\tif (!svgUrl) return null;\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\nexport async function getSvgContentForAstro(mediaObject: unknown): 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\nexport async function injectSvgIntoElement(\n\tmediaObject: unknown,\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\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","\nconst KEY_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\nexport function isValidKey(key: string): boolean {\n if (!key || key.length === 0) return false;\n return KEY_PATTERN.test(key);\n}\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\nexport function toKey(input: string): string {\n if (!input) return \"\";\n\n return input\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"_\")\n .replace(/[^a-z0-9_-]/g, \"\")\n .replace(/^[-_]+|[-_]+$/g, \"\")\n .replace(/[-_]{2,}/g, \"_\");\n}\n\nexport function nameToKey(name: string): string {\n return toKey(name);\n}\n","import type { InventoryLevel, Location } from '../types';\n\nexport interface VariantWithInventory {\n inventory: InventoryLevel[];\n}\n\n\nexport function getAvailableStock(variant: VariantWithInventory): number {\n if (!variant?.inventory) return 0;\n return variant.inventory.reduce((sum, inv) => sum + inv.available, 0);\n}\n\n\nexport function getReservedStock(variant: VariantWithInventory): number {\n if (!variant?.inventory) return 0;\n return variant.inventory.reduce((sum, inv) => sum + inv.reserved, 0);\n}\n\n\nexport function hasStock(variant: VariantWithInventory, quantity: number = 1): boolean {\n return getAvailableStock(variant) >= quantity;\n}\n\n\nexport function getInventoryAt(\n variant: VariantWithInventory,\n locationId: string\n): InventoryLevel | undefined {\n return variant?.inventory?.find(inv => inv.location_id === locationId);\n}\n\n\nexport function getFirstAvailableFCId(\n variant: VariantWithInventory,\n quantity: number = 1\n): string | undefined {\n const inv = variant?.inventory?.find(i => i.available >= quantity);\n return inv?.location_id;\n}\n","export type {\n EshopCartItem,\n Cart,\n CartOrigin,\n CartStatus,\n EshopStoreState,\n Store,\n Webhook,\n WebhookEventSubscription,\n BuildHook,\n BuildHookType,\n PaymentStoreConfig,\n SocialConnectResponse,\n SocialDestinationMetadata,\n SocialOAuthCallbackResponse,\n SocialOAuthCallbackStatus,\n SocialOAuthDestinationOption,\n SocialConnection,\n SocialConnectionCredential,\n SocialConnectionData,\n SocialConnectionProviderData,\n SocialProviderCapability,\n SocialConnectionType,\n InstagramPlacement,\n SocialAnalyticsCapabilities,\n SocialEngagementCapabilities,\n SocialPublication,\n SocialPublicationComment,\n SocialPublicationCommentClassificationResult,\n SocialPublicationCommentIntent,\n SocialPublicationCommentPriority,\n SocialPublicationEngagementSyncResult,\n SocialCommentReply,\n SocialCommentReplyError,\n SocialCommentReplyEvidence,\n SocialCommentReplyStatus,\n SocialPublicationCommentReplyResponse,\n SocialPublicationCommentStatus,\n SocialPublicationContent,\n SocialPublicationEffect,\n SocialPublicationEffectError,\n SocialPublicationEffectEvidence,\n SocialPublicationEffectRequest,\n SocialPublicationEffectStatus,\n SocialPublicationMetricSnapshot,\n SocialPublicationMutationResponse,\n SocialPublicationStatus,\n SocialPublicationValidation,\n TiktokPrivacy,\n ValidationError,\n YoutubePrivacy,\n Block,\n Currency,\n Price,\n OrderPayment,\n OrderMoney,\n OrderFinancialSummary,\n PaymentProvider,\n PaymentProviderConnection,\n PaymentProviderConnectionError,\n PaymentProviderConnectionStatus,\n StripePaymentProviderConnectResponse,\n OrderPaymentTax,\n OrderPaymentTaxLine,\n OrderPaymentPromoCode,\n OrderRefund,\n PaymentTransactionProvider,\n PaymentTransactionRequestType,\n PaymentTransactionType,\n PaymentTransactionStatus,\n PaymentTransaction,\n OrderQuote,\n RefundStatus,\n CheckoutPaymentAction,\n StoreSubscription,\n StoreSubscriptionAction,\n StoreSubscriptionActionError,\n StoreSubscriptionActionRequest,\n StoreSubscriptionActionResult,\n StoreSubscriptionActionStatus,\n StoreSubscriptionEffect,\n StoreSubscriptionEffectError,\n StoreSubscriptionEffectStatus,\n StoreSubscriptionEffectType,\n StoreSubscriptionPayment,\n StoreSubscriptionStatus,\n SubscriptionPlan,\n SubscriptionPlanFeature,\n SubscriptionPlanFeatureType,\n SubscriptionPrice,\n ContactListMembershipCancellation,\n ContactListMembershipCancellationSafeError,\n ContactListMembershipCancellationStatus,\n ContactListMembershipCancellationType,\n ContactListMembershipPaymentAttempt,\n ContactListMembershipPaymentAttemptSafeError,\n ContactListMembershipPaymentAttemptStatus,\n ContactListMembershipPaymentAttemptType,\n ContactListMembershipRefund,\n ContactListMembershipRefundSafeError,\n ContactListMembershipRefundStatus,\n ContactListMembershipRefundType,\n StorefrontContactList,\n StorefrontContactListType,\n StorefrontContactListPlan,\n StorefrontContactListMembership,\n StorefrontContactListPaymentAttemptSummary,\n PaymentMethod,\n ShippingMethod,\n ShippingWeightTier,\n Zone,\n Market,\n Address,\n GeoLocation,\n ZoneLocation,\n Location,\n PromoCodeValidation,\n PaginatedResponse,\n Language,\n Access,\n Media,\n MediaSize,\n MediaResolution,\n Coordinates,\n ProviderWithTimeline,\n Collection,\n BlockSchema,\n BlockSchemaProperties,\n BlockSchemaType,\n CollectionEntry,\n EntryBlockQuery,\n MediaRef,\n FieldOperation,\n Workflow,\n WorkflowNode,\n WorkflowEdge,\n WorkflowTriggerNode,\n WorkflowHttpNode,\n WorkflowDeployWebhookNode,\n WorkflowGoogleDriveUploadNode,\n WorkflowConnection,\n WorkflowConnectionConnectUrl,\n WorkflowConnectionData,\n WorkflowConnectionType,\n GoogleDriveWorkflowConnectionData,\n GoogleDriveWorkflowProfile,\n WorkflowSwitchNode,\n WorkflowSwitchRule,\n WorkflowTransformNode,\n WorkflowLoopNode,\n WorkflowHttpMethod,\n WorkflowExecution,\n WorkflowEffect,\n WorkflowEffectEvidence,\n WorkflowEffectError,\n WorkflowEffectStatus,\n WorkflowEffectType,\n WorkflowExecutionInput,\n ExecutionStatus,\n NodeResult,\n ContactListType,\n ContactListPlan,\n ContactListPlanCatalogSafeError,\n ContactListPlanCatalogStatus,\n ContactListPlanCatalogType,\n ContactListPlanStatus,\n ContactListContentAccess,\n ContactListContentAccessStatus,\n ContactListContentAccessTarget,\n ContactListAccessResponse,\n ContactListContentAccessResponse,\n ContactListManagementContactList,\n ContactListManagementMembership,\n ContactListManagementResponse,\n ContactListSubscribeResponse,\n Event,\n EventAction,\n ShippingStatus,\n ShippingProvider,\n ShippingRateLine,\n ShippingLine,\n FulfillmentOrderStatus,\n FulfillmentOrderRequestStatus,\n FulfillmentOrderLine,\n FulfillmentOrder,\n OrderFulfillmentSummary,\n ShippingRate,\n Parcel,\n ShippingLabelStatus,\n ShippingLabelRefund,\n ShippingLabelRefundStatus,\n ShippingLabelRefundReconciliationStatus,\n ShippingLabelAdjustment,\n ShippingLabelAdjustmentStatus,\n ShippingLabelSettlement,\n ShippingLabelSettlementDirection,\n ShippingLabelSettlementStatus,\n ShippingLabelSettlementType,\n ShipmentAllocationStatus,\n ShipmentLine,\n Shipment,\n CreateShipmentResponse,\n CustomsItem,\n CustomsDeclaration,\n GeoLocationBlock,\n Service,\n Provider,\n ServiceProvider,\n ServiceDuration,\n ProviderTimelinePoint,\n TimelinePoint,\n WorkingHour,\n WorkingDay,\n SpecificDate,\n Order,\n OrderItem,\n OrderItemSnapshot,\n ProductLineItem,\n ServiceLineItem,\n ProductLineItemSnapshot,\n ServiceLineItemSnapshot,\n DiscountAllocation,\n TaxLine,\n LineMoneySnapshot,\n OrderItemFulfillmentStatus,\n BookingOrderItemStatus,\n QuoteLine,\n ProductQuoteLine,\n ServiceQuoteLine,\n ProductQuoteLineAvailability,\n ServiceQuoteLineAvailability,\n OrderItemStatus,\n OrderStatus,\n OrderPaymentSummaryStatus,\n OrderFulfillmentStatus,\n OrderPaymentStatus,\n OrderCancellationReason,\n HistoryEntry,\n DigitalAccessGrantStatus,\n DigitalAccessGrant,\n DigitalAccessDownloadResponse,\n Product,\n ProductVariant,\n ProductInventory,\n DigitalAssetType,\n DigitalAssetStatus,\n DigitalDeliveryPolicy,\n DigitalAsset,\n InventoryLevel,\n GalleryItem,\n EmailTemplate,\n EmailTemplateType,\n EmailRecipients,\n EmailSend,\n EmailSendRequest,\n EmailSendResult,\n EmailSendDeliveryResult,\n EmailDelivery,\n EmailDeliveryError,\n EmailDeliveryErrorKind,\n EmailDeliveryStatus,\n EmailDeliveryType,\n GetEmailDeliveryParams,\n RetryEmailDeliveryParams,\n EmailSendTemplateData,\n Form,\n FormSubmission,\n FormSchema,\n FormSchemaType,\n FormField,\n FormFieldType,\n FormValue,\n FormValues,\n FormEntry,\n Taxonomy,\n TaxonomyEntry,\n TaxonomyQuery,\n TaxonomySchema,\n TaxonomySchemaType,\n TaxonomyField,\n TaxonomyFieldQuery,\n PromoCode,\n Contact,\n ContactSessionRecord,\n ContactSessionIssued,\n ContactSessionStatus,\n ContactChannel,\n ChannelType,\n OpportunityStage,\n OpportunityType,\n OpportunitySource,\n Action,\n ActionData,\n ActionContext,\n ContactList,\n ContactListMembership,\n ContactListMember,\n Mailbox,\n MailboxConnectionSecurity,\n MailboxPreset,\n MailboxSyncStatus,\n GoogleMailboxProvider,\n SmtpImapMailboxProviderInput,\n SmtpImapMailboxProvider,\n OutreachStep,\n OutreachStepType,\n ManualTaskContinueBehavior,\n CampaignManualTaskOutcome,\n OutreachPersonalizationCounters,\n OutreachPersonalizationState,\n CampaignLaunchState,\n Campaign,\n CampaignLaunchReadiness,\n CampaignEnrollment,\n CampaignEnrollmentImportResult,\n CampaignEnrollmentConversationResponse,\n CampaignMessage,\n Suppression,\n LeadResearchRun,\n LeadResearchRunStatus,\n LeadScores,\n LeadInsight,\n CampaignRoute,\n ChannelMessage,\n LeadEmailClassification,\n LeadValidationCheck,\n LeadValidationCheckStatus,\n LeadEmailValidationResult,\n LeadResearchMessage,\n LeadResearchMessageRole,\n ResearchContactListMember,\n SendLeadResearchMessageResult,\n Account,\n AccountApiToken,\n AccountApiTokenCreated,\n AccountSession,\n AccountUpdateResponse,\n StoreMembership,\n StoreMember,\n Discount,\n Condition,\n ServiceStatus,\n ProviderStatus,\n ProductStatus,\n ContactStatus,\n ContactListStatus,\n ContactListSource,\n ContactListMembershipStatus,\n MailboxStatus,\n CampaignStatus,\n CampaignLaunchStatus,\n CampaignEnrollmentStatus,\n CampaignEnrollmentImportSource,\n CampaignMessageCopySource,\n CampaignMessageDirection,\n CampaignMessageType,\n CampaignMessageStatus,\n OutreachPersonalizationStatus,\n OutreachThreadMode,\n SuppressionStatus,\n SuppressionTargetType,\n SuppressionScopeType,\n SuppressionReason,\n SuppressionSource,\n WorkflowStatus,\n MutableWorkflowStatus,\n WorkflowSendEmailNode,\n PromoCodeStatus,\n CollectionStatus,\n EntryStatus,\n EmailTemplateStatus,\n EmailTemplateVariable,\n EmailTemplateVariableSource,\n FormStatus,\n TaxonomyStatus,\n} from \"./types\";\nexport { PaymentMethodType } from \"./types\";\n\nexport type {\n FindContactSessionsParams,\n RevokeAllContactSessionsParams,\n RevokeContactSessionParams,\n GetAvailabilityParams,\n AvailabilitySlot,\n DaySlots,\n ProviderAvailability,\n AvailabilityResponse,\n Slot,\n SlotRange,\n ConditionValue,\n ProductQuoteItemInput,\n ServiceQuoteItemInput,\n OrderQuoteItemInput,\n ProductCheckoutItemInput,\n ServiceCheckoutItemInput,\n OrderCheckoutItemInput,\n TrustedProductCheckoutItemInput,\n TrustedServiceCheckoutItemInput,\n TrustedOrderCheckoutItemInput,\n CreateOrderRefundParams,\n CreateOrderRefundResponse,\n FindOrderRefundsParams,\n GetOrderRefundParams,\n GetOrderPaymentParams,\n RetryPaymentTransactionParams,\n FindPaymentTransactionsParams,\n GetPaymentTransactionParams,\n FindDigitalAccessGrantsParams,\n GetDigitalAccessGrantParams,\n DownloadDigitalAccessParams,\n ActivateDigitalAccessGrantParams,\n RevokeDigitalAccessGrantParams,\n GetCurrentCartParams,\n GetCartParams,\n FindCartsParams,\n CreateCartParams,\n UpdateCartParams,\n AddCartItemParams,\n RemoveCartItemParams,\n ClearCartParams,\n QuoteCartParams,\n CheckoutCartParams,\n SystemTemplateKey,\n ImportFieldMapping,\n ImportPreviewRow,\n ImportContactsParams,\n ImportContactsPreviewParams,\n ImportContactsPreviewResult,\n ImportContactsResult,\n GetCollectionsParams,\n CreateCollectionParams,\n UpdateCollectionParams,\n GetCollectionParams,\n DeleteCollectionParams,\n GetEntriesParams,\n CreateEntryParams,\n UpdateEntryParams,\n GetEntryParams,\n DeleteEntryParams,\n GetShippingRatesParams,\n FindShipmentsParams,\n FindFulfillmentOrdersParams,\n GetFulfillmentOrderParams,\n GetShipmentParams,\n CreateShipmentParams,\n RetryShipmentParams,\n RequestShippingLabelRefundParams,\n FindShippingLabelRefundsParams,\n GetShippingLabelRefundParams,\n RetryShippingLabelRefundParams,\n FindShippingLabelAdjustmentsParams,\n FindShippingLabelSettlementsParams,\n RetryShippingLabelSettlementParams,\n CreateStoreSubscriptionActionParams,\n FindStoreSubscriptionActionEffectsParams,\n FindStoreSubscriptionActionsParams,\n GetStoreSubscriptionActionEffectParams,\n GetStoreSubscriptionActionParams,\n RetryStoreSubscriptionActionParams,\n TestWebhookParams,\n TestWebhookResponse,\n WebhookDeliveryStatus,\n CreateContactListParams,\n UpdateContactListParams,\n FindContactListsParams,\n FindStorefrontContactListsParams,\n GetContactListParams,\n CreateContactListPlanParams,\n UpdateContactListPlanParams,\n ContactListPlanPriceInput,\n FindContactListPlansParams,\n FindStorefrontContactListPlansParams,\n GetContactListPlanParams,\n RetryContactListPlanCatalogParams,\n AddContactListContactParams,\n UpdateContactListContactParams,\n RemoveContactListContactParams,\n FindContactListContactsParams,\n RefundContactListMembershipParams,\n RefundContactListMembershipResult,\n FindContactListMembershipPaymentAttemptsParams,\n FindStorefrontContactListMembershipsParams,\n GetContactListMembershipPaymentAttemptParams,\n FindContactListMembershipRefundsParams,\n GetContactListMembershipRefundParams,\n RetryContactListMembershipRefundParams,\n FindContactListMembershipCancellationsParams,\n GetContactListMembershipCancellationParams,\n RetryContactListMembershipCancellationParams,\n ImportContactRowInput,\n ImportContactRowError,\n ImportContactRowResult,\n ImportContactListRowResult,\n ImportContactListPreviewParams,\n ImportContactsIntoContactListParams,\n ImportContactsIntoContactListResult,\n SubscribeContactListParams,\n ContactListAccessParams,\n ContactListContentAccessParams,\n CreateMailboxParams,\n UpdateMailboxParams,\n FindMailboxesParams,\n GetMailboxParams,\n PrepareMailboxParams,\n TestMailboxParams,\n TestMailboxResult,\n CreateCampaignParams,\n UpdateCampaignParams,\n FindCampaignsParams,\n GetCampaignParams,\n LaunchCampaignParams,\n DuplicateCampaignParams,\n ImportCampaignEnrollmentsParams,\n GetCampaignLaunchReadinessParams,\n GenerateOutreachPersonalizedDraftsParams,\n FindCampaignEnrollmentsParams,\n UpdateCampaignEnrollmentParams,\n UpdateCampaignEnrollmentDraftParams,\n UpdateCampaignEnrollmentStepExecutionParams,\n GetCampaignEnrollmentConversationParams,\n ReplyCampaignEnrollmentParams,\n StopCampaignEnrollmentParams,\n FindCampaignMessagesParams,\n UpdateCampaignMessageParams,\n CreateSuppressionParams,\n UpdateSuppressionParams,\n FindSuppressionsParams,\n GetSuppressionParams,\n CreateLeadResearchRunParams,\n FindLeadResearchRunsParams,\n GetLeadResearchRunParams,\n UpdateLeadResearchRunParams,\n CancelLeadResearchRunParams,\n SendLeadResearchMessageParams,\n FindLeadResearchMessagesParams,\n ValidateLeadEmailParams,\n CancelSocialPublicationParams,\n ClassifySocialPublicationCommentsParams,\n ConnectStripePaymentProviderParams,\n ConnectSocialConnectionParams,\n CreateSocialCommentReplyParams,\n CreateSocialPublicationParams,\n DeletePaymentProviderParams,\n DeleteSocialConnectionParams,\n FindSocialPublicationCommentsParams,\n FindSocialPublicationsParams,\n GetSocialCapabilitiesParams,\n GetSocialOAuthAttemptParams,\n GetSocialCommentReplyParams,\n GetSocialPublicationCommentThreadParams,\n GetSocialPublicationCommentsParams,\n GetSocialPublicationEffectParams,\n GetSocialPublicationMetricsParams,\n GetSocialPublicationParams,\n ListPaymentProvidersParams,\n ListSocialCommentRepliesParams,\n ListSocialConnectionsParams,\n ListSocialPublicationEffectsParams,\n RefreshPaymentProvidersParams,\n RetrySocialCommentReplyParams,\n ScheduleSocialPublicationParams,\n SyncSocialEngagementParams,\n SyncSocialPublicationCommentsParams,\n SyncSocialPublicationCommentThreadParams,\n SyncSocialPublicationMetricsParams,\n UpdateSocialPublicationParams,\n ValidateSocialPublicationParams,\n} from \"./types/api\";\n\nexport type {\n LocationState,\n LocationCountry,\n GetCountriesResponse,\n} from \"./api/location\";\n\nexport type {\n AnalyticsTimeRange,\n AnalyticsReportKey,\n AnalyticsMetricReportKey,\n AnalyticsBreakdownReportKey,\n AnalyticsActionReportKey,\n AnalyticsCompositeReportKey,\n AnalyticsReportRequest,\n AnalyticsBlockRequest,\n AnalyticsRequest,\n AnalyticsMetricData,\n AnalyticsBreakdownItem,\n AnalyticsBreakdownData,\n BusinessOverviewData,\n RevenueByCurrencyData,\n ContactFunnelStage,\n ContactFunnelData,\n OutreachOverviewData,\n OutreachFunnelStage,\n OutreachFunnelData,\n EntityStatusOverviewData,\n DataHealthData,\n AnalyticsReport,\n AnalyticsBlockResponse,\n AnalyticsResponse,\n ActionFeedCategory,\n ActionFeedItem,\n ActionFeedSummary,\n ActionFeedCursor,\n ActionFeedData,\n} from \"./api/analytics\";\n\nexport type {\n CreateLocationParams,\n UpdateLocationParams,\n DeleteLocationParams,\n CreateMarketParams,\n UpdateMarketParams,\n MarketZoneInput,\n CreateProductVariantInput,\n UpdateProductVariantInput,\n ProductInventoryInput,\n} from \"./types/api\";\n\nexport type {\n StorefrontAction,\n TrackActionParams,\n CommonActionKey,\n ExperimentUseResponse,\n UseExperimentParams,\n} from \"./api/storefront\";\nexport { COMMON_ACTION_KEYS } from \"./api/storefront\";\nexport type {\n CreateExperimentParams,\n Experiment,\n ExperimentResults,\n ExperimentStatus,\n ExperimentVariant,\n ExperimentVariantResult,\n FindExperimentsParams,\n GetExperimentParams,\n UpdateExperimentParams,\n} from \"./api/experiments\";\nexport {\n createCartController,\n type CartApi,\n type CartController,\n type CartControllerAddItemParams,\n type CartControllerCheckoutParams,\n type CartControllerClearParams,\n type CartControllerInitParams,\n type CartControllerListener,\n type CartControllerQuoteParams,\n type CartControllerRefreshParams,\n type CartControllerRemoveItemParams,\n type CartControllerState,\n type CartControllerUpdateParams,\n} from \"./cartController\";\n\nexport type { TimelineParams } from \"./api/crm\";\nexport type {\n SupportAgent,\n SupportAgentStatus,\n SupportChannel,\n SupportChannelConfig,\n SupportChannelStatus,\n SupportChannelType,\n SupportConversation,\n SupportConversationChannelContext,\n SupportMessage,\n SupportConversationResponse,\n SupportConversationStartResponse,\n SendSupportMessageParams,\n StorefrontSendSupportMessageParams,\n StorefrontGetSupportConversationParams,\n SupportAgentNode,\n SupportAgentEdge,\n SupportAgentAiConfig,\n EdgeTrigger,\n SupportAction,\n AssignSupportConversationParams,\n GetSupportConversationParams,\n ReplySupportConversationParams,\n ResolveSupportConversationParams,\n CreateSupportChannelParams,\n UpdateSupportChannelParams,\n FindSupportChannelsParams,\n FindSupportConversationsParams,\n ReceiveSupportChannelMessageParams,\n} from \"./api/support\";\nexport type {\n WorkflowToolOperation,\n WorkflowToolResource,\n WorkflowTool,\n EventMetadata,\n EventScopeField,\n} from \"./api/platform\";\n\nexport const SDK_VERSION = \"0.9.18\";\nexport const SUPPORTED_FRAMEWORKS = [\n \"astro\",\n \"react\",\n \"vue\",\n \"svelte\",\n \"vanilla\",\n] as const;\n\nimport type {\n Contact as ContactType,\n Store as StoreType,\n Market as MarketType,\n Price,\n} from \"./types\";\n\nexport interface ApiConfig {\n httpClient: HttpClient;\n storeId: string;\n baseUrl: string;\n market: string;\n locale: string;\n authStorage: AuthStorage;\n}\n\nexport interface AdminSessionInternal {\n access_token: string;\n refresh_token: string;\n access_expires_at?: number;\n email?: string;\n}\n\nexport interface ContactSessionInternal {\n access_token: string;\n contact: ContactType;\n store: StoreType;\n market: MarketType | null;\n}\n\nexport interface AdminSession {\n email?: string;\n}\n\nexport interface ContactSession {\n contact: ContactType;\n store: StoreType;\n market: MarketType | null;\n}\n\nexport interface StorefrontIdentifyResult extends ContactSession {\n verification_challenge:\n import(\"./types/api\").VerificationChallengeResponse | null;\n}\n\nexport type AdminSessionUpdater = (\n updater: (prev: AdminSessionInternal | null) => AdminSessionInternal | null,\n) => void;\n\nexport type ContactSessionUpdater = (\n updater: (\n prev: ContactSessionInternal | null,\n ) => ContactSessionInternal | null,\n) => void;\n\nexport type AuthStateListener<T> = (session: T | null) => void;\n\nimport {\n createHttpClient,\n type HttpClientConfig,\n type HttpClient,\n type AuthStorage,\n} from \"./services/createHttpClient\";\nimport { createAccountApi } from \"./api/account\";\nimport { createAuthApi } from \"./api/auth\";\nimport { createStoreApi } from \"./api/store\";\nimport { createMediaApi } from \"./api/media\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createLocationApi } from \"./api/location\";\nimport { createMarketApi } from \"./api/market\";\nimport { createContactApi } from \"./api/crm\";\nimport {\n createAdminSupportApi,\n createStorefrontSupportApi,\n} from \"./api/support\";\nimport { createLeadResearchApi } from \"./api/leadResearch\";\nimport { createSocialApi } from \"./api/social\";\nimport { createWorkflowApi } from \"./api/workflow\";\nimport { createPlatformApi } from \"./api/platform\";\nimport { createShippingApi } from \"./api/shipping\";\nimport { createPaymentProviderApi } from \"./api/paymentProvider\";\nimport { createEmailTemplateApi } from \"./api/emailTemplate\";\nimport { createFormApi } from \"./api/form\";\nimport { createTaxonomyApi } from \"./api/taxonomy\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createExperimentsApi } from \"./api/experiments\";\nimport { createStorefrontApi } from \"./api/storefront\";\nimport {\n getImageUrl,\n getBlockValue,\n getBlockTextValue,\n getBlockContentValue,\n getBlockValues,\n getBlockLabel,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n formatPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n getCurrencySymbol,\n getCurrencyName,\n} from \"./utils/price\";\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\";\nimport {\n getAvailableStock,\n getReservedStock,\n hasStock,\n getInventoryAt,\n getFirstAvailableFCId,\n} from \"./utils/inventory\";\n\nfunction createUtilitySurface(apiConfig: ApiConfig) {\n return {\n getImageUrl: (imageBlock: unknown, isBlock = true) =>\n getImageUrl(imageBlock, isBlock),\n getBlockValue,\n getBlockTextValue,\n getBlockContentValue,\n getBlockValues,\n getBlockLabel,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n\n formatPrice: (prices: Price[]) => formatPrice(prices, apiConfig.market),\n getPriceAmount: (prices: Price[]) => getPriceAmount(prices, apiConfig.market),\n formatPayment,\n formatMinor,\n getCurrencySymbol,\n getCurrencyName,\n validatePhoneNumber,\n\n tzGroups,\n findTimeZone,\n\n slugify,\n humanize,\n categorify,\n formatDate,\n\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n\n isValidKey,\n validateKey,\n toKey,\n nameToKey,\n\n getAvailableStock,\n getReservedStock,\n hasStock,\n getInventoryAt,\n getFirstAvailableFCId,\n };\n}\n\nconst ADMIN_STORAGE_KEY = \"arky_admin_session\";\n\nfunction readAdminSession(): AdminSessionInternal | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(ADMIN_STORAGE_KEY);\n return raw ? (JSON.parse(raw) as AdminSessionInternal) : null;\n } catch {\n return null;\n }\n}\n\nfunction writeAdminSession(s: AdminSessionInternal | null): void {\n if (typeof window === \"undefined\") return;\n if (s) {\n localStorage.setItem(ADMIN_STORAGE_KEY, JSON.stringify(s));\n } else {\n localStorage.removeItem(ADMIN_STORAGE_KEY);\n }\n}\n\nexport type CreateAdminConfig = Omit<\n HttpClientConfig,\n \"authStorage\" | \"storeId\"\n> & {\n storeId: string;\n market: string;\n locale?: string;\n apiToken?: string;\n};\n\nexport function createAdmin(config: CreateAdminConfig) {\n const locale = config.locale || \"en\";\n const listeners = new Set<AuthStateListener<AdminSession>>();\n\n function toPublic(s: AdminSessionInternal | null): AdminSession | null {\n return s ? { email: s.email } : null;\n }\n\n function emit(): void {\n const pub = toPublic(readAdminSession());\n for (const l of listeners) {\n Promise.resolve()\n .then(() => l(pub))\n .catch(() => {});\n }\n }\n\n const updateSession: AdminSessionUpdater = (updater) => {\n if (config.apiToken) return;\n const prev = readAdminSession();\n const next = updater(prev);\n writeAdminSession(next);\n emit();\n };\n\n const authStorage: AuthStorage = config.apiToken\n ? {\n getTokens: () => ({ access_token: config.apiToken! }),\n onTokensRefreshed: () => {},\n onForcedLogout: () => {},\n }\n : {\n getTokens() {\n const s = readAdminSession();\n if (!s) return null;\n return {\n access_token: s.access_token,\n refresh_token: s.refresh_token,\n access_expires_at: s.access_expires_at,\n };\n },\n onTokensRefreshed(tokens) {\n updateSession((prev) =>\n prev\n ? {\n ...prev,\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token ?? prev.refresh_token,\n access_expires_at:\n tokens.access_expires_at ?? prev.access_expires_at,\n }\n : null,\n );\n },\n onForcedLogout() {\n updateSession(() => null);\n },\n };\n\n const httpClient = createHttpClient({\n baseUrl: config.baseUrl,\n storeId: config.storeId,\n refreshPath: config.refreshPath,\n navigate: config.navigate,\n loginFallbackPath: config.loginFallbackPath,\n authStorage,\n });\n\n const apiConfig: ApiConfig = {\n httpClient,\n storeId: config.storeId,\n baseUrl: config.baseUrl,\n market: config.market,\n locale,\n authStorage,\n };\n\n const accountApi = createAccountApi(apiConfig);\n const authApi = createAuthApi(apiConfig, updateSession);\n const storeApi = createStoreApi(apiConfig, updateSession);\n const platformApi = createPlatformApi(apiConfig);\n\n const cmsApi = createCmsApi(apiConfig);\n const eshopApi = createEshopApi(apiConfig);\n const promoCodeApi = createPromoCodeApi(apiConfig);\n const crmApi = createContactApi(apiConfig);\n const supportApi = createAdminSupportApi(apiConfig);\n const leadResearchApi = createLeadResearchApi(apiConfig);\n const socialApi = createSocialApi(apiConfig);\n const paymentProviderApi = createPaymentProviderApi(apiConfig);\n const notificationApi = createNotificationApi(apiConfig);\n const shippingApi = createShippingApi(apiConfig);\n const locationApi = createLocationApi(apiConfig);\n const marketApi = createMarketApi(apiConfig);\n const workflowApi = createWorkflowApi(apiConfig);\n const storePaymentProviderApi = {\n list: paymentProviderApi.list,\n refresh: paymentProviderApi.refresh,\n connectStripe: paymentProviderApi.connectStripe,\n delete: paymentProviderApi.delete,\n };\n const workflowPublicApi = {\n create: workflowApi.createWorkflow,\n update: workflowApi.updateWorkflow,\n delete: workflowApi.deleteWorkflow,\n get: workflowApi.getWorkflow,\n find: workflowApi.getWorkflows,\n trigger: workflowApi.triggerWorkflow,\n getExecutions: workflowApi.getWorkflowExecutions,\n getExecution: workflowApi.getWorkflowExecution,\n listEffects: workflowApi.getWorkflowEffects,\n getEffect: workflowApi.getWorkflowEffect,\n listConnections: workflowApi.getWorkflowConnections,\n getConnectionConnectUrl: workflowApi.getWorkflowConnectionConnectUrl,\n deleteConnection: workflowApi.deleteWorkflowConnection,\n };\n const formApi = createFormApi(apiConfig);\n const taxonomyApi = createTaxonomyApi(apiConfig);\n const emailTemplateApi = createEmailTemplateApi(apiConfig);\n const analyticsApi = createAnalyticsApi(apiConfig);\n const experimentsApi = createExperimentsApi(apiConfig);\n\n const sdk = {\n account: {\n update: accountApi.updateAccount,\n delete: accountApi.deleteAccount,\n getMe: accountApi.getMe,\n search: accountApi.searchAccounts,\n apiToken: {\n list: accountApi.listApiTokens,\n create: accountApi.createApiToken,\n update: accountApi.updateApiToken,\n revoke: accountApi.revokeApiToken,\n },\n session: {\n list: accountApi.listSessions,\n revoke: accountApi.revokeSession,\n },\n auth: authApi,\n },\n store: {\n create: storeApi.createStore,\n update: storeApi.updateStore,\n get: storeApi.getStore,\n find: storeApi.getStores,\n subscription: {\n get: storeApi.getSubscription,\n getPlans: storeApi.getSubscriptionPlans,\n action: {\n create: storeApi.createSubscriptionAction,\n find: storeApi.findSubscriptionActions,\n get: storeApi.getSubscriptionAction,\n retry: storeApi.retrySubscriptionAction,\n effect: {\n find: storeApi.findSubscriptionActionEffects,\n get: storeApi.getSubscriptionActionEffect,\n },\n },\n createPortalSession: storeApi.createPortalSession,\n },\n member: {\n add: storeApi.addMember,\n invite: storeApi.inviteUser,\n find: storeApi.findMembers,\n findOwn: storeApi.findOwnMemberships,\n remove: storeApi.removeMember,\n },\n buildHook: {\n list: storeApi.listBuildHooks,\n create: storeApi.createBuildHook,\n update: storeApi.updateBuildHook,\n delete: storeApi.deleteBuildHook,\n },\n webhook: {\n test: storeApi.testWebhook,\n list: storeApi.listWebhooks,\n create: storeApi.createWebhook,\n update: storeApi.updateWebhook,\n delete: storeApi.deleteWebhook,\n },\n config: {\n getPayment: storeApi.getPaymentConfig,\n },\n location: locationApi,\n market: marketApi,\n paymentProvider: storePaymentProviderApi,\n },\n media: createMediaApi(apiConfig),\n notification: {\n email: {\n send: notificationApi.sendEmail,\n getDelivery: notificationApi.getEmailDelivery,\n retryDelivery: notificationApi.retryEmailDelivery,\n },\n mailbox: crmApi.mailbox,\n },\n platform: platformApi,\n social: {\n connection: {\n getCapabilities: socialApi.getCapabilities,\n list: socialApi.listConnections,\n connect: socialApi.connect,\n getOAuthAttempt: socialApi.getOAuthAttempt,\n selectDestination: socialApi.selectDestination,\n delete: socialApi.deleteConnection,\n },\n publication: {\n create: socialApi.createPublication,\n update: socialApi.updatePublication,\n get: socialApi.getPublication,\n find: socialApi.findPublications,\n validate: socialApi.validatePublication,\n schedule: socialApi.schedulePublication,\n cancel: socialApi.cancelPublication,\n getComments: socialApi.getPublicationComments,\n syncComments: socialApi.syncPublicationComments,\n getCommentThread: socialApi.getPublicationCommentThread,\n syncCommentThread: socialApi.syncPublicationCommentThread,\n findComments: socialApi.findPublicationComments,\n classifyComments: socialApi.classifyPublicationComments,\n commentReply: {\n create: socialApi.createCommentReply,\n list: socialApi.listCommentReplies,\n get: socialApi.getCommentReply,\n retry: socialApi.retryCommentReply,\n },\n effect: {\n list: socialApi.listPublicationEffects,\n get: socialApi.getPublicationEffect,\n },\n getMetrics: socialApi.getPublicationMetrics,\n syncMetrics: socialApi.syncPublicationMetrics,\n syncEngagement: socialApi.syncEngagement,\n },\n },\n cms: {\n collection: {\n create: cmsApi.createCollection,\n update: cmsApi.updateCollection,\n delete: cmsApi.deleteCollection,\n get: cmsApi.getCollection,\n find: cmsApi.getCollections,\n },\n entry: {\n create: cmsApi.createEntry,\n update: cmsApi.updateEntry,\n delete: cmsApi.deleteEntry,\n get: cmsApi.getEntry,\n find: cmsApi.getEntries,\n },\n form: {\n create: formApi.createForm,\n update: formApi.updateForm,\n delete: formApi.deleteForm,\n get: formApi.getForm,\n find: formApi.getForms,\n submit: formApi.submit,\n getSubmissions: formApi.getSubmissions,\n getSubmission: formApi.getSubmission,\n updateSubmission: formApi.updateSubmission,\n },\n taxonomy: {\n create: taxonomyApi.createTaxonomy,\n update: taxonomyApi.updateTaxonomy,\n delete: taxonomyApi.deleteTaxonomy,\n get: taxonomyApi.getTaxonomy,\n find: taxonomyApi.getTaxonomies,\n getChildren: taxonomyApi.getTaxonomyChildren,\n },\n emailTemplate: {\n create: emailTemplateApi.createEmailTemplate,\n update: emailTemplateApi.updateEmailTemplate,\n delete: emailTemplateApi.deleteEmailTemplate,\n get: emailTemplateApi.getEmailTemplate,\n find: emailTemplateApi.getEmailTemplates,\n preview: emailTemplateApi.previewEmailTemplate,\n },\n },\n eshop: {\n product: {\n create: eshopApi.createProduct,\n update: eshopApi.updateProduct,\n delete: eshopApi.deleteProduct,\n get: eshopApi.getProduct,\n find: eshopApi.getProducts,\n },\n order: {\n update: eshopApi.updateOrder,\n get: eshopApi.getOrder,\n find: eshopApi.getOrders,\n getQuote: eshopApi.getQuote,\n createRefund: eshopApi.createRefund,\n getRefund: eshopApi.getRefund,\n getRefunds: eshopApi.getRefunds,\n getPayment: eshopApi.getPayment,\n retryPaymentTransaction: eshopApi.retryPaymentTransaction,\n getPaymentTransactions: eshopApi.getPaymentTransactions,\n getPaymentTransaction: eshopApi.getPaymentTransaction,\n findDigitalAccess: eshopApi.findDigitalAccess,\n getDigitalAccess: eshopApi.getDigitalAccess,\n downloadDigitalAccess: eshopApi.downloadDigitalAccess,\n activateDigitalAccess: eshopApi.activateDigitalAccess,\n revokeDigitalAccess: eshopApi.revokeDigitalAccess,\n },\n shipment: {\n getRates: shippingApi.getRates,\n create: shippingApi.createShipment,\n get: shippingApi.getShipment,\n find: shippingApi.findShipments,\n retry: shippingApi.retryShipment,\n fulfillment: {\n find: shippingApi.findFulfillmentOrders,\n get: shippingApi.getFulfillmentOrder,\n },\n refund: {\n request: shippingApi.requestRefund,\n get: shippingApi.getRefund,\n find: shippingApi.findRefunds,\n retry: shippingApi.retryRefund,\n },\n adjustment: {\n find: shippingApi.findAdjustments,\n },\n settlement: {\n find: shippingApi.findSettlements,\n retry: shippingApi.retrySettlement,\n },\n },\n cart: {\n create: eshopApi.createCart,\n update: eshopApi.updateCart,\n get: eshopApi.getCart,\n find: eshopApi.getCarts,\n addItem: eshopApi.addCartItem,\n removeItem: eshopApi.removeCartItem,\n clear: eshopApi.clearCart,\n quote: eshopApi.quoteCart,\n checkout: eshopApi.checkoutCart,\n },\n service: {\n create: eshopApi.createService,\n update: eshopApi.updateService,\n delete: eshopApi.deleteService,\n get: eshopApi.getService,\n find: eshopApi.getServices,\n getAvailability: eshopApi.getServiceAvailability,\n findProviders: eshopApi.findServiceProviders,\n createProvider: eshopApi.createServiceProvider,\n updateProvider: eshopApi.updateServiceProvider,\n deleteProvider: eshopApi.deleteServiceProvider,\n },\n provider: {\n create: eshopApi.createProvider,\n update: eshopApi.updateProvider,\n delete: eshopApi.deleteProvider,\n get: eshopApi.getProvider,\n find: eshopApi.getProviders,\n },\n promoCode: promoCodeApi,\n },\n crm: {\n contact: {\n create: crmApi.create,\n get: crmApi.get,\n find: crmApi.find,\n update: crmApi.update,\n merge: crmApi.merge,\n import: crmApi.import,\n findSessions: crmApi.findSessions,\n revokeSession: crmApi.revokeSession,\n revokeAllSessions: crmApi.revokeAllSessions,\n },\n contactList: {\n create: crmApi.contactList.create,\n update: crmApi.contactList.update,\n get: crmApi.contactList.get,\n find: crmApi.contactList.find,\n importContacts: crmApi.contactList.importContacts,\n previewImportContacts: crmApi.contactList.previewImportContacts,\n addMember: crmApi.contactList.members.add,\n updateMember: crmApi.contactList.members.update,\n removeMember: crmApi.contactList.members.remove,\n findMembers: crmApi.contactList.members.find,\n plans: crmApi.contactList.plans,\n memberships: {\n refund: crmApi.contactList.memberships.refund,\n paymentAttempts: crmApi.contactList.memberships.paymentAttempts,\n refunds: crmApi.contactList.memberships.refunds,\n cancellations: crmApi.contactList.memberships.cancellations,\n },\n },\n action: crmApi.action,\n },\n outreach: {\n campaign: crmApi.campaign,\n campaignEnrollment: crmApi.campaignEnrollment,\n campaignMessage: crmApi.campaignMessage,\n suppression: crmApi.suppression,\n leadResearch: leadResearchApi,\n },\n automation: {\n workflow: workflowPublicApi,\n support: {\n createChannel: supportApi.channel.create,\n getChannel: supportApi.channel.get,\n findChannels: supportApi.channel.find,\n updateChannel: supportApi.channel.update,\n deleteChannel: supportApi.channel.delete,\n receiveChannelMessage: supportApi.channel.receiveMessage,\n createAgent: supportApi.agent.create,\n getAgent: supportApi.agent.get,\n findAgents: supportApi.agent.find,\n updateAgent: supportApi.agent.update,\n deleteAgent: supportApi.agent.delete,\n findConversations: supportApi.conversation.find,\n getConversation: supportApi.conversation.get,\n sendConversationMessage: supportApi.conversation.sendMessage,\n replyToConversation: supportApi.conversation.reply,\n resolveConversation: supportApi.conversation.resolve,\n assignConversation: supportApi.conversation.assign,\n },\n },\n\n analytics: analyticsApi,\n experiments: experimentsApi,\n\n setStoreId: (storeId: string) => {\n apiConfig.storeId = storeId;\n },\n\n getStoreId: () => apiConfig.storeId,\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 get session(): AdminSession | null {\n if (config.apiToken) return null;\n return toPublic(readAdminSession());\n },\n\n get isAuthenticated(): boolean {\n if (config.apiToken) return true;\n return readAdminSession() !== null;\n },\n\n onAuthStateChanged(listener: AuthStateListener<AdminSession>): () => void {\n listeners.add(listener);\n const current = toPublic(readAdminSession());\n if (current) {\n Promise.resolve()\n .then(() => listener(current))\n .catch(() => {});\n }\n return () => {\n listeners.delete(listener);\n };\n },\n\n async logout(): Promise<void> {\n if (config.apiToken) return;\n updateSession(() => null);\n },\n\n utils: createUtilitySurface(apiConfig),\n };\n\n return sdk;\n}\n\nexport interface StorefrontSessionStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nfunction defaultStorefrontSessionStorage(): StorefrontSessionStorage | null {\n if (typeof window === \"undefined\") return null;\n try {\n return window.localStorage;\n } catch {\n return null;\n }\n}\n\nfunction storefrontSessionStorageKey(baseUrl: string, storeId: string): string {\n const normalizedBaseUrl = baseUrl.trim().replace(/\\/+$/, \"\").toLowerCase();\n return `arky_contact_session:${encodeURIComponent(normalizedBaseUrl)}:${encodeURIComponent(storeId)}`;\n}\n\nexport type CreateStorefrontConfig = Omit<\n HttpClientConfig,\n \"authStorage\" | \"storeId\"\n> & {\n storeId: string;\n market?: string;\n locale?: string;\n apiToken?: string;\n sessionStorage?: StorefrontSessionStorage;\n};\n\nfunction createStorefrontClient(config: CreateStorefrontConfig) {\n const locale = config.locale || \"en\";\n const initialMarket = config.market || \"\";\n const listeners = new Set<AuthStateListener<ContactSession>>();\n let bareIdentifyPromise: Promise<StorefrontIdentifyResult> | null = null;\n let identityTail: Promise<void> = Promise.resolve();\n const sessionStorage = config.sessionStorage || defaultStorefrontSessionStorage();\n let memorySession: ContactSessionInternal | null = null;\n\n function readContactSession(): ContactSessionInternal | null {\n if (!sessionStorage) return memorySession;\n try {\n const raw = sessionStorage.getItem(\n storefrontSessionStorageKey(config.baseUrl, config.storeId),\n );\n return raw ? (JSON.parse(raw) as ContactSessionInternal) : null;\n } catch {\n return memorySession;\n }\n }\n\n function writeContactSession(session: ContactSessionInternal | null): void {\n memorySession = session;\n if (!sessionStorage) return;\n const key = storefrontSessionStorageKey(config.baseUrl, config.storeId);\n try {\n if (session) {\n sessionStorage.setItem(key, JSON.stringify(session));\n } else {\n sessionStorage.removeItem(key);\n }\n } catch {\n // The in-memory copy keeps this client usable when persistence fails.\n }\n }\n\n function toPublic(s: ContactSessionInternal | null): ContactSession | null {\n return s ? { contact: s.contact, store: s.store, market: s.market } : null;\n }\n\n function emit(): void {\n const pub = toPublic(readContactSession());\n for (const l of listeners) {\n Promise.resolve()\n .then(() => l(pub))\n .catch(() => {});\n }\n }\n\n const updateSession: ContactSessionUpdater = (updater) => {\n if (config.apiToken) return;\n const prev = readContactSession();\n const next = updater(prev);\n writeContactSession(next);\n emit();\n };\n\n const authStorage: AuthStorage = config.apiToken\n ? {\n getTokens: () => ({ access_token: config.apiToken! }),\n onTokensRefreshed: () => {},\n onForcedLogout: () => {},\n }\n : {\n getTokens() {\n const s = readContactSession();\n return s ? { access_token: s.access_token } : null;\n },\n onTokensRefreshed() {\n // Contact tokens are one-shot; no refresh on this flow.\n },\n onForcedLogout() {\n bareIdentifyPromise = null;\n updateSession(() => null);\n },\n };\n\n const httpClient = createHttpClient({\n baseUrl: config.baseUrl,\n storeId: config.storeId,\n refreshPath: config.refreshPath,\n navigate: config.navigate,\n loginFallbackPath: config.loginFallbackPath,\n authStorage,\n });\n\n const apiConfig: ApiConfig = {\n httpClient,\n storeId: config.storeId,\n baseUrl: config.baseUrl,\n market: initialMarket,\n locale,\n authStorage,\n };\n\n const storefrontApi = createStorefrontApi(apiConfig, updateSession);\n const contactApi = storefrontApi.crm.contact;\n\n function identify(params?: {\n email?: string;\n verify?: boolean;\n market?: string;\n }): Promise<StorefrontIdentifyResult> {\n if (params?.market !== undefined) apiConfig.market = params.market;\n const market = apiConfig.market;\n\n const isBareCall = !params?.email && !params?.verify;\n if (isBareCall && bareIdentifyPromise) return bareIdentifyPromise;\n\n const run = async (): Promise<StorefrontIdentifyResult> => {\n try {\n const result = await (params?.verify\n ? contactApi.requestCode({\n market,\n email: params.email,\n })\n : contactApi.identify({\n market,\n email: params?.email,\n }));\n return {\n contact: result.contact,\n store: result.store,\n market: result.market,\n verification_challenge: result.verification_challenge,\n };\n } catch (err: unknown) {\n const e = err as {\n statusCode?: number;\n status?: number;\n response?: { status?: number };\n };\n const status = e?.statusCode || e?.status || e?.response?.status;\n if (isBareCall && status === 401) {\n updateSession(() => null);\n const result = await contactApi.identify({\n market,\n });\n return {\n contact: result.contact,\n store: result.store,\n market: result.market,\n verification_challenge: result.verification_challenge,\n };\n }\n throw err;\n }\n };\n\n const promise = identityTail.then(run);\n identityTail = promise.then(\n () => undefined,\n () => undefined,\n );\n\n if (isBareCall) {\n bareIdentifyPromise = promise;\n void promise.then(\n () => {\n if (bareIdentifyPromise === promise) bareIdentifyPromise = null;\n },\n () => {\n if (bareIdentifyPromise === promise) bareIdentifyPromise = null;\n },\n );\n }\n\n return promise;\n }\n\n async function verify(params: { challenge_id: string; code: string }) {\n const result = await contactApi.verify(params);\n bareIdentifyPromise = null;\n return result;\n }\n\n async function logout(): Promise<void> {\n if (config.apiToken) return;\n bareIdentifyPromise = null;\n try {\n await contactApi.logout();\n } catch {\n updateSession(() => null);\n }\n }\n\n return {\n identify,\n verify,\n logout,\n me: () => contactApi.getMe(),\n\n get session(): ContactSession | null {\n if (config.apiToken) return null;\n return toPublic(readContactSession());\n },\n\n get isAuthenticated(): boolean {\n if (config.apiToken) return true;\n const s = readContactSession();\n return s !== null && !!s.access_token;\n },\n\n onAuthStateChanged(\n listener: AuthStateListener<ContactSession>,\n ): () => void {\n listeners.add(listener);\n const current = toPublic(readContactSession());\n if (current) {\n Promise.resolve()\n .then(() => listener(current))\n .catch(() => {});\n }\n return () => {\n listeners.delete(listener);\n };\n },\n\n store: storefrontApi.store,\n cms: storefrontApi.cms,\n eshop: storefrontApi.eshop,\n crm: storefrontApi.crm,\n action: storefrontApi.action,\n experiments: storefrontApi.experiments,\n support: createStorefrontSupportApi(apiConfig),\n getStoreId: () => apiConfig.storeId,\n setMarket: (key: string) => {\n apiConfig.market = key;\n bareIdentifyPromise = null;\n },\n getMarket: () => apiConfig.market,\n setLocale: (l: string) => {\n apiConfig.locale = l;\n },\n getLocale: () => apiConfig.locale,\n utils: createUtilitySurface(apiConfig),\n };\n}\n\ntype StorefrontClientBase = ReturnType<typeof createStorefrontClient>;\n\nexport type StorefrontClient = StorefrontClientBase & {\n forStore(storeId: string): StorefrontClient;\n};\n\nexport function createStorefront(\n config: CreateStorefrontConfig,\n): StorefrontClient {\n const sessionStorage =\n config.sessionStorage || defaultStorefrontSessionStorage() || undefined;\n const scopedConfig: CreateStorefrontConfig = {\n ...config,\n sessionStorage,\n };\n const client = createStorefrontClient(scopedConfig);\n\n Object.defineProperty(client, \"forStore\", {\n enumerable: true,\n configurable: false,\n writable: false,\n value: (storeId: string) =>\n createStorefront({\n ...scopedConfig,\n storeId,\n market: client.getMarket(),\n locale: client.getLocale(),\n }),\n });\n\n return client as StorefrontClient;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n","import type {\n Stripe,\n StripeElements,\n StripeElementsOptions,\n StripePaymentElement,\n} from \"@stripe/stripe-js\";\n\nexport interface StripeConfirmationTokenControllerConfig {\n publishableKey: string;\n connectedAccountId?: string;\n amount: number;\n currency: string;\n appearance?: StripeElementsOptions[\"appearance\"];\n}\n\nexport interface StripeConfirmationTokenOptions {\n return_url?: string;\n billing_details?: {\n name?: string | null;\n email?: string | null;\n phone?: string | null;\n };\n}\n\nexport interface StripeConfirmationTokenResult {\n confirmation_token_id: string;\n return_url?: string;\n}\n\nexport interface StripeConfirmationTokenController {\n mount(target: string | HTMLElement): void;\n update(input: { amount?: number; currency?: string }): void;\n createConfirmationToken(\n options?: StripeConfirmationTokenOptions,\n ): Promise<StripeConfirmationTokenResult>;\n handleNextAction(clientSecret: string): Promise<void>;\n destroy(): void;\n}\n\ntype StripeLoader = (\n publishableKey: string,\n options?: { stripeAccount: string },\n) => PromiseLike<Stripe | null>;\n\nasync function defaultStripeLoader(\n publishableKey: string,\n options?: { stripeAccount: string },\n): Promise<Stripe | null> {\n const { loadStripe } = await import(\"@stripe/stripe-js\");\n return loadStripe(publishableKey, options);\n}\n\nfunction normalizeCurrency(currency: string): string {\n return currency.trim().toLowerCase();\n}\n\nexport async function createStripeConfirmationTokenController(\n config: StripeConfirmationTokenControllerConfig,\n stripeLoader: StripeLoader = defaultStripeLoader,\n): Promise<StripeConfirmationTokenController> {\n const stripe = await stripeLoader(\n config.publishableKey,\n config.connectedAccountId\n ? { stripeAccount: config.connectedAccountId }\n : undefined,\n );\n if (!stripe) throw new Error(\"Stripe failed to initialize\");\n\n let elements = createElements(stripe, config);\n let paymentElement: StripePaymentElement | null = elements.create(\"payment\", {\n layout: \"tabs\",\n });\n\n return {\n mount(target) {\n if (!paymentElement) {\n paymentElement = elements.create(\"payment\", { layout: \"tabs\" });\n }\n paymentElement.mount(target);\n },\n\n update(input) {\n elements.update({\n ...(input.amount !== undefined ? { amount: input.amount } : {}),\n ...(input.currency ? { currency: normalizeCurrency(input.currency) } : {}),\n });\n },\n\n async createConfirmationToken(options = {}) {\n const submitResult = await elements.submit();\n if (submitResult.error) {\n throw new Error(submitResult.error.message || \"Payment details are incomplete\");\n }\n\n const tokenInput: Parameters<Stripe[\"createConfirmationToken\"]>[0] = {\n elements,\n params: {\n ...(options.return_url ? { return_url: options.return_url } : {}),\n ...(options.billing_details\n ? { payment_method_data: { billing_details: options.billing_details } }\n : {}),\n },\n };\n const result = await stripe.createConfirmationToken(tokenInput);\n if (result.error) {\n throw new Error(result.error.message || \"Payment confirmation token failed\");\n }\n if (!result.confirmationToken?.id) {\n throw new Error(\"Stripe did not return a confirmation token\");\n }\n return {\n confirmation_token_id: result.confirmationToken.id,\n return_url: options.return_url,\n };\n },\n\n async handleNextAction(clientSecret) {\n const result = await stripe.handleNextAction({ clientSecret });\n if (result.error) {\n throw new Error(result.error.message || \"Payment authentication failed\");\n }\n },\n\n destroy() {\n paymentElement?.destroy();\n paymentElement = null;\n },\n };\n}\n\nfunction createElements(\n stripe: Stripe,\n config: StripeConfirmationTokenControllerConfig,\n): StripeElements {\n return stripe.elements({\n mode: \"payment\",\n amount: config.amount,\n currency: normalizeCurrency(config.currency),\n paymentMethodCreation: \"manual\",\n ...(config.appearance ? { appearance: config.appearance } : {}),\n });\n}\n","import type {\n Address,\n Block,\n EshopCartItem,\n Form,\n FormEntry,\n FormField,\n FormSchema,\n FormValue,\n FormValues,\n GeoLocation,\n Price,\n Product,\n ProductVariant,\n Provider,\n Service,\n ZoneLocation,\n} from \"../types\";\nimport type {\n AvailabilityResponse,\n ProductCheckoutItemInput,\n ServiceCheckoutItemInput,\n} from \"../types/api\";\nimport type { ArkyServiceCartItem, ArkyServiceState, ArkyStoreClient } from \"./types\";\n\nexport function readErrorMessage(error: unknown, fallback: string): string {\n if (error instanceof Error && error.message) return error.message;\n if (typeof error === \"string\" && error.length > 0) return error;\n return fallback;\n}\n\nexport function createId(prefix: string): string {\n const cryptoValue = globalThis.crypto;\n if (cryptoValue && \"randomUUID\" in cryptoValue) return cryptoValue.randomUUID();\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n}\n\nexport function firstLocalized(value: unknown, locale: string): string {\n if (typeof value === \"string\") return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n const record = value as Record<string, unknown>;\n const localeValue = record[locale];\n if (typeof localeValue === \"string\") return localeValue;\n const englishValue = record.en;\n if (typeof englishValue === \"string\") return englishValue;\n for (const entry of Object.values(record)) {\n if (typeof entry === \"string\") return entry;\n }\n return \"\";\n}\n\nexport function findBlock(blocks: Block[] | undefined, keys: string[]): Block | null {\n return (blocks || []).find((block) => keys.includes(block.key)) || null;\n}\n\nexport function blockText(blocks: Block[] | undefined, keys: string[], locale: string): string {\n const block = findBlock(blocks, keys);\n if (!block) return \"\";\n return firstLocalized(block.value, locale);\n}\n\nexport function productName(product: Product, locale: string): string {\n return blockText(product.blocks, [\"name\", \"title\"], locale) || product.key || product.id;\n}\n\nexport function serviceName(service: Service, locale: string): string {\n return blockText(service.blocks, [\"name\", \"title\"], locale) || service.key || service.id;\n}\n\nexport function providerName(provider: Provider, locale: string): string {\n return blockText(provider.blocks, [\"name\", \"title\"], locale) || provider.key || provider.id;\n}\n\nexport function entitySlug(entity: { id: string; slug?: Record<string, string> }, locale: string): string {\n return entity.slug?.[locale] || entity.slug?.en || Object.values(entity.slug || {})[0] || entity.id;\n}\n\nexport function priceForMarket(\n prices: Price[],\n market: string,\n marketCurrency: string | null | undefined,\n): Price {\n const marketKey = market.trim();\n if (!marketKey) throw new Error(\"A market is required to select a product price\");\n const currency = marketCurrency?.trim().toUpperCase();\n if (!currency) throw new Error(`Market ${marketKey} does not have an authoritative currency`);\n\n const marketPrices = prices.filter((candidate) => candidate.market === marketKey);\n if (marketPrices.length === 0) {\n throw new Error(`Product is not priced for market ${marketKey}`);\n }\n if (\n marketPrices.some(\n (candidate) =>\n !Number.isSafeInteger(candidate.amount) ||\n candidate.amount < 0 ||\n candidate.currency.trim().toUpperCase() !== currency,\n )\n ) {\n throw new Error(`Product has an invalid price for market ${marketKey}`);\n }\n\n const authorizedPrices = marketPrices.filter((candidate) => candidate.contact_list_id);\n if (authorizedPrices.length > 0) {\n return authorizedPrices.reduce((lowest, candidate) =>\n candidate.amount < lowest.amount ? candidate : lowest,\n );\n }\n\n const basePrices = marketPrices.filter((candidate) => !candidate.contact_list_id);\n if (basePrices.length !== 1) {\n throw new Error(`Product does not have one base price for market ${marketKey}`);\n }\n const price = basePrices[0];\n return price;\n}\n\nexport function availableStock(client: ArkyStoreClient, variant: ProductVariant): number | undefined {\n const fromUtility = client.utils.getAvailableStock(variant);\n if (Number.isFinite(fromUtility)) return fromUtility;\n const stock = (variant.inventory || []).reduce((total, row) => total + (row.available || 0), 0);\n return stock > 0 ? stock : undefined;\n}\n\nexport function locationToAddress(location: ZoneLocation): Address {\n return {\n country: location.country || \"\",\n state: location.state || \"\",\n city: location.city || \"\",\n postal_code: location.postal_code || \"\",\n name: \"\",\n street1: \"\",\n street2: null,\n };\n}\n\nexport function createFormEntry(formId: string, fields: FormField[]): FormEntry {\n if (!formId.trim()) throw new Error(\"formId is required\");\n return { form_id: formId, fields };\n}\n\nexport function toProductCheckoutItems(items: EshopCartItem[]): ProductCheckoutItemInput[] {\n return items.map((item) => ({\n type: \"product\",\n id: item.id,\n product_id: item.product_id,\n variant_id: item.variant_id,\n quantity: item.quantity,\n }));\n}\n\nexport function toServiceCheckoutItems(items: ArkyServiceCartItem[]): ServiceCheckoutItemInput[] {\n return items.map((item) => ({\n type: \"service\",\n id: item.id,\n service_id: item.service_id,\n provider_id: item.provider_id,\n slots: [...item.slots].sort((a, b) => a.from - b.from),\n forms: item.forms,\n }));\n}\n\nfunction formValueError(field: FormSchema, message: string): Error {\n return new Error(`Invalid value for form field '${field.key}': ${message}`);\n}\n\nfunction isValidGeoLocation(value: unknown): value is GeoLocation {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const location = value as GeoLocation;\n if (location.label !== undefined && location.label !== null && typeof location.label !== \"string\") {\n return false;\n }\n const coordinates = location.coordinates;\n if (!coordinates || typeof coordinates !== \"object\") return false;\n return (\n Number.isFinite(coordinates.lat) &&\n Number.isFinite(coordinates.lon) &&\n coordinates.lat >= -90 &&\n coordinates.lat <= 90 &&\n coordinates.lon >= -180 &&\n coordinates.lon <= 180\n );\n}\n\nfunction buildFormField(field: FormSchema, value: FormValue): FormField {\n const common = { id: field.id, key: field.key };\n switch (field.type) {\n case \"text\":\n if (typeof value !== \"string\") throw formValueError(field, \"expected text\");\n if (field.required && value.trim().length === 0) throw formValueError(field, \"required text is blank\");\n return { ...common, type: \"text\", value };\n case \"number\":\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw formValueError(field, \"expected a finite number\");\n }\n if (field.min !== null && field.min !== undefined && value < field.min) {\n throw formValueError(field, `must be at least ${field.min}`);\n }\n if (field.max !== null && field.max !== undefined && value > field.max) {\n throw formValueError(field, `must be at most ${field.max}`);\n }\n return { ...common, type: \"number\", value };\n case \"boolean\":\n if (typeof value !== \"boolean\") throw formValueError(field, \"expected a boolean\");\n return { ...common, type: \"boolean\", value };\n case \"date\":\n if (typeof value !== \"number\" || !Number.isSafeInteger(value)) {\n throw formValueError(field, \"expected an integer timestamp\");\n }\n return { ...common, type: \"date\", value };\n case \"geo_location\":\n if (!isValidGeoLocation(value)) throw formValueError(field, \"expected valid coordinates\");\n return { ...common, type: \"geo_location\", value };\n case \"select\": {\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw formValueError(field, \"expected a list of options\");\n }\n const selected = value as string[];\n if (field.required && selected.length === 0) throw formValueError(field, \"at least one option is required\");\n if (new Set(selected).size !== selected.length || selected.some((item) => !field.options.includes(item))) {\n throw formValueError(field, \"contains an unknown or duplicate option\");\n }\n return { ...common, type: \"select\", value: selected };\n }\n }\n}\n\nfunction isEmptyOptionalValue(field: FormSchema, value: FormValue): boolean {\n if (field.required) return false;\n if (field.type === \"text\") return value === \"\";\n if (field.type === \"select\") return Array.isArray(value) && value.length === 0;\n if (field.type === \"geo_location\") {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0);\n }\n return false;\n}\n\nexport function buildFormFields(schema: FormSchema[], values: FormValues): FormField[] {\n const knownKeys = new Set(schema.map((field) => field.key));\n const unknownKey = Object.keys(values).find((key) => !knownKeys.has(key));\n if (unknownKey) throw new Error(`Form field '${unknownKey}' is not defined by the form schema`);\n\n const fields: FormField[] = [];\n for (const field of schema) {\n const value = values[field.key];\n if (value === undefined) {\n if (field.required) throw formValueError(field, \"required value is missing\");\n continue;\n }\n if (isEmptyOptionalValue(field, value)) continue;\n fields.push(buildFormField(field, value));\n }\n return fields;\n}\n\nexport function createFormEntryFromValues(\n form: Pick<Form, \"id\" | \"schema\">,\n values: FormValues,\n): FormEntry {\n return createFormEntry(form.id, buildFormFields(form.schema, values));\n}\n\nexport function getFormBlockType(field: FormSchema): string {\n if (field.key === \"email\") return \"email\";\n if (field.key === \"phone\") return \"phone\";\n if (field.type === \"geo_location\") return \"address\";\n return field.type;\n}\n\nexport function getFormBlockValue(field: FormSchema): unknown {\n if (field.type === \"boolean\") return false;\n if (field.type === \"select\") return [];\n if (field.type === \"geo_location\") return {};\n if (field.type === \"number\" || field.type === \"date\") return undefined;\n return \"\";\n}\n\nexport function formSchemaToBlock(field: FormSchema): Block {\n const min = field.type === \"number\" ? field.min : undefined;\n const max = field.type === \"number\" ? field.max : undefined;\n const options = field.type === \"select\" ? field.options : undefined;\n return {\n id: field.id,\n key: field.key,\n type: getFormBlockType(field),\n properties: {\n isRequired: field.required,\n minValues: field.required ? 1 : 0,\n min,\n max,\n options,\n pattern: field.key === \"email\" ? \"^.+@.+\\\\..+$\" : field.key === \"phone\" ? \"^.{6,20}$\" : undefined,\n },\n value: getFormBlockValue(field),\n };\n}\n\nexport function formatServiceTime(ts: number, tz: string): string {\n return new Date(ts * 1000).toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n timeZone: tz,\n });\n}\n\nexport function formatServiceSlotTime(from: number, to: number, tz: string): string {\n return `${formatServiceTime(from, tz)} - ${formatServiceTime(to, tz)}`;\n}\n\nexport function getSlotsForDate(\n availability: AvailabilityResponse | null,\n dateStr: string,\n providerId?: string | null,\n): { from: number; to: number; providerId: string }[] {\n if (!availability) return [];\n const slots: { from: number; to: number; providerId: string }[] = [];\n for (const provider of availability.providers) {\n if (providerId && provider.provider_id !== providerId) continue;\n const day = provider.days.find((candidate) => candidate.date === dateStr);\n if (!day) continue;\n for (const slot of day.slots) {\n if (slot.spots > 0) slots.push({ from: slot.from, to: slot.to, providerId: provider.provider_id });\n }\n }\n return slots.sort((a, b) => a.from - b.from);\n}\n\nexport function hasAvailableSlotsForDate(\n availability: AvailabilityResponse | null,\n dateStr: string,\n providerId?: string | null,\n): boolean {\n if (!availability) return false;\n return availability.providers.some((provider) => {\n if (providerId && provider.provider_id !== providerId) return false;\n const day = provider.days.find((candidate) => candidate.date === dateStr);\n return !!day?.slots.some((slot) => slot.spots > 0);\n });\n}\n\nexport const SERVICE_WEEKDAYS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport function createServiceInitialState(): ArkyServiceState {\n return {\n service: null,\n availability: null,\n providers: [],\n serviceProviders: [],\n selectedProviderId: null,\n currentMonth: new Date(new Date().getFullYear(), new Date().getMonth(), 1),\n calendar: [],\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n timezone: typeof window !== \"undefined\" ? Intl.DateTimeFormat().resolvedOptions().timeZone : \"UTC\",\n tzGroups: {},\n loading: false,\n weekdays: SERVICE_WEEKDAYS,\n quote: null,\n fetchingQuote: false,\n quoteError: null,\n currency: null,\n dateTimeConfirmed: false,\n availablePaymentMethods: [],\n cartId: null,\n promoCode: null,\n };\n}\n\nexport function normalizeTimezoneGroups(\n groups: { label: string; zones: { label: string; value: string }[] }[],\n): Record<string, { zone: string; name: string }[]> {\n const normalized: Record<string, { zone: string; name: string }[]> = {};\n for (const group of groups) {\n normalized[group.label] = group.zones.map((zone) => ({\n zone: zone.value,\n name: zone.label,\n }));\n }\n return normalized;\n}\n","import { atom, computed, map } from \"nanostores\";\nimport { createStorefront, type ContactSession, type StorefrontIdentifyResult } from \"../index\";\nimport type {\n Address,\n Block,\n Cart,\n EshopCartItem,\n CollectionEntry,\n Form,\n FormEntry,\n FormSubmission,\n Market,\n OrderCheckoutResult,\n OrderQuote,\n PaginatedResponse,\n PaymentMethod,\n Price,\n Product,\n ProductVariant,\n Provider,\n Service,\n ServiceProvider,\n ZoneLocation,\n} from \"../types\";\nimport type {\n AvailabilityResponse,\n OrderCheckoutItemInput,\n FindServiceProvidersParams,\n GetAvailabilityParams,\n GetCollectionParams,\n GetEntriesParams,\n GetEntryParams,\n GetFormParams,\n GetProductParams,\n GetProductsParams,\n GetProviderParams,\n GetProvidersParams,\n GetServiceParams,\n GetServicesParams,\n ProductCheckoutItemInput,\n RequestOptions,\n ServiceCheckoutItemInput,\n SlotRange,\n SubmitFormParams,\n} from \"../types/api\";\nimport type { ExperimentUseResponse, StorefrontAction, TrackActionParams, UseExperimentParams } from \"../api/storefront\";\nimport type {\n ArkyCalendarDay,\n ArkyCmsEntryParams,\n ArkyCartInput,\n ArkyCartStatus,\n ArkyCmsState,\n ArkyEshopState,\n ArkyLastOrder,\n ArkyServiceCartItem,\n ArkyServiceFormGroup,\n ArkyServiceFormState,\n ArkyServiceSlot,\n ArkyServiceState,\n ArkyStoreContext,\n ArkyStoreConfig,\n ArkyStripePaymentMountOptions,\n ArkySubmitFormByKeyParams,\n} from \"./types\";\nimport { createStripeConfirmationTokenController, type StripeConfirmationTokenController } from \"../payments/stripe\";\nimport {\n availableStock,\n createFormEntryFromValues,\n createFormEntry,\n createId,\n createServiceInitialState,\n entitySlug,\n formSchemaToBlock,\n formatServiceSlotTime,\n getSlotsForDate,\n hasAvailableSlotsForDate,\n locationToAddress,\n normalizeTimezoneGroups,\n priceForMarket,\n productName,\n providerName,\n readErrorMessage,\n serviceName,\n toProductCheckoutItems,\n toServiceCheckoutItems,\n} from \"./utils\";\n\nfunction firstFiniteNumber(...values: Array<number | null | undefined>): number | undefined {\n return values.find((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n}\n\nfunction initializeStore(config: ArkyStoreConfig) {\n const client = createStorefront(config);\n const formClients = new Map<string, typeof client>([[client.getStoreId(), client]]);\n const session = atom<ContactSession | null>(client.session);\n const locale = atom(config.locale || client.getLocale());\n const market_key = atom(config.market || client.getMarket());\n const market = computed(session, (value) => value?.market || null);\n const currency = computed(market, (value) => value?.currency || null);\n const allowed_payment_methods = computed(market, (value) => value?.payment_methods || []);\n const payment_config = computed(session, (value) => {\n const store = value?.store;\n const methods = value?.market?.payment_methods || [];\n const hasCreditCard = methods.some((method: PaymentMethod) => method.type === \"credit_card\");\n return {\n provider: store?.payment || null,\n enabled: hasCreditCard && !!store?.payment,\n };\n });\n\n const cart = atom<Cart | null>(null);\n const product_items = atom<EshopCartItem[]>([]);\n const service_items = atom<ArkyServiceCartItem[]>([]);\n const quote = atom<OrderQuote | null>(null);\n const promo_code = atom<string | null>(null);\n const last_order = atom<ArkyLastOrder | null>(null);\n const payment_controller = atom<StripeConfirmationTokenController | null>(null);\n const payment_ready = computed(payment_controller, (value) => value !== null);\n const cart_status = map<ArkyCartStatus>({\n loading: false,\n syncing: false,\n fetching_quote: false,\n processing_checkout: false,\n error: null,\n quote_error: null,\n selected_shipping_method_id: null,\n user_token: null,\n });\n\n function rawProductItemCount(value: Cart | null): number {\n return (value?.items || []).reduce((total, item) => {\n if (item.type !== \"product\") return total;\n return total + (item.quantity || 0);\n }, 0);\n }\n\n function rawServiceItemCount(value: Cart | null): number {\n return (value?.items || []).reduce((total, item) => {\n if (item.type !== \"service\") return total;\n return total + Math.max(1, item.slots?.length || 0);\n }, 0);\n }\n\n const product_item_count = computed([cart, product_items], (cartValue, items) =>\n Math.max(\n rawProductItemCount(cartValue),\n items.reduce((total, item) => total + (item.quantity || 0), 0),\n ),\n );\n const service_item_count = computed([cart, service_items], (cartValue, items) =>\n Math.max(\n rawServiceItemCount(cartValue),\n items.reduce((total, item) => total + Math.max(1, item.slots.length), 0),\n ),\n );\n const item_count = computed([cart, product_item_count, service_item_count], (cartValue, products, services) =>\n Math.max(cartValue?.item_count || 0, products + services),\n );\n const snapshot = computed([cart, product_items, service_items, item_count], (cartValue, products, services, count) => ({\n cart: cartValue,\n product_items: products,\n service_items: services,\n item_count: count,\n }));\n let cartWriteRevision = 0;\n let sessionRequest: Promise<ContactSession | null> | null = null;\n let cartRequest: Promise<Cart> | null = null;\n\n function nextCartWriteRevision(): number {\n cartWriteRevision += 1;\n return cartWriteRevision;\n }\n\n const cms_state = map<ArkyCmsState>({\n entries: {},\n forms: {},\n loading: false,\n error: null,\n });\n const eshop_state = map<ArkyEshopState>({\n products: [],\n services: [],\n providers: [],\n product_cursor: null,\n service_cursor: null,\n provider_cursor: null,\n availability: null,\n loading_products: false,\n loading_services: false,\n loading_providers: false,\n loading_availability: false,\n error: null,\n });\n const service_state = map<ArkyServiceState>(createServiceInitialState());\n const service_form_definitions = new Map<string, Form>();\n const service_form_state = map<ArkyServiceFormState>({\n provider_id: null,\n groups: [],\n loading: false,\n error: null,\n });\n const service_form_groups = computed(service_form_state, (state) => state.groups);\n const service_form_blocks = computed(service_form_groups, (groups) => groups.flatMap((group) => group.blocks));\n\n client.onAuthStateChanged((value) => session.set(value));\n currency.subscribe((value) => service_state.setKey(\"currency\", value));\n session.subscribe((value) => {\n const methods = value?.market?.payment_methods || [];\n if (methods.length && service_state.get().availablePaymentMethods.length === 0) {\n service_state.setKey(\"availablePaymentMethods\", methods);\n }\n });\n\n function currentMarketKey(): string {\n return market_key.get() || client.getMarket() || market.get()?.key || \"\";\n }\n\n function currentLocale(): string {\n return locale.get() || client.getLocale() || \"en\";\n }\n\n function clientForStore(storeId: string): typeof client {\n const existing = formClients.get(storeId);\n if (existing) return existing;\n const scoped = client.forStore(storeId);\n formClients.set(storeId, scoped);\n return scoped;\n }\n\n function currentStripePublishableKey(): string | null {\n const provider = payment_config.get()?.provider;\n return provider?.publishable_key || null;\n }\n\n function currentStripeConnectedAccountId(): string | null {\n const provider = payment_config.get()?.provider;\n return provider?.connected_account_id || null;\n }\n\n function currentPaymentAmount(): number {\n return Math.max(\n 0,\n firstFiniteNumber(quote.get()?.charge_amount, cart.get()?.quote_snapshot?.charge_amount, cart.get()?.quote_snapshot?.total) ?? 0,\n );\n }\n\n function currentPaymentCurrency(): string | null {\n return quote.get()?.money?.currency?.trim() || cart.get()?.quote_snapshot?.money?.currency?.trim() || null;\n }\n\n function setPaymentController(controller: StripeConfirmationTokenController | null): StripeConfirmationTokenController | null {\n const current = payment_controller.get();\n if (current && current !== controller) {\n current.destroy();\n }\n payment_controller.set(controller);\n return controller;\n }\n\n function destroyPaymentController(): void {\n setPaymentController(null);\n }\n\n async function mountStripePayment(\n target: string | HTMLElement,\n options: ArkyStripePaymentMountOptions = {},\n ): Promise<StripeConfirmationTokenController> {\n const publishableKey = options.publishableKey || currentStripePublishableKey();\n if (!publishableKey) {\n throw new Error(\"Stripe publishable key is required to mount card payment\");\n }\n const hasExplicitAmount = options.amount !== undefined;\n const hasExplicitCurrency = Boolean(options.currency?.trim());\n if (hasExplicitAmount !== hasExplicitCurrency) {\n throw new Error(\"Stripe amount and currency must be supplied together\");\n }\n const amount = hasExplicitAmount ? options.amount! : currentPaymentAmount();\n if (!Number.isSafeInteger(amount) || amount <= 0) {\n throw new Error(\"A positive minor-unit payment amount is required to mount card payment\");\n }\n const paymentCurrency = hasExplicitCurrency ? options.currency!.trim() : currentPaymentCurrency();\n if (!paymentCurrency || !/^[a-z]{3}$/i.test(paymentCurrency)) {\n throw new Error(\"An explicit three-letter payment currency is required to mount card payment\");\n }\n const controller = await createStripeConfirmationTokenController({\n publishableKey,\n connectedAccountId: options.connectedAccountId || currentStripeConnectedAccountId() || undefined,\n amount,\n currency: paymentCurrency,\n ...(options.appearance ? { appearance: options.appearance } : {}),\n });\n controller.mount(target);\n setPaymentController(controller);\n return controller;\n }\n\n function updatePaymentController(input: { amount?: number; currency?: string }): void {\n payment_controller.get()?.update(input);\n }\n\n function marketForLocale(value: string): string | null {\n return config.marketForLocale?.(value) || null;\n }\n\n async function ensureSession(): Promise<ContactSession | null> {\n const current = session.get();\n const marketKey = currentMarketKey();\n if (current && (!marketKey || current.market?.key === marketKey)) return current;\n if (!sessionRequest) {\n sessionRequest = identify({ market: marketKey }).finally(() => {\n sessionRequest = null;\n });\n }\n return sessionRequest;\n }\n\n async function identify(params: { email?: string; verify?: boolean; market?: string } = {}): Promise<StorefrontIdentifyResult> {\n if (params.market) setMarket(params.market);\n const result = await client.identify({\n ...params,\n market: params.market || currentMarketKey(),\n });\n session.set({\n contact: result.contact,\n store: result.store,\n market: result.market,\n });\n return result;\n }\n\n async function identifyContactEmailIfMissing(email: string): Promise<ContactSession> {\n const normalizedEmail = email.trim().toLowerCase();\n if (!normalizedEmail) throw new Error(\"Contact email is required\");\n\n const current = session.get();\n if (current?.contact.email === normalizedEmail) return current;\n return identify({ email: normalizedEmail });\n }\n\n function setMarket(key: string): void {\n market_key.set(key);\n client.setMarket(key);\n }\n\n function setLocale(value: string, options: { market?: string } = {}): void {\n locale.set(value);\n client.setLocale(value);\n const nextMarket = options.market || marketForLocale(value);\n if (nextMarket) setMarket(nextMarket);\n }\n\n function setContext(context: ArkyStoreContext): void {\n if (context.locale) {\n setLocale(context.locale, { market: context.market });\n return;\n }\n if (context.market) setMarket(context.market);\n }\n\n async function ensureCart(): Promise<Cart> {\n if (cartRequest) return cartRequest;\n\n cart_status.setKey(\"loading\", true);\n cart_status.setKey(\"error\", null);\n const refreshRevision = cartWriteRevision;\n cartRequest = (async () => {\n await ensureSession();\n const response = await client.eshop.cart.current({\n market: currentMarketKey(),\n });\n await applyCartResponse(response, { ifRevision: refreshRevision });\n return response;\n })();\n\n try {\n return await cartRequest;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Failed to load cart.\"));\n throw error;\n } finally {\n cartRequest = null;\n cart_status.setKey(\"loading\", false);\n }\n }\n\n async function buildProductCartItem(\n item: ProductCheckoutItemInput,\n source: Cart,\n productHint?: Product,\n ): Promise<EshopCartItem | null> {\n try {\n const product =\n productHint?.id === item.product_id\n ? productHint\n : await client.eshop.product.get({ id: item.product_id });\n const variant = product.variants.find((candidate) => candidate.id === item.variant_id);\n if (!variant) return null;\n return {\n id: item.id || createId(\"product\"),\n product_id: product.id,\n variant_id: variant.id,\n product_name: productName(product, currentLocale()),\n product_slug: entitySlug(product, currentLocale()),\n variant_attributes: variant.attributes as EshopCartItem[\"variant_attributes\"],\n requires_shipping: variant.requires_shipping !== false,\n price: priceForMarket(variant.prices, currentMarketKey(), market.get()?.currency),\n quantity: item.quantity,\n added_at: source.created_at ? source.created_at * 1000 : Date.now(),\n max_stock: availableStock(client, variant),\n };\n } catch {\n return null;\n }\n }\n\n async function buildServiceCartItems(items: ServiceCheckoutItemInput[]): Promise<ArkyServiceCartItem[]> {\n const rows: ArkyServiceCartItem[] = [];\n for (const item of items) {\n let service: Service | null = null;\n let provider: Provider | null = null;\n try {\n service = await client.eshop.service.get({ id: item.service_id });\n } catch {}\n try {\n provider = await client.eshop.provider.get({ id: item.provider_id });\n } catch {}\n rows.push({\n id: item.id || createId(\"service\"),\n service_id: item.service_id,\n provider_id: item.provider_id,\n slots: item.slots,\n forms: item.forms || [],\n service_name: service ? serviceName(service, currentLocale()) : item.service_id,\n provider_name: provider ? providerName(provider, currentLocale()) : item.provider_id,\n });\n }\n return rows;\n }\n\n async function applyCartResponse(\n response: Cart,\n options: { ifRevision?: number; productHint?: Product } = {},\n ): Promise<Cart> {\n if (options.ifRevision !== undefined && options.ifRevision !== cartWriteRevision) {\n return cart.get() || response;\n }\n cart.set(response);\n cart_status.setKey(\"user_token\", response.token || null);\n cart_status.setKey(\"selected_shipping_method_id\", response.shipping_method_id || null);\n promo_code.set(response.promo_code || null);\n quote.set(response.quote_snapshot || null);\n\n const items = response.items || [];\n const products = await Promise.all(\n items\n .filter((item): item is ProductCheckoutItemInput => item.type === \"product\")\n .map((item) => buildProductCartItem(item, response, options.productHint)),\n );\n const services = await buildServiceCartItems(items.filter((item): item is ServiceCheckoutItemInput => item.type === \"service\"));\n product_items.set(products.filter((item): item is EshopCartItem => item !== null));\n service_items.set(services);\n return response;\n }\n\n function checkoutItems(input: ArkyCartInput = {}): OrderCheckoutItemInput[] {\n return [\n ...toProductCheckoutItems(input.product_items || product_items.get()),\n ...toServiceCheckoutItems(input.service_items || service_items.get()),\n ];\n }\n\n async function syncCart(input: ArkyCartInput = {}, writeRevision = nextCartWriteRevision()): Promise<Cart> {\n cart_status.setKey(\"syncing\", true);\n cart_status.setKey(\"error\", null);\n try {\n const current = cart.get() || (await ensureCart());\n const response = await client.eshop.cart.update({\n id: current.id,\n market: currentMarketKey(),\n items: checkoutItems(input),\n shipping_address: input.shipping_address,\n billing_address: input.billing_address,\n forms: input.forms,\n promo_code:\n input.promo_code === null\n ? \"\"\n : input.promo_code === undefined\n ? promo_code.get() || undefined\n : input.promo_code,\n payment_method_key: input.payment_method_key === null ? \"\" : input.payment_method_key,\n shipping_method_id:\n input.shipping_method_id === null\n ? \"\"\n : input.shipping_method_id === undefined\n ? cart_status.get().selected_shipping_method_id || undefined\n : input.shipping_method_id,\n });\n await applyCartResponse(response, { ifRevision: writeRevision });\n return response;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Failed to sync cart.\"));\n throw error;\n } finally {\n cart_status.setKey(\"syncing\", false);\n }\n }\n\n async function addProduct(product: Product, variant: ProductVariant, quantity = 1): Promise<Cart> {\n cart_status.setKey(\"error\", null);\n const writeRevision = nextCartWriteRevision();\n try {\n const current = cart.get() || (await ensureCart());\n const response = await client.eshop.cart.addItem({\n id: current.id,\n item: {\n type: \"product\",\n product_id: product.id,\n variant_id: variant.id,\n quantity,\n },\n });\n await applyCartResponse(response, { ifRevision: writeRevision, productHint: product });\n return response;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Failed to add product to cart.\"));\n throw error;\n }\n }\n\n async function setProductQuantity(itemId: string, quantity: number): Promise<Cart> {\n const writeRevision = nextCartWriteRevision();\n const next = product_items.get().map((item) => {\n if (item.id !== itemId) return item;\n const bounded = item.max_stock ? Math.min(Math.max(1, quantity), item.max_stock) : Math.max(1, quantity);\n return { ...item, quantity: bounded };\n });\n product_items.set(next);\n return syncCart({ product_items: next }, writeRevision);\n }\n\n async function removeProduct(itemId: string): Promise<Cart | null> {\n const writeRevision = nextCartWriteRevision();\n const item = product_items.get().find((candidate) => candidate.id === itemId);\n product_items.set(product_items.get().filter((candidate) => candidate.id !== itemId));\n const current = cart.get();\n if (!current || !item) return null;\n const response = await client.eshop.cart.removeItem({\n id: current.id,\n item_id: item.id,\n });\n await applyCartResponse(response, { ifRevision: writeRevision });\n return response;\n }\n\n async function addServiceItem(item: ArkyServiceCartItem): Promise<Cart> {\n const writeRevision = nextCartWriteRevision();\n const next = [...service_items.get(), item];\n service_items.set(next);\n return syncCart({ service_items: next }, writeRevision);\n }\n\n async function removeServiceItem(itemId: string): Promise<Cart> {\n const writeRevision = nextCartWriteRevision();\n const next = service_items.get().filter((item) => item.id !== itemId);\n service_items.set(next);\n return syncCart({ service_items: next }, writeRevision);\n }\n\n async function clearCart(): Promise<Cart | null> {\n const writeRevision = nextCartWriteRevision();\n const current = cart.get();\n clearLocalCart();\n if (!current) return null;\n const response = await client.eshop.cart.clear({ id: current.id });\n await applyCartResponse(response, { ifRevision: writeRevision });\n return response;\n }\n\n function clearLocalCart(): void {\n product_items.set([]);\n service_items.set([]);\n cart.set(null);\n quote.set(null);\n promo_code.set(null);\n cart_status.setKey(\"selected_shipping_method_id\", null);\n }\n\n async function fetchQuote(input: ArkyCartInput = {}): Promise<OrderQuote | null> {\n if (checkoutItems(input).length === 0) {\n quote.set(null);\n return null;\n }\n cart_status.setKey(\"fetching_quote\", true);\n cart_status.setKey(\"quote_error\", null);\n try {\n const current = await syncCart(input);\n const response = await client.eshop.cart.quote({ id: current.id });\n quote.set(response);\n return response;\n } catch (error) {\n quote.set(null);\n cart_status.setKey(\"quote_error\", readErrorMessage(error, \"Failed to fetch quote.\"));\n throw error;\n } finally {\n cart_status.setKey(\"fetching_quote\", false);\n }\n }\n\n async function checkout(input: ArkyCartInput = {}): Promise<OrderCheckoutResult> {\n if (checkoutItems(input).length === 0) throw new Error(\"Cart is empty\");\n cart_status.setKey(\"processing_checkout\", true);\n cart_status.setKey(\"error\", null);\n try {\n const current = await syncCart(input);\n const quoteValue = quote.get();\n const paymentMethodKey = input.payment_method_key || current.payment_method_key || quoteValue?.money?.payment_method_key || undefined;\n let chargeAmount = firstFiniteNumber(quoteValue?.charge_amount, current.quote_snapshot?.charge_amount);\n if (paymentMethodKey === \"credit_card\" && chargeAmount === undefined) {\n const latestQuote = await client.eshop.cart.quote({ id: current.id });\n quote.set(latestQuote);\n chargeAmount = firstFiniteNumber(latestQuote.charge_amount, latestQuote.total);\n }\n if (\n paymentMethodKey === \"credit_card\" &&\n (typeof chargeAmount !== \"number\" || !Number.isSafeInteger(chargeAmount) || chargeAmount < 0)\n ) {\n throw new Error(\"Card checkout requires a non-negative integer charge amount in minor units\");\n }\n const needsConfirmationToken = paymentMethodKey === \"credit_card\" && typeof chargeAmount === \"number\" && chargeAmount > 0;\n let confirmationTokenId: string | undefined;\n let returnUrl = input.return_url;\n const paymentController = input.payment ?? payment_controller.get();\n\n if (needsConfirmationToken) {\n if (!paymentController) throw new Error(\"Payment controller is required for card checkout\");\n returnUrl = returnUrl || (typeof window !== \"undefined\" ? window.location.href : undefined);\n const token = await paymentController.createConfirmationToken({\n return_url: returnUrl,\n billing_details: input.billing_details,\n });\n confirmationTokenId = token.confirmation_token_id;\n returnUrl = token.return_url || returnUrl;\n }\n\n const response = await client.eshop.cart.checkout({\n id: current.id,\n payment_method_key: paymentMethodKey,\n confirmation_token_id: confirmationTokenId,\n return_url: returnUrl,\n });\n\n if (response.payment_action.type === \"handle_next_action\") {\n if (!paymentController) throw new Error(\"Payment controller is required for card authentication\");\n await paymentController.handleNextAction(response.payment_action.client_secret);\n }\n\n const stored: ArkyLastOrder = {\n order_id: response.order_id,\n number: response.number,\n payment_action: response.payment_action,\n payment: response.payment,\n product_items: input.product_items || product_items.get(),\n service_items: input.service_items || service_items.get(),\n shipping_address: input.shipping_address || null,\n billing_address: input.billing_address || null,\n total: response.payment.amount,\n currency: response.payment.currency,\n payment_method_key: paymentMethodKey || null,\n created_at: Date.now(),\n };\n last_order.set(stored);\n if (input.clear_after_checkout !== false) {\n clearLocalCart();\n }\n return response;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Checkout failed.\"));\n throw error;\n } finally {\n cart_status.setKey(\"processing_checkout\", false);\n }\n }\n\n function serviceCalendar(): ArkyCalendarDay[] {\n const state = service_state.get();\n const { currentMonth, selectedDate, availability, selectedProviderId } = state;\n const year = currentMonth.getFullYear();\n const monthIndex = currentMonth.getMonth();\n const first = new Date(year, monthIndex, 1);\n const last = new Date(year, monthIndex + 1, 0);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const cells: ArkyCalendarDay[] = [];\n const pad = (first.getDay() + 6) % 7;\n for (let i = 0; i < pad; i++) {\n cells.push({\n date: new Date(0),\n iso: \"\",\n available: false,\n isSelected: false,\n isInRange: false,\n isToday: false,\n blank: true,\n });\n }\n\n for (let day = 1; day <= last.getDate(); day++) {\n const date = new Date(year, monthIndex, day);\n const iso = `${year}-${String(monthIndex + 1).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n cells.push({\n date,\n iso,\n available: hasAvailableSlotsForDate(availability, iso, selectedProviderId),\n isSelected: iso === selectedDate,\n isInRange: false,\n isToday: date.getTime() === today.getTime(),\n blank: false,\n });\n }\n\n const suffix = (7 - (cells.length % 7)) % 7;\n for (let i = 0; i < suffix; i++) {\n cells.push({\n date: new Date(0),\n iso: \"\",\n available: false,\n isSelected: false,\n isInRange: false,\n isToday: false,\n blank: true,\n });\n }\n\n return cells;\n }\n\n function computeServiceSlots(dateStr: string): ArkyServiceSlot[] {\n const state = service_state.get();\n const { availability, selectedProviderId, timezone, service } = state;\n return getSlotsForDate(availability, dateStr, selectedProviderId).map((slot, index) => ({\n id: `${service?.id || \"service\"}-${slot.from}-${index}`,\n serviceId: service?.id || \"\",\n providerId: slot.providerId,\n from: slot.from,\n to: slot.to,\n timeText: formatServiceSlotTime(slot.from, slot.to, timezone),\n dateText: new Date(slot.from * 1000).toLocaleDateString([], {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n timeZone: timezone,\n }),\n }));\n }\n\n function toServiceCartItem(slots: ArkyServiceSlot[], forms: FormEntry[] = []): ArkyServiceCartItem {\n const orderedSlots = [...slots].sort((left, right) => left.from - right.from || left.to - right.to);\n const [first] = orderedSlots;\n if (!first) throw new Error(\"At least one service slot is required\");\n if (orderedSlots.some((slot) => slot.serviceId !== first.serviceId || slot.providerId !== first.providerId)) {\n throw new Error(\"A booking can only contain slots for one service and provider\");\n }\n if (orderedSlots.some((slot) => !Number.isSafeInteger(slot.from) || !Number.isSafeInteger(slot.to) || slot.from >= slot.to)) {\n throw new Error(\"A booking contains an invalid service slot\");\n }\n for (let index = 1; index < orderedSlots.length; index += 1) {\n if (orderedSlots[index - 1].to !== orderedSlots[index].from) {\n throw new Error(\"A multi-slot booking must contain adjacent slots\");\n }\n }\n return {\n id: createId(\"booking\"),\n service_id: first.serviceId,\n provider_id: first.providerId,\n slots: orderedSlots.map(({ from, to }) => ({ from, to })),\n forms,\n service_name: first.serviceName,\n date_text: first.dateText,\n time_text: first.timeText,\n is_multi_day: orderedSlots.length > 1,\n };\n }\n\n async function syncServiceCart(items: ArkyServiceCartItem[]): Promise<Cart> {\n try {\n return await syncCart({\n product_items: product_items.get(),\n service_items: items,\n });\n } catch (error) {\n service_state.setKey(\"quoteError\", readErrorMessage(error, \"Failed to sync service cart.\"));\n throw error;\n }\n }\n\n function serviceCurrentStepName(): string {\n const state = service_state.get();\n if (!state.service) return \"\";\n if (!state.selectedSlot || !state.dateTimeConfirmed) return \"datetime\";\n return \"review\";\n }\n\n const service_current_step_name = computed(service_state, serviceCurrentStepName);\n const service_can_proceed = computed(service_state, (state) => {\n const step = serviceCurrentStepName();\n if (step === \"datetime\") {\n return !!(state.selectedDate && state.selectedSlot);\n }\n if (step === \"review\") return true;\n return false;\n });\n const service_month_year = computed(service_state, (state) =>\n state.currentMonth.toLocaleString(undefined, {\n month: \"long\",\n year: \"numeric\",\n }),\n );\n const service_chain_start = computed(service_items, (items) => {\n const slots = items.flatMap((item) => item.slots);\n if (!slots.length) return null;\n return Math.max(...slots.map((slot) => slot.to));\n });\n const service_total_steps = computed(service_state, (state) => (state.service ? 2 : 0));\n const service_steps = computed(service_state, () => ({\n 1: { name: \"datetime\" },\n 2: { name: \"review\" },\n }));\n const service_current_step = computed([service_current_step_name, service_steps], (name, steps) => {\n for (const [idx, step] of Object.entries(steps)) {\n if (step.name === name) return Number(idx);\n }\n return 1;\n });\n\n function formatServiceDateDisplay(value: string | null): string {\n if (!value) return \"\";\n return new Date(value).toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n });\n }\n\n function configuredServiceFormIds(relationship: ServiceProvider): string[] {\n const formIds = relationship.forms.map((entry) => entry.form_id.trim());\n if (formIds.some((formId) => !formId) || new Set(formIds).size !== formIds.length) {\n throw new Error(`Service provider ${relationship.provider_id} has blank or duplicate configured form IDs`);\n }\n return formIds;\n }\n\n function resolveServiceProvider(\n state: ArkyServiceState,\n providerId?: string | null,\n ): ServiceProvider | null {\n const serviceId = state.service?.id;\n if (!serviceId) return null;\n const relationships = state.serviceProviders.filter((relationship) => relationship.service_id === serviceId);\n const targetProviderId = providerId ?? state.selectedSlot?.providerId ?? state.selectedProviderId;\n if (targetProviderId) {\n return relationships.find((relationship) => relationship.provider_id === targetProviderId) || null;\n }\n return relationships.length === 1 ? relationships[0] : null;\n }\n\n function clearServiceFormState(error: string | null = null, loading = false): void {\n service_form_state.set({\n provider_id: null,\n groups: [],\n loading,\n error,\n });\n }\n\n function activateServiceProviderForms(\n providerId?: string | null,\n reset = false,\n ): ServiceProvider | null {\n const relationship = resolveServiceProvider(service_state.get(), providerId);\n if (!relationship) {\n clearServiceFormState();\n return null;\n }\n\n const formIds = configuredServiceFormIds(relationship);\n const current = service_form_state.get();\n const currentFormIds = current.groups.map((group) => group.form.id);\n if (\n !reset &&\n current.provider_id === relationship.provider_id &&\n currentFormIds.length === formIds.length &&\n currentFormIds.every((formId, index) => formId === formIds[index])\n ) {\n if (current.error) service_form_state.setKey(\"error\", null);\n return relationship;\n }\n\n const groups: ArkyServiceFormGroup[] = formIds.map((formId) => {\n const form = service_form_definitions.get(formId);\n if (!form) throw new Error(`Configured booking form '${formId}' was not loaded`);\n return {\n form,\n blocks: form.schema.map(formSchemaToBlock),\n };\n });\n service_form_state.set({\n provider_id: relationship.provider_id,\n groups,\n loading: false,\n error: null,\n });\n return relationship;\n }\n\n async function loadServiceFormDefinitions(relationships: ServiceProvider[]): Promise<void> {\n const formIds = [\n ...new Set(relationships.flatMap((relationship) => configuredServiceFormIds(relationship))),\n ];\n if (formIds.length === 0) return;\n\n const forms = await Promise.all(formIds.map((formId) => loadForm({ id: formId })));\n for (let index = 0; index < forms.length; index += 1) {\n const form = forms[index];\n const formId = formIds[index];\n if (form.id !== formId) {\n throw new Error(`Configured booking form '${formId}' resolved to '${form.id}'`);\n }\n }\n for (const form of forms) service_form_definitions.set(form.id, form);\n }\n\n function configuredServiceFormEntries(relationship: ServiceProvider): FormEntry[] {\n const formIds = configuredServiceFormIds(relationship);\n if (formIds.length === 0) return [];\n activateServiceProviderForms(relationship.provider_id);\n const state = service_form_state.get();\n if (\n state.provider_id !== relationship.provider_id ||\n state.groups.length !== formIds.length ||\n state.groups.some((group, index) => group.form.id !== formIds[index])\n ) {\n throw new Error(`Booking forms are not ready for provider ${relationship.provider_id}`);\n }\n return state.groups.map((group) =>\n createFormEntryFromValues(\n group.form,\n Object.fromEntries(group.blocks.map((block) => [block.key, block.value])),\n ),\n );\n }\n\n const service_controller = {\n async initialize(): Promise<void> {\n service_state.setKey(\"tzGroups\", normalizeTimezoneGroups(client.utils.tzGroups));\n await ensureCart();\n const methods = session.get()?.market?.payment_methods || [];\n if (methods.length) service_state.setKey(\"availablePaymentMethods\", methods);\n },\n\n setTimezone(tz: string): void {\n service_state.setKey(\"timezone\", tz);\n service_state.setKey(\"calendar\", serviceCalendar());\n const state = service_state.get();\n if (state.selectedDate) {\n service_state.setKey(\"slots\", computeServiceSlots(state.selectedDate));\n service_state.setKey(\"selectedSlot\", null);\n service_state.setKey(\"quote\", null);\n service_state.setKey(\"quoteError\", null);\n activateServiceProviderForms();\n }\n },\n\n async select(service: Service): Promise<void> {\n service_form_definitions.clear();\n clearServiceFormState(null, true);\n service_state.set({\n ...service_state.get(),\n service: null,\n serviceProviders: [],\n providers: [],\n selectedProviderId: null,\n availability: null,\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n loading: true,\n });\n try {\n const [fullService, serviceProviders] = await Promise.all([\n client.eshop.service.get({ id: service.id }),\n client.eshop.service.findProviders({\n service_id: service.id,\n }),\n ]);\n const providerIds = [...new Set(serviceProviders.map((relationship) => relationship.provider_id))];\n const [providerResults] = await Promise.all([\n Promise.all(providerIds.map((id) => client.eshop.provider.get({ id }).catch(() => null))),\n loadServiceFormDefinitions(serviceProviders),\n ]);\n\n service_state.set({\n ...service_state.get(),\n service: fullService,\n serviceProviders,\n providers: providerResults.filter((provider): provider is Provider => provider !== null),\n selectedProviderId: null,\n availability: null,\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n currentMonth: new Date(new Date().getFullYear(), new Date().getMonth(), 1),\n loading: false,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms();\n await service_controller.loadMonth();\n } catch (error) {\n service_form_definitions.clear();\n clearServiceFormState(readErrorMessage(error, \"Failed to load booking forms.\"));\n service_state.setKey(\"loading\", false);\n throw error;\n }\n },\n\n async loadMonth(): Promise<void> {\n const state = service_state.get();\n if (!state.service) return;\n service_state.setKey(\"loading\", true);\n try {\n const chainedStart = service_chain_start.get();\n let from: number;\n let to: number;\n if (chainedStart) {\n from = chainedStart;\n to = chainedStart;\n } else {\n const month = state.currentMonth;\n from = Math.floor(Date.UTC(month.getFullYear(), month.getMonth(), 1) / 1000);\n to = Math.floor(Date.UTC(month.getFullYear(), month.getMonth() + 1, 1) / 1000);\n }\n const availability = await loadAvailability({\n service_id: state.service.id,\n from,\n to,\n });\n service_state.setKey(\"availability\", availability);\n service_state.setKey(\"calendar\", serviceCalendar());\n } finally {\n service_state.setKey(\"loading\", false);\n }\n },\n\n prevMonth(): void {\n const { currentMonth } = service_state.get();\n service_state.setKey(\"currentMonth\", new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n void service_controller.loadMonth();\n },\n\n nextMonth(): void {\n const { currentMonth } = service_state.get();\n service_state.setKey(\"currentMonth\", new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n void service_controller.loadMonth();\n },\n\n selectProvider(providerId: string | null): void {\n const state = service_state.get();\n if (providerId && !resolveServiceProvider(state, providerId)) {\n throw new Error(`Provider ${providerId} is not configured for the selected service`);\n }\n service_state.set({\n ...state,\n selectedProviderId: providerId,\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms(providerId);\n void service_controller.loadMonth();\n },\n\n selectDate(cell: ArkyCalendarDay): void {\n if (cell.blank || !cell.available) return;\n const state = service_state.get();\n service_state.set({\n ...state,\n selectedDate: cell.iso,\n slots: computeServiceSlots(cell.iso),\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms();\n service_state.setKey(\"calendar\", serviceCalendar());\n },\n\n selectTimeSlot(slot: ArkyServiceSlot | null): void {\n const state = service_state.get();\n if (slot) {\n if (!state.service || slot.serviceId !== state.service.id) {\n throw new Error(\"The selected slot does not belong to the selected service\");\n }\n if (state.selectedProviderId && slot.providerId !== state.selectedProviderId) {\n throw new Error(\"The selected slot does not belong to the selected provider\");\n }\n if (!resolveServiceProvider(state, slot.providerId)) {\n throw new Error(`Provider ${slot.providerId} is not configured for the selected service`);\n }\n }\n service_state.set({\n ...state,\n selectedSlot: slot,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms(slot?.providerId);\n },\n\n resetDateSelection(): void {\n service_state.set({\n ...service_state.get(),\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms();\n },\n\n updateCalendar(): void {\n service_state.setKey(\"calendar\", serviceCalendar());\n },\n\n findFirstAvailable(): void {\n for (const day of service_state.get().calendar) {\n if (!day.blank && day.available) {\n service_controller.selectDate(day);\n return;\n }\n }\n },\n\n async addToCart(explicitSlots?: ArkyServiceSlot[]): Promise<void> {\n const state = service_state.get();\n const slots = explicitSlots || (state.selectedSlot ? [state.selectedSlot] : []);\n if (slots.length === 0) return;\n const first = slots[0];\n if (!state.service || first.serviceId !== state.service.id) {\n throw new Error(\"The booking slots do not belong to the selected service\");\n }\n const relationship = resolveServiceProvider(state, first.providerId);\n if (!relationship) {\n throw new Error(`Provider ${first.providerId} is not configured for the selected service`);\n }\n let forms: FormEntry[];\n try {\n forms = configuredServiceFormEntries(relationship);\n } catch (error) {\n service_form_state.setKey(\"error\", readErrorMessage(error, \"Booking forms are invalid.\"));\n throw error;\n }\n const displayName = serviceName(state.service, currentLocale());\n const enriched = slots.map((slot) => ({\n ...slot,\n serviceName: displayName,\n date: slot.dateText,\n }));\n const nextItems = [...service_items.get(), toServiceCartItem(enriched, forms)];\n await syncServiceCart(nextItems);\n service_state.set({\n ...service_state.get(),\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms(service_state.get().selectedProviderId, true);\n service_state.setKey(\"calendar\", serviceCalendar());\n },\n\n async removeFromCart(bookingId: string): Promise<void> {\n await syncServiceCart(service_items.get().filter((item) => item.id !== bookingId));\n },\n\n async clearCart(): Promise<void> {\n await syncServiceCart([]);\n },\n\n async checkout(paymentMethodId?: string, forms: FormEntry[] = []): Promise<OrderCheckoutResult> {\n const state = service_state.get();\n const items = service_items.get();\n if (!items.length) throw new Error(\"Cart is empty\");\n service_state.setKey(\"loading\", true);\n try {\n const result = await checkout({\n service_items: items,\n payment_method_key: paymentMethodId,\n promo_code: state.promoCode || undefined,\n forms,\n });\n service_state.setKey(\"cartId\", cart.get()?.id || null);\n return result;\n } finally {\n service_state.setKey(\"loading\", false);\n }\n },\n\n async fetchQuote(paymentMethodId?: string, promoCode?: string | null): Promise<OrderQuote | null> {\n const state = service_state.get();\n const items = service_items.get();\n if (!items.length) return null;\n service_state.setKey(\"fetchingQuote\", true);\n service_state.setKey(\"quoteError\", null);\n try {\n service_state.setKey(\"promoCode\", promoCode || null);\n const response = await fetchQuote({\n service_items: items,\n payment_method_key: paymentMethodId,\n promo_code: promoCode || undefined,\n });\n service_state.setKey(\"cartId\", cart.get()?.id || null);\n service_state.setKey(\"quote\", response);\n const methods = response?.payment_methods || session.get()?.market?.payment_methods || [];\n if (methods.length) service_state.setKey(\"availablePaymentMethods\", methods);\n return response;\n } catch (error) {\n service_state.setKey(\"quoteError\", readErrorMessage(error, \"Failed to fetch quote.\"));\n return null;\n } finally {\n service_state.setKey(\"fetchingQuote\", false);\n }\n },\n\n getProvidersList(): Provider[] {\n return service_state.get().providers;\n },\n\n prevStep(): void {\n const current = serviceCurrentStepName();\n if (current === \"review\") {\n service_state.setKey(\"dateTimeConfirmed\", false);\n return;\n }\n if (current === \"datetime\") {\n service_state.setKey(\"selectedSlot\", null);\n service_state.setKey(\"dateTimeConfirmed\", false);\n service_state.setKey(\"quote\", null);\n service_state.setKey(\"quoteError\", null);\n activateServiceProviderForms();\n }\n },\n\n nextStep(): void {\n if (serviceCurrentStepName() === \"datetime\" && service_can_proceed.get()) {\n service_state.setKey(\"dateTimeConfirmed\", true);\n }\n },\n\n getServicePrice(): string {\n const state = service_state.get();\n const relationship = resolveServiceProvider(state);\n if (!relationship) return \"\";\n try {\n const price = priceForMarket(relationship.prices, currentMarketKey(), market.get()?.currency);\n return client.utils.formatPrice([price]);\n } catch {\n return \"\";\n }\n },\n\n formatDateDisplay: formatServiceDateDisplay,\n serviceItemsFromSlots(slots: ArkyServiceSlot[], forms: FormEntry[] = []): ArkyServiceCartItem[] {\n return slots.length ? [toServiceCartItem(slots, forms)] : [];\n },\n };\n\n async function loadEntry(params: ArkyCmsEntryParams, options?: RequestOptions): Promise<CollectionEntry> {\n cms_state.setKey(\"loading\", true);\n cms_state.setKey(\"error\", null);\n try {\n const { locale: nextLocale, market: nextMarket, ...entryParams } = params;\n setContext({ locale: nextLocale, market: nextMarket });\n\n if (entryParams.id) {\n const entry = await client.cms.entry.get(entryParams as GetEntryParams, options);\n const cacheKey = entryParams.key || entryParams.id || entry.id;\n cms_state.setKey(\"entries\", {\n ...cms_state.get().entries,\n [cacheKey]: entry,\n });\n return entry;\n }\n\n if (!entryParams.collection_id || !entryParams.key) {\n throw new Error(\"ArkyCmsEntryParams requires id, or collection_id and key\");\n }\n\n const result = await client.cms.entry.find(\n {\n ...entryParams,\n collection_id: entryParams.collection_id,\n key: entryParams.key,\n limit: 1,\n } as GetEntriesParams,\n options,\n );\n const entry = result.items?.[0];\n if (!entry) {\n throw new Error(\"CMS entry not found\");\n }\n cms_state.setKey(\"entries\", {\n ...cms_state.get().entries,\n [entryParams.key]: entry,\n });\n return entry;\n } catch (error) {\n cms_state.setKey(\"error\", readErrorMessage(error, \"Failed to load CMS entry.\"));\n throw error;\n } finally {\n cms_state.setKey(\"loading\", false);\n }\n }\n\n function formCacheKey(params: GetFormParams): string {\n const storeId = params.store_id || client.getStoreId();\n const identifier = params.id ? `id:${params.id}` : params.key ? `key:${params.key}` : \"missing\";\n return `${storeId}:${identifier}`;\n }\n\n async function loadForm(params: GetFormParams, options?: RequestOptions): Promise<Form> {\n cms_state.setKey(\"loading\", true);\n cms_state.setKey(\"error\", null);\n try {\n const storeId = params.store_id || client.getStoreId();\n const formClient = clientForStore(storeId);\n const form = await formClient.cms.form.get({ ...params, store_id: storeId }, options);\n const forms = { ...cms_state.get().forms };\n forms[formCacheKey({ id: form.id, store_id: storeId })] = form;\n forms[formCacheKey({ key: form.key, store_id: storeId })] = form;\n cms_state.setKey(\"forms\", forms);\n return form;\n } catch (error) {\n cms_state.setKey(\"error\", readErrorMessage(error, \"Failed to load CMS form.\"));\n throw error;\n } finally {\n cms_state.setKey(\"loading\", false);\n }\n }\n\n async function ensureFormClient(storeId: string) {\n const formClient = clientForStore(storeId);\n const marketKey = currentMarketKey();\n if (formClient === client) {\n await ensureSession();\n } else if (!formClient.session || (marketKey && formClient.session.market?.key !== marketKey)) {\n await formClient.identify({ market: marketKey });\n }\n return formClient;\n }\n\n async function submitForm(params: SubmitFormParams, options?: RequestOptions): Promise<FormSubmission> {\n const storeId = params.store_id || client.getStoreId();\n const formClient = await ensureFormClient(storeId);\n return formClient.cms.form.submit({ ...params, store_id: storeId }, options);\n }\n\n async function submitFormByKey(\n params: ArkySubmitFormByKeyParams,\n options?: RequestOptions,\n ): Promise<FormSubmission> {\n const storeId = params.store_id || client.getStoreId();\n const form = await loadForm({ key: params.key, store_id: storeId }, options);\n const entry = createFormEntryFromValues(form, params.values);\n return submitForm({ store_id: storeId, form_id: form.id, fields: entry.fields }, options);\n }\n\n async function loadProducts(params: GetProductsParams = {}, options?: RequestOptions): Promise<PaginatedResponse<Product>> {\n eshop_state.setKey(\"loading_products\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.product.find(params, options);\n eshop_state.setKey(\"products\", response.items || []);\n eshop_state.setKey(\"product_cursor\", response.cursor || null);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load products.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_products\", false);\n }\n }\n\n async function loadServices(params: GetServicesParams = {}, options?: RequestOptions): Promise<PaginatedResponse<Service>> {\n eshop_state.setKey(\"loading_services\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.service.find(params, options);\n eshop_state.setKey(\"services\", response.items || []);\n eshop_state.setKey(\"service_cursor\", response.cursor || null);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load services.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_services\", false);\n }\n }\n\n async function loadProviders(params: GetProvidersParams = {}, options?: RequestOptions): Promise<PaginatedResponse<Provider>> {\n eshop_state.setKey(\"loading_providers\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.provider.find(params, options);\n eshop_state.setKey(\"providers\", response.items || []);\n eshop_state.setKey(\"provider_cursor\", response.cursor || null);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load providers.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_providers\", false);\n }\n }\n\n async function loadAvailability(params: GetAvailabilityParams, options?: RequestOptions) {\n eshop_state.setKey(\"loading_availability\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.service.getAvailability(params, options);\n eshop_state.setKey(\"availability\", response);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load availability.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_availability\", false);\n }\n }\n\n async function useExperiment(params: string | UseExperimentParams): Promise<ExperimentUseResponse> {\n await ensureSession();\n const input = typeof params === \"string\" ? { key: params } : params;\n return client.experiments.use(input);\n }\n\n async function trackAction(params: TrackActionParams): Promise<void> {\n await ensureSession();\n return client.action.track(params);\n }\n\n const cart_store = {\n cart,\n product_items,\n service_items,\n quote_result: quote,\n promo_code,\n last_order,\n status: cart_status,\n product_item_count,\n service_item_count,\n item_count,\n snapshot,\n load: ensureCart,\n refresh: syncCart,\n addProduct,\n setProductQuantity,\n removeProduct,\n addServiceItem,\n removeServiceItem,\n clear: clearCart,\n clearLocal: clearLocalCart,\n quote: fetchQuote,\n checkout,\n payment: {\n controller: payment_controller,\n ready: payment_ready,\n setController: setPaymentController,\n getController: () => payment_controller.get(),\n mountStripe: mountStripePayment,\n update: updatePaymentController,\n destroy: destroyPaymentController,\n },\n applyPromoCode(code: string, input: Omit<ArkyCartInput, \"promo_code\"> = {}) {\n return fetchQuote({ ...input, promo_code: code });\n },\n removePromoCode(input: Omit<ArkyCartInput, \"promo_code\"> = {}) {\n return fetchQuote({ ...input, promo_code: null });\n },\n selectShippingMethod(id: string | null) {\n cart_status.setKey(\"selected_shipping_method_id\", id);\n },\n locationToAddress,\n createFormEntry,\n buildItems: checkoutItems,\n buildProductItems: toProductCheckoutItems,\n buildServiceItems: toServiceCheckoutItems,\n };\n\n const product_store = {\n get: (params: GetProductParams, options?: RequestOptions) => client.eshop.product.get(params, options),\n list: loadProducts,\n };\n\n const service_store = {\n get: (params: GetServiceParams, options?: RequestOptions) => client.eshop.service.get(params, options),\n list: loadServices,\n listProviders: (params: FindServiceProvidersParams, options?: RequestOptions) => client.eshop.service.findProviders(params, options),\n getAvailability: loadAvailability,\n state: service_state,\n form_state: service_form_state,\n form_groups: service_form_groups,\n form_blocks: service_form_blocks,\n current_step_name: service_current_step_name,\n can_proceed: service_can_proceed,\n month_year: service_month_year,\n chain_start: service_chain_start,\n total_steps: service_total_steps,\n steps: service_steps,\n current_step: service_current_step,\n initialize: service_controller.initialize,\n select: service_controller.select,\n setTimezone: service_controller.setTimezone,\n loadMonth: service_controller.loadMonth,\n prevMonth: service_controller.prevMonth,\n nextMonth: service_controller.nextMonth,\n selectProvider: service_controller.selectProvider,\n selectDate: service_controller.selectDate,\n selectTimeSlot: service_controller.selectTimeSlot,\n resetDateSelection: service_controller.resetDateSelection,\n updateCalendar: service_controller.updateCalendar,\n findFirstAvailable: service_controller.findFirstAvailable,\n addToCart: service_controller.addToCart,\n removeFromCart: service_controller.removeFromCart,\n clearCart: service_controller.clearCart,\n getProvidersList: service_controller.getProvidersList,\n prevStep: service_controller.prevStep,\n nextStep: service_controller.nextStep,\n getServicePrice: service_controller.getServicePrice,\n formatDateDisplay: service_controller.formatDateDisplay,\n serviceItemsFromSlots: service_controller.serviceItemsFromSlots,\n };\n\n return {\n client,\n session,\n market,\n market_key,\n locale,\n currency,\n allowed_payment_methods,\n payment_config,\n identify,\n identifyContactEmailIfMissing,\n verify: client.verify,\n me: client.me,\n logout: client.logout,\n onAuthStateChanged: client.onAuthStateChanged,\n get isAuthenticated() {\n return client.isAuthenticated;\n },\n setMarket,\n setLocale,\n setContext,\n getStoreId: client.getStoreId,\n getMarket: currentMarketKey,\n getLocale: currentLocale,\n cms: {\n state: cms_state,\n collection: {\n get: (params: GetCollectionParams, options?: RequestOptions) => client.cms.collection.get(params, options),\n },\n entry: {\n get: loadEntry,\n find: (params: GetEntriesParams, options?: RequestOptions) => client.cms.entry.find(params, options),\n },\n form: {\n get: loadForm,\n submit: submitForm,\n submitByKey: submitFormByKey,\n },\n taxonomy: client.cms.taxonomy,\n },\n eshop: {\n state: eshop_state,\n product: product_store,\n service: service_store,\n provider: {\n get: (params: GetProviderParams, options?: RequestOptions) => client.eshop.provider.get(params, options),\n list: loadProviders,\n },\n order: client.eshop.order,\n cart: cart_store,\n },\n crm: client.crm,\n action: {\n track(params: TrackActionParams) {\n return trackAction(params);\n },\n pageView(payload: Record<string, unknown> = {}) {\n return trackAction({ key: \"page.view\", payload });\n },\n state: atom<StorefrontAction | null>(null),\n },\n experiments: {\n use: useExperiment,\n },\n support: client.support,\n store: client.store,\n utils: client.utils,\n };\n}\n\ntype InitializedStoreBase = ReturnType<typeof initializeStore>;\n\nexport type InitializedStore = InitializedStoreBase & {\n forStore(storeId: string): InitializedStore;\n};\n\nexport function initialize(config: ArkyStoreConfig): InitializedStore {\n const stores = new Map<string, InitializedStore>();\n\n const createScope = (scopeConfig: ArkyStoreConfig): InitializedStore => {\n const existing = stores.get(scopeConfig.storeId);\n if (existing) return existing;\n\n const store = initializeStore(scopeConfig) as InitializedStore;\n stores.set(scopeConfig.storeId, store);\n Object.defineProperty(store, \"forStore\", {\n enumerable: true,\n configurable: false,\n writable: false,\n value: (storeId: string) =>\n createScope({\n ...config,\n storeId,\n market: store.getMarket(),\n locale: store.getLocale(),\n }),\n });\n return store;\n };\n\n return createScope(config);\n}\n\nexport type ArkyStore = ReturnType<typeof initialize>;\nexport type ArkyCartStore = ArkyStore[\"eshop\"][\"cart\"];\nexport type ArkyServiceStore = ArkyStore[\"eshop\"][\"service\"];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/orderItems.ts","../src/api/storefront.ts","../src/cartController.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/support.ts","../src/utils/blocks.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/utils/inventory.ts","../src/index.ts","../src/payments/stripe.ts","../src/storefrontStore/utils.ts","../src/storefrontStore/initialize.ts"],"names":["isRecord","isBlock","findBlock","atom","computed","map","entry"],"mappings":"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","file":"storefront.cjs","sourcesContent":["import type { OrderCheckoutItemInput } from \"../types/api\";\n\nexport function sanitizePublicCheckoutItems(\n items: OrderCheckoutItemInput[],\n): OrderCheckoutItemInput[] {\n return items.map((item) => {\n if (item.type === \"product\") {\n return {\n type: \"product\",\n ...(item.id ? { id: item.id } : {}),\n product_id: item.product_id,\n variant_id: item.variant_id,\n quantity: item.quantity,\n };\n }\n return {\n type: \"service\",\n ...(item.id ? { id: item.id } : {}),\n service_id: item.service_id,\n provider_id: item.provider_id,\n slots: item.slots,\n ...(item.forms ? { forms: item.forms } : {}),\n };\n });\n}\n","import type { ApiConfig, ContactSessionUpdater } from \"../index\";\nimport type {\n RequestOptions,\n GetCollectionParams,\n GetEntryParams,\n GetEntriesParams,\n GetFormParams,\n SubmitFormParams,\n GetTaxonomyParams,\n GetTaxonomyChildrenParams,\n GetProductParams,\n GetProductsParams,\n GetOrderParams,\n GetOrdersParams,\n FindDigitalAccessGrantsParams,\n GetDigitalAccessGrantParams,\n DownloadDigitalAccessParams,\n GetAvailabilityParams,\n AvailabilityResponse,\n GetServiceParams,\n GetServicesParams,\n FindServiceProvidersParams,\n GetProviderParams,\n GetProvidersParams,\n GetContactListParams,\n FindStorefrontContactListPlansParams,\n FindStorefrontContactListsParams,\n FindStorefrontContactListMembershipsParams,\n SubscribeContactListParams,\n ContactListAccessParams,\n ContactListContentAccessParams,\n GetCurrentCartParams,\n GetCartParams,\n UpdateCartParams,\n AddCartItemParams,\n RemoveCartItemParams,\n ClearCartParams,\n QuoteCartParams,\n CheckoutCartParams,\n VerificationChallengeResponse,\n} from \"../types/api\";\nimport type {\n CollectionEntry,\n Collection,\n Form,\n FormSubmission,\n Taxonomy,\n StorefrontContactList,\n StorefrontContactListPlan,\n ContactListAccessResponse,\n ContactListContentAccessResponse,\n ContactListManagementResponse,\n ContactListSubscribeResponse,\n StorefrontContactListMembership,\n Service,\n ServiceProvider,\n Provider,\n Store,\n Location,\n Market,\n OrderQuote,\n Order,\n DigitalAccessGrant,\n DigitalAccessDownloadResponse,\n OrderCheckoutResult,\n Product,\n Contact,\n ContactSessionIssued,\n Cart,\n PaginatedResponse,\n} from \"../types\";\nimport { sanitizePublicCheckoutItems } from \"../utils/orderItems\";\n\nexport type IdentifyResponse = {\n contact: Contact;\n token: ContactSessionIssued | null;\n store: Store;\n market: Market | null;\n verification_challenge: VerificationChallengeResponse | null;\n};\n\nexport type VerifyResponse = {\n contact: Contact;\n token: ContactSessionIssued;\n};\ntype LogoutResponse = void;\ntype Country = {\n code: string;\n name: string;\n states: { code: string; name: string }[];\n};\ntype CountriesResponse = { items: Country[]; cursor: string | null };\n\nexport interface StorefrontAction {\n store_id: string;\n contact_id: string;\n key: string;\n payload: Record<string, unknown>;\n created_at: number;\n}\n\nexport interface TrackActionParams {\n key: string;\n payload?: Record<string, unknown>;\n}\n\nexport const COMMON_ACTION_KEYS = [\n \"page.view\",\n \"product.view\",\n \"service.view\",\n \"provider.view\",\n \"cart.added\",\n \"cart.removed\",\n \"checkout.started\",\n \"order.created\",\n \"signin\",\n \"signup\",\n \"verified.email\",\n \"search\",\n \"share\",\n \"wishlist.added\",\n] as const;\n\nexport type CommonActionKey = (typeof COMMON_ACTION_KEYS)[number];\n\nexport interface UseExperimentParams {\n key: string;\n store_id?: string;\n}\n\nexport interface ExperimentUseResponse {\n experiment_key: string;\n experiment_version: number;\n variant_key: string;\n goal_action_key: string;\n}\n\nexport const createActionApi = (apiConfig: ApiConfig) => ({\n COMMON_ACTION_KEYS,\n async track(params: TrackActionParams): Promise<void> {\n try {\n await apiConfig.httpClient.post<void>(\n `/v1/storefront/${apiConfig.storeId}/actions/track`,\n { key: params.key, payload: params.payload },\n );\n } catch {}\n },\n});\n\nexport const createStorefrontApi = (\n apiConfig: ApiConfig,\n updateContactSession: ContactSessionUpdater,\n) => {\n const base = (storeId = apiConfig.storeId) => `/v1/storefront/${storeId}`;\n const pendingVerifications = new Map<\n string,\n Pick<IdentifyResponse, \"store\" | \"market\">\n >();\n\n function persistIdentification(result: IdentifyResponse): IdentifyResponse {\n const issued = result.token;\n if (issued?.token) {\n updateContactSession(() => ({\n access_token: issued.token,\n contact: result.contact,\n store: result.store,\n market: result.market,\n }));\n } else {\n if (result.verification_challenge) {\n pendingVerifications.set(result.verification_challenge.challenge_id, {\n store: result.store,\n market: result.market,\n });\n }\n updateContactSession((current) =>\n current\n ? {\n ...current,\n contact: result.contact,\n store: result.store,\n market: result.market,\n }\n : null,\n );\n }\n return result;\n }\n\n async function submitIdentification(\n path: \"identify\" | \"code\",\n params?: { email?: string; market?: string },\n options?: RequestOptions,\n ): Promise<IdentifyResponse> {\n const store_id = apiConfig.storeId;\n const result = await apiConfig.httpClient.post<IdentifyResponse>(\n `${base(store_id)}/account/${path}`,\n {\n store_id,\n market: params?.market || apiConfig.market || null,\n email: params?.email,\n },\n options,\n );\n return persistIdentification(result);\n }\n\n return {\n store: {\n getStore(options?: RequestOptions): Promise<Store> {\n return apiConfig.httpClient.get<Store>(base(), options);\n },\n\n location: {\n getCountries(options?: RequestOptions): Promise<CountriesResponse> {\n return apiConfig.httpClient.get<CountriesResponse>(\n `/v1/platform/countries`,\n options,\n );\n },\n\n getCountry(\n countryCode: string,\n options?: RequestOptions,\n ): Promise<Country> {\n return apiConfig.httpClient.get<Country>(\n `/v1/platform/countries/${countryCode}`,\n options,\n );\n },\n\n list(options?: RequestOptions): Promise<Location[]> {\n return apiConfig.httpClient.get<Location[]>(\n `${base()}/locations`,\n options,\n );\n },\n\n get(id: string, options?: RequestOptions): Promise<Location> {\n return apiConfig.httpClient.get<Location>(\n `${base()}/locations/${id}`,\n options,\n );\n },\n },\n\n market: {\n list(options?: RequestOptions): Promise<Market[]> {\n return apiConfig.httpClient.get<Market[]>(\n `${base()}/markets`,\n options,\n );\n },\n\n get(id: string, options?: RequestOptions): Promise<Market> {\n return apiConfig.httpClient.get<Market>(\n `${base()}/markets/${id}`,\n options,\n );\n },\n },\n },\n\n cms: {\n collection: {\n get(\n params: GetCollectionParams,\n options?: RequestOptions,\n ): Promise<Collection> {\n const store_id = params.store_id || apiConfig.storeId;\n const identifier = params.id !== undefined\n ? params.id\n : `${store_id}:${params.key}`;\n return apiConfig.httpClient.get<Collection>(\n `${base(store_id)}/collections/${identifier}`,\n options,\n );\n },\n },\n\n entry: {\n get(\n params: GetEntryParams,\n options?: RequestOptions,\n ): Promise<CollectionEntry> {\n const store_id = params.store_id || apiConfig.storeId;\n if (!params.id) {\n throw new Error(\"GetEntryParams requires id\");\n }\n return apiConfig.httpClient.get<CollectionEntry>(\n `${base(store_id)}/entries/${params.id}`,\n options,\n );\n },\n\n find(\n params: GetEntriesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<CollectionEntry>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<CollectionEntry>>(\n `${base(store_id)}/entries`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n },\n\n form: {\n get(params: GetFormParams, options?: RequestOptions): Promise<Form> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.key) {\n identifier = `${store_id}:${params.key}`;\n } else {\n throw new Error(\"GetFormParams requires id or key\");\n }\n\n return apiConfig.httpClient.get<Form>(\n `${base(store_id)}/forms/${identifier}`,\n options,\n );\n },\n\n submit(\n params: SubmitFormParams,\n options?: RequestOptions,\n ): Promise<FormSubmission> {\n const { store_id, form_id, ...payload } = params;\n const target_store_id = store_id || apiConfig.storeId;\n if (!form_id) {\n throw new Error(\"SubmitFormParams requires form_id\");\n }\n\n return apiConfig.httpClient.post<FormSubmission>(\n `${base(target_store_id)}/forms/${form_id}/submissions`,\n { ...payload, form_id, store_id: target_store_id },\n options,\n );\n },\n },\n\n taxonomy: {\n get(\n params: GetTaxonomyParams,\n options?: RequestOptions,\n ): Promise<Taxonomy> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.key) {\n identifier = `${store_id}:${params.key}`;\n } else {\n throw new Error(\"GetTaxonomyParams requires id or key\");\n }\n\n return apiConfig.httpClient.get<Taxonomy>(\n `${base(store_id)}/taxonomies/${identifier}`,\n options,\n );\n },\n\n getChildren(\n params: GetTaxonomyChildrenParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Taxonomy>> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<PaginatedResponse<Taxonomy>>(\n `${base(store_id)}/taxonomies/${params.id}/children`,\n options,\n );\n },\n },\n },\n\n eshop: {\n product: {\n get(\n params: GetProductParams,\n options?: RequestOptions,\n ): Promise<Product> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${store_id}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProductParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get<Product>(\n `${base(store_id)}/products/${identifier}`,\n options,\n );\n },\n\n find(\n params: GetProductsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Product>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Product>>(\n `${base(store_id)}/products`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n },\n\n cart: {\n current(\n params: GetCurrentCartParams = {},\n options?: RequestOptions,\n ): Promise<Cart> {\n const store_id = params.store_id || apiConfig.storeId;\n const { store_id: _store_id, ...payload } = params;\n return apiConfig.httpClient.post<Cart>(\n `${base(store_id)}/carts/current`,\n {\n ...payload,\n store_id,\n market: payload.market || apiConfig.market,\n },\n options,\n );\n },\n\n get(params: GetCartParams, options?: RequestOptions): Promise<Cart> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<Cart>(\n `${base(store_id)}/carts/${params.id}`,\n {\n ...options,\n params: params.token ? { token: params.token } : options?.params,\n },\n );\n },\n\n update(\n params: UpdateCartParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const { store_id, items, ...payload } = params;\n const target = store_id || apiConfig.storeId;\n return apiConfig.httpClient.put<Cart>(\n `${base(target)}/carts/${params.id}`,\n {\n ...payload,\n store_id: target,\n ...(items ? { items: sanitizePublicCheckoutItems(items) } : {}),\n },\n options,\n );\n },\n\n addItem(\n params: AddCartItemParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const { store_id, item, ...payload } = params;\n const target = store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<Cart>(\n `${base(target)}/carts/${params.id}/items`,\n {\n ...payload,\n store_id: target,\n item: sanitizePublicCheckoutItems([item])[0],\n },\n options,\n );\n },\n\n removeItem(\n params: RemoveCartItemParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const { store_id, ...payload } = params;\n const target = store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<Cart>(\n `${base(target)}/carts/${params.id}/items/remove`,\n { ...payload, store_id: target },\n options,\n );\n },\n\n clear(\n params: ClearCartParams,\n options?: RequestOptions,\n ): Promise<Cart> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<Cart>(\n `${base(store_id)}/carts/${params.id}/clear`,\n { id: params.id, store_id },\n options,\n );\n },\n\n quote(\n params: QuoteCartParams,\n options?: RequestOptions,\n ): Promise<OrderQuote> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<OrderQuote>(\n `${base(store_id)}/carts/${params.id}/quote`,\n { id: params.id, store_id },\n options,\n );\n },\n\n checkout(\n params: CheckoutCartParams,\n options?: RequestOptions,\n ): Promise<OrderCheckoutResult> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<OrderCheckoutResult>(\n `${base(store_id)}/carts/${params.id}/checkout`,\n {\n id: params.id,\n store_id,\n payment_method_key: params.payment_method_key,\n confirmation_token_id: params.confirmation_token_id,\n return_url: params.return_url,\n },\n options,\n );\n },\n },\n\n order: {\n get(params: GetOrderParams, options?: RequestOptions): Promise<Order> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<Order>(\n `${base(store_id)}/orders/${params.id}`,\n options,\n );\n },\n\n find(\n params: GetOrdersParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Order>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Order>>(\n `${base(store_id)}/orders`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n downloadDigitalAccess(\n params: DownloadDigitalAccessParams,\n options?: RequestOptions,\n ): Promise<DigitalAccessDownloadResponse> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<DigitalAccessDownloadResponse>(\n `${base(store_id)}/orders/${params.order_id}/digital-access/${params.grant_id}/download`,\n {},\n options,\n );\n },\n\n findDigitalAccess(\n params: FindDigitalAccessGrantsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<DigitalAccessGrant>> {\n const { order_id, store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<DigitalAccessGrant>>(\n `${base(store_id)}/orders/${order_id}/digital-access`,\n { ...options, params: queryParams },\n );\n },\n\n getDigitalAccess(\n params: GetDigitalAccessGrantParams,\n options?: RequestOptions,\n ): Promise<DigitalAccessGrant> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<DigitalAccessGrant>(\n `${base(store_id)}/orders/${params.order_id}/digital-access/${params.grant_id}`,\n options,\n );\n },\n },\n\n service: {\n get(\n params: GetServiceParams,\n options?: RequestOptions,\n ): Promise<Service> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${store_id}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetServiceParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get<Service>(\n `${base(store_id)}/services/${identifier}`,\n options,\n );\n },\n\n find(\n params: GetServicesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Service>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Service>>(\n `${base(store_id)}/services`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n findProviders(\n params: FindServiceProvidersParams,\n options?: RequestOptions,\n ): Promise<ServiceProvider[]> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<ServiceProvider[]>(\n `${base(store_id)}/service-providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n getAvailability(\n params: GetAvailabilityParams,\n options?: RequestOptions,\n ): Promise<AvailabilityResponse> {\n const { store_id, ...queryParams } = params;\n const target_store_id = store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<AvailabilityResponse>(\n `${base(target_store_id)}/services/availability`,\n { ...options, params: queryParams },\n );\n },\n },\n\n provider: {\n get(\n params: GetProviderParams,\n options?: RequestOptions,\n ): Promise<Provider> {\n const store_id = params.store_id || apiConfig.storeId;\n let identifier: string;\n if (params.id) {\n identifier = params.id;\n } else if (params.slug) {\n identifier = `${store_id}:${apiConfig.locale}:${params.slug}`;\n } else {\n throw new Error(\"GetProviderParams requires id or slug\");\n }\n\n return apiConfig.httpClient.get<Provider>(\n `${base(store_id)}/providers/${identifier}`,\n options,\n );\n },\n\n find(\n params: GetProvidersParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<Provider>> {\n const { store_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<Provider>>(\n `${base(store_id)}/providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n },\n },\n\n crm: {\n contact: {\n identify(\n params?: { email?: string; market?: string },\n options?: RequestOptions,\n ): Promise<IdentifyResponse> {\n return submitIdentification(\"identify\", params, options);\n },\n\n requestCode(\n params?: { email?: string; market?: string },\n options?: RequestOptions,\n ): Promise<IdentifyResponse> {\n return submitIdentification(\"code\", params, options);\n },\n\n async verify(\n params: { challenge_id: string; code: string },\n options?: RequestOptions,\n ): Promise<VerifyResponse> {\n const store_id = apiConfig.storeId;\n const result = await apiConfig.httpClient.post<VerifyResponse>(\n `${base(store_id)}/account/verify`,\n { store_id, challenge_id: params.challenge_id, code: params.code },\n options,\n );\n if (result?.token?.token) {\n const pending = pendingVerifications.get(params.challenge_id);\n const identifiedStore =\n pending?.store ||\n (await apiConfig.httpClient.get<Store>(base(store_id), options));\n updateContactSession((prev) =>\n prev\n ? {\n ...prev,\n access_token: result.token.token,\n contact: result.contact,\n }\n : {\n access_token: result.token.token,\n contact: result.contact,\n store: identifiedStore,\n market: pending?.market || null,\n },\n );\n pendingVerifications.delete(params.challenge_id);\n }\n return result;\n },\n\n async logout(options?: RequestOptions): Promise<LogoutResponse> {\n const store_id = apiConfig.storeId;\n try {\n await apiConfig.httpClient.post<void>(\n `${base(store_id)}/account/logout`,\n {},\n options,\n );\n } finally {\n updateContactSession(() => null);\n }\n },\n\n getMe(options?: RequestOptions): Promise<Contact> {\n return apiConfig.httpClient.get<Contact>(\n `${base()}/account/me`,\n options,\n );\n },\n },\n\n contactList: {\n get(\n params: GetContactListParams,\n options?: RequestOptions,\n ): Promise<StorefrontContactList> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<StorefrontContactList>(\n `${base(store_id)}/contact-lists/${params.id}`,\n options,\n );\n },\n\n find(\n params?: FindStorefrontContactListsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<StorefrontContactList>> {\n const { store_id, ...queryParams } = params || {};\n return apiConfig.httpClient.get<PaginatedResponse<StorefrontContactList>>(\n `${base(store_id)}/contact-lists`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n plans: {\n find(\n params: FindStorefrontContactListPlansParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<StorefrontContactListPlan>> {\n const { store_id, contact_list_id, ...queryParams } = params;\n return apiConfig.httpClient.get<PaginatedResponse<StorefrontContactListPlan>>(\n `${base(store_id)}/contact-lists/${contact_list_id}/plans`,\n { ...options, params: queryParams },\n );\n },\n },\n\n memberships: {\n find(\n params?: FindStorefrontContactListMembershipsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponse<StorefrontContactListMembership>> {\n const { store_id, ...queryParams } = params || {};\n return apiConfig.httpClient.get<\n PaginatedResponse<StorefrontContactListMembership>\n >(`${base(store_id)}/contact-lists/memberships`, {\n ...options,\n params: queryParams,\n });\n },\n },\n\n subscribe(\n params: SubscribeContactListParams,\n options?: RequestOptions,\n ): Promise<ContactListSubscribeResponse> {\n const { store_id, id, ...payload } = params;\n return apiConfig.httpClient.post<ContactListSubscribeResponse>(\n `${base(store_id)}/contact-lists/${id}/subscribe`,\n payload,\n options,\n );\n },\n\n checkAccess(\n params: ContactListAccessParams,\n options?: RequestOptions,\n ): Promise<ContactListAccessResponse> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.get<ContactListAccessResponse>(\n `${base(store_id)}/contact-lists/${params.id}/access`,\n options,\n );\n },\n\n checkContentAccess(\n params: ContactListContentAccessParams,\n options?: RequestOptions,\n ): Promise<ContactListContentAccessResponse> {\n const { store_id, ...payload } = params;\n return apiConfig.httpClient.post<ContactListContentAccessResponse>(\n `${base(store_id)}/contact-lists/access`,\n payload,\n options,\n );\n },\n\n manage(\n token: string,\n options?: RequestOptions,\n ): Promise<ContactListManagementResponse> {\n return apiConfig.httpClient.post<ContactListManagementResponse>(\n `${base()}/contact-lists/manage`,\n { token },\n options,\n );\n },\n\n unsubscribe(\n token: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean }> {\n const headers = { ...options?.headers };\n for (const name of Object.keys(headers)) {\n if (name.toLowerCase() === \"content-type\") delete headers[name];\n }\n return apiConfig.httpClient.post<{ success: boolean }>(\n `${base()}/contact-lists/unsubscribe`,\n new URLSearchParams({ \"List-Unsubscribe\": \"One-Click\" }),\n {\n ...options,\n params: { ...(options?.params || {}), token },\n headers: {\n ...headers,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n },\n );\n },\n\n confirm(\n token: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean }> {\n return apiConfig.httpClient.post<{ success: boolean }>(\n `${base()}/contact-lists/confirm`,\n { token },\n options,\n );\n },\n },\n },\n\n action: createActionApi(apiConfig),\n experiments: {\n use(\n params: UseExperimentParams,\n options?: RequestOptions,\n ): Promise<ExperimentUseResponse> {\n const store_id = params.store_id || apiConfig.storeId;\n return apiConfig.httpClient.post<ExperimentUseResponse>(\n `${base(store_id)}/experiments/use`,\n { key: params.key },\n options,\n );\n },\n },\n };\n};\n","import type {\n AddCartItemParams,\n CheckoutCartParams,\n ClearCartParams,\n GetCartParams,\n GetCurrentCartParams,\n QuoteCartParams,\n RemoveCartItemParams,\n RequestOptions,\n UpdateCartParams,\n} from \"./types/api\";\nimport type { Cart, OrderCheckoutResult, OrderQuote } from \"./types\";\n\nexport interface CartApi {\n current(params?: GetCurrentCartParams, options?: RequestOptions): Promise<Cart>;\n get(params: GetCartParams, options?: RequestOptions): Promise<Cart>;\n update(params: UpdateCartParams, options?: RequestOptions): Promise<Cart>;\n addItem(params: AddCartItemParams, options?: RequestOptions): Promise<Cart>;\n removeItem(params: RemoveCartItemParams, options?: RequestOptions): Promise<Cart>;\n clear(params: ClearCartParams, options?: RequestOptions): Promise<Cart>;\n quote(params: QuoteCartParams, options?: RequestOptions): Promise<OrderQuote>;\n checkout(params: CheckoutCartParams, options?: RequestOptions): Promise<OrderCheckoutResult>;\n}\n\nexport interface CartControllerState {\n cart: Cart | null;\n quote: OrderQuote | null;\n checkoutResult: OrderCheckoutResult | null;\n loading: boolean;\n initialized: boolean;\n error: unknown;\n}\n\nexport type CartControllerListener = (state: CartControllerState) => void;\n\nexport type CartControllerInitParams = GetCurrentCartParams | GetCartParams;\nexport type CartControllerRefreshParams = GetCurrentCartParams | GetCartParams;\nexport type CartControllerUpdateParams = Omit<UpdateCartParams, \"id\"> & { id?: string };\nexport type CartControllerAddItemParams = Omit<AddCartItemParams, \"id\"> & { id?: string };\nexport type CartControllerRemoveItemParams = RemoveCartItemParams extends infer Params\n ? Params extends { id: string }\n ? Omit<Params, \"id\"> & { id?: string }\n : never\n : never;\nexport type CartControllerClearParams = Omit<ClearCartParams, \"id\"> & { id?: string };\nexport type CartControllerQuoteParams = Omit<QuoteCartParams, \"id\"> & { id?: string };\nexport type CartControllerCheckoutParams = Omit<CheckoutCartParams, \"id\"> & { id?: string };\n\nexport interface CartController {\n subscribe(listener: CartControllerListener): () => void;\n getState(): CartControllerState;\n init(params?: CartControllerInitParams, options?: RequestOptions): Promise<Cart>;\n refresh(params?: CartControllerRefreshParams, options?: RequestOptions): Promise<Cart>;\n addItem(params: CartControllerAddItemParams, options?: RequestOptions): Promise<Cart>;\n update(params: CartControllerUpdateParams, options?: RequestOptions): Promise<Cart>;\n removeItem(params: CartControllerRemoveItemParams, options?: RequestOptions): Promise<Cart>;\n clear(params?: CartControllerClearParams, options?: RequestOptions): Promise<Cart>;\n quote(params?: CartControllerQuoteParams, options?: RequestOptions): Promise<OrderQuote>;\n checkout(params?: CartControllerCheckoutParams, options?: RequestOptions): Promise<OrderCheckoutResult>;\n}\n\nfunction hasCartId(params: CartControllerInitParams): params is GetCartParams {\n return \"id\" in params && typeof params.id === \"string\" && params.id.length > 0;\n}\n\nexport function createCartController(cartApi: CartApi): CartController {\n const listeners = new Set<CartControllerListener>();\n let state: CartControllerState = {\n cart: null,\n quote: null,\n checkoutResult: null,\n loading: false,\n initialized: false,\n error: null,\n };\n\n function emit(): void {\n for (const listener of listeners) {\n Promise.resolve()\n .then(() => listener(state))\n .catch(() => {});\n }\n }\n\n function setState(patch: Partial<CartControllerState>): CartControllerState {\n state = { ...state, ...patch };\n emit();\n return state;\n }\n\n function currentCartId(id?: string): string {\n const cartId = id || state.cart?.id;\n if (!cartId) {\n throw new Error(\"Cart has not been initialized and no cart id was provided\");\n }\n return cartId;\n }\n\n async function runCartMutation(operation: () => Promise<Cart>): Promise<Cart> {\n setState({ loading: true, error: null });\n try {\n const cart = await operation();\n setState({\n cart,\n quote: null,\n checkoutResult: null,\n loading: false,\n initialized: true,\n error: null,\n });\n return cart;\n } catch (error) {\n setState({ loading: false, error });\n throw error;\n }\n }\n\n return {\n subscribe(listener) {\n listeners.add(listener);\n Promise.resolve()\n .then(() => listener(state))\n .catch(() => {});\n return () => {\n listeners.delete(listener);\n };\n },\n\n getState() {\n return state;\n },\n\n init(params = {}, options) {\n if (state.initialized && state.cart) {\n return Promise.resolve(state.cart);\n }\n return this.refresh(params, options);\n },\n\n refresh(params = {}, options) {\n return runCartMutation(() =>\n hasCartId(params)\n ? cartApi.get(params, options)\n : cartApi.current(params, options),\n );\n },\n\n addItem(params, options) {\n return runCartMutation(() =>\n cartApi.addItem({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n update(params, options) {\n return runCartMutation(() =>\n cartApi.update({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n removeItem(params, options) {\n return runCartMutation(() =>\n cartApi.removeItem({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n clear(params = {}, options) {\n return runCartMutation(() =>\n cartApi.clear({ ...params, id: currentCartId(params.id) }, options),\n );\n },\n\n async quote(params = {}, options) {\n setState({ loading: true, error: null });\n try {\n const quote = await cartApi.quote(\n { ...params, id: currentCartId(params.id) },\n options,\n );\n setState({ quote, loading: false, error: null });\n return quote;\n } catch (error) {\n setState({ loading: false, error });\n throw error;\n }\n },\n\n async checkout(params = {}, options) {\n setState({ loading: true, error: null });\n try {\n const checkoutResult = await cartApi.checkout(\n { ...params, id: currentCartId(params.id) },\n options,\n );\n setState({ checkoutResult, loading: false, error: null });\n return checkoutResult;\n } catch (error) {\n setState({ loading: false, error });\n throw error;\n }\n },\n };\n}\n","export type QueryParams = object;\n\nexport function buildQueryString(params: QueryParams): string {\n const queryParts = Object.entries(params as Record<string, unknown>).flatMap(\n ([key, value]) => {\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") {\n return [`${key}=${encodeURIComponent(value)}`];\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return [`${key}=${value}`];\n }\n if (Array.isArray(value) || typeof value === \"object\") {\n return [`${key}=${encodeURIComponent(JSON.stringify(value))}`];\n }\n return [];\n },\n );\n\n return queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\";\n}\n\nexport function appendQueryString(url: string, params: QueryParams): string {\n const queryString = buildQueryString(params);\n return queryString ? `${url}${queryString}` : url;\n}\n","import { buildQueryString, type QueryParams } from \"../utils/queryParams\";\n\nexport interface TokenSet {\n access_token: string;\n refresh_token?: string;\n access_expires_at?: number;\n}\n\nexport interface AuthStorage {\n getTokens(): TokenSet | null;\n onTokensRefreshed(tokens: TokenSet): void;\n onForcedLogout(): void;\n}\n\nexport interface RequestSuccessContext<T = unknown> {\n data: T;\n method: string;\n url: string;\n status: number;\n request?: unknown;\n duration_ms?: number;\n request_id?: string | null;\n}\n\nexport interface RequestErrorContext {\n error: unknown;\n method: string;\n url: string;\n status?: number;\n request?: unknown;\n response?: unknown;\n duration_ms?: number;\n request_id?: string | null;\n aborted?: boolean;\n}\n\nexport interface RequestOptions<T = unknown> {\n headers?: Record<string, string>;\n params?: QueryParams;\n signal?: AbortSignal;\n transformRequest?: (data: unknown) => unknown;\n onSuccess?: (ctx: RequestSuccessContext<T>) => void | Promise<void>;\n onError?: (ctx: RequestErrorContext) => void | Promise<void>;\n}\n\nexport interface HttpClient {\n get<T>(path: string, opts?: RequestOptions<T>): Promise<T>;\n post<T>(path: string, body: unknown, opts?: RequestOptions<T>): Promise<T>;\n put<T>(path: string, body: unknown, opts?: RequestOptions<T>): Promise<T>;\n patch<T>(path: string, body: unknown, opts?: RequestOptions<T>): Promise<T>;\n delete<T>(path: string, opts?: RequestOptions<T>): Promise<T>;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n storeId: string;\n authStorage: AuthStorage;\n refreshPath?: string | (() => string);\n navigate?: (path: string) => void;\n loginFallbackPath?: string;\n}\n\ninterface ServerError {\n message: string;\n error: string;\n statusCode: number;\n validationErrors: Array<{ field: string; error: string }>;\n}\n\ninterface HttpRequestErrorDetails {\n statusCode?: number;\n validationErrors?: ServerError[\"validationErrors\"];\n method?: string;\n url?: string;\n requestId?: string;\n aborted?: boolean;\n}\n\nfunction requestError(\n name: \"ApiError\" | \"NetworkError\" | \"ParseError\" | \"AbortError\",\n message: string,\n details: HttpRequestErrorDetails = {},\n): Error & HttpRequestErrorDetails {\n return Object.assign(new Error(message), { name }, details);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isTokenSet(value: unknown): value is TokenSet {\n return (\n isRecord(value) &&\n typeof value.access_token === \"string\" &&\n (value.refresh_token === undefined ||\n typeof value.refresh_token === \"string\") &&\n (value.access_expires_at === undefined ||\n typeof value.access_expires_at === \"number\")\n );\n}\n\nfunction isValidationError(\n value: unknown,\n): value is ServerError[\"validationErrors\"][number] {\n return (\n isRecord(value) &&\n typeof value.field === \"string\" &&\n typeof value.error === \"string\"\n );\n}\n\nfunction toServerError(value: unknown, statusCode: number): ServerError {\n const payload = isRecord(value) ? value : {};\n const validationErrors = Array.isArray(payload.validationErrors)\n ? payload.validationErrors.filter(isValidationError)\n : [];\n\n return {\n message:\n typeof payload.message === \"string\" ? payload.message : \"Request failed\",\n error: typeof payload.error === \"string\" ? payload.error : \"REQUEST_FAILED\",\n statusCode:\n typeof payload.statusCode === \"number\" ? payload.statusCode : statusCode,\n validationErrors,\n };\n}\n\nfunction normalizeValidationErrors(\n validationErrors: ServerError[\"validationErrors\"],\n): ServerError[\"validationErrors\"] {\n return validationErrors.map((validationError) => ({\n field: validationError.field,\n error: validationError.error || \"GENERAL.VALIDATION_ERROR\",\n }));\n}\n\nexport function createHttpClient(cfg: HttpClientConfig): HttpClient {\n const { authStorage } = cfg;\n let refreshPromise: Promise<void> | null = null;\n\n function getRefreshEndpoint() {\n const refreshPath =\n typeof cfg.refreshPath === \"function\"\n ? cfg.refreshPath()\n : cfg.refreshPath || \"/v1/auth/refresh\";\n return `${cfg.baseUrl}${refreshPath}`;\n }\n\n async function ensureFreshToken() {\n if (refreshPromise) {\n return refreshPromise;\n }\n\n refreshPromise = (async () => {\n const tokens = authStorage.getTokens();\n const refresh_token = tokens?.refresh_token;\n if (!refresh_token) {\n authStorage.onForcedLogout();\n throw requestError(\"ApiError\", \"No refresh token available\", {\n statusCode: 401,\n });\n }\n\n const refRes = await fetch(getRefreshEndpoint(), {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ refresh_token }),\n });\n\n if (!refRes.ok) {\n authStorage.onForcedLogout();\n throw requestError(\"ApiError\", \"Token refresh failed\", {\n statusCode: 401,\n });\n }\n\n const data: unknown = await refRes.json();\n if (!isTokenSet(data)) {\n authStorage.onForcedLogout();\n throw requestError(\n \"ParseError\",\n \"Token refresh returned an invalid response\",\n { statusCode: refRes.status },\n );\n }\n authStorage.onTokensRefreshed(data);\n })().finally(() => {\n refreshPromise = null;\n });\n\n return refreshPromise;\n }\n\n async function request<T>(\n method: string,\n path: string,\n body?: unknown,\n options?: RequestOptions<T>,\n retried = false,\n ): Promise<T> {\n if (!retried && options?.transformRequest) {\n body = options.transformRequest(body);\n }\n\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...(options?.headers || {}),\n };\n\n let tokens = authStorage.getTokens();\n const nowSec = Date.now() / 1000;\n if (tokens?.access_expires_at && nowSec > tokens.access_expires_at) {\n await ensureFreshToken();\n tokens = authStorage.getTokens();\n }\n\n if (tokens?.access_token) {\n headers[\"Authorization\"] = `Bearer ${tokens.access_token}`;\n }\n\n const finalPath = options?.params\n ? path + buildQueryString(options.params)\n : path;\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal: options?.signal,\n };\n if (![\"GET\", \"DELETE\"].includes(method) && body !== undefined) {\n fetchOptions.body =\n body instanceof URLSearchParams\n ? body.toString()\n : JSON.stringify(body);\n }\n\n const fullUrl = `${cfg.baseUrl}${finalPath}`;\n let res: Response;\n let data: unknown;\n const startedAt = Date.now();\n\n try {\n res = await fetch(fullUrl, fetchOptions);\n } catch (error) {\n const aborted =\n options?.signal?.aborted ||\n (error instanceof Error && error.name === \"AbortError\");\n const err = requestError(\n aborted ? \"AbortError\" : \"NetworkError\",\n error instanceof Error ? error.message : \"Network request failed\",\n { method, url: fullUrl, aborted },\n );\n if (options?.onError && method !== \"GET\") {\n Promise.resolve(\n options.onError({ error: err, method, url: fullUrl, aborted }),\n ).catch(() => {});\n }\n throw err;\n }\n\n if (res.status === 401 && !retried) {\n await ensureFreshToken();\n return request<T>(method, path, body, options, true);\n }\n\n try {\n const contentLength = res.headers.get(\"content-length\");\n const contentType = res.headers.get(\"content-type\");\n if (\n res.status === 204 ||\n contentLength === \"0\" ||\n !contentType?.includes(\"application/json\")\n ) {\n data = {};\n } else {\n data = await res.json();\n }\n } catch (error) {\n const err = requestError(\"ParseError\", \"Failed to parse response\", {\n method,\n url: fullUrl,\n statusCode: res.status,\n });\n if (options?.onError && method !== \"GET\") {\n Promise.resolve(\n options.onError({\n error: err,\n method,\n url: fullUrl,\n status: res.status,\n }),\n ).catch(() => {});\n }\n throw err;\n }\n\n if (!res.ok) {\n const serverErr = toServerError(data, res.status);\n const requestId =\n res.headers.get(\"x-request-id\") || res.headers.get(\"request-id\");\n const err = requestError(\"ApiError\", serverErr.message, {\n statusCode: serverErr.statusCode,\n validationErrors: normalizeValidationErrors(serverErr.validationErrors),\n method,\n url: fullUrl,\n requestId: requestId || undefined,\n });\n if (options?.onError && method !== \"GET\") {\n Promise.resolve(\n options.onError({\n error: err,\n method,\n url: fullUrl,\n status: res.status,\n response: serverErr,\n request_id: requestId || null,\n duration_ms: Date.now() - startedAt,\n }),\n ).catch(() => {});\n }\n throw err;\n }\n\n if (options?.onSuccess && method !== \"GET\") {\n const requestId =\n res.headers.get(\"x-request-id\") || res.headers.get(\"request-id\");\n Promise.resolve(\n options.onSuccess({\n data: data as T,\n method,\n url: fullUrl,\n status: res.status,\n request_id: requestId || null,\n duration_ms: Date.now() - startedAt,\n }),\n ).catch(() => {});\n }\n return data as T;\n }\n\n return {\n get: <T>(path: string, opts?: RequestOptions<T>) =>\n request<T>(\"GET\", path, undefined, opts),\n post: <T>(path: string, body: unknown, opts?: RequestOptions<T>) =>\n request<T>(\"POST\", path, body, opts),\n put: <T>(path: string, body: unknown, opts?: RequestOptions<T>) =>\n request<T>(\"PUT\", path, body, opts),\n patch: <T>(path: string, body: unknown, opts?: RequestOptions<T>) =>\n request<T>(\"PATCH\", path, body, opts),\n delete: <T>(path: string, opts?: RequestOptions<T>) =>\n request<T>(\"DELETE\", path, undefined, opts),\n };\n}\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport type SupportAgentStatus = \"draft\" | \"active\" | \"archived\";\nexport type SupportChannelStatus = \"draft\" | \"active\" | \"disabled\" | \"archived\";\nexport type SupportChannelType = \"web\" | \"email\";\n\nexport interface SupportAgentNode {\n type: \"message\" | \"input\" | \"ai_handoff\" | \"action\";\n text?: string;\n buttons?: string[];\n prompt?: string;\n field?: string;\n input_type?: \"text\" | \"email\" | \"phone\";\n validation?: string;\n system_prompt_override?: string;\n tools?: string[];\n action?: SupportAction;\n}\n\nexport interface SupportAction {\n type: \"end_conversation\" | \"human_handoff\";\n message?: string;\n}\n\nexport interface SupportAgentEdge {\n source: string;\n target: string;\n trigger: EdgeTrigger;\n}\n\nexport type EdgeTrigger =\n | { type: \"button\"; label: string }\n | { type: \"input\"; field: string }\n | { type: \"default\" };\n\nexport interface SupportAgentAiConfig {\n system_prompt: string;\n tools: string[];\n max_context_messages: number;\n}\n\nexport interface SupportAgent {\n id: string;\n key: string;\n store_id: string;\n name: string;\n status: SupportAgentStatus;\n entry_node_id: string;\n nodes: Record<string, SupportAgentNode>;\n edges: SupportAgentEdge[];\n ai_config?: SupportAgentAiConfig;\n channel_ids: string[];\n notes?: string | null;\n created_at: number;\n updated_at: number;\n}\n\nexport type SupportChannelConfig =\n | {\n type: \"web\";\n widget_key: string;\n allowed_origins?: string[];\n }\n | {\n type: \"email\";\n mailbox_id: string;\n };\n\nexport interface SupportChannel {\n id: string;\n store_id: string;\n key: string;\n name: string;\n status: SupportChannelStatus;\n channel_type: SupportChannelType;\n config: SupportChannelConfig;\n created_at: number;\n updated_at: number;\n}\n\nexport type SupportConversationChannelContext =\n | {\n type: \"web\";\n visitor_id?: string | null;\n session_id?: string | null;\n }\n | {\n type: \"email\";\n thread_id: string;\n reply_to: string;\n message_id?: string | null;\n references: string[];\n };\n\nexport interface SupportConversation {\n id: string;\n store_id: string;\n agent_id?: string;\n channel_id?: string | null;\n channel_type: SupportChannelType;\n channel_context: SupportConversationChannelContext;\n current_node_id?: string;\n contact_id?: string;\n assigned_account_id?: string | null;\n status: \"active\" | \"ai_mode\" | \"escalated\" | \"resolved\";\n data: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: number;\n updated_at: number;\n}\n\nexport interface SupportMessage {\n id: string;\n store_id: string;\n conversation_id: string;\n role: \"system\" | \"user\" | \"assistant\" | \"staff\" | \"action\";\n content: string;\n buttons?: string[];\n metadata: Record<string, unknown>;\n created_at: number;\n}\n\nexport interface SupportConversationResponse {\n conversation: SupportConversation;\n messages: SupportMessage[];\n}\n\nexport interface SupportConversationStartResponse extends SupportConversationResponse {\n support_token: string;\n}\n\nexport interface StartSupportConversationParams {\n store_id: string;\n agent_key?: string;\n channel_id?: string;\n visitor_id?: string;\n session_id?: string;\n contact_id?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SendSupportMessageParams {\n message_id: string;\n store_id: string;\n conversation_id: string;\n input: { type: \"button\"; label: string } | { type: \"text\"; content: string };\n}\n\nexport interface ReceiveSupportChannelMessageParams {\n store_id: string;\n channel_id: string;\n channel_context: SupportConversationChannelContext;\n external_message_id?: string;\n content: string;\n metadata?: Record<string, unknown>;\n received_at?: number;\n}\n\nexport interface ReplySupportConversationParams {\n message_id: string;\n store_id: string;\n conversation_id: string;\n content: string;\n resolve?: boolean;\n}\n\nexport interface ResolveSupportConversationParams {\n store_id: string;\n conversation_id: string;\n}\n\nexport interface AssignSupportConversationParams {\n store_id: string;\n conversation_id: string;\n account_id?: string | null;\n}\n\nexport interface GetSupportConversationParams {\n store_id: string;\n conversation_id: string;\n message_limit?: number;\n after_created_at?: number;\n after_id?: string;\n}\n\nexport type StorefrontSendSupportMessageParams = Omit<\n SendSupportMessageParams,\n \"store_id\"\n> & { support_token: string };\n\nexport type StorefrontGetSupportConversationParams = Omit<\n GetSupportConversationParams,\n \"store_id\"\n> & { support_token: string };\n\nexport interface FindSupportConversationsParams {\n store_id: string;\n status?: string;\n agent_id?: string;\n channel_id?: string;\n channel_type?: SupportChannelType;\n query?: string;\n limit?: number;\n cursor?: string;\n}\n\nfunction supportConversationQuery(params: GetSupportConversationParams): string {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.message_limit) qs.set(\"message_limit\", String(params.message_limit));\n if (typeof params.after_created_at === \"number\") qs.set(\"after_created_at\", String(params.after_created_at));\n if (params.after_id) qs.set(\"after_id\", params.after_id);\n return qs.toString();\n}\n\nfunction storefrontSupportOptions(\n supportToken: string,\n options?: RequestOptions,\n): RequestOptions {\n if (!/^[0-9a-f]{64}$/.test(supportToken)) {\n throw new Error(\"support_token must be a 64-character lowercase hexadecimal token\");\n }\n const headers = { ...options?.headers };\n for (const name of Object.keys(headers)) {\n if (name.toLowerCase() === \"x-arky-support-token\") delete headers[name];\n }\n return {\n ...options,\n headers: {\n ...headers,\n \"X-Arky-Support-Token\": supportToken,\n },\n };\n}\n\nexport function createStorefrontSupportApi(config: ApiConfig) {\n const { httpClient } = config;\n\n return {\n async startConversation(\n params: Omit<StartSupportConversationParams, \"store_id\"> = {},\n opts?: RequestOptions\n ): Promise<SupportConversationStartResponse> {\n const storeId = config.storeId;\n return httpClient.post<SupportConversationStartResponse>(\n `/v1/storefront/${storeId}/support/conversations`,\n { ...params, store_id: storeId },\n opts\n );\n },\n\n async sendMessage(\n params: StorefrontSendSupportMessageParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n const { support_token, ...request } = params;\n const storeId = config.storeId;\n return httpClient.post<SupportConversationResponse>(\n `/v1/storefront/${storeId}/support/conversations/${request.conversation_id}/messages`,\n { ...request, store_id: storeId },\n storefrontSupportOptions(support_token, opts)\n );\n },\n\n async getConversation(\n params: StorefrontGetSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n const { support_token, ...request } = params;\n const storeId = config.storeId;\n const qs = supportConversationQuery({ ...request, store_id: storeId });\n return httpClient.get<SupportConversationResponse>(\n `/v1/storefront/${storeId}/support/conversations/${request.conversation_id}?${qs}`,\n storefrontSupportOptions(support_token, opts)\n );\n },\n };\n}\n\nexport interface CreateSupportAgentParams {\n store_id: string;\n key: string;\n name: string;\n status?: SupportAgentStatus;\n entry_node_id: string;\n nodes: Record<string, SupportAgentNode>;\n edges: SupportAgentEdge[];\n ai_config?: SupportAgentAiConfig;\n channel_ids?: string[];\n notes?: string | null;\n}\n\nexport interface UpdateSupportAgentParams {\n store_id: string;\n id: string;\n name?: string;\n status?: SupportAgentStatus;\n entry_node_id?: string;\n nodes?: Record<string, SupportAgentNode>;\n edges?: SupportAgentEdge[];\n ai_config?: SupportAgentAiConfig;\n channel_ids?: string[];\n notes?: string | null;\n}\n\nexport interface CreateSupportChannelParams {\n store_id: string;\n key: string;\n name: string;\n status?: SupportChannelStatus;\n channel_type: SupportChannelType;\n config: SupportChannelConfig;\n}\n\nexport interface UpdateSupportChannelParams {\n store_id: string;\n id: string;\n key?: string;\n name?: string;\n status?: SupportChannelStatus;\n channel_type?: SupportChannelType;\n config?: SupportChannelConfig;\n}\n\nexport interface FindSupportChannelsParams {\n store_id: string;\n status?: SupportChannelStatus;\n channel_type?: SupportChannelType;\n limit?: number;\n cursor?: string;\n}\n\nexport function createAdminSupportApi(config: ApiConfig) {\n const { httpClient } = config;\n\n return {\n channel: {\n async create(\n params: CreateSupportChannelParams,\n opts?: RequestOptions\n ): Promise<SupportChannel> {\n return httpClient.post<SupportChannel>(\n `/v1/stores/${params.store_id}/support/channels`,\n params,\n opts\n );\n },\n\n async get(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<SupportChannel> {\n return httpClient.get<SupportChannel>(\n `/v1/stores/${params.store_id}/support/channels/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n\n async find(\n params: FindSupportChannelsParams,\n opts?: RequestOptions\n ): Promise<{ items: SupportChannel[]; cursor?: string }> {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.status) qs.set(\"status\", params.status);\n if (params.channel_type) qs.set(\"channel_type\", params.channel_type);\n if (params.limit) qs.set(\"limit\", String(params.limit));\n if (params.cursor) qs.set(\"cursor\", params.cursor);\n return httpClient.get<{ items: SupportChannel[]; cursor?: string }>(\n `/v1/stores/${params.store_id}/support/channels?${qs}`,\n opts\n );\n },\n\n async update(\n params: UpdateSupportChannelParams,\n opts?: RequestOptions\n ): Promise<SupportChannel> {\n return httpClient.put<SupportChannel>(\n `/v1/stores/${params.store_id}/support/channels/${params.id}`,\n params,\n opts\n );\n },\n\n async delete(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<void> {\n return httpClient.delete<void>(\n `/v1/stores/${params.store_id}/support/channels/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n\n async receiveMessage(\n params: ReceiveSupportChannelMessageParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n return httpClient.post<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/channels/${params.channel_id}/messages`,\n params,\n opts\n );\n },\n },\n\n agent: {\n async create(\n params: CreateSupportAgentParams,\n opts?: RequestOptions\n ): Promise<SupportAgent> {\n return httpClient.post<SupportAgent>(\n `/v1/stores/${params.store_id}/support/agents`,\n params,\n opts\n );\n },\n\n async get(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<SupportAgent> {\n return httpClient.get<SupportAgent>(\n `/v1/stores/${params.store_id}/support/agents/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n\n async find(\n params: { store_id: string; status?: string; limit?: number; cursor?: string },\n opts?: RequestOptions\n ): Promise<{ items: SupportAgent[]; cursor?: string }> {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.status) qs.set(\"status\", params.status);\n if (params.limit) qs.set(\"limit\", String(params.limit));\n if (params.cursor) qs.set(\"cursor\", params.cursor);\n return httpClient.get<{ items: SupportAgent[]; cursor?: string }>(\n `/v1/stores/${params.store_id}/support/agents?${qs}`,\n opts\n );\n },\n\n async update(\n params: UpdateSupportAgentParams,\n opts?: RequestOptions\n ): Promise<SupportAgent> {\n return httpClient.put<SupportAgent>(\n `/v1/stores/${params.store_id}/support/agents/${params.id}`,\n params,\n opts\n );\n },\n\n async delete(\n params: { store_id: string; id: string },\n opts?: RequestOptions\n ): Promise<void> {\n return httpClient.delete<void>(\n `/v1/stores/${params.store_id}/support/agents/${params.id}?store_id=${params.store_id}`,\n opts\n );\n },\n },\n\n conversation: {\n async find(\n params: FindSupportConversationsParams,\n opts?: RequestOptions\n ): Promise<{ items: SupportConversation[]; cursor?: string }> {\n const qs = new URLSearchParams({ store_id: params.store_id });\n if (params.status) qs.set(\"status\", params.status);\n if (params.agent_id) qs.set(\"agent_id\", params.agent_id);\n if (params.channel_id) qs.set(\"channel_id\", params.channel_id);\n if (params.channel_type) qs.set(\"channel_type\", params.channel_type);\n if (params.query) qs.set(\"query\", params.query);\n if (params.limit) qs.set(\"limit\", String(params.limit));\n if (params.cursor) qs.set(\"cursor\", params.cursor);\n return httpClient.get<{ items: SupportConversation[]; cursor?: string }>(\n `/v1/stores/${params.store_id}/support/conversations?${qs}`,\n opts\n );\n },\n\n async get(\n params: GetSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n const qs = supportConversationQuery(params);\n return httpClient.get<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}?${qs}`,\n opts\n );\n },\n\n async sendMessage(\n params: SendSupportMessageParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n return httpClient.post<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/messages`,\n params,\n opts\n );\n },\n\n async reply(\n params: ReplySupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversationResponse> {\n return httpClient.post<SupportConversationResponse>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/reply`,\n params,\n opts\n );\n },\n\n async resolve(\n params: ResolveSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversation> {\n return httpClient.post<SupportConversation>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/resolve`,\n params,\n opts\n );\n },\n\n async assign(\n params: AssignSupportConversationParams,\n opts?: RequestOptions\n ): Promise<SupportConversation> {\n return httpClient.post<SupportConversation>(\n `/v1/stores/${params.store_id}/support/conversations/${params.conversation_id}/assign`,\n params,\n opts\n );\n },\n },\n };\n}\n","import type { Block } from \"../types\";\n\ntype BlockContainer = { blocks?: readonly Block[] | null };\ntype UnknownRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isBlock(value: unknown): value is Block {\n return isRecord(value) && typeof value.key === \"string\" && typeof value.type === \"string\";\n}\n\nfunction recordFromBlocks(values: readonly unknown[], locale: string): UnknownRecord {\n const result: UnknownRecord = {};\n for (const value of values) {\n if (!isBlock(value)) continue;\n result[value.key] = unwrapBlock(value, locale);\n }\n return result;\n}\n\nfunction localizedValue(value: unknown, locale: string): string {\n if (typeof value === \"string\") return value;\n if (!isRecord(value)) return \"\";\n const selected = value[locale] ?? value.en;\n return typeof selected === \"string\" ? selected : \"\";\n}\n\nfunction unwrapBlock(value: unknown, locale: string): unknown {\n if (!isBlock(value)) return value;\n if (value.type === \"localized_text\" || value.type === \"markdown\") {\n return localizedValue(value.value, locale);\n }\n if (value.type === \"array\") {\n if (!Array.isArray(value.value)) return [];\n return value.value.map((item) => {\n if (isBlock(item)) return unwrapBlock(item, locale);\n if (isRecord(item) && Array.isArray(item.value)) {\n return recordFromBlocks(item.value, locale);\n }\n if (!isRecord(item)) return item;\n return Object.fromEntries(\n Object.entries(item).map(([key, nested]) => [key, unwrapBlock(nested, locale)]),\n );\n });\n }\n if (value.type === \"object\") {\n if (Array.isArray(value.value)) return recordFromBlocks(value.value, locale);\n if (!isRecord(value.value)) return {};\n return Object.fromEntries(\n Object.entries(value.value).map(([key, nested]) => [key, unwrapBlock(nested, locale)]),\n );\n }\n return value.value;\n}\n\nfunction blockContentArray(values: readonly unknown[], locale: string): unknown {\n const blocks = values.filter(isBlock);\n if (blocks.length === 0) return [];\n if (blocks.every((block) => block.key === blocks[0].key)) {\n return blocks.map((block) => blockContentValue(block, locale));\n }\n return Object.fromEntries(\n blocks.map((block) => [block.key, blockContentValue(block, locale)]),\n );\n}\n\nfunction blockContentValue(block: Block, locale: string): unknown {\n if (block.type === \"localized_text\" || block.type === \"markdown\") {\n return localizedValue(block.value, locale);\n }\n if (block.type === \"media\") return block.value ?? null;\n if (block.type === \"array\") {\n return Array.isArray(block.value) ? blockContentArray(block.value, locale) : [];\n }\n if (block.type === \"object\") {\n if (Array.isArray(block.value)) return blockContentArray(block.value, locale);\n if (!isRecord(block.value)) return {};\n return Object.fromEntries(\n Object.entries(block.value).map(([key, value]) => [\n key,\n isBlock(value) ? blockContentValue(value, locale) : value,\n ]),\n );\n }\n return block.value;\n}\n\nexport function findBlock(entry: BlockContainer | null | undefined, key: string): Block | undefined {\n return entry?.blocks?.find((block) => block.key === key);\n}\n\nexport function getBlockLabel(block: Pick<Block, \"key\"> | null | undefined): string {\n return block?.key.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase()) ?? \"\";\n}\n\nexport function formatBlockValue(block: Block | null | undefined): string {\n if (block?.value === null || block?.value === undefined) return \"\";\n if (block.type === \"boolean\") return block.value ? \"Yes\" : \"No\";\n if (block.type === \"date\") {\n return new Date(Number(block.value) * 1000).toLocaleDateString();\n }\n if (block.type === \"media\" && isRecord(block.value)) {\n const label = block.value.name ?? block.value.title ?? block.value.id;\n return typeof label === \"string\" ? label : \"\";\n }\n return String(block.value);\n}\n\nexport function prepareBlocksForSubmission(\n formData: Readonly<Record<string, unknown>>,\n blockTypes: Readonly<Record<string, string>> = {},\n): Array<{ key: string; value: unknown }> {\n return Object.entries(formData)\n .filter(([, value]) => value !== null && value !== undefined)\n .map(([key, value]) => ({\n key,\n value: blockTypes[key] === \"array\" && !Array.isArray(value) ? [value] : value,\n }));\n}\n\nexport function extractBlockValues(blocks: readonly Block[]): Record<string, unknown> {\n return Object.fromEntries(blocks.map((block) => [block.key, block.value ?? null]));\n}\n\nexport function getBlockValue<T = unknown>(\n entry: BlockContainer | null | undefined,\n key: string,\n): T | null {\n return (findBlock(entry, key)?.value as T | undefined) ?? null;\n}\n\nexport function getBlockTextValue(block: Block | null | undefined, locale = \"en\"): string {\n if (!block || block.value === null || block.value === undefined) return \"\";\n if (block.type === \"localized_text\" || block.type === \"markdown\") {\n return localizedValue(block.value, locale);\n }\n return typeof block.value === \"string\" ? block.value : String(block.value);\n}\n\nexport function getBlockContentValue(\n entry: BlockContainer | null | undefined,\n key: string,\n locale = \"en\",\n): unknown {\n const block = findBlock(entry, key);\n return block ? blockContentValue(block, locale) : null;\n}\n\nexport function getBlockValues<T = unknown>(\n entry: BlockContainer | null | undefined,\n key: string,\n): T[] {\n const block = findBlock(entry, key);\n return block?.type === \"array\" && Array.isArray(block.value) ? (block.value as T[]) : [];\n}\n\nexport function getBlockObjectValues(\n entry: BlockContainer | null | undefined,\n key: string,\n locale = \"en\",\n): UnknownRecord[] {\n return getBlockValues(entry, key).map((value) => {\n if (isRecord(value) && Array.isArray(value.value)) {\n return recordFromBlocks(value.value, locale);\n }\n return isRecord(value)\n ? Object.fromEntries(\n Object.entries(value).map(([field, nested]) => [field, unwrapBlock(nested, locale)]),\n )\n : {};\n });\n}\n\nexport function getBlockFromArray(\n entry: BlockContainer | null | undefined,\n key: string,\n locale = \"en\",\n): UnknownRecord {\n const block = findBlock(entry, key);\n if (!block) return {};\n const value = unwrapBlock(block, locale);\n if (isRecord(value)) return value;\n if (Array.isArray(block.value)) return recordFromBlocks(block.value, locale);\n return { [block.key]: value };\n}\n\nfunction nestedUrl(value: UnknownRecord): string | null {\n const resolutions = isRecord(value.resolutions) ? value.resolutions : null;\n const original = resolutions && isRecord(resolutions.original) ? resolutions.original : null;\n if (typeof original?.url === \"string\") return original.url;\n return typeof value.url === \"string\" ? value.url : null;\n}\n\nexport function getImageUrl(value: unknown, isBlock = true): string | null {\n if (typeof value === \"string\") return value;\n if (!isRecord(value)) return null;\n if (value.type === \"media\" && isRecord(value.value)) return nestedUrl(value.value);\n if (isBlock && typeof value.url === \"string\") return value.url;\n return nestedUrl(value);\n}\n","import type { OrderMoney, Price } from '../types';\n\ntype OrderTotal = Pick<OrderMoney, 'total' | 'currency'>;\n\nexport const SUPPORTED_STORE_CURRENCIES = Object.freeze([\n 'USD', 'EUR', 'GBP', 'JPY', 'CNY', 'CHF', 'AUD', 'CAD', 'HKD', 'SGD',\n 'NZD', 'KRW', 'SEK', 'NOK', 'DKK', 'INR', 'MXN', 'BRL', 'ZAR', 'RUB',\n 'TRY', 'PLN', 'THB', 'IDR', 'MYR', 'PHP', 'CZK', 'ILS', 'AED', 'SAR',\n 'HUF', 'RON', 'BGN', 'HRK', 'BAM', 'RSD', 'MKD', 'ALL',\n] as const);\n\nconst SUPPORTED_STORE_CURRENCY_SET: ReadonlySet<string> = Object.freeze(\n new Set<string>(SUPPORTED_STORE_CURRENCIES),\n);\n\nconst ZERO_MINOR_UNIT_STORE_CURRENCIES: ReadonlySet<string> = Object.freeze(\n new Set<string>(['JPY', 'KRW']),\n);\n\nfunction formatCurrency(amount: number, currencyCode: string, locale: string = 'en'): string {\n const normalized = currencyCode.trim().toUpperCase();\n if (!normalized) return '';\n const minorUnits = getCurrencyMinorUnits(normalized);\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: normalized,\n minimumFractionDigits: minorUnits,\n maximumFractionDigits: minorUnits,\n }).format(amount);\n}\n\nexport function getCurrencyMinorUnits(currency: string): number {\n const normalized = currency.trim().toUpperCase();\n if (!SUPPORTED_STORE_CURRENCY_SET.has(normalized)) {\n throw new RangeError(`Unsupported currency '${currency}'`);\n }\n return ZERO_MINOR_UNIT_STORE_CURRENCIES.has(normalized) ? 0 : 2;\n}\n\nexport function convertToMajor(minorAmount: number, currency: string): number {\n const units = getCurrencyMinorUnits(currency);\n return minorAmount / Math.pow(10, units);\n}\n\nexport function convertToMinor(majorAmount: number, currency: string): number {\n const units = getCurrencyMinorUnits(currency);\n return Math.round(majorAmount * Math.pow(10, units));\n}\n\nexport function getCurrencySymbol(currency: string): string {\n try {\n return new Intl.NumberFormat('en', {\n style: 'currency',\n currency: currency.toUpperCase(),\n currencyDisplay: 'narrowSymbol'\n }).formatToParts(0).find(p => p.type === 'currency')?.value || currency.toUpperCase();\n } catch {\n return currency.toUpperCase();\n }\n}\n\nexport function getCurrencyName(currency: string): string {\n try {\n return new Intl.DisplayNames(['en'], { type: 'currency' }).of(currency.toUpperCase()) || currency.toUpperCase();\n } catch {\n return currency.toUpperCase();\n }\n}\n\nexport function formatMinor(amountMinor: number, currency: string): string {\n if (!Number.isSafeInteger(amountMinor)) {\n throw new RangeError('Minor-unit amount must be a safe integer');\n }\n return formatCurrency(convertToMajor(amountMinor, currency), currency);\n}\n\nexport function formatPayment(payment: OrderTotal): string {\n return formatMinor(payment.total, payment.currency);\n}\n\nexport function formatPrice(prices: Price[], marketId?: string): string {\n if (!prices || prices.length === 0 || !marketId) return '';\n\n const price = prices.find(p => p.market === marketId);\n if (!price || !Number.isSafeInteger(price.amount) || price.amount < 0 || !price.currency) return '';\n\n return formatMinor(price.amount, price.currency);\n}\n\nexport function getPriceAmount(prices: Price[], marketId: string): number | null {\n if (!prices || prices.length === 0 || !marketId) return null;\n const price = prices.find(p => p.market === marketId);\n return price && Number.isSafeInteger(price.amount) && price.amount >= 0 ? price.amount : null;\n}\n","export interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\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","\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 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 return \"UTC\";\n } catch (e) {\n \n return \"UTC\";\n }\n}\n","\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\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase()\n\t\t.replace(/\\s+/g, \"-\")\n\t\t.replace(/[^\\w-]+/g, \"\")\n\t\t.replace(/--+/g, \"-\")\n\t\t.replace(/^-+/, \"\")\n\t\t.replace(/-+$/, \"\");\n}\n\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \")\n\t\t\t\n\t\t\t.replace(\n\t\t\t\t\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\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \")\n\t\t.toUpperCase();\n}\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}\n","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: unknown): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\tif (!svgUrl) return null;\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\nexport async function getSvgContentForAstro(mediaObject: unknown): 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\nexport async function injectSvgIntoElement(\n\tmediaObject: unknown,\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\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","\nconst KEY_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\nexport function isValidKey(key: string): boolean {\n if (!key || key.length === 0) return false;\n return KEY_PATTERN.test(key);\n}\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\nexport function toKey(input: string): string {\n if (!input) return \"\";\n\n return input\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"_\")\n .replace(/[^a-z0-9_-]/g, \"\")\n .replace(/^[-_]+|[-_]+$/g, \"\")\n .replace(/[-_]{2,}/g, \"_\");\n}\n\nexport function nameToKey(name: string): string {\n return toKey(name);\n}\n","import type { InventoryLevel, Location } from '../types';\n\nexport interface VariantWithInventory {\n inventory: InventoryLevel[];\n}\n\n\nexport function getAvailableStock(variant: VariantWithInventory): number {\n if (!variant?.inventory) return 0;\n return variant.inventory.reduce((sum, inv) => sum + inv.available, 0);\n}\n\n\nexport function getReservedStock(variant: VariantWithInventory): number {\n if (!variant?.inventory) return 0;\n return variant.inventory.reduce((sum, inv) => sum + inv.reserved, 0);\n}\n\n\nexport function hasStock(variant: VariantWithInventory, quantity: number = 1): boolean {\n return getAvailableStock(variant) >= quantity;\n}\n\n\nexport function getInventoryAt(\n variant: VariantWithInventory,\n locationId: string\n): InventoryLevel | undefined {\n return variant?.inventory?.find(inv => inv.location_id === locationId);\n}\n\n\nexport function getFirstAvailableFCId(\n variant: VariantWithInventory,\n quantity: number = 1\n): string | undefined {\n const inv = variant?.inventory?.find(i => i.available >= quantity);\n return inv?.location_id;\n}\n","export type {\n EshopCartItem,\n Cart,\n CartOrigin,\n CartStatus,\n EshopStoreState,\n Store,\n Webhook,\n WebhookEventSubscription,\n BuildHook,\n BuildHookType,\n PaymentStoreConfig,\n SocialConnectResponse,\n SocialDestinationMetadata,\n SocialOAuthCallbackResponse,\n SocialOAuthCallbackStatus,\n SocialOAuthDestinationOption,\n SocialConnection,\n SocialConnectionCredential,\n SocialConnectionData,\n SocialConnectionProviderData,\n SocialProviderCapability,\n SocialConnectionType,\n InstagramPlacement,\n SocialAnalyticsCapabilities,\n SocialEngagementCapabilities,\n SocialPublication,\n SocialPublicationComment,\n SocialPublicationCommentClassificationResult,\n SocialPublicationCommentIntent,\n SocialPublicationCommentPriority,\n SocialPublicationEngagementSyncResult,\n SocialCommentReply,\n SocialCommentReplyError,\n SocialCommentReplyEvidence,\n SocialCommentReplyStatus,\n SocialPublicationCommentReplyResponse,\n SocialPublicationCommentStatus,\n SocialPublicationContent,\n SocialPublicationEffect,\n SocialPublicationEffectError,\n SocialPublicationEffectEvidence,\n SocialPublicationEffectRequest,\n SocialPublicationEffectStatus,\n SocialPublicationMetricSnapshot,\n SocialPublicationMutationResponse,\n SocialPublicationStatus,\n SocialPublicationValidation,\n TiktokPrivacy,\n ValidationError,\n YoutubePrivacy,\n Block,\n Currency,\n Price,\n OrderPayment,\n OrderMoney,\n OrderFinancialSummary,\n PaymentProvider,\n PaymentProviderConnection,\n PaymentProviderConnectionError,\n PaymentProviderConnectionStatus,\n StripePaymentProviderConnectResponse,\n OrderPaymentTax,\n OrderPaymentTaxLine,\n OrderPaymentPromoCode,\n OrderRefund,\n PaymentTransactionProvider,\n PaymentTransactionRequestType,\n PaymentTransactionType,\n PaymentTransactionStatus,\n PaymentTransaction,\n OrderQuote,\n RefundStatus,\n CheckoutPaymentAction,\n StoreSubscription,\n StoreSubscriptionAction,\n StoreSubscriptionActionError,\n StoreSubscriptionActionRequest,\n StoreSubscriptionActionResult,\n StoreSubscriptionActionStatus,\n StoreSubscriptionEffect,\n StoreSubscriptionEffectError,\n StoreSubscriptionEffectStatus,\n StoreSubscriptionEffectType,\n StoreSubscriptionPayment,\n StoreSubscriptionStatus,\n SubscriptionPlan,\n SubscriptionPlanFeature,\n SubscriptionPlanFeatureType,\n SubscriptionPrice,\n ContactListMembershipCancellation,\n ContactListMembershipCancellationSafeError,\n ContactListMembershipCancellationStatus,\n ContactListMembershipCancellationType,\n ContactListMembershipPaymentAttempt,\n ContactListMembershipPaymentAttemptSafeError,\n ContactListMembershipPaymentAttemptStatus,\n ContactListMembershipPaymentAttemptType,\n ContactListMembershipRefund,\n ContactListMembershipRefundSafeError,\n ContactListMembershipRefundStatus,\n ContactListMembershipRefundType,\n StorefrontContactList,\n StorefrontContactListType,\n StorefrontContactListPlan,\n StorefrontContactListMembership,\n StorefrontContactListPaymentAttemptSummary,\n PaymentMethod,\n ShippingMethod,\n ShippingWeightTier,\n Zone,\n Market,\n Address,\n GeoLocation,\n ZoneLocation,\n Location,\n PromoCodeValidation,\n PaginatedResponse,\n Language,\n Access,\n Media,\n MediaSize,\n MediaResolution,\n Coordinates,\n ProviderWithTimeline,\n Collection,\n BlockSchema,\n BlockSchemaProperties,\n BlockSchemaType,\n CollectionEntry,\n EntryBlockQuery,\n MediaRef,\n FieldOperation,\n Workflow,\n WorkflowNode,\n WorkflowEdge,\n WorkflowTriggerNode,\n WorkflowHttpNode,\n WorkflowDeployWebhookNode,\n WorkflowGoogleDriveUploadNode,\n WorkflowConnection,\n WorkflowConnectionConnectUrl,\n WorkflowConnectionData,\n WorkflowConnectionType,\n GoogleDriveWorkflowConnectionData,\n GoogleDriveWorkflowProfile,\n WorkflowSwitchNode,\n WorkflowSwitchRule,\n WorkflowTransformNode,\n WorkflowLoopNode,\n WorkflowHttpMethod,\n WorkflowExecution,\n WorkflowEffect,\n WorkflowEffectEvidence,\n WorkflowEffectError,\n WorkflowEffectStatus,\n WorkflowEffectType,\n WorkflowExecutionInput,\n ExecutionStatus,\n NodeResult,\n ContactListType,\n ContactListPlan,\n ContactListPlanCatalogSafeError,\n ContactListPlanCatalogStatus,\n ContactListPlanCatalogType,\n ContactListPlanStatus,\n ContactListContentAccess,\n ContactListContentAccessStatus,\n ContactListContentAccessTarget,\n ContactListAccessResponse,\n ContactListContentAccessResponse,\n ContactListManagementContactList,\n ContactListManagementMembership,\n ContactListManagementResponse,\n ContactListSubscribeResponse,\n Event,\n EventAction,\n ShippingStatus,\n ShippingProvider,\n ShippingRateLine,\n ShippingLine,\n FulfillmentOrderStatus,\n FulfillmentOrderRequestStatus,\n FulfillmentOrderLine,\n FulfillmentOrder,\n OrderFulfillmentSummary,\n ShippingRate,\n Parcel,\n ShippingLabelStatus,\n ShippingLabelRefund,\n ShippingLabelRefundStatus,\n ShippingLabelRefundReconciliationStatus,\n ShippingLabelAdjustment,\n ShippingLabelAdjustmentStatus,\n ShippingLabelSettlement,\n ShippingLabelSettlementDirection,\n ShippingLabelSettlementStatus,\n ShippingLabelSettlementType,\n ShipmentAllocationStatus,\n ShipmentLine,\n Shipment,\n CreateShipmentResponse,\n CustomsItem,\n CustomsDeclaration,\n GeoLocationBlock,\n Service,\n Provider,\n ServiceProvider,\n ServiceDuration,\n ProviderTimelinePoint,\n TimelinePoint,\n WorkingHour,\n WorkingDay,\n SpecificDate,\n Order,\n OrderItem,\n OrderItemSnapshot,\n ProductLineItem,\n ServiceLineItem,\n ProductLineItemSnapshot,\n ServiceLineItemSnapshot,\n DiscountAllocation,\n TaxLine,\n LineMoneySnapshot,\n OrderItemFulfillmentStatus,\n BookingOrderItemStatus,\n QuoteLine,\n ProductQuoteLine,\n ServiceQuoteLine,\n ProductQuoteLineAvailability,\n ServiceQuoteLineAvailability,\n OrderItemStatus,\n OrderStatus,\n OrderPaymentSummaryStatus,\n OrderFulfillmentStatus,\n OrderPaymentStatus,\n OrderCancellationReason,\n HistoryEntry,\n DigitalAccessGrantStatus,\n DigitalAccessGrant,\n DigitalAccessDownloadResponse,\n Product,\n ProductVariant,\n ProductInventory,\n DigitalAssetType,\n DigitalAssetStatus,\n DigitalDeliveryPolicy,\n DigitalAsset,\n InventoryLevel,\n GalleryItem,\n EmailTemplate,\n EmailTemplateType,\n EmailRecipients,\n EmailSend,\n EmailSendRequest,\n EmailSendResult,\n EmailSendDeliveryResult,\n EmailDelivery,\n EmailDeliveryError,\n EmailDeliveryErrorKind,\n EmailDeliveryStatus,\n EmailDeliveryType,\n GetEmailDeliveryParams,\n RetryEmailDeliveryParams,\n EmailSendTemplateData,\n Form,\n FormSubmission,\n FormSchema,\n FormSchemaType,\n FormField,\n FormFieldType,\n FormValue,\n FormValues,\n FormEntry,\n Taxonomy,\n TaxonomyEntry,\n TaxonomyQuery,\n TaxonomySchema,\n TaxonomySchemaType,\n TaxonomyField,\n TaxonomyFieldQuery,\n PromoCode,\n Contact,\n ContactSessionRecord,\n ContactSessionIssued,\n ContactSessionStatus,\n ContactChannel,\n ChannelType,\n OpportunityStage,\n OpportunityType,\n OpportunitySource,\n Action,\n ActionData,\n ActionContext,\n ContactList,\n ContactListMembership,\n ContactListMember,\n Mailbox,\n MailboxConnectionSecurity,\n MailboxPreset,\n MailboxSyncStatus,\n GoogleMailboxProvider,\n SmtpImapMailboxProviderInput,\n SmtpImapMailboxProvider,\n OutreachStep,\n OutreachStepType,\n ManualTaskContinueBehavior,\n CampaignManualTaskOutcome,\n OutreachPersonalizationCounters,\n OutreachPersonalizationState,\n CampaignLaunchState,\n Campaign,\n CampaignLaunchReadiness,\n CampaignEnrollment,\n CampaignEnrollmentImportResult,\n CampaignEnrollmentConversationResponse,\n CampaignMessage,\n Suppression,\n LeadResearchRun,\n LeadResearchRunStatus,\n LeadScores,\n LeadInsight,\n CampaignRoute,\n ChannelMessage,\n LeadEmailClassification,\n LeadValidationCheck,\n LeadValidationCheckStatus,\n LeadEmailValidationResult,\n LeadResearchMessage,\n LeadResearchMessageRole,\n ResearchContactListMember,\n SendLeadResearchMessageResult,\n Account,\n AccountApiToken,\n AccountApiTokenCreated,\n AccountSession,\n AccountUpdateResponse,\n StoreMembership,\n StoreMember,\n Discount,\n Condition,\n ServiceStatus,\n ProviderStatus,\n ProductStatus,\n ContactStatus,\n ContactListStatus,\n ContactListSource,\n ContactListMembershipStatus,\n MailboxStatus,\n CampaignStatus,\n CampaignLaunchStatus,\n CampaignEnrollmentStatus,\n CampaignEnrollmentImportSource,\n CampaignMessageCopySource,\n CampaignMessageDirection,\n CampaignMessageType,\n CampaignMessageStatus,\n OutreachPersonalizationStatus,\n OutreachThreadMode,\n SuppressionStatus,\n SuppressionTargetType,\n SuppressionScopeType,\n SuppressionReason,\n SuppressionSource,\n WorkflowStatus,\n MutableWorkflowStatus,\n WorkflowSendEmailNode,\n PromoCodeStatus,\n CollectionStatus,\n EntryStatus,\n EmailTemplateStatus,\n EmailTemplateVariable,\n EmailTemplateVariableSource,\n FormStatus,\n TaxonomyStatus,\n} from \"./types\";\nexport { PaymentMethodType } from \"./types\";\n\nexport type {\n FindContactSessionsParams,\n RevokeAllContactSessionsParams,\n RevokeContactSessionParams,\n GetAvailabilityParams,\n AvailabilitySlot,\n DaySlots,\n ProviderAvailability,\n AvailabilityResponse,\n Slot,\n SlotRange,\n ConditionValue,\n ProductQuoteItemInput,\n ServiceQuoteItemInput,\n OrderQuoteItemInput,\n ProductCheckoutItemInput,\n ServiceCheckoutItemInput,\n OrderCheckoutItemInput,\n TrustedProductCheckoutItemInput,\n TrustedServiceCheckoutItemInput,\n TrustedOrderCheckoutItemInput,\n CreateOrderRefundParams,\n CreateOrderRefundResponse,\n FindOrderRefundsParams,\n GetOrderRefundParams,\n GetOrderPaymentParams,\n RetryPaymentTransactionParams,\n FindPaymentTransactionsParams,\n GetPaymentTransactionParams,\n FindDigitalAccessGrantsParams,\n GetDigitalAccessGrantParams,\n DownloadDigitalAccessParams,\n ActivateDigitalAccessGrantParams,\n RevokeDigitalAccessGrantParams,\n GetCurrentCartParams,\n GetCartParams,\n FindCartsParams,\n CreateCartParams,\n UpdateCartParams,\n AddCartItemParams,\n RemoveCartItemParams,\n ClearCartParams,\n QuoteCartParams,\n CheckoutCartParams,\n SystemTemplateKey,\n ImportFieldMapping,\n ImportPreviewRow,\n ImportContactsParams,\n ImportContactsPreviewParams,\n ImportContactsPreviewResult,\n ImportContactsResult,\n GetCollectionsParams,\n CreateCollectionParams,\n UpdateCollectionParams,\n GetCollectionParams,\n DeleteCollectionParams,\n GetEntriesParams,\n CreateEntryParams,\n UpdateEntryParams,\n GetEntryParams,\n DeleteEntryParams,\n GetShippingRatesParams,\n FindShipmentsParams,\n FindFulfillmentOrdersParams,\n GetFulfillmentOrderParams,\n GetShipmentParams,\n CreateShipmentParams,\n RetryShipmentParams,\n RequestShippingLabelRefundParams,\n FindShippingLabelRefundsParams,\n GetShippingLabelRefundParams,\n RetryShippingLabelRefundParams,\n FindShippingLabelAdjustmentsParams,\n FindShippingLabelSettlementsParams,\n RetryShippingLabelSettlementParams,\n CreateStoreSubscriptionActionParams,\n FindStoreSubscriptionActionEffectsParams,\n FindStoreSubscriptionActionsParams,\n GetStoreSubscriptionActionEffectParams,\n GetStoreSubscriptionActionParams,\n RetryStoreSubscriptionActionParams,\n TestWebhookParams,\n TestWebhookResponse,\n WebhookDeliveryStatus,\n CreateContactListParams,\n UpdateContactListParams,\n FindContactListsParams,\n FindStorefrontContactListsParams,\n GetContactListParams,\n CreateContactListPlanParams,\n UpdateContactListPlanParams,\n ContactListPlanPriceInput,\n FindContactListPlansParams,\n FindStorefrontContactListPlansParams,\n GetContactListPlanParams,\n RetryContactListPlanCatalogParams,\n AddContactListContactParams,\n UpdateContactListContactParams,\n RemoveContactListContactParams,\n FindContactListContactsParams,\n RefundContactListMembershipParams,\n RefundContactListMembershipResult,\n FindContactListMembershipPaymentAttemptsParams,\n FindStorefrontContactListMembershipsParams,\n GetContactListMembershipPaymentAttemptParams,\n FindContactListMembershipRefundsParams,\n GetContactListMembershipRefundParams,\n RetryContactListMembershipRefundParams,\n FindContactListMembershipCancellationsParams,\n GetContactListMembershipCancellationParams,\n RetryContactListMembershipCancellationParams,\n ImportContactRowInput,\n ImportContactRowError,\n ImportContactRowResult,\n ImportContactListRowResult,\n ImportContactListPreviewParams,\n ImportContactsIntoContactListParams,\n ImportContactsIntoContactListResult,\n SubscribeContactListParams,\n ContactListAccessParams,\n ContactListContentAccessParams,\n CreateMailboxParams,\n UpdateMailboxParams,\n FindMailboxesParams,\n GetMailboxParams,\n PrepareMailboxParams,\n TestMailboxParams,\n TestMailboxResult,\n CreateCampaignParams,\n UpdateCampaignParams,\n FindCampaignsParams,\n GetCampaignParams,\n LaunchCampaignParams,\n DuplicateCampaignParams,\n ImportCampaignEnrollmentsParams,\n GetCampaignLaunchReadinessParams,\n GenerateOutreachPersonalizedDraftsParams,\n FindCampaignEnrollmentsParams,\n UpdateCampaignEnrollmentParams,\n UpdateCampaignEnrollmentDraftParams,\n UpdateCampaignEnrollmentStepExecutionParams,\n GetCampaignEnrollmentConversationParams,\n ReplyCampaignEnrollmentParams,\n StopCampaignEnrollmentParams,\n FindCampaignMessagesParams,\n UpdateCampaignMessageParams,\n CreateSuppressionParams,\n UpdateSuppressionParams,\n FindSuppressionsParams,\n GetSuppressionParams,\n CreateLeadResearchRunParams,\n FindLeadResearchRunsParams,\n GetLeadResearchRunParams,\n UpdateLeadResearchRunParams,\n CancelLeadResearchRunParams,\n SendLeadResearchMessageParams,\n FindLeadResearchMessagesParams,\n ValidateLeadEmailParams,\n CancelSocialPublicationParams,\n ClassifySocialPublicationCommentsParams,\n ConnectStripePaymentProviderParams,\n ConnectSocialConnectionParams,\n CreateSocialCommentReplyParams,\n CreateSocialPublicationParams,\n DeletePaymentProviderParams,\n DeleteSocialConnectionParams,\n FindSocialPublicationCommentsParams,\n FindSocialPublicationsParams,\n GetSocialCapabilitiesParams,\n GetSocialOAuthAttemptParams,\n GetSocialCommentReplyParams,\n GetSocialPublicationCommentThreadParams,\n GetSocialPublicationCommentsParams,\n GetSocialPublicationEffectParams,\n GetSocialPublicationMetricsParams,\n GetSocialPublicationParams,\n ListPaymentProvidersParams,\n ListSocialCommentRepliesParams,\n ListSocialConnectionsParams,\n ListSocialPublicationEffectsParams,\n RefreshPaymentProvidersParams,\n RetrySocialCommentReplyParams,\n ScheduleSocialPublicationParams,\n SyncSocialEngagementParams,\n SyncSocialPublicationCommentsParams,\n SyncSocialPublicationCommentThreadParams,\n SyncSocialPublicationMetricsParams,\n UpdateSocialPublicationParams,\n ValidateSocialPublicationParams,\n} from \"./types/api\";\n\nexport type {\n LocationState,\n LocationCountry,\n GetCountriesResponse,\n} from \"./api/location\";\n\nexport type {\n AnalyticsTimeRange,\n AnalyticsReportKey,\n AnalyticsMetricReportKey,\n AnalyticsBreakdownReportKey,\n AnalyticsActionReportKey,\n AnalyticsCompositeReportKey,\n AnalyticsReportRequest,\n AnalyticsBlockRequest,\n AnalyticsRequest,\n AnalyticsMetricData,\n AnalyticsBreakdownItem,\n AnalyticsBreakdownData,\n BusinessOverviewData,\n RevenueByCurrencyData,\n ContactFunnelStage,\n ContactFunnelData,\n OutreachOverviewData,\n OutreachFunnelStage,\n OutreachFunnelData,\n EntityStatusOverviewData,\n DataHealthData,\n AnalyticsReport,\n AnalyticsBlockResponse,\n AnalyticsResponse,\n ActionFeedCategory,\n ActionFeedItem,\n ActionFeedSummary,\n ActionFeedCursor,\n ActionFeedData,\n} from \"./api/analytics\";\n\nexport type {\n CreateLocationParams,\n UpdateLocationParams,\n DeleteLocationParams,\n CreateMarketParams,\n UpdateMarketParams,\n MarketZoneInput,\n CreateProductVariantInput,\n UpdateProductVariantInput,\n ProductInventoryInput,\n} from \"./types/api\";\n\nexport type {\n StorefrontAction,\n TrackActionParams,\n CommonActionKey,\n ExperimentUseResponse,\n UseExperimentParams,\n} from \"./api/storefront\";\nexport { COMMON_ACTION_KEYS } from \"./api/storefront\";\nexport type {\n CreateExperimentParams,\n Experiment,\n ExperimentResults,\n ExperimentStatus,\n ExperimentVariant,\n ExperimentVariantResult,\n FindExperimentsParams,\n GetExperimentParams,\n UpdateExperimentParams,\n} from \"./api/experiments\";\nexport {\n createCartController,\n type CartApi,\n type CartController,\n type CartControllerAddItemParams,\n type CartControllerCheckoutParams,\n type CartControllerClearParams,\n type CartControllerInitParams,\n type CartControllerListener,\n type CartControllerQuoteParams,\n type CartControllerRefreshParams,\n type CartControllerRemoveItemParams,\n type CartControllerState,\n type CartControllerUpdateParams,\n} from \"./cartController\";\n\nexport type { TimelineParams } from \"./api/crm\";\nexport type {\n SupportAgent,\n SupportAgentStatus,\n SupportChannel,\n SupportChannelConfig,\n SupportChannelStatus,\n SupportChannelType,\n SupportConversation,\n SupportConversationChannelContext,\n SupportMessage,\n SupportConversationResponse,\n SupportConversationStartResponse,\n SendSupportMessageParams,\n StorefrontSendSupportMessageParams,\n StorefrontGetSupportConversationParams,\n SupportAgentNode,\n SupportAgentEdge,\n SupportAgentAiConfig,\n EdgeTrigger,\n SupportAction,\n AssignSupportConversationParams,\n GetSupportConversationParams,\n ReplySupportConversationParams,\n ResolveSupportConversationParams,\n CreateSupportChannelParams,\n UpdateSupportChannelParams,\n FindSupportChannelsParams,\n FindSupportConversationsParams,\n ReceiveSupportChannelMessageParams,\n} from \"./api/support\";\nexport type {\n WorkflowToolOperation,\n WorkflowToolResource,\n WorkflowTool,\n EventMetadata,\n EventScopeField,\n} from \"./api/platform\";\n\nexport const SDK_VERSION = \"0.9.19\";\nexport const SUPPORTED_FRAMEWORKS = [\n \"astro\",\n \"react\",\n \"vue\",\n \"svelte\",\n \"vanilla\",\n] as const;\n\nimport type {\n Contact as ContactType,\n Store as StoreType,\n Market as MarketType,\n Price,\n} from \"./types\";\n\nexport interface ApiConfig {\n httpClient: HttpClient;\n storeId: string;\n baseUrl: string;\n market: string;\n locale: string;\n authStorage: AuthStorage;\n}\n\nexport interface AdminSessionInternal {\n access_token: string;\n refresh_token: string;\n access_expires_at?: number;\n email?: string;\n}\n\nexport interface ContactSessionInternal {\n access_token: string;\n contact: ContactType;\n store: StoreType;\n market: MarketType | null;\n}\n\nexport interface AdminSession {\n email?: string;\n}\n\nexport interface ContactSession {\n contact: ContactType;\n store: StoreType;\n market: MarketType | null;\n}\n\nexport interface StorefrontIdentifyResult extends ContactSession {\n verification_challenge:\n import(\"./types/api\").VerificationChallengeResponse | null;\n}\n\nexport type AdminSessionUpdater = (\n updater: (prev: AdminSessionInternal | null) => AdminSessionInternal | null,\n) => void;\n\nexport type ContactSessionUpdater = (\n updater: (\n prev: ContactSessionInternal | null,\n ) => ContactSessionInternal | null,\n) => void;\n\nexport type AuthStateListener<T> = (session: T | null) => void;\n\nimport {\n createHttpClient,\n type HttpClientConfig,\n type HttpClient,\n type AuthStorage,\n} from \"./services/createHttpClient\";\nimport { createAccountApi } from \"./api/account\";\nimport { createAuthApi } from \"./api/auth\";\nimport { createStoreApi } from \"./api/store\";\nimport { createMediaApi } from \"./api/media\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createLocationApi } from \"./api/location\";\nimport { createMarketApi } from \"./api/market\";\nimport { createContactApi } from \"./api/crm\";\nimport {\n createAdminSupportApi,\n createStorefrontSupportApi,\n} from \"./api/support\";\nimport { createLeadResearchApi } from \"./api/leadResearch\";\nimport { createSocialApi } from \"./api/social\";\nimport { createWorkflowApi } from \"./api/workflow\";\nimport { createPlatformApi } from \"./api/platform\";\nimport { createShippingApi } from \"./api/shipping\";\nimport { createPaymentProviderApi } from \"./api/paymentProvider\";\nimport { createEmailTemplateApi } from \"./api/emailTemplate\";\nimport { createFormApi } from \"./api/form\";\nimport { createTaxonomyApi } from \"./api/taxonomy\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createExperimentsApi } from \"./api/experiments\";\nimport { createStorefrontApi } from \"./api/storefront\";\nimport {\n getImageUrl,\n getBlockValue,\n getBlockTextValue,\n getBlockContentValue,\n getBlockValues,\n getBlockLabel,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n formatPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n getCurrencySymbol,\n getCurrencyName,\n} from \"./utils/price\";\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\";\nimport {\n getAvailableStock,\n getReservedStock,\n hasStock,\n getInventoryAt,\n getFirstAvailableFCId,\n} from \"./utils/inventory\";\n\nfunction createUtilitySurface(apiConfig: ApiConfig) {\n return {\n getImageUrl: (imageBlock: unknown, isBlock = true) =>\n getImageUrl(imageBlock, isBlock),\n getBlockValue,\n getBlockTextValue,\n getBlockContentValue,\n getBlockValues,\n getBlockLabel,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n\n formatPrice: (prices: Price[]) => formatPrice(prices, apiConfig.market),\n getPriceAmount: (prices: Price[]) => getPriceAmount(prices, apiConfig.market),\n formatPayment,\n formatMinor,\n getCurrencySymbol,\n getCurrencyName,\n validatePhoneNumber,\n\n tzGroups,\n findTimeZone,\n\n slugify,\n humanize,\n categorify,\n formatDate,\n\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n\n isValidKey,\n validateKey,\n toKey,\n nameToKey,\n\n getAvailableStock,\n getReservedStock,\n hasStock,\n getInventoryAt,\n getFirstAvailableFCId,\n };\n}\n\nconst ADMIN_STORAGE_KEY = \"arky_admin_session\";\n\nfunction readAdminSession(): AdminSessionInternal | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(ADMIN_STORAGE_KEY);\n return raw ? (JSON.parse(raw) as AdminSessionInternal) : null;\n } catch {\n return null;\n }\n}\n\nfunction writeAdminSession(s: AdminSessionInternal | null): void {\n if (typeof window === \"undefined\") return;\n if (s) {\n localStorage.setItem(ADMIN_STORAGE_KEY, JSON.stringify(s));\n } else {\n localStorage.removeItem(ADMIN_STORAGE_KEY);\n }\n}\n\nexport type CreateAdminConfig = Omit<\n HttpClientConfig,\n \"authStorage\" | \"storeId\"\n> & {\n storeId: string;\n market: string;\n locale?: string;\n apiToken?: string;\n};\n\nexport function createAdmin(config: CreateAdminConfig) {\n const locale = config.locale || \"en\";\n const listeners = new Set<AuthStateListener<AdminSession>>();\n\n function toPublic(s: AdminSessionInternal | null): AdminSession | null {\n return s ? { email: s.email } : null;\n }\n\n function emit(): void {\n const pub = toPublic(readAdminSession());\n for (const l of listeners) {\n Promise.resolve()\n .then(() => l(pub))\n .catch(() => {});\n }\n }\n\n const updateSession: AdminSessionUpdater = (updater) => {\n if (config.apiToken) return;\n const prev = readAdminSession();\n const next = updater(prev);\n writeAdminSession(next);\n emit();\n };\n\n const authStorage: AuthStorage = config.apiToken\n ? {\n getTokens: () => ({ access_token: config.apiToken! }),\n onTokensRefreshed: () => {},\n onForcedLogout: () => {},\n }\n : {\n getTokens() {\n const s = readAdminSession();\n if (!s) return null;\n return {\n access_token: s.access_token,\n refresh_token: s.refresh_token,\n access_expires_at: s.access_expires_at,\n };\n },\n onTokensRefreshed(tokens) {\n updateSession((prev) =>\n prev\n ? {\n ...prev,\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token ?? prev.refresh_token,\n access_expires_at:\n tokens.access_expires_at ?? prev.access_expires_at,\n }\n : null,\n );\n },\n onForcedLogout() {\n updateSession(() => null);\n },\n };\n\n const httpClient = createHttpClient({\n baseUrl: config.baseUrl,\n storeId: config.storeId,\n refreshPath: config.refreshPath,\n navigate: config.navigate,\n loginFallbackPath: config.loginFallbackPath,\n authStorage,\n });\n\n const apiConfig: ApiConfig = {\n httpClient,\n storeId: config.storeId,\n baseUrl: config.baseUrl,\n market: config.market,\n locale,\n authStorage,\n };\n\n const accountApi = createAccountApi(apiConfig);\n const authApi = createAuthApi(apiConfig, updateSession);\n const storeApi = createStoreApi(apiConfig, updateSession);\n const platformApi = createPlatformApi(apiConfig);\n\n const cmsApi = createCmsApi(apiConfig);\n const eshopApi = createEshopApi(apiConfig);\n const promoCodeApi = createPromoCodeApi(apiConfig);\n const crmApi = createContactApi(apiConfig);\n const supportApi = createAdminSupportApi(apiConfig);\n const leadResearchApi = createLeadResearchApi(apiConfig);\n const socialApi = createSocialApi(apiConfig);\n const paymentProviderApi = createPaymentProviderApi(apiConfig);\n const notificationApi = createNotificationApi(apiConfig);\n const shippingApi = createShippingApi(apiConfig);\n const locationApi = createLocationApi(apiConfig);\n const marketApi = createMarketApi(apiConfig);\n const workflowApi = createWorkflowApi(apiConfig);\n const storePaymentProviderApi = {\n list: paymentProviderApi.list,\n refresh: paymentProviderApi.refresh,\n connectStripe: paymentProviderApi.connectStripe,\n delete: paymentProviderApi.delete,\n };\n const workflowPublicApi = {\n create: workflowApi.createWorkflow,\n update: workflowApi.updateWorkflow,\n delete: workflowApi.deleteWorkflow,\n get: workflowApi.getWorkflow,\n find: workflowApi.getWorkflows,\n trigger: workflowApi.triggerWorkflow,\n getExecutions: workflowApi.getWorkflowExecutions,\n getExecution: workflowApi.getWorkflowExecution,\n listEffects: workflowApi.getWorkflowEffects,\n getEffect: workflowApi.getWorkflowEffect,\n listConnections: workflowApi.getWorkflowConnections,\n getConnectionConnectUrl: workflowApi.getWorkflowConnectionConnectUrl,\n deleteConnection: workflowApi.deleteWorkflowConnection,\n };\n const formApi = createFormApi(apiConfig);\n const taxonomyApi = createTaxonomyApi(apiConfig);\n const emailTemplateApi = createEmailTemplateApi(apiConfig);\n const analyticsApi = createAnalyticsApi(apiConfig);\n const experimentsApi = createExperimentsApi(apiConfig);\n\n const sdk = {\n account: {\n update: accountApi.updateAccount,\n delete: accountApi.deleteAccount,\n getMe: accountApi.getMe,\n search: accountApi.searchAccounts,\n apiToken: {\n list: accountApi.listApiTokens,\n create: accountApi.createApiToken,\n update: accountApi.updateApiToken,\n revoke: accountApi.revokeApiToken,\n },\n session: {\n list: accountApi.listSessions,\n revoke: accountApi.revokeSession,\n },\n auth: authApi,\n },\n store: {\n create: storeApi.createStore,\n update: storeApi.updateStore,\n get: storeApi.getStore,\n find: storeApi.getStores,\n subscription: {\n get: storeApi.getSubscription,\n getPlans: storeApi.getSubscriptionPlans,\n action: {\n create: storeApi.createSubscriptionAction,\n find: storeApi.findSubscriptionActions,\n get: storeApi.getSubscriptionAction,\n retry: storeApi.retrySubscriptionAction,\n effect: {\n find: storeApi.findSubscriptionActionEffects,\n get: storeApi.getSubscriptionActionEffect,\n },\n },\n createPortalSession: storeApi.createPortalSession,\n },\n member: {\n add: storeApi.addMember,\n invite: storeApi.inviteUser,\n find: storeApi.findMembers,\n findOwn: storeApi.findOwnMemberships,\n remove: storeApi.removeMember,\n },\n buildHook: {\n list: storeApi.listBuildHooks,\n create: storeApi.createBuildHook,\n update: storeApi.updateBuildHook,\n delete: storeApi.deleteBuildHook,\n },\n webhook: {\n test: storeApi.testWebhook,\n list: storeApi.listWebhooks,\n create: storeApi.createWebhook,\n update: storeApi.updateWebhook,\n delete: storeApi.deleteWebhook,\n },\n config: {\n getPayment: storeApi.getPaymentConfig,\n },\n location: locationApi,\n market: marketApi,\n paymentProvider: storePaymentProviderApi,\n },\n media: createMediaApi(apiConfig),\n notification: {\n email: {\n send: notificationApi.sendEmail,\n getDelivery: notificationApi.getEmailDelivery,\n retryDelivery: notificationApi.retryEmailDelivery,\n },\n mailbox: crmApi.mailbox,\n },\n platform: platformApi,\n social: {\n connection: {\n getCapabilities: socialApi.getCapabilities,\n list: socialApi.listConnections,\n connect: socialApi.connect,\n getOAuthAttempt: socialApi.getOAuthAttempt,\n selectDestination: socialApi.selectDestination,\n delete: socialApi.deleteConnection,\n },\n publication: {\n create: socialApi.createPublication,\n update: socialApi.updatePublication,\n get: socialApi.getPublication,\n find: socialApi.findPublications,\n validate: socialApi.validatePublication,\n schedule: socialApi.schedulePublication,\n cancel: socialApi.cancelPublication,\n getComments: socialApi.getPublicationComments,\n syncComments: socialApi.syncPublicationComments,\n getCommentThread: socialApi.getPublicationCommentThread,\n syncCommentThread: socialApi.syncPublicationCommentThread,\n findComments: socialApi.findPublicationComments,\n classifyComments: socialApi.classifyPublicationComments,\n commentReply: {\n create: socialApi.createCommentReply,\n list: socialApi.listCommentReplies,\n get: socialApi.getCommentReply,\n retry: socialApi.retryCommentReply,\n },\n effect: {\n list: socialApi.listPublicationEffects,\n get: socialApi.getPublicationEffect,\n },\n getMetrics: socialApi.getPublicationMetrics,\n syncMetrics: socialApi.syncPublicationMetrics,\n syncEngagement: socialApi.syncEngagement,\n },\n },\n cms: {\n collection: {\n create: cmsApi.createCollection,\n update: cmsApi.updateCollection,\n delete: cmsApi.deleteCollection,\n get: cmsApi.getCollection,\n find: cmsApi.getCollections,\n },\n entry: {\n create: cmsApi.createEntry,\n update: cmsApi.updateEntry,\n delete: cmsApi.deleteEntry,\n get: cmsApi.getEntry,\n find: cmsApi.getEntries,\n },\n form: {\n create: formApi.createForm,\n update: formApi.updateForm,\n delete: formApi.deleteForm,\n get: formApi.getForm,\n find: formApi.getForms,\n submit: formApi.submit,\n getSubmissions: formApi.getSubmissions,\n getSubmission: formApi.getSubmission,\n updateSubmission: formApi.updateSubmission,\n },\n taxonomy: {\n create: taxonomyApi.createTaxonomy,\n update: taxonomyApi.updateTaxonomy,\n delete: taxonomyApi.deleteTaxonomy,\n get: taxonomyApi.getTaxonomy,\n find: taxonomyApi.getTaxonomies,\n getChildren: taxonomyApi.getTaxonomyChildren,\n },\n emailTemplate: {\n create: emailTemplateApi.createEmailTemplate,\n update: emailTemplateApi.updateEmailTemplate,\n delete: emailTemplateApi.deleteEmailTemplate,\n get: emailTemplateApi.getEmailTemplate,\n find: emailTemplateApi.getEmailTemplates,\n preview: emailTemplateApi.previewEmailTemplate,\n },\n },\n eshop: {\n product: {\n create: eshopApi.createProduct,\n update: eshopApi.updateProduct,\n delete: eshopApi.deleteProduct,\n get: eshopApi.getProduct,\n find: eshopApi.getProducts,\n },\n order: {\n update: eshopApi.updateOrder,\n get: eshopApi.getOrder,\n find: eshopApi.getOrders,\n getQuote: eshopApi.getQuote,\n createRefund: eshopApi.createRefund,\n getRefund: eshopApi.getRefund,\n getRefunds: eshopApi.getRefunds,\n getPayment: eshopApi.getPayment,\n retryPaymentTransaction: eshopApi.retryPaymentTransaction,\n getPaymentTransactions: eshopApi.getPaymentTransactions,\n getPaymentTransaction: eshopApi.getPaymentTransaction,\n findDigitalAccess: eshopApi.findDigitalAccess,\n getDigitalAccess: eshopApi.getDigitalAccess,\n downloadDigitalAccess: eshopApi.downloadDigitalAccess,\n activateDigitalAccess: eshopApi.activateDigitalAccess,\n revokeDigitalAccess: eshopApi.revokeDigitalAccess,\n },\n shipment: {\n getRates: shippingApi.getRates,\n create: shippingApi.createShipment,\n get: shippingApi.getShipment,\n find: shippingApi.findShipments,\n retry: shippingApi.retryShipment,\n fulfillment: {\n find: shippingApi.findFulfillmentOrders,\n get: shippingApi.getFulfillmentOrder,\n },\n refund: {\n request: shippingApi.requestRefund,\n get: shippingApi.getRefund,\n find: shippingApi.findRefunds,\n retry: shippingApi.retryRefund,\n },\n adjustment: {\n find: shippingApi.findAdjustments,\n },\n settlement: {\n find: shippingApi.findSettlements,\n retry: shippingApi.retrySettlement,\n },\n },\n cart: {\n create: eshopApi.createCart,\n update: eshopApi.updateCart,\n get: eshopApi.getCart,\n find: eshopApi.getCarts,\n addItem: eshopApi.addCartItem,\n removeItem: eshopApi.removeCartItem,\n clear: eshopApi.clearCart,\n quote: eshopApi.quoteCart,\n checkout: eshopApi.checkoutCart,\n },\n service: {\n create: eshopApi.createService,\n update: eshopApi.updateService,\n delete: eshopApi.deleteService,\n get: eshopApi.getService,\n find: eshopApi.getServices,\n getAvailability: eshopApi.getServiceAvailability,\n findProviders: eshopApi.findServiceProviders,\n createProvider: eshopApi.createServiceProvider,\n updateProvider: eshopApi.updateServiceProvider,\n deleteProvider: eshopApi.deleteServiceProvider,\n },\n provider: {\n create: eshopApi.createProvider,\n update: eshopApi.updateProvider,\n delete: eshopApi.deleteProvider,\n get: eshopApi.getProvider,\n find: eshopApi.getProviders,\n },\n promoCode: promoCodeApi,\n },\n crm: {\n contact: {\n create: crmApi.create,\n get: crmApi.get,\n find: crmApi.find,\n update: crmApi.update,\n merge: crmApi.merge,\n import: crmApi.import,\n findSessions: crmApi.findSessions,\n revokeSession: crmApi.revokeSession,\n revokeAllSessions: crmApi.revokeAllSessions,\n },\n contactList: {\n create: crmApi.contactList.create,\n update: crmApi.contactList.update,\n get: crmApi.contactList.get,\n find: crmApi.contactList.find,\n importContacts: crmApi.contactList.importContacts,\n previewImportContacts: crmApi.contactList.previewImportContacts,\n addMember: crmApi.contactList.members.add,\n updateMember: crmApi.contactList.members.update,\n removeMember: crmApi.contactList.members.remove,\n findMembers: crmApi.contactList.members.find,\n plans: crmApi.contactList.plans,\n memberships: {\n refund: crmApi.contactList.memberships.refund,\n paymentAttempts: crmApi.contactList.memberships.paymentAttempts,\n refunds: crmApi.contactList.memberships.refunds,\n cancellations: crmApi.contactList.memberships.cancellations,\n },\n },\n action: crmApi.action,\n },\n outreach: {\n campaign: crmApi.campaign,\n campaignEnrollment: crmApi.campaignEnrollment,\n campaignMessage: crmApi.campaignMessage,\n suppression: crmApi.suppression,\n leadResearch: leadResearchApi,\n },\n automation: {\n workflow: workflowPublicApi,\n support: {\n createChannel: supportApi.channel.create,\n getChannel: supportApi.channel.get,\n findChannels: supportApi.channel.find,\n updateChannel: supportApi.channel.update,\n deleteChannel: supportApi.channel.delete,\n receiveChannelMessage: supportApi.channel.receiveMessage,\n createAgent: supportApi.agent.create,\n getAgent: supportApi.agent.get,\n findAgents: supportApi.agent.find,\n updateAgent: supportApi.agent.update,\n deleteAgent: supportApi.agent.delete,\n findConversations: supportApi.conversation.find,\n getConversation: supportApi.conversation.get,\n sendConversationMessage: supportApi.conversation.sendMessage,\n replyToConversation: supportApi.conversation.reply,\n resolveConversation: supportApi.conversation.resolve,\n assignConversation: supportApi.conversation.assign,\n },\n },\n\n analytics: analyticsApi,\n experiments: experimentsApi,\n\n setStoreId: (storeId: string) => {\n apiConfig.storeId = storeId;\n },\n\n getStoreId: () => apiConfig.storeId,\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 get session(): AdminSession | null {\n if (config.apiToken) return null;\n return toPublic(readAdminSession());\n },\n\n get isAuthenticated(): boolean {\n if (config.apiToken) return true;\n return readAdminSession() !== null;\n },\n\n onAuthStateChanged(listener: AuthStateListener<AdminSession>): () => void {\n listeners.add(listener);\n const current = toPublic(readAdminSession());\n if (current) {\n Promise.resolve()\n .then(() => listener(current))\n .catch(() => {});\n }\n return () => {\n listeners.delete(listener);\n };\n },\n\n async logout(): Promise<void> {\n if (config.apiToken) return;\n updateSession(() => null);\n },\n\n utils: createUtilitySurface(apiConfig),\n };\n\n return sdk;\n}\n\nexport interface StorefrontSessionStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nfunction defaultStorefrontSessionStorage(): StorefrontSessionStorage | null {\n if (typeof window === \"undefined\") return null;\n try {\n return window.localStorage;\n } catch {\n return null;\n }\n}\n\nfunction storefrontSessionStorageKey(baseUrl: string, storeId: string): string {\n const normalizedBaseUrl = baseUrl.trim().replace(/\\/+$/, \"\").toLowerCase();\n return `arky_contact_session:${encodeURIComponent(normalizedBaseUrl)}:${encodeURIComponent(storeId)}`;\n}\n\nexport type CreateStorefrontConfig = Omit<\n HttpClientConfig,\n \"authStorage\" | \"storeId\"\n> & {\n storeId: string;\n market?: string;\n locale?: string;\n apiToken?: string;\n sessionStorage?: StorefrontSessionStorage;\n};\n\nfunction createStorefrontClient(config: CreateStorefrontConfig) {\n const locale = config.locale || \"en\";\n const initialMarket = config.market || \"\";\n const listeners = new Set<AuthStateListener<ContactSession>>();\n let bareIdentifyPromise: Promise<StorefrontIdentifyResult> | null = null;\n let identityTail: Promise<void> = Promise.resolve();\n const sessionStorage = config.sessionStorage || defaultStorefrontSessionStorage();\n let memorySession: ContactSessionInternal | null = null;\n\n function readContactSession(): ContactSessionInternal | null {\n if (!sessionStorage) return memorySession;\n try {\n const raw = sessionStorage.getItem(\n storefrontSessionStorageKey(config.baseUrl, config.storeId),\n );\n return raw ? (JSON.parse(raw) as ContactSessionInternal) : null;\n } catch {\n return memorySession;\n }\n }\n\n function writeContactSession(session: ContactSessionInternal | null): void {\n memorySession = session;\n if (!sessionStorage) return;\n const key = storefrontSessionStorageKey(config.baseUrl, config.storeId);\n try {\n if (session) {\n sessionStorage.setItem(key, JSON.stringify(session));\n } else {\n sessionStorage.removeItem(key);\n }\n } catch {\n // The in-memory copy keeps this client usable when persistence fails.\n }\n }\n\n function toPublic(s: ContactSessionInternal | null): ContactSession | null {\n return s ? { contact: s.contact, store: s.store, market: s.market } : null;\n }\n\n function emit(): void {\n const pub = toPublic(readContactSession());\n for (const l of listeners) {\n Promise.resolve()\n .then(() => l(pub))\n .catch(() => {});\n }\n }\n\n const updateSession: ContactSessionUpdater = (updater) => {\n if (config.apiToken) return;\n const prev = readContactSession();\n const next = updater(prev);\n writeContactSession(next);\n emit();\n };\n\n const authStorage: AuthStorage = config.apiToken\n ? {\n getTokens: () => ({ access_token: config.apiToken! }),\n onTokensRefreshed: () => {},\n onForcedLogout: () => {},\n }\n : {\n getTokens() {\n const s = readContactSession();\n return s ? { access_token: s.access_token } : null;\n },\n onTokensRefreshed() {\n // Contact tokens are one-shot; no refresh on this flow.\n },\n onForcedLogout() {\n bareIdentifyPromise = null;\n updateSession(() => null);\n },\n };\n\n const httpClient = createHttpClient({\n baseUrl: config.baseUrl,\n storeId: config.storeId,\n refreshPath: config.refreshPath,\n navigate: config.navigate,\n loginFallbackPath: config.loginFallbackPath,\n authStorage,\n });\n\n const apiConfig: ApiConfig = {\n httpClient,\n storeId: config.storeId,\n baseUrl: config.baseUrl,\n market: initialMarket,\n locale,\n authStorage,\n };\n\n const storefrontApi = createStorefrontApi(apiConfig, updateSession);\n const contactApi = storefrontApi.crm.contact;\n\n function identify(params?: {\n email?: string;\n verify?: boolean;\n market?: string;\n }): Promise<StorefrontIdentifyResult> {\n if (params?.market !== undefined) apiConfig.market = params.market;\n const market = apiConfig.market;\n\n const isBareCall = !params?.email && !params?.verify;\n if (isBareCall && bareIdentifyPromise) return bareIdentifyPromise;\n\n const run = async (): Promise<StorefrontIdentifyResult> => {\n try {\n const result = await (params?.verify\n ? contactApi.requestCode({\n market,\n email: params.email,\n })\n : contactApi.identify({\n market,\n email: params?.email,\n }));\n return {\n contact: result.contact,\n store: result.store,\n market: result.market,\n verification_challenge: result.verification_challenge,\n };\n } catch (err: unknown) {\n const e = err as {\n statusCode?: number;\n status?: number;\n response?: { status?: number };\n };\n const status = e?.statusCode || e?.status || e?.response?.status;\n if (isBareCall && status === 401) {\n updateSession(() => null);\n const result = await contactApi.identify({\n market,\n });\n return {\n contact: result.contact,\n store: result.store,\n market: result.market,\n verification_challenge: result.verification_challenge,\n };\n }\n throw err;\n }\n };\n\n const promise = identityTail.then(run);\n identityTail = promise.then(\n () => undefined,\n () => undefined,\n );\n\n if (isBareCall) {\n bareIdentifyPromise = promise;\n void promise.then(\n () => {\n if (bareIdentifyPromise === promise) bareIdentifyPromise = null;\n },\n () => {\n if (bareIdentifyPromise === promise) bareIdentifyPromise = null;\n },\n );\n }\n\n return promise;\n }\n\n async function verify(params: { challenge_id: string; code: string }) {\n const result = await contactApi.verify(params);\n bareIdentifyPromise = null;\n return result;\n }\n\n async function logout(): Promise<void> {\n if (config.apiToken) return;\n bareIdentifyPromise = null;\n try {\n await contactApi.logout();\n } catch {\n updateSession(() => null);\n }\n }\n\n return {\n identify,\n verify,\n logout,\n me: () => contactApi.getMe(),\n\n get session(): ContactSession | null {\n if (config.apiToken) return null;\n return toPublic(readContactSession());\n },\n\n get isAuthenticated(): boolean {\n if (config.apiToken) return true;\n const s = readContactSession();\n return s !== null && !!s.access_token;\n },\n\n onAuthStateChanged(\n listener: AuthStateListener<ContactSession>,\n ): () => void {\n listeners.add(listener);\n const current = toPublic(readContactSession());\n if (current) {\n Promise.resolve()\n .then(() => listener(current))\n .catch(() => {});\n }\n return () => {\n listeners.delete(listener);\n };\n },\n\n store: storefrontApi.store,\n cms: storefrontApi.cms,\n eshop: storefrontApi.eshop,\n crm: storefrontApi.crm,\n action: storefrontApi.action,\n experiments: storefrontApi.experiments,\n support: createStorefrontSupportApi(apiConfig),\n getStoreId: () => apiConfig.storeId,\n setMarket: (key: string) => {\n apiConfig.market = key;\n bareIdentifyPromise = null;\n },\n getMarket: () => apiConfig.market,\n setLocale: (l: string) => {\n apiConfig.locale = l;\n },\n getLocale: () => apiConfig.locale,\n utils: createUtilitySurface(apiConfig),\n };\n}\n\ntype StorefrontClientBase = ReturnType<typeof createStorefrontClient>;\n\nexport type StorefrontClient = StorefrontClientBase & {\n forStore(storeId: string): StorefrontClient;\n};\n\nexport function createStorefront(\n config: CreateStorefrontConfig,\n): StorefrontClient {\n const sessionStorage =\n config.sessionStorage || defaultStorefrontSessionStorage() || undefined;\n const scopedConfig: CreateStorefrontConfig = {\n ...config,\n sessionStorage,\n };\n const client = createStorefrontClient(scopedConfig);\n\n Object.defineProperty(client, \"forStore\", {\n enumerable: true,\n configurable: false,\n writable: false,\n value: (storeId: string) =>\n createStorefront({\n ...scopedConfig,\n storeId,\n market: client.getMarket(),\n locale: client.getLocale(),\n }),\n });\n\n return client as StorefrontClient;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n","import type {\n Stripe,\n StripeElements,\n StripeElementsOptions,\n StripePaymentElement,\n} from \"@stripe/stripe-js\";\n\nexport interface StripeConfirmationTokenControllerConfig {\n publishableKey: string;\n connectedAccountId?: string;\n amount: number;\n currency: string;\n appearance?: StripeElementsOptions[\"appearance\"];\n}\n\nexport interface StripeConfirmationTokenOptions {\n return_url?: string;\n billing_details?: {\n name?: string | null;\n email?: string | null;\n phone?: string | null;\n };\n}\n\nexport interface StripeConfirmationTokenResult {\n confirmation_token_id: string;\n return_url?: string;\n}\n\nexport interface StripeConfirmationTokenController {\n mount(target: string | HTMLElement): void;\n update(input: { amount?: number; currency?: string }): void;\n createConfirmationToken(\n options?: StripeConfirmationTokenOptions,\n ): Promise<StripeConfirmationTokenResult>;\n handleNextAction(clientSecret: string): Promise<void>;\n destroy(): void;\n}\n\ntype StripeLoader = (\n publishableKey: string,\n options?: { stripeAccount: string },\n) => PromiseLike<Stripe | null>;\n\nasync function defaultStripeLoader(\n publishableKey: string,\n options?: { stripeAccount: string },\n): Promise<Stripe | null> {\n const { loadStripe } = await import(\"@stripe/stripe-js\");\n return loadStripe(publishableKey, options);\n}\n\nfunction normalizeCurrency(currency: string): string {\n return currency.trim().toLowerCase();\n}\n\nexport async function createStripeConfirmationTokenController(\n config: StripeConfirmationTokenControllerConfig,\n stripeLoader: StripeLoader = defaultStripeLoader,\n): Promise<StripeConfirmationTokenController> {\n const stripe = await stripeLoader(\n config.publishableKey,\n config.connectedAccountId\n ? { stripeAccount: config.connectedAccountId }\n : undefined,\n );\n if (!stripe) throw new Error(\"Stripe failed to initialize\");\n\n let elements = createElements(stripe, config);\n let paymentElement: StripePaymentElement | null = elements.create(\"payment\", {\n layout: \"tabs\",\n });\n\n return {\n mount(target) {\n if (!paymentElement) {\n paymentElement = elements.create(\"payment\", { layout: \"tabs\" });\n }\n paymentElement.mount(target);\n },\n\n update(input) {\n elements.update({\n ...(input.amount !== undefined ? { amount: input.amount } : {}),\n ...(input.currency ? { currency: normalizeCurrency(input.currency) } : {}),\n });\n },\n\n async createConfirmationToken(options = {}) {\n const submitResult = await elements.submit();\n if (submitResult.error) {\n throw new Error(submitResult.error.message || \"Payment details are incomplete\");\n }\n\n const tokenInput: Parameters<Stripe[\"createConfirmationToken\"]>[0] = {\n elements,\n params: {\n ...(options.return_url ? { return_url: options.return_url } : {}),\n ...(options.billing_details\n ? { payment_method_data: { billing_details: options.billing_details } }\n : {}),\n },\n };\n const result = await stripe.createConfirmationToken(tokenInput);\n if (result.error) {\n throw new Error(result.error.message || \"Payment confirmation token failed\");\n }\n if (!result.confirmationToken?.id) {\n throw new Error(\"Stripe did not return a confirmation token\");\n }\n return {\n confirmation_token_id: result.confirmationToken.id,\n return_url: options.return_url,\n };\n },\n\n async handleNextAction(clientSecret) {\n const result = await stripe.handleNextAction({ clientSecret });\n if (result.error) {\n throw new Error(result.error.message || \"Payment authentication failed\");\n }\n },\n\n destroy() {\n paymentElement?.destroy();\n paymentElement = null;\n },\n };\n}\n\nfunction createElements(\n stripe: Stripe,\n config: StripeConfirmationTokenControllerConfig,\n): StripeElements {\n return stripe.elements({\n mode: \"payment\",\n amount: config.amount,\n currency: normalizeCurrency(config.currency),\n paymentMethodCreation: \"manual\",\n ...(config.appearance ? { appearance: config.appearance } : {}),\n });\n}\n","import type {\n Address,\n Block,\n EshopCartItem,\n Form,\n FormEntry,\n FormField,\n FormSchema,\n FormValue,\n FormValues,\n GeoLocation,\n Price,\n Product,\n ProductVariant,\n Provider,\n Service,\n ZoneLocation,\n} from \"../types\";\nimport type {\n AvailabilityResponse,\n ProductCheckoutItemInput,\n ServiceCheckoutItemInput,\n} from \"../types/api\";\nimport type { ArkyServiceCartItem, ArkyServiceState, ArkyStoreClient } from \"./types\";\n\nexport function readErrorMessage(error: unknown, fallback: string): string {\n if (error instanceof Error && error.message) return error.message;\n if (typeof error === \"string\" && error.length > 0) return error;\n return fallback;\n}\n\nexport function createId(prefix: string): string {\n const cryptoValue = globalThis.crypto;\n if (cryptoValue && \"randomUUID\" in cryptoValue) return cryptoValue.randomUUID();\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n}\n\nexport function firstLocalized(value: unknown, locale: string): string {\n if (typeof value === \"string\") return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n const record = value as Record<string, unknown>;\n const localeValue = record[locale];\n if (typeof localeValue === \"string\") return localeValue;\n const englishValue = record.en;\n if (typeof englishValue === \"string\") return englishValue;\n for (const entry of Object.values(record)) {\n if (typeof entry === \"string\") return entry;\n }\n return \"\";\n}\n\nexport function findBlock(blocks: Block[] | undefined, keys: string[]): Block | null {\n return (blocks || []).find((block) => keys.includes(block.key)) || null;\n}\n\nexport function blockText(blocks: Block[] | undefined, keys: string[], locale: string): string {\n const block = findBlock(blocks, keys);\n if (!block) return \"\";\n return firstLocalized(block.value, locale);\n}\n\nexport function productName(product: Product, locale: string): string {\n return blockText(product.blocks, [\"name\", \"title\"], locale) || product.key || product.id;\n}\n\nexport function serviceName(service: Service, locale: string): string {\n return blockText(service.blocks, [\"name\", \"title\"], locale) || service.key || service.id;\n}\n\nexport function providerName(provider: Provider, locale: string): string {\n return blockText(provider.blocks, [\"name\", \"title\"], locale) || provider.key || provider.id;\n}\n\nexport function entitySlug(entity: { id: string; slug?: Record<string, string> }, locale: string): string {\n return entity.slug?.[locale] || entity.slug?.en || Object.values(entity.slug || {})[0] || entity.id;\n}\n\nexport function priceForMarket(\n prices: Price[],\n market: string,\n marketCurrency: string | null | undefined,\n): Price {\n const marketKey = market.trim();\n if (!marketKey) throw new Error(\"A market is required to select a product price\");\n const currency = marketCurrency?.trim().toUpperCase();\n if (!currency) throw new Error(`Market ${marketKey} does not have an authoritative currency`);\n\n const marketPrices = prices.filter((candidate) => candidate.market === marketKey);\n if (marketPrices.length === 0) {\n throw new Error(`Product is not priced for market ${marketKey}`);\n }\n if (\n marketPrices.some(\n (candidate) =>\n !Number.isSafeInteger(candidate.amount) ||\n candidate.amount < 0 ||\n candidate.currency.trim().toUpperCase() !== currency,\n )\n ) {\n throw new Error(`Product has an invalid price for market ${marketKey}`);\n }\n\n const authorizedPrices = marketPrices.filter((candidate) => candidate.contact_list_id);\n if (authorizedPrices.length > 0) {\n return authorizedPrices.reduce((lowest, candidate) =>\n candidate.amount < lowest.amount ? candidate : lowest,\n );\n }\n\n const basePrices = marketPrices.filter((candidate) => !candidate.contact_list_id);\n if (basePrices.length !== 1) {\n throw new Error(`Product does not have one base price for market ${marketKey}`);\n }\n const price = basePrices[0];\n return price;\n}\n\nexport function availableStock(client: ArkyStoreClient, variant: ProductVariant): number | undefined {\n const fromUtility = client.utils.getAvailableStock(variant);\n if (Number.isFinite(fromUtility)) return fromUtility;\n const stock = (variant.inventory || []).reduce((total, row) => total + (row.available || 0), 0);\n return stock > 0 ? stock : undefined;\n}\n\nexport function locationToAddress(location: ZoneLocation): Address {\n return {\n country: location.country || \"\",\n state: location.state || \"\",\n city: location.city || \"\",\n postal_code: location.postal_code || \"\",\n name: \"\",\n street1: \"\",\n street2: null,\n };\n}\n\nexport function createFormEntry(formId: string, fields: FormField[]): FormEntry {\n if (!formId.trim()) throw new Error(\"formId is required\");\n return { form_id: formId, fields };\n}\n\nexport function toProductCheckoutItems(items: EshopCartItem[]): ProductCheckoutItemInput[] {\n return items.map((item) => ({\n type: \"product\",\n id: item.id,\n product_id: item.product_id,\n variant_id: item.variant_id,\n quantity: item.quantity,\n }));\n}\n\nexport function toServiceCheckoutItems(items: ArkyServiceCartItem[]): ServiceCheckoutItemInput[] {\n return items.map((item) => ({\n type: \"service\",\n id: item.id,\n service_id: item.service_id,\n provider_id: item.provider_id,\n slots: [...item.slots].sort((a, b) => a.from - b.from),\n forms: item.forms,\n }));\n}\n\nfunction formValueError(field: FormSchema, message: string): Error {\n return new Error(`Invalid value for form field '${field.key}': ${message}`);\n}\n\nfunction isValidGeoLocation(value: unknown): value is GeoLocation {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const location = value as GeoLocation;\n if (location.label !== undefined && location.label !== null && typeof location.label !== \"string\") {\n return false;\n }\n const coordinates = location.coordinates;\n if (!coordinates || typeof coordinates !== \"object\") return false;\n return (\n Number.isFinite(coordinates.lat) &&\n Number.isFinite(coordinates.lon) &&\n coordinates.lat >= -90 &&\n coordinates.lat <= 90 &&\n coordinates.lon >= -180 &&\n coordinates.lon <= 180\n );\n}\n\nfunction buildFormField(field: FormSchema, value: FormValue): FormField {\n const common = { id: field.id, key: field.key };\n switch (field.type) {\n case \"text\":\n if (typeof value !== \"string\") throw formValueError(field, \"expected text\");\n if (field.required && value.trim().length === 0) throw formValueError(field, \"required text is blank\");\n return { ...common, type: \"text\", value };\n case \"number\":\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw formValueError(field, \"expected a finite number\");\n }\n if (field.min !== null && field.min !== undefined && value < field.min) {\n throw formValueError(field, `must be at least ${field.min}`);\n }\n if (field.max !== null && field.max !== undefined && value > field.max) {\n throw formValueError(field, `must be at most ${field.max}`);\n }\n return { ...common, type: \"number\", value };\n case \"boolean\":\n if (typeof value !== \"boolean\") throw formValueError(field, \"expected a boolean\");\n return { ...common, type: \"boolean\", value };\n case \"date\":\n if (typeof value !== \"number\" || !Number.isSafeInteger(value)) {\n throw formValueError(field, \"expected an integer timestamp\");\n }\n return { ...common, type: \"date\", value };\n case \"geo_location\":\n if (!isValidGeoLocation(value)) throw formValueError(field, \"expected valid coordinates\");\n return { ...common, type: \"geo_location\", value };\n case \"select\": {\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw formValueError(field, \"expected a list of options\");\n }\n const selected = value as string[];\n if (field.required && selected.length === 0) throw formValueError(field, \"at least one option is required\");\n if (new Set(selected).size !== selected.length || selected.some((item) => !field.options.includes(item))) {\n throw formValueError(field, \"contains an unknown or duplicate option\");\n }\n return { ...common, type: \"select\", value: selected };\n }\n }\n}\n\nfunction isEmptyOptionalValue(field: FormSchema, value: FormValue): boolean {\n if (field.required) return false;\n if (field.type === \"text\") return value === \"\";\n if (field.type === \"select\") return Array.isArray(value) && value.length === 0;\n if (field.type === \"geo_location\") {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0);\n }\n return false;\n}\n\nexport function buildFormFields(schema: FormSchema[], values: FormValues): FormField[] {\n const knownKeys = new Set(schema.map((field) => field.key));\n const unknownKey = Object.keys(values).find((key) => !knownKeys.has(key));\n if (unknownKey) throw new Error(`Form field '${unknownKey}' is not defined by the form schema`);\n\n const fields: FormField[] = [];\n for (const field of schema) {\n const value = values[field.key];\n if (value === undefined) {\n if (field.required) throw formValueError(field, \"required value is missing\");\n continue;\n }\n if (isEmptyOptionalValue(field, value)) continue;\n fields.push(buildFormField(field, value));\n }\n return fields;\n}\n\nexport function createFormEntryFromValues(\n form: Pick<Form, \"id\" | \"schema\">,\n values: FormValues,\n): FormEntry {\n return createFormEntry(form.id, buildFormFields(form.schema, values));\n}\n\nexport function getFormBlockType(field: FormSchema): string {\n if (field.key === \"email\") return \"email\";\n if (field.key === \"phone\") return \"phone\";\n if (field.type === \"geo_location\") return \"address\";\n return field.type;\n}\n\nexport function getFormBlockValue(field: FormSchema): unknown {\n if (field.type === \"boolean\") return false;\n if (field.type === \"select\") return [];\n if (field.type === \"geo_location\") return {};\n if (field.type === \"number\" || field.type === \"date\") return undefined;\n return \"\";\n}\n\nexport function formSchemaToBlock(field: FormSchema): Block {\n const min = field.type === \"number\" ? field.min : undefined;\n const max = field.type === \"number\" ? field.max : undefined;\n const options = field.type === \"select\" ? field.options : undefined;\n return {\n id: field.id,\n key: field.key,\n type: getFormBlockType(field),\n properties: {\n isRequired: field.required,\n minValues: field.required ? 1 : 0,\n min,\n max,\n options,\n pattern: field.key === \"email\" ? \"^.+@.+\\\\..+$\" : field.key === \"phone\" ? \"^.{6,20}$\" : undefined,\n },\n value: getFormBlockValue(field),\n };\n}\n\nexport function formatServiceTime(ts: number, tz: string): string {\n return new Date(ts * 1000).toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n timeZone: tz,\n });\n}\n\nexport function formatServiceSlotTime(from: number, to: number, tz: string): string {\n return `${formatServiceTime(from, tz)} - ${formatServiceTime(to, tz)}`;\n}\n\nexport function getSlotsForDate(\n availability: AvailabilityResponse | null,\n dateStr: string,\n providerId?: string | null,\n): { from: number; to: number; providerId: string }[] {\n if (!availability) return [];\n const slots: { from: number; to: number; providerId: string }[] = [];\n for (const provider of availability.providers) {\n if (providerId && provider.provider_id !== providerId) continue;\n const day = provider.days.find((candidate) => candidate.date === dateStr);\n if (!day) continue;\n for (const slot of day.slots) {\n if (slot.spots > 0) slots.push({ from: slot.from, to: slot.to, providerId: provider.provider_id });\n }\n }\n return slots.sort((a, b) => a.from - b.from);\n}\n\nexport function hasAvailableSlotsForDate(\n availability: AvailabilityResponse | null,\n dateStr: string,\n providerId?: string | null,\n): boolean {\n if (!availability) return false;\n return availability.providers.some((provider) => {\n if (providerId && provider.provider_id !== providerId) return false;\n const day = provider.days.find((candidate) => candidate.date === dateStr);\n return !!day?.slots.some((slot) => slot.spots > 0);\n });\n}\n\nexport const SERVICE_WEEKDAYS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport function createServiceInitialState(): ArkyServiceState {\n return {\n service: null,\n availability: null,\n providers: [],\n serviceProviders: [],\n selectedProviderId: null,\n currentMonth: new Date(new Date().getFullYear(), new Date().getMonth(), 1),\n calendar: [],\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n timezone: typeof window !== \"undefined\" ? Intl.DateTimeFormat().resolvedOptions().timeZone : \"UTC\",\n tzGroups: {},\n loading: false,\n weekdays: SERVICE_WEEKDAYS,\n quote: null,\n fetchingQuote: false,\n quoteError: null,\n currency: null,\n dateTimeConfirmed: false,\n availablePaymentMethods: [],\n cartId: null,\n promoCode: null,\n };\n}\n\nexport function normalizeTimezoneGroups(\n groups: { label: string; zones: { label: string; value: string }[] }[],\n): Record<string, { zone: string; name: string }[]> {\n const normalized: Record<string, { zone: string; name: string }[]> = {};\n for (const group of groups) {\n normalized[group.label] = group.zones.map((zone) => ({\n zone: zone.value,\n name: zone.label,\n }));\n }\n return normalized;\n}\n","import { atom, computed, map } from \"nanostores\";\nimport { createStorefront, type ContactSession, type StorefrontIdentifyResult } from \"../index\";\nimport type {\n Address,\n Block,\n Cart,\n EshopCartItem,\n CollectionEntry,\n Form,\n FormEntry,\n FormSubmission,\n Market,\n OrderCheckoutResult,\n OrderQuote,\n PaginatedResponse,\n PaymentMethod,\n Price,\n Product,\n ProductVariant,\n Provider,\n Service,\n ServiceProvider,\n ZoneLocation,\n} from \"../types\";\nimport type {\n AvailabilityResponse,\n OrderCheckoutItemInput,\n FindServiceProvidersParams,\n GetAvailabilityParams,\n GetCollectionParams,\n GetEntriesParams,\n GetEntryParams,\n GetFormParams,\n GetProductParams,\n GetProductsParams,\n GetProviderParams,\n GetProvidersParams,\n GetServiceParams,\n GetServicesParams,\n ProductCheckoutItemInput,\n RequestOptions,\n ServiceCheckoutItemInput,\n SlotRange,\n SubmitFormParams,\n} from \"../types/api\";\nimport type { ExperimentUseResponse, StorefrontAction, TrackActionParams, UseExperimentParams } from \"../api/storefront\";\nimport type {\n ArkyCalendarDay,\n ArkyCmsEntryParams,\n ArkyCartInput,\n ArkyCartStatus,\n ArkyCmsState,\n ArkyEshopState,\n ArkyLastOrder,\n ArkyServiceCartItem,\n ArkyServiceFormGroup,\n ArkyServiceFormState,\n ArkyServiceSlot,\n ArkyServiceState,\n ArkyStoreContext,\n ArkyStoreConfig,\n ArkyStripePaymentMountOptions,\n ArkySubmitFormByKeyParams,\n} from \"./types\";\nimport { createStripeConfirmationTokenController, type StripeConfirmationTokenController } from \"../payments/stripe\";\nimport {\n availableStock,\n createFormEntryFromValues,\n createFormEntry,\n createId,\n createServiceInitialState,\n entitySlug,\n formSchemaToBlock,\n formatServiceSlotTime,\n getSlotsForDate,\n hasAvailableSlotsForDate,\n locationToAddress,\n normalizeTimezoneGroups,\n priceForMarket,\n productName,\n providerName,\n readErrorMessage,\n serviceName,\n toProductCheckoutItems,\n toServiceCheckoutItems,\n} from \"./utils\";\n\nfunction firstFiniteNumber(...values: Array<number | null | undefined>): number | undefined {\n return values.find((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n}\n\nfunction initializeStore(config: ArkyStoreConfig) {\n const client = createStorefront(config);\n const formClients = new Map<string, typeof client>([[client.getStoreId(), client]]);\n const session = atom<ContactSession | null>(client.session);\n const locale = atom(config.locale || client.getLocale());\n const market_key = atom(config.market || client.getMarket());\n const market = computed(session, (value) => value?.market || null);\n const currency = computed(market, (value) => value?.currency || null);\n const allowed_payment_methods = computed(market, (value) => value?.payment_methods || []);\n const payment_config = computed(session, (value) => {\n const store = value?.store;\n const methods = value?.market?.payment_methods || [];\n const hasCreditCard = methods.some((method: PaymentMethod) => method.type === \"credit_card\");\n return {\n provider: store?.payment || null,\n enabled: hasCreditCard && !!store?.payment,\n };\n });\n\n const cart = atom<Cart | null>(null);\n const product_items = atom<EshopCartItem[]>([]);\n const service_items = atom<ArkyServiceCartItem[]>([]);\n const quote = atom<OrderQuote | null>(null);\n const promo_code = atom<string | null>(null);\n const last_order = atom<ArkyLastOrder | null>(null);\n const payment_controller = atom<StripeConfirmationTokenController | null>(null);\n const payment_ready = computed(payment_controller, (value) => value !== null);\n const cart_status = map<ArkyCartStatus>({\n loading: false,\n syncing: false,\n fetching_quote: false,\n processing_checkout: false,\n error: null,\n quote_error: null,\n selected_shipping_method_id: null,\n user_token: null,\n });\n\n function rawProductItemCount(value: Cart | null): number {\n return (value?.items || []).reduce((total, item) => {\n if (item.type !== \"product\") return total;\n return total + (item.quantity || 0);\n }, 0);\n }\n\n function rawServiceItemCount(value: Cart | null): number {\n return (value?.items || []).reduce((total, item) => {\n if (item.type !== \"service\") return total;\n return total + Math.max(1, item.slots?.length || 0);\n }, 0);\n }\n\n const product_item_count = computed([cart, product_items], (cartValue, items) =>\n Math.max(\n rawProductItemCount(cartValue),\n items.reduce((total, item) => total + (item.quantity || 0), 0),\n ),\n );\n const service_item_count = computed([cart, service_items], (cartValue, items) =>\n Math.max(\n rawServiceItemCount(cartValue),\n items.reduce((total, item) => total + Math.max(1, item.slots.length), 0),\n ),\n );\n const item_count = computed([cart, product_item_count, service_item_count], (cartValue, products, services) =>\n Math.max(cartValue?.item_count || 0, products + services),\n );\n const snapshot = computed([cart, product_items, service_items, item_count], (cartValue, products, services, count) => ({\n cart: cartValue,\n product_items: products,\n service_items: services,\n item_count: count,\n }));\n let cartWriteRevision = 0;\n let sessionRequest: Promise<ContactSession | null> | null = null;\n let cartRequest: Promise<Cart> | null = null;\n\n function nextCartWriteRevision(): number {\n cartWriteRevision += 1;\n return cartWriteRevision;\n }\n\n const cms_state = map<ArkyCmsState>({\n entries: {},\n forms: {},\n loading: false,\n error: null,\n });\n const eshop_state = map<ArkyEshopState>({\n products: [],\n services: [],\n providers: [],\n product_cursor: null,\n service_cursor: null,\n provider_cursor: null,\n availability: null,\n loading_products: false,\n loading_services: false,\n loading_providers: false,\n loading_availability: false,\n error: null,\n });\n const service_state = map<ArkyServiceState>(createServiceInitialState());\n const service_form_definitions = new Map<string, Form>();\n const service_form_state = map<ArkyServiceFormState>({\n provider_id: null,\n groups: [],\n loading: false,\n error: null,\n });\n const service_form_groups = computed(service_form_state, (state) => state.groups);\n const service_form_blocks = computed(service_form_groups, (groups) => groups.flatMap((group) => group.blocks));\n\n client.onAuthStateChanged((value) => session.set(value));\n currency.subscribe((value) => service_state.setKey(\"currency\", value));\n session.subscribe((value) => {\n const methods = value?.market?.payment_methods || [];\n if (methods.length && service_state.get().availablePaymentMethods.length === 0) {\n service_state.setKey(\"availablePaymentMethods\", methods);\n }\n });\n\n function currentMarketKey(): string {\n return market_key.get() || client.getMarket() || market.get()?.key || \"\";\n }\n\n function currentLocale(): string {\n return locale.get() || client.getLocale() || \"en\";\n }\n\n function clientForStore(storeId: string): typeof client {\n const existing = formClients.get(storeId);\n if (existing) return existing;\n const scoped = client.forStore(storeId);\n formClients.set(storeId, scoped);\n return scoped;\n }\n\n function currentStripePublishableKey(): string | null {\n const provider = payment_config.get()?.provider;\n return provider?.publishable_key || null;\n }\n\n function currentStripeConnectedAccountId(): string | null {\n const provider = payment_config.get()?.provider;\n return provider?.connected_account_id || null;\n }\n\n function currentPaymentAmount(): number {\n return Math.max(\n 0,\n firstFiniteNumber(quote.get()?.charge_amount, cart.get()?.quote_snapshot?.charge_amount, cart.get()?.quote_snapshot?.total) ?? 0,\n );\n }\n\n function currentPaymentCurrency(): string | null {\n return quote.get()?.money?.currency?.trim() || cart.get()?.quote_snapshot?.money?.currency?.trim() || null;\n }\n\n function setPaymentController(controller: StripeConfirmationTokenController | null): StripeConfirmationTokenController | null {\n const current = payment_controller.get();\n if (current && current !== controller) {\n current.destroy();\n }\n payment_controller.set(controller);\n return controller;\n }\n\n function destroyPaymentController(): void {\n setPaymentController(null);\n }\n\n async function mountStripePayment(\n target: string | HTMLElement,\n options: ArkyStripePaymentMountOptions = {},\n ): Promise<StripeConfirmationTokenController> {\n const publishableKey = options.publishableKey || currentStripePublishableKey();\n if (!publishableKey) {\n throw new Error(\"Stripe publishable key is required to mount card payment\");\n }\n const hasExplicitAmount = options.amount !== undefined;\n const hasExplicitCurrency = Boolean(options.currency?.trim());\n if (hasExplicitAmount !== hasExplicitCurrency) {\n throw new Error(\"Stripe amount and currency must be supplied together\");\n }\n const amount = hasExplicitAmount ? options.amount! : currentPaymentAmount();\n if (!Number.isSafeInteger(amount) || amount <= 0) {\n throw new Error(\"A positive minor-unit payment amount is required to mount card payment\");\n }\n const paymentCurrency = hasExplicitCurrency ? options.currency!.trim() : currentPaymentCurrency();\n if (!paymentCurrency || !/^[a-z]{3}$/i.test(paymentCurrency)) {\n throw new Error(\"An explicit three-letter payment currency is required to mount card payment\");\n }\n const controller = await createStripeConfirmationTokenController({\n publishableKey,\n connectedAccountId: options.connectedAccountId || currentStripeConnectedAccountId() || undefined,\n amount,\n currency: paymentCurrency,\n ...(options.appearance ? { appearance: options.appearance } : {}),\n });\n controller.mount(target);\n setPaymentController(controller);\n return controller;\n }\n\n function updatePaymentController(input: { amount?: number; currency?: string }): void {\n payment_controller.get()?.update(input);\n }\n\n function marketForLocale(value: string): string | null {\n return config.marketForLocale?.(value) || null;\n }\n\n async function ensureSession(): Promise<ContactSession | null> {\n const current = session.get();\n const marketKey = currentMarketKey();\n if (current && (!marketKey || current.market?.key === marketKey)) return current;\n if (!sessionRequest) {\n sessionRequest = identify({ market: marketKey }).finally(() => {\n sessionRequest = null;\n });\n }\n return sessionRequest;\n }\n\n async function identify(params: { email?: string; verify?: boolean; market?: string } = {}): Promise<StorefrontIdentifyResult> {\n if (params.market) setMarket(params.market);\n const result = await client.identify({\n ...params,\n market: params.market || currentMarketKey(),\n });\n session.set({\n contact: result.contact,\n store: result.store,\n market: result.market,\n });\n return result;\n }\n\n async function identifyContactEmailIfMissing(email: string): Promise<ContactSession> {\n const normalizedEmail = email.trim().toLowerCase();\n if (!normalizedEmail) throw new Error(\"Contact email is required\");\n\n const current = session.get();\n if (current?.contact.email === normalizedEmail) return current;\n return identify({ email: normalizedEmail });\n }\n\n function setMarket(key: string): void {\n market_key.set(key);\n client.setMarket(key);\n }\n\n function setLocale(value: string, options: { market?: string } = {}): void {\n locale.set(value);\n client.setLocale(value);\n const nextMarket = options.market || marketForLocale(value);\n if (nextMarket) setMarket(nextMarket);\n }\n\n function setContext(context: ArkyStoreContext): void {\n if (context.locale) {\n setLocale(context.locale, { market: context.market });\n return;\n }\n if (context.market) setMarket(context.market);\n }\n\n async function ensureCart(): Promise<Cart> {\n if (cartRequest) return cartRequest;\n\n cart_status.setKey(\"loading\", true);\n cart_status.setKey(\"error\", null);\n const refreshRevision = cartWriteRevision;\n cartRequest = (async () => {\n await ensureSession();\n const response = await client.eshop.cart.current({\n market: currentMarketKey(),\n });\n await applyCartResponse(response, { ifRevision: refreshRevision });\n return response;\n })();\n\n try {\n return await cartRequest;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Failed to load cart.\"));\n throw error;\n } finally {\n cartRequest = null;\n cart_status.setKey(\"loading\", false);\n }\n }\n\n async function buildProductCartItem(\n item: ProductCheckoutItemInput,\n source: Cart,\n productHint?: Product,\n ): Promise<EshopCartItem | null> {\n try {\n const product =\n productHint?.id === item.product_id\n ? productHint\n : await client.eshop.product.get({ id: item.product_id });\n const variant = product.variants.find((candidate) => candidate.id === item.variant_id);\n if (!variant) return null;\n return {\n id: item.id || createId(\"product\"),\n product_id: product.id,\n variant_id: variant.id,\n product_name: productName(product, currentLocale()),\n product_slug: entitySlug(product, currentLocale()),\n variant_attributes: variant.attributes as EshopCartItem[\"variant_attributes\"],\n requires_shipping: variant.requires_shipping !== false,\n price: priceForMarket(variant.prices, currentMarketKey(), market.get()?.currency),\n quantity: item.quantity,\n added_at: source.created_at ? source.created_at * 1000 : Date.now(),\n max_stock: availableStock(client, variant),\n };\n } catch {\n return null;\n }\n }\n\n async function buildServiceCartItems(items: ServiceCheckoutItemInput[]): Promise<ArkyServiceCartItem[]> {\n const rows: ArkyServiceCartItem[] = [];\n for (const item of items) {\n let service: Service | null = null;\n let provider: Provider | null = null;\n try {\n service = await client.eshop.service.get({ id: item.service_id });\n } catch {}\n try {\n provider = await client.eshop.provider.get({ id: item.provider_id });\n } catch {}\n rows.push({\n id: item.id || createId(\"service\"),\n service_id: item.service_id,\n provider_id: item.provider_id,\n slots: item.slots,\n forms: item.forms || [],\n service_name: service ? serviceName(service, currentLocale()) : item.service_id,\n provider_name: provider ? providerName(provider, currentLocale()) : item.provider_id,\n });\n }\n return rows;\n }\n\n async function applyCartResponse(\n response: Cart,\n options: { ifRevision?: number; productHint?: Product } = {},\n ): Promise<Cart> {\n if (options.ifRevision !== undefined && options.ifRevision !== cartWriteRevision) {\n return cart.get() || response;\n }\n cart.set(response);\n cart_status.setKey(\"user_token\", response.token || null);\n cart_status.setKey(\"selected_shipping_method_id\", response.shipping_method_id || null);\n promo_code.set(response.promo_code || null);\n quote.set(response.quote_snapshot || null);\n\n const items = response.items || [];\n const products = await Promise.all(\n items\n .filter((item): item is ProductCheckoutItemInput => item.type === \"product\")\n .map((item) => buildProductCartItem(item, response, options.productHint)),\n );\n const services = await buildServiceCartItems(items.filter((item): item is ServiceCheckoutItemInput => item.type === \"service\"));\n product_items.set(products.filter((item): item is EshopCartItem => item !== null));\n service_items.set(services);\n return response;\n }\n\n function checkoutItems(input: ArkyCartInput = {}): OrderCheckoutItemInput[] {\n return [\n ...toProductCheckoutItems(input.product_items || product_items.get()),\n ...toServiceCheckoutItems(input.service_items || service_items.get()),\n ];\n }\n\n async function syncCart(input: ArkyCartInput = {}, writeRevision = nextCartWriteRevision()): Promise<Cart> {\n cart_status.setKey(\"syncing\", true);\n cart_status.setKey(\"error\", null);\n try {\n const current = cart.get() || (await ensureCart());\n const response = await client.eshop.cart.update({\n id: current.id,\n market: currentMarketKey(),\n items: checkoutItems(input),\n shipping_address: input.shipping_address,\n billing_address: input.billing_address,\n forms: input.forms,\n promo_code:\n input.promo_code === null\n ? \"\"\n : input.promo_code === undefined\n ? promo_code.get() || undefined\n : input.promo_code,\n payment_method_key: input.payment_method_key === null ? \"\" : input.payment_method_key,\n shipping_method_id:\n input.shipping_method_id === null\n ? \"\"\n : input.shipping_method_id === undefined\n ? cart_status.get().selected_shipping_method_id || undefined\n : input.shipping_method_id,\n });\n await applyCartResponse(response, { ifRevision: writeRevision });\n return response;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Failed to sync cart.\"));\n throw error;\n } finally {\n cart_status.setKey(\"syncing\", false);\n }\n }\n\n async function addProduct(product: Product, variant: ProductVariant, quantity = 1): Promise<Cart> {\n cart_status.setKey(\"error\", null);\n const writeRevision = nextCartWriteRevision();\n try {\n const current = cart.get() || (await ensureCart());\n const response = await client.eshop.cart.addItem({\n id: current.id,\n item: {\n type: \"product\",\n product_id: product.id,\n variant_id: variant.id,\n quantity,\n },\n });\n await applyCartResponse(response, { ifRevision: writeRevision, productHint: product });\n return response;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Failed to add product to cart.\"));\n throw error;\n }\n }\n\n async function setProductQuantity(itemId: string, quantity: number): Promise<Cart> {\n const writeRevision = nextCartWriteRevision();\n const next = product_items.get().map((item) => {\n if (item.id !== itemId) return item;\n const bounded = item.max_stock ? Math.min(Math.max(1, quantity), item.max_stock) : Math.max(1, quantity);\n return { ...item, quantity: bounded };\n });\n product_items.set(next);\n return syncCart({ product_items: next }, writeRevision);\n }\n\n async function removeProduct(itemId: string): Promise<Cart | null> {\n const writeRevision = nextCartWriteRevision();\n const item = product_items.get().find((candidate) => candidate.id === itemId);\n product_items.set(product_items.get().filter((candidate) => candidate.id !== itemId));\n const current = cart.get();\n if (!current || !item) return null;\n const response = await client.eshop.cart.removeItem({\n id: current.id,\n item_id: item.id,\n });\n await applyCartResponse(response, { ifRevision: writeRevision });\n return response;\n }\n\n async function addServiceItem(item: ArkyServiceCartItem): Promise<Cart> {\n const writeRevision = nextCartWriteRevision();\n const next = [...service_items.get(), item];\n service_items.set(next);\n return syncCart({ service_items: next }, writeRevision);\n }\n\n async function removeServiceItem(itemId: string): Promise<Cart> {\n const writeRevision = nextCartWriteRevision();\n const next = service_items.get().filter((item) => item.id !== itemId);\n service_items.set(next);\n return syncCart({ service_items: next }, writeRevision);\n }\n\n async function clearCart(): Promise<Cart | null> {\n const writeRevision = nextCartWriteRevision();\n const current = cart.get();\n clearLocalCart();\n if (!current) return null;\n const response = await client.eshop.cart.clear({ id: current.id });\n await applyCartResponse(response, { ifRevision: writeRevision });\n return response;\n }\n\n function clearLocalCart(): void {\n product_items.set([]);\n service_items.set([]);\n cart.set(null);\n quote.set(null);\n promo_code.set(null);\n cart_status.setKey(\"selected_shipping_method_id\", null);\n }\n\n async function fetchQuote(input: ArkyCartInput = {}): Promise<OrderQuote | null> {\n if (checkoutItems(input).length === 0) {\n quote.set(null);\n return null;\n }\n cart_status.setKey(\"fetching_quote\", true);\n cart_status.setKey(\"quote_error\", null);\n try {\n const current = await syncCart(input);\n const response = await client.eshop.cart.quote({ id: current.id });\n quote.set(response);\n return response;\n } catch (error) {\n quote.set(null);\n cart_status.setKey(\"quote_error\", readErrorMessage(error, \"Failed to fetch quote.\"));\n throw error;\n } finally {\n cart_status.setKey(\"fetching_quote\", false);\n }\n }\n\n async function checkout(input: ArkyCartInput = {}): Promise<OrderCheckoutResult> {\n if (checkoutItems(input).length === 0) throw new Error(\"Cart is empty\");\n cart_status.setKey(\"processing_checkout\", true);\n cart_status.setKey(\"error\", null);\n try {\n const current = await syncCart(input);\n const quoteValue = quote.get();\n const paymentMethodKey = input.payment_method_key || current.payment_method_key || quoteValue?.money?.payment_method_key || undefined;\n let chargeAmount = firstFiniteNumber(quoteValue?.charge_amount, current.quote_snapshot?.charge_amount);\n if (paymentMethodKey === \"credit_card\" && chargeAmount === undefined) {\n const latestQuote = await client.eshop.cart.quote({ id: current.id });\n quote.set(latestQuote);\n chargeAmount = firstFiniteNumber(latestQuote.charge_amount, latestQuote.total);\n }\n if (\n paymentMethodKey === \"credit_card\" &&\n (typeof chargeAmount !== \"number\" || !Number.isSafeInteger(chargeAmount) || chargeAmount < 0)\n ) {\n throw new Error(\"Card checkout requires a non-negative integer charge amount in minor units\");\n }\n const needsConfirmationToken = paymentMethodKey === \"credit_card\" && typeof chargeAmount === \"number\" && chargeAmount > 0;\n let confirmationTokenId: string | undefined;\n let returnUrl = input.return_url;\n const paymentController = input.payment ?? payment_controller.get();\n\n if (needsConfirmationToken) {\n if (!paymentController) throw new Error(\"Payment controller is required for card checkout\");\n returnUrl = returnUrl || (typeof window !== \"undefined\" ? window.location.href : undefined);\n const token = await paymentController.createConfirmationToken({\n return_url: returnUrl,\n billing_details: input.billing_details,\n });\n confirmationTokenId = token.confirmation_token_id;\n returnUrl = token.return_url || returnUrl;\n }\n\n const response = await client.eshop.cart.checkout({\n id: current.id,\n payment_method_key: paymentMethodKey,\n confirmation_token_id: confirmationTokenId,\n return_url: returnUrl,\n });\n\n if (response.payment_action.type === \"handle_next_action\") {\n if (!paymentController) throw new Error(\"Payment controller is required for card authentication\");\n await paymentController.handleNextAction(response.payment_action.client_secret);\n }\n\n const stored: ArkyLastOrder = {\n order_id: response.order_id,\n number: response.number,\n payment_action: response.payment_action,\n payment: response.payment,\n product_items: input.product_items || product_items.get(),\n service_items: input.service_items || service_items.get(),\n shipping_address: input.shipping_address || null,\n billing_address: input.billing_address || null,\n total: response.payment.amount,\n currency: response.payment.currency,\n payment_method_key: paymentMethodKey || null,\n created_at: Date.now(),\n };\n last_order.set(stored);\n if (input.clear_after_checkout !== false) {\n clearLocalCart();\n }\n return response;\n } catch (error) {\n cart_status.setKey(\"error\", readErrorMessage(error, \"Checkout failed.\"));\n throw error;\n } finally {\n cart_status.setKey(\"processing_checkout\", false);\n }\n }\n\n function serviceCalendar(): ArkyCalendarDay[] {\n const state = service_state.get();\n const { currentMonth, selectedDate, availability, selectedProviderId } = state;\n const year = currentMonth.getFullYear();\n const monthIndex = currentMonth.getMonth();\n const first = new Date(year, monthIndex, 1);\n const last = new Date(year, monthIndex + 1, 0);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const cells: ArkyCalendarDay[] = [];\n const pad = (first.getDay() + 6) % 7;\n for (let i = 0; i < pad; i++) {\n cells.push({\n date: new Date(0),\n iso: \"\",\n available: false,\n isSelected: false,\n isInRange: false,\n isToday: false,\n blank: true,\n });\n }\n\n for (let day = 1; day <= last.getDate(); day++) {\n const date = new Date(year, monthIndex, day);\n const iso = `${year}-${String(monthIndex + 1).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n cells.push({\n date,\n iso,\n available: hasAvailableSlotsForDate(availability, iso, selectedProviderId),\n isSelected: iso === selectedDate,\n isInRange: false,\n isToday: date.getTime() === today.getTime(),\n blank: false,\n });\n }\n\n const suffix = (7 - (cells.length % 7)) % 7;\n for (let i = 0; i < suffix; i++) {\n cells.push({\n date: new Date(0),\n iso: \"\",\n available: false,\n isSelected: false,\n isInRange: false,\n isToday: false,\n blank: true,\n });\n }\n\n return cells;\n }\n\n function computeServiceSlots(dateStr: string): ArkyServiceSlot[] {\n const state = service_state.get();\n const { availability, selectedProviderId, timezone, service } = state;\n return getSlotsForDate(availability, dateStr, selectedProviderId).map((slot, index) => ({\n id: `${service?.id || \"service\"}-${slot.from}-${index}`,\n serviceId: service?.id || \"\",\n providerId: slot.providerId,\n from: slot.from,\n to: slot.to,\n timeText: formatServiceSlotTime(slot.from, slot.to, timezone),\n dateText: new Date(slot.from * 1000).toLocaleDateString([], {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n timeZone: timezone,\n }),\n }));\n }\n\n function toServiceCartItem(slots: ArkyServiceSlot[], forms: FormEntry[] = []): ArkyServiceCartItem {\n const orderedSlots = [...slots].sort((left, right) => left.from - right.from || left.to - right.to);\n const [first] = orderedSlots;\n if (!first) throw new Error(\"At least one service slot is required\");\n if (orderedSlots.some((slot) => slot.serviceId !== first.serviceId || slot.providerId !== first.providerId)) {\n throw new Error(\"A booking can only contain slots for one service and provider\");\n }\n if (orderedSlots.some((slot) => !Number.isSafeInteger(slot.from) || !Number.isSafeInteger(slot.to) || slot.from >= slot.to)) {\n throw new Error(\"A booking contains an invalid service slot\");\n }\n for (let index = 1; index < orderedSlots.length; index += 1) {\n if (orderedSlots[index - 1].to !== orderedSlots[index].from) {\n throw new Error(\"A multi-slot booking must contain adjacent slots\");\n }\n }\n return {\n id: createId(\"booking\"),\n service_id: first.serviceId,\n provider_id: first.providerId,\n slots: orderedSlots.map(({ from, to }) => ({ from, to })),\n forms,\n service_name: first.serviceName,\n date_text: first.dateText,\n time_text: first.timeText,\n is_multi_day: orderedSlots.length > 1,\n };\n }\n\n async function syncServiceCart(items: ArkyServiceCartItem[]): Promise<Cart> {\n try {\n return await syncCart({\n product_items: product_items.get(),\n service_items: items,\n });\n } catch (error) {\n service_state.setKey(\"quoteError\", readErrorMessage(error, \"Failed to sync service cart.\"));\n throw error;\n }\n }\n\n function serviceCurrentStepName(): string {\n const state = service_state.get();\n if (!state.service) return \"\";\n if (!state.selectedSlot || !state.dateTimeConfirmed) return \"datetime\";\n return \"review\";\n }\n\n const service_current_step_name = computed(service_state, serviceCurrentStepName);\n const service_can_proceed = computed(service_state, (state) => {\n const step = serviceCurrentStepName();\n if (step === \"datetime\") {\n return !!(state.selectedDate && state.selectedSlot);\n }\n if (step === \"review\") return true;\n return false;\n });\n const service_month_year = computed(service_state, (state) =>\n state.currentMonth.toLocaleString(undefined, {\n month: \"long\",\n year: \"numeric\",\n }),\n );\n const service_chain_start = computed(service_items, (items) => {\n const slots = items.flatMap((item) => item.slots);\n if (!slots.length) return null;\n return Math.max(...slots.map((slot) => slot.to));\n });\n const service_total_steps = computed(service_state, (state) => (state.service ? 2 : 0));\n const service_steps = computed(service_state, () => ({\n 1: { name: \"datetime\" },\n 2: { name: \"review\" },\n }));\n const service_current_step = computed([service_current_step_name, service_steps], (name, steps) => {\n for (const [idx, step] of Object.entries(steps)) {\n if (step.name === name) return Number(idx);\n }\n return 1;\n });\n\n function formatServiceDateDisplay(value: string | null): string {\n if (!value) return \"\";\n return new Date(value).toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n });\n }\n\n function configuredServiceFormIds(relationship: ServiceProvider): string[] {\n const formIds = relationship.forms.map((entry) => entry.form_id.trim());\n if (formIds.some((formId) => !formId) || new Set(formIds).size !== formIds.length) {\n throw new Error(`Service provider ${relationship.provider_id} has blank or duplicate configured form IDs`);\n }\n return formIds;\n }\n\n function resolveServiceProvider(\n state: ArkyServiceState,\n providerId?: string | null,\n ): ServiceProvider | null {\n const serviceId = state.service?.id;\n if (!serviceId) return null;\n const relationships = state.serviceProviders.filter((relationship) => relationship.service_id === serviceId);\n const targetProviderId = providerId ?? state.selectedSlot?.providerId ?? state.selectedProviderId;\n if (targetProviderId) {\n return relationships.find((relationship) => relationship.provider_id === targetProviderId) || null;\n }\n return relationships.length === 1 ? relationships[0] : null;\n }\n\n function clearServiceFormState(error: string | null = null, loading = false): void {\n service_form_state.set({\n provider_id: null,\n groups: [],\n loading,\n error,\n });\n }\n\n function activateServiceProviderForms(\n providerId?: string | null,\n reset = false,\n ): ServiceProvider | null {\n const relationship = resolveServiceProvider(service_state.get(), providerId);\n if (!relationship) {\n clearServiceFormState();\n return null;\n }\n\n const formIds = configuredServiceFormIds(relationship);\n const current = service_form_state.get();\n const currentFormIds = current.groups.map((group) => group.form.id);\n if (\n !reset &&\n current.provider_id === relationship.provider_id &&\n currentFormIds.length === formIds.length &&\n currentFormIds.every((formId, index) => formId === formIds[index])\n ) {\n if (current.error) service_form_state.setKey(\"error\", null);\n return relationship;\n }\n\n const groups: ArkyServiceFormGroup[] = formIds.map((formId) => {\n const form = service_form_definitions.get(formId);\n if (!form) throw new Error(`Configured booking form '${formId}' was not loaded`);\n return {\n form,\n blocks: form.schema.map(formSchemaToBlock),\n };\n });\n service_form_state.set({\n provider_id: relationship.provider_id,\n groups,\n loading: false,\n error: null,\n });\n return relationship;\n }\n\n async function loadServiceFormDefinitions(relationships: ServiceProvider[]): Promise<void> {\n const formIds = [\n ...new Set(relationships.flatMap((relationship) => configuredServiceFormIds(relationship))),\n ];\n if (formIds.length === 0) return;\n\n const forms = await Promise.all(formIds.map((formId) => loadForm({ id: formId })));\n for (let index = 0; index < forms.length; index += 1) {\n const form = forms[index];\n const formId = formIds[index];\n if (form.id !== formId) {\n throw new Error(`Configured booking form '${formId}' resolved to '${form.id}'`);\n }\n }\n for (const form of forms) service_form_definitions.set(form.id, form);\n }\n\n function configuredServiceFormEntries(relationship: ServiceProvider): FormEntry[] {\n const formIds = configuredServiceFormIds(relationship);\n if (formIds.length === 0) return [];\n activateServiceProviderForms(relationship.provider_id);\n const state = service_form_state.get();\n if (\n state.provider_id !== relationship.provider_id ||\n state.groups.length !== formIds.length ||\n state.groups.some((group, index) => group.form.id !== formIds[index])\n ) {\n throw new Error(`Booking forms are not ready for provider ${relationship.provider_id}`);\n }\n return state.groups.map((group) =>\n createFormEntryFromValues(\n group.form,\n Object.fromEntries(group.blocks.map((block) => [block.key, block.value])),\n ),\n );\n }\n\n const service_controller = {\n async initialize(): Promise<void> {\n service_state.setKey(\"tzGroups\", normalizeTimezoneGroups(client.utils.tzGroups));\n await ensureCart();\n const methods = session.get()?.market?.payment_methods || [];\n if (methods.length) service_state.setKey(\"availablePaymentMethods\", methods);\n },\n\n setTimezone(tz: string): void {\n service_state.setKey(\"timezone\", tz);\n service_state.setKey(\"calendar\", serviceCalendar());\n const state = service_state.get();\n if (state.selectedDate) {\n service_state.setKey(\"slots\", computeServiceSlots(state.selectedDate));\n service_state.setKey(\"selectedSlot\", null);\n service_state.setKey(\"quote\", null);\n service_state.setKey(\"quoteError\", null);\n activateServiceProviderForms();\n }\n },\n\n async select(service: Service): Promise<void> {\n service_form_definitions.clear();\n clearServiceFormState(null, true);\n service_state.set({\n ...service_state.get(),\n service: null,\n serviceProviders: [],\n providers: [],\n selectedProviderId: null,\n availability: null,\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n loading: true,\n });\n try {\n const [fullService, serviceProviders] = await Promise.all([\n client.eshop.service.get({ id: service.id }),\n client.eshop.service.findProviders({\n service_id: service.id,\n }),\n ]);\n const providerIds = [...new Set(serviceProviders.map((relationship) => relationship.provider_id))];\n const [providerResults] = await Promise.all([\n Promise.all(providerIds.map((id) => client.eshop.provider.get({ id }).catch(() => null))),\n loadServiceFormDefinitions(serviceProviders),\n ]);\n\n service_state.set({\n ...service_state.get(),\n service: fullService,\n serviceProviders,\n providers: providerResults.filter((provider): provider is Provider => provider !== null),\n selectedProviderId: null,\n availability: null,\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n currentMonth: new Date(new Date().getFullYear(), new Date().getMonth(), 1),\n loading: false,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms();\n await service_controller.loadMonth();\n } catch (error) {\n service_form_definitions.clear();\n clearServiceFormState(readErrorMessage(error, \"Failed to load booking forms.\"));\n service_state.setKey(\"loading\", false);\n throw error;\n }\n },\n\n async loadMonth(): Promise<void> {\n const state = service_state.get();\n if (!state.service) return;\n service_state.setKey(\"loading\", true);\n try {\n const chainedStart = service_chain_start.get();\n let from: number;\n let to: number;\n if (chainedStart) {\n from = chainedStart;\n to = chainedStart;\n } else {\n const month = state.currentMonth;\n from = Math.floor(Date.UTC(month.getFullYear(), month.getMonth(), 1) / 1000);\n to = Math.floor(Date.UTC(month.getFullYear(), month.getMonth() + 1, 1) / 1000);\n }\n const availability = await loadAvailability({\n service_id: state.service.id,\n from,\n to,\n });\n service_state.setKey(\"availability\", availability);\n service_state.setKey(\"calendar\", serviceCalendar());\n } finally {\n service_state.setKey(\"loading\", false);\n }\n },\n\n prevMonth(): void {\n const { currentMonth } = service_state.get();\n service_state.setKey(\"currentMonth\", new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n void service_controller.loadMonth();\n },\n\n nextMonth(): void {\n const { currentMonth } = service_state.get();\n service_state.setKey(\"currentMonth\", new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n void service_controller.loadMonth();\n },\n\n selectProvider(providerId: string | null): void {\n const state = service_state.get();\n if (providerId && !resolveServiceProvider(state, providerId)) {\n throw new Error(`Provider ${providerId} is not configured for the selected service`);\n }\n service_state.set({\n ...state,\n selectedProviderId: providerId,\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms(providerId);\n void service_controller.loadMonth();\n },\n\n selectDate(cell: ArkyCalendarDay): void {\n if (cell.blank || !cell.available) return;\n const state = service_state.get();\n service_state.set({\n ...state,\n selectedDate: cell.iso,\n slots: computeServiceSlots(cell.iso),\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms();\n service_state.setKey(\"calendar\", serviceCalendar());\n },\n\n selectTimeSlot(slot: ArkyServiceSlot | null): void {\n const state = service_state.get();\n if (slot) {\n if (!state.service || slot.serviceId !== state.service.id) {\n throw new Error(\"The selected slot does not belong to the selected service\");\n }\n if (state.selectedProviderId && slot.providerId !== state.selectedProviderId) {\n throw new Error(\"The selected slot does not belong to the selected provider\");\n }\n if (!resolveServiceProvider(state, slot.providerId)) {\n throw new Error(`Provider ${slot.providerId} is not configured for the selected service`);\n }\n }\n service_state.set({\n ...state,\n selectedSlot: slot,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms(slot?.providerId);\n },\n\n resetDateSelection(): void {\n service_state.set({\n ...service_state.get(),\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms();\n },\n\n updateCalendar(): void {\n service_state.setKey(\"calendar\", serviceCalendar());\n },\n\n findFirstAvailable(): void {\n for (const day of service_state.get().calendar) {\n if (!day.blank && day.available) {\n service_controller.selectDate(day);\n return;\n }\n }\n },\n\n async addToCart(explicitSlots?: ArkyServiceSlot[]): Promise<void> {\n const state = service_state.get();\n const slots = explicitSlots || (state.selectedSlot ? [state.selectedSlot] : []);\n if (slots.length === 0) return;\n const first = slots[0];\n if (!state.service || first.serviceId !== state.service.id) {\n throw new Error(\"The booking slots do not belong to the selected service\");\n }\n const relationship = resolveServiceProvider(state, first.providerId);\n if (!relationship) {\n throw new Error(`Provider ${first.providerId} is not configured for the selected service`);\n }\n let forms: FormEntry[];\n try {\n forms = configuredServiceFormEntries(relationship);\n } catch (error) {\n service_form_state.setKey(\"error\", readErrorMessage(error, \"Booking forms are invalid.\"));\n throw error;\n }\n const displayName = serviceName(state.service, currentLocale());\n const enriched = slots.map((slot) => ({\n ...slot,\n serviceName: displayName,\n date: slot.dateText,\n }));\n const nextItems = [...service_items.get(), toServiceCartItem(enriched, forms)];\n await syncServiceCart(nextItems);\n service_state.set({\n ...service_state.get(),\n selectedDate: null,\n slots: [],\n selectedSlot: null,\n dateTimeConfirmed: false,\n quote: null,\n quoteError: null,\n });\n activateServiceProviderForms(service_state.get().selectedProviderId, true);\n service_state.setKey(\"calendar\", serviceCalendar());\n },\n\n async removeFromCart(bookingId: string): Promise<void> {\n await syncServiceCart(service_items.get().filter((item) => item.id !== bookingId));\n },\n\n async clearCart(): Promise<void> {\n await syncServiceCart([]);\n },\n\n async checkout(paymentMethodId?: string, forms: FormEntry[] = []): Promise<OrderCheckoutResult> {\n const state = service_state.get();\n const items = service_items.get();\n if (!items.length) throw new Error(\"Cart is empty\");\n service_state.setKey(\"loading\", true);\n try {\n const result = await checkout({\n service_items: items,\n payment_method_key: paymentMethodId,\n promo_code: state.promoCode || undefined,\n forms,\n });\n service_state.setKey(\"cartId\", cart.get()?.id || null);\n return result;\n } finally {\n service_state.setKey(\"loading\", false);\n }\n },\n\n async fetchQuote(paymentMethodId?: string, promoCode?: string | null): Promise<OrderQuote | null> {\n const state = service_state.get();\n const items = service_items.get();\n if (!items.length) return null;\n service_state.setKey(\"fetchingQuote\", true);\n service_state.setKey(\"quoteError\", null);\n try {\n service_state.setKey(\"promoCode\", promoCode || null);\n const response = await fetchQuote({\n service_items: items,\n payment_method_key: paymentMethodId,\n promo_code: promoCode || undefined,\n });\n service_state.setKey(\"cartId\", cart.get()?.id || null);\n service_state.setKey(\"quote\", response);\n const methods = response?.payment_methods || session.get()?.market?.payment_methods || [];\n if (methods.length) service_state.setKey(\"availablePaymentMethods\", methods);\n return response;\n } catch (error) {\n service_state.setKey(\"quoteError\", readErrorMessage(error, \"Failed to fetch quote.\"));\n return null;\n } finally {\n service_state.setKey(\"fetchingQuote\", false);\n }\n },\n\n getProvidersList(): Provider[] {\n return service_state.get().providers;\n },\n\n prevStep(): void {\n const current = serviceCurrentStepName();\n if (current === \"review\") {\n service_state.setKey(\"dateTimeConfirmed\", false);\n return;\n }\n if (current === \"datetime\") {\n service_state.setKey(\"selectedSlot\", null);\n service_state.setKey(\"dateTimeConfirmed\", false);\n service_state.setKey(\"quote\", null);\n service_state.setKey(\"quoteError\", null);\n activateServiceProviderForms();\n }\n },\n\n nextStep(): void {\n if (serviceCurrentStepName() === \"datetime\" && service_can_proceed.get()) {\n service_state.setKey(\"dateTimeConfirmed\", true);\n }\n },\n\n getServicePrice(): string {\n const state = service_state.get();\n const relationship = resolveServiceProvider(state);\n if (!relationship) return \"\";\n try {\n const price = priceForMarket(relationship.prices, currentMarketKey(), market.get()?.currency);\n return client.utils.formatPrice([price]);\n } catch {\n return \"\";\n }\n },\n\n formatDateDisplay: formatServiceDateDisplay,\n serviceItemsFromSlots(slots: ArkyServiceSlot[], forms: FormEntry[] = []): ArkyServiceCartItem[] {\n return slots.length ? [toServiceCartItem(slots, forms)] : [];\n },\n };\n\n async function loadEntry(params: ArkyCmsEntryParams, options?: RequestOptions): Promise<CollectionEntry> {\n cms_state.setKey(\"loading\", true);\n cms_state.setKey(\"error\", null);\n try {\n const { locale: nextLocale, market: nextMarket, ...entryParams } = params;\n setContext({ locale: nextLocale, market: nextMarket });\n\n if (entryParams.id) {\n const entry = await client.cms.entry.get(entryParams as GetEntryParams, options);\n const cacheKey = entryParams.key || entryParams.id || entry.id;\n cms_state.setKey(\"entries\", {\n ...cms_state.get().entries,\n [cacheKey]: entry,\n });\n return entry;\n }\n\n if (!entryParams.collection_id || !entryParams.key) {\n throw new Error(\"ArkyCmsEntryParams requires id, or collection_id and key\");\n }\n\n const result = await client.cms.entry.find(\n {\n ...entryParams,\n collection_id: entryParams.collection_id,\n key: entryParams.key,\n limit: 1,\n } as GetEntriesParams,\n options,\n );\n const entry = result.items?.[0];\n if (!entry) {\n throw new Error(\"CMS entry not found\");\n }\n cms_state.setKey(\"entries\", {\n ...cms_state.get().entries,\n [entryParams.key]: entry,\n });\n return entry;\n } catch (error) {\n cms_state.setKey(\"error\", readErrorMessage(error, \"Failed to load CMS entry.\"));\n throw error;\n } finally {\n cms_state.setKey(\"loading\", false);\n }\n }\n\n function formCacheKey(params: GetFormParams): string {\n const storeId = params.store_id || client.getStoreId();\n const identifier = params.id ? `id:${params.id}` : params.key ? `key:${params.key}` : \"missing\";\n return `${storeId}:${identifier}`;\n }\n\n async function loadForm(params: GetFormParams, options?: RequestOptions): Promise<Form> {\n cms_state.setKey(\"loading\", true);\n cms_state.setKey(\"error\", null);\n try {\n const storeId = params.store_id || client.getStoreId();\n const formClient = clientForStore(storeId);\n const form = await formClient.cms.form.get({ ...params, store_id: storeId }, options);\n const forms = { ...cms_state.get().forms };\n forms[formCacheKey({ id: form.id, store_id: storeId })] = form;\n forms[formCacheKey({ key: form.key, store_id: storeId })] = form;\n cms_state.setKey(\"forms\", forms);\n return form;\n } catch (error) {\n cms_state.setKey(\"error\", readErrorMessage(error, \"Failed to load CMS form.\"));\n throw error;\n } finally {\n cms_state.setKey(\"loading\", false);\n }\n }\n\n async function ensureFormClient(storeId: string) {\n const formClient = clientForStore(storeId);\n const marketKey = currentMarketKey();\n if (formClient === client) {\n await ensureSession();\n } else if (!formClient.session || (marketKey && formClient.session.market?.key !== marketKey)) {\n await formClient.identify({ market: marketKey });\n }\n return formClient;\n }\n\n async function submitForm(params: SubmitFormParams, options?: RequestOptions): Promise<FormSubmission> {\n const storeId = params.store_id || client.getStoreId();\n const formClient = await ensureFormClient(storeId);\n return formClient.cms.form.submit({ ...params, store_id: storeId }, options);\n }\n\n async function submitFormByKey(\n params: ArkySubmitFormByKeyParams,\n options?: RequestOptions,\n ): Promise<FormSubmission> {\n const storeId = params.store_id || client.getStoreId();\n const form = await loadForm({ key: params.key, store_id: storeId }, options);\n const entry = createFormEntryFromValues(form, params.values);\n return submitForm({ store_id: storeId, form_id: form.id, fields: entry.fields }, options);\n }\n\n async function loadProducts(params: GetProductsParams = {}, options?: RequestOptions): Promise<PaginatedResponse<Product>> {\n eshop_state.setKey(\"loading_products\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.product.find(params, options);\n eshop_state.setKey(\"products\", response.items || []);\n eshop_state.setKey(\"product_cursor\", response.cursor || null);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load products.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_products\", false);\n }\n }\n\n async function loadServices(params: GetServicesParams = {}, options?: RequestOptions): Promise<PaginatedResponse<Service>> {\n eshop_state.setKey(\"loading_services\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.service.find(params, options);\n eshop_state.setKey(\"services\", response.items || []);\n eshop_state.setKey(\"service_cursor\", response.cursor || null);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load services.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_services\", false);\n }\n }\n\n async function loadProviders(params: GetProvidersParams = {}, options?: RequestOptions): Promise<PaginatedResponse<Provider>> {\n eshop_state.setKey(\"loading_providers\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.provider.find(params, options);\n eshop_state.setKey(\"providers\", response.items || []);\n eshop_state.setKey(\"provider_cursor\", response.cursor || null);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load providers.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_providers\", false);\n }\n }\n\n async function loadAvailability(params: GetAvailabilityParams, options?: RequestOptions) {\n eshop_state.setKey(\"loading_availability\", true);\n eshop_state.setKey(\"error\", null);\n try {\n const response = await client.eshop.service.getAvailability(params, options);\n eshop_state.setKey(\"availability\", response);\n return response;\n } catch (error) {\n eshop_state.setKey(\"error\", readErrorMessage(error, \"Failed to load availability.\"));\n throw error;\n } finally {\n eshop_state.setKey(\"loading_availability\", false);\n }\n }\n\n async function useExperiment(params: string | UseExperimentParams): Promise<ExperimentUseResponse> {\n await ensureSession();\n const input = typeof params === \"string\" ? { key: params } : params;\n return client.experiments.use(input);\n }\n\n async function trackAction(params: TrackActionParams): Promise<void> {\n await ensureSession();\n return client.action.track(params);\n }\n\n const cart_store = {\n cart,\n product_items,\n service_items,\n quote_result: quote,\n promo_code,\n last_order,\n status: cart_status,\n product_item_count,\n service_item_count,\n item_count,\n snapshot,\n load: ensureCart,\n refresh: syncCart,\n addProduct,\n setProductQuantity,\n removeProduct,\n addServiceItem,\n removeServiceItem,\n clear: clearCart,\n clearLocal: clearLocalCart,\n quote: fetchQuote,\n checkout,\n payment: {\n controller: payment_controller,\n ready: payment_ready,\n setController: setPaymentController,\n getController: () => payment_controller.get(),\n mountStripe: mountStripePayment,\n update: updatePaymentController,\n destroy: destroyPaymentController,\n },\n applyPromoCode(code: string, input: Omit<ArkyCartInput, \"promo_code\"> = {}) {\n return fetchQuote({ ...input, promo_code: code });\n },\n removePromoCode(input: Omit<ArkyCartInput, \"promo_code\"> = {}) {\n return fetchQuote({ ...input, promo_code: null });\n },\n selectShippingMethod(id: string | null) {\n cart_status.setKey(\"selected_shipping_method_id\", id);\n },\n locationToAddress,\n createFormEntry,\n buildItems: checkoutItems,\n buildProductItems: toProductCheckoutItems,\n buildServiceItems: toServiceCheckoutItems,\n };\n\n const product_store = {\n get: (params: GetProductParams, options?: RequestOptions) => client.eshop.product.get(params, options),\n list: loadProducts,\n };\n\n const service_store = {\n get: (params: GetServiceParams, options?: RequestOptions) => client.eshop.service.get(params, options),\n list: loadServices,\n listProviders: (params: FindServiceProvidersParams, options?: RequestOptions) => client.eshop.service.findProviders(params, options),\n getAvailability: loadAvailability,\n state: service_state,\n form_state: service_form_state,\n form_groups: service_form_groups,\n form_blocks: service_form_blocks,\n current_step_name: service_current_step_name,\n can_proceed: service_can_proceed,\n month_year: service_month_year,\n chain_start: service_chain_start,\n total_steps: service_total_steps,\n steps: service_steps,\n current_step: service_current_step,\n initialize: service_controller.initialize,\n select: service_controller.select,\n setTimezone: service_controller.setTimezone,\n loadMonth: service_controller.loadMonth,\n prevMonth: service_controller.prevMonth,\n nextMonth: service_controller.nextMonth,\n selectProvider: service_controller.selectProvider,\n selectDate: service_controller.selectDate,\n selectTimeSlot: service_controller.selectTimeSlot,\n resetDateSelection: service_controller.resetDateSelection,\n updateCalendar: service_controller.updateCalendar,\n findFirstAvailable: service_controller.findFirstAvailable,\n addToCart: service_controller.addToCart,\n removeFromCart: service_controller.removeFromCart,\n clearCart: service_controller.clearCart,\n getProvidersList: service_controller.getProvidersList,\n prevStep: service_controller.prevStep,\n nextStep: service_controller.nextStep,\n getServicePrice: service_controller.getServicePrice,\n formatDateDisplay: service_controller.formatDateDisplay,\n serviceItemsFromSlots: service_controller.serviceItemsFromSlots,\n };\n\n return {\n client,\n session,\n market,\n market_key,\n locale,\n currency,\n allowed_payment_methods,\n payment_config,\n identify,\n identifyContactEmailIfMissing,\n verify: client.verify,\n me: client.me,\n logout: client.logout,\n onAuthStateChanged: client.onAuthStateChanged,\n get isAuthenticated() {\n return client.isAuthenticated;\n },\n setMarket,\n setLocale,\n setContext,\n getStoreId: client.getStoreId,\n getMarket: currentMarketKey,\n getLocale: currentLocale,\n cms: {\n state: cms_state,\n collection: {\n get: (params: GetCollectionParams, options?: RequestOptions) => client.cms.collection.get(params, options),\n },\n entry: {\n get: loadEntry,\n find: (params: GetEntriesParams, options?: RequestOptions) => client.cms.entry.find(params, options),\n },\n form: {\n get: loadForm,\n submit: submitForm,\n submitByKey: submitFormByKey,\n },\n taxonomy: client.cms.taxonomy,\n },\n eshop: {\n state: eshop_state,\n product: product_store,\n service: service_store,\n provider: {\n get: (params: GetProviderParams, options?: RequestOptions) => client.eshop.provider.get(params, options),\n list: loadProviders,\n },\n order: client.eshop.order,\n cart: cart_store,\n },\n crm: client.crm,\n action: {\n track(params: TrackActionParams) {\n return trackAction(params);\n },\n pageView(payload: Record<string, unknown> = {}) {\n return trackAction({ key: \"page.view\", payload });\n },\n state: atom<StorefrontAction | null>(null),\n },\n experiments: {\n use: useExperiment,\n },\n support: client.support,\n store: client.store,\n utils: client.utils,\n };\n}\n\ntype InitializedStoreBase = ReturnType<typeof initializeStore>;\n\nexport type InitializedStore = InitializedStoreBase & {\n forStore(storeId: string): InitializedStore;\n};\n\nexport function initialize(config: ArkyStoreConfig): InitializedStore {\n const stores = new Map<string, InitializedStore>();\n\n const createScope = (scopeConfig: ArkyStoreConfig): InitializedStore => {\n const existing = stores.get(scopeConfig.storeId);\n if (existing) return existing;\n\n const store = initializeStore(scopeConfig) as InitializedStore;\n stores.set(scopeConfig.storeId, store);\n Object.defineProperty(store, \"forStore\", {\n enumerable: true,\n configurable: false,\n writable: false,\n value: (storeId: string) =>\n createScope({\n ...config,\n storeId,\n market: store.getMarket(),\n locale: store.getLocale(),\n }),\n });\n return store;\n };\n\n return createScope(config);\n}\n\nexport type ArkyStore = ReturnType<typeof initialize>;\nexport type ArkyCartStore = ArkyStore[\"eshop\"][\"cart\"];\nexport type ArkyServiceStore = ArkyStore[\"eshop\"][\"service\"];\n"]}
|