@01.software/sdk 0.56.1 → 0.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +186 -0
- package/README.md +174 -91
- package/dist/client.cjs +136 -7
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +6 -6
- package/dist/client.d.ts +6 -6
- package/dist/client.js +136 -7
- package/dist/client.js.map +1 -1
- package/dist/{collection-client-DxuBDso_.d.cts → collection-client-B7rsTtVj.d.cts} +6 -6
- package/dist/{collection-client-Bmr53saa.d.ts → collection-client-C2sMvfme.d.ts} +6 -6
- package/dist/{const-Cv1DCsp6.d.cts → const-CRxPTDGt.d.ts} +2 -2
- package/dist/{const-BKUqg96Q.d.ts → const-D6ZRQLxI.d.cts} +2 -2
- package/dist/{index-DFHLLqYu.d.ts → index-1auUEYrl.d.ts} +3 -3
- package/dist/{index-CGsT4AQ8.d.cts → index-Bbpf5t-l.d.cts} +3 -3
- package/dist/index.cjs +139 -205
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -9
- package/dist/index.d.ts +15 -9
- package/dist/index.js +139 -205
- package/dist/index.js.map +1 -1
- package/dist/{payload-types-Bk-duc5k.d.cts → payload-types-BnIET0xU.d.cts} +262 -328
- package/dist/{payload-types-Bk-duc5k.d.ts → payload-types-BnIET0xU.d.ts} +262 -328
- package/dist/query.cjs +48 -2
- package/dist/query.cjs.map +1 -1
- package/dist/query.d.cts +5 -5
- package/dist/query.d.ts +5 -5
- package/dist/query.js +48 -2
- package/dist/query.js.map +1 -1
- package/dist/realtime.d.cts +2 -2
- package/dist/realtime.d.ts +2 -2
- package/dist/server.cjs +459 -7
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +13 -8
- package/dist/server.d.ts +13 -8
- package/dist/server.js +459 -7
- package/dist/server.js.map +1 -1
- package/dist/{types-D4mjGFj4.d.ts → types-D1y4TgQm.d.ts} +2 -2
- package/dist/{types-CEK8uTvU.d.ts → types-DnRC3nLG.d.ts} +256 -9
- package/dist/{types-CNdpj2fI.d.cts → types-Dp1oYpD3.d.cts} +2 -2
- package/dist/{types-Dhk5NX7Z.d.cts → types-Dzn0LD2N.d.cts} +256 -9
- package/dist/ui/form.d.cts +1 -1
- package/dist/ui/form.d.ts +1 -1
- package/dist/ui/video.cjs +4 -2
- package/dist/ui/video.cjs.map +1 -1
- package/dist/ui/video.d.cts +4 -2
- package/dist/ui/video.d.ts +4 -2
- package/dist/ui/video.js +4 -2
- package/dist/ui/video.js.map +1 -1
- package/dist/webhook.d.cts +5 -5
- package/dist/webhook.d.ts +5 -5
- package/package.json +8 -28
- package/dist/analytics/react.cjs +0 -344
- package/dist/analytics/react.cjs.map +0 -1
- package/dist/analytics/react.d.cts +0 -24
- package/dist/analytics/react.d.ts +0 -24
- package/dist/analytics/react.js +0 -319
- package/dist/analytics/react.js.map +0 -1
- package/dist/analytics.cjs +0 -238
- package/dist/analytics.cjs.map +0 -1
- package/dist/analytics.d.cts +0 -39
- package/dist/analytics.d.ts +0 -39
- package/dist/analytics.js +0 -215
- package/dist/analytics.js.map +0 -1
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/query/get-query-client.ts","../src/core/query/query-keys.ts","../src/core/query/collection-hooks.ts","../src/core/query/customer-hooks.ts","../src/core/errors.ts","../src/core/query/query-hooks.ts","../src/core/internal/utils/query-string.ts","../../../internal/http-contracts/src/index.ts","../src/core/api/endpoints.ts","../src/core/query/realtime.ts","../src/core/query/query-client.ts"],"sourcesContent":["import {\n isServer,\n QueryClient,\n defaultShouldDehydrateQuery,\n} from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n // Infinite staleTime: server-fetched data persists until explicitly invalidated.\n // For browser clients needing fresher data, override per-query:\n // useQuery({ ..., staleTime: 5 * 60 * 1000 })\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) ||\n query.state.status === 'pending',\n shouldRedactErrors: () => false,\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined\nlet browserStorefrontQueryClient: QueryClient | undefined\n\n/** Default React Query client (SSR hydration-friendly: infinite staleTime). */\nexport function getQueryClient() {\n if (isServer) {\n return makeQueryClient()\n }\n if (!browserQueryClient) {\n browserQueryClient = makeQueryClient()\n }\n return browserQueryClient\n}\n\nconst STOREFRONT_STALE_TIME_MS = 60_000\n\nfunction makeStorefrontQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: STOREFRONT_STALE_TIME_MS,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) ||\n query.state.status === 'pending',\n shouldRedactErrors: () => false,\n },\n },\n })\n}\n\n/**\n * Browser storefront client: refetches catalog data after ~1 minute instead of\n * keeping SSR data fresh forever. Use with `createQueryHooks(client, queryClient)`.\n */\nexport function getStorefrontQueryClient() {\n if (isServer) {\n return makeStorefrontQueryClient()\n }\n if (!browserStorefrontQueryClient) {\n browserStorefrontQueryClient = makeStorefrontQueryClient()\n }\n return browserStorefrontQueryClient\n}\n","import type { ServerCollection, ApiQueryOptions } from '../client/types'\nimport type { ProductDetailParams, ProductListingPageParams } from '../api'\nimport type { ProductListingGroupsQueryOptions } from './query-hooks'\n\ntype ProductListingPageKeyParams = {\n mode: 'catalog' | 'full'\n market?: string\n locale?: ProductListingPageParams['locale']\n fallbackLocale?: ProductListingPageParams['fallbackLocale']\n page?: number\n limit?: number\n search?: string\n sort?: ProductListingPageParams['sort']\n filters?: NonNullable<ProductListingPageParams['filters']>\n basePath?: string\n trailingSlash?: boolean\n emit?: ProductListingPageParams['emit']\n preferCompleteVariantFromHint?: ProductListingPageParams['preferCompleteVariantFromHint']\n}\n\nfunction nonEmpty(values: string[] | undefined): string[] | undefined {\n return values?.length ? values : undefined\n}\n\nfunction canonicalProductListingPageParams(\n params: ProductListingPageParams = {},\n limit?: number,\n): ProductListingPageKeyParams {\n const filters = params.filters\n const canonicalFilters: NonNullable<ProductListingPageParams['filters']> = {}\n const ids = nonEmpty(filters?.ids)\n if (ids) canonicalFilters.ids = ids\n const slugs = nonEmpty(filters?.slugs)\n if (slugs) canonicalFilters.slugs = slugs\n const handles = nonEmpty(filters?.handles)\n if (handles) canonicalFilters.handles = handles\n const categoryIds = nonEmpty(filters?.categoryIds)\n if (categoryIds) canonicalFilters.categoryIds = categoryIds\n const tagIds = nonEmpty(filters?.tagIds)\n if (tagIds) canonicalFilters.tagIds = tagIds\n if (filters?.price?.min != null || filters?.price?.max != null) {\n canonicalFilters.price = {\n ...(filters.price.min != null && { min: filters.price.min }),\n ...(filters.price.max != null && { max: filters.price.max }),\n }\n }\n if (filters?.availableForSale != null) {\n canonicalFilters.availableForSale = filters.availableForSale\n }\n\n const search = params.search?.trim()\n const market = params.market?.trim()\n return {\n mode: params.mode ?? 'catalog',\n ...(market && { market }),\n ...(params.locale != null && { locale: params.locale }),\n ...(params.fallbackLocale !== undefined && {\n fallbackLocale: params.fallbackLocale,\n }),\n ...(params.page != null && { page: params.page }),\n ...(limit != null\n ? { limit }\n : params.limit != null\n ? { limit: params.limit }\n : {}),\n ...(search && { search }),\n ...(params.sort != null && { sort: params.sort }),\n ...(Object.keys(canonicalFilters).length > 0 && {\n filters: canonicalFilters,\n }),\n ...(params.basePath != null && { basePath: params.basePath }),\n ...(params.trailingSlash != null && {\n trailingSlash: params.trailingSlash,\n }),\n ...(params.emit != null && { emit: params.emit }),\n ...(params.preferCompleteVariantFromHint != null && {\n preferCompleteVariantFromHint: params.preferCompleteVariantFromHint,\n }),\n }\n}\n\nfunction canonicalMarket(value: string | undefined): string | undefined {\n const market = value?.trim()\n return market || undefined\n}\n\nexport function canonicalProductListingGroupsQueryOptions(\n options?: ProductListingGroupsQueryOptions,\n limit?: number,\n): ProductListingGroupsQueryOptions | undefined {\n const { market: rawMarket, ...rest } = options ?? {}\n const market = canonicalMarket(rawMarket)\n const canonical: ProductListingGroupsQueryOptions = {\n ...rest,\n ...(limit !== undefined ? { limit } : {}),\n ...(market ? { market } : {}),\n }\n return Object.keys(canonical).length > 0 ? canonical : undefined\n}\n\nfunction canonicalProductDetailParams(\n params: ProductDetailParams,\n): ProductDetailParams {\n const market = params.market?.trim()\n const localeOptions = {\n ...(params.locale != null && { locale: params.locale }),\n ...(params.fallbackLocale !== undefined && {\n fallbackLocale: params.fallbackLocale,\n }),\n }\n if ('slug' in params) {\n return {\n slug: params.slug,\n ...(market ? { market } : {}),\n ...localeOptions,\n }\n }\n return {\n id: params.id,\n ...(market ? { market } : {}),\n ...localeOptions,\n }\n}\n\nexport function collectionKeys<T extends ServerCollection>(collection: T) {\n return {\n all: [collection] as const,\n lists: () => [collection, 'list'] as const,\n list: (options?: ApiQueryOptions) => [collection, 'list', options] as const,\n details: () => [collection, 'detail'] as const,\n detail: (id: string, options?: ApiQueryOptions) =>\n [collection, 'detail', id, options] as const,\n infinites: () => [collection, 'infinite'] as const,\n infinite: (options?: Omit<ApiQueryOptions, 'page'>, pageSize?: number) =>\n [\n collection,\n 'infinite',\n pageSize === undefined ? options : { ...options, limit: pageSize },\n ] as const,\n }\n}\n\nexport const customerKeys = {\n all: ['customer'] as const,\n me: () => ['customer', 'me'] as const,\n}\n\nexport const productKeys = {\n listingGroups: (options?: ProductListingGroupsQueryOptions) =>\n [\n 'products',\n 'listing-groups',\n 'list',\n canonicalProductListingGroupsQueryOptions(options),\n ] as const,\n listingGroupsCatalog: (options?: ProductListingGroupsQueryOptions) =>\n [\n 'products',\n 'listing-groups',\n 'catalog',\n canonicalProductListingGroupsQueryOptions(options),\n ] as const,\n listingGroupsInfinite: (\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>,\n pageSize?: number,\n ) =>\n [\n 'products',\n 'listing-groups',\n 'infinite',\n canonicalProductListingGroupsQueryOptions(options, pageSize),\n ] as const,\n listingGroupsCatalogInfinite: (\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>,\n pageSize?: number,\n ) =>\n [\n 'products',\n 'listing-groups',\n 'catalog',\n 'infinite',\n canonicalProductListingGroupsQueryOptions(options, pageSize),\n ] as const,\n listingPage: (params?: ProductListingPageParams) =>\n [\n 'products',\n 'listing-page',\n canonicalProductListingPageParams(params),\n ] as const,\n listingPageInfinite: (\n params?: Omit<ProductListingPageParams, 'page' | 'limit'>,\n pageSize?: number,\n ) =>\n [\n 'products',\n 'listing-page',\n 'infinite',\n canonicalProductListingPageParams(\n params as ProductListingPageParams | undefined,\n pageSize,\n ),\n ] as const,\n detail: (params: ProductDetailParams) =>\n ['products', 'detail', canonicalProductDetailParams(params)] as const,\n detailAll: () => ['products', 'detail'] as const,\n}\n","import {\n QueryClient,\n useQuery as useQueryOriginal,\n useSuspenseQuery as useSuspenseQueryOriginal,\n useInfiniteQuery as useInfiniteQueryOriginal,\n useSuspenseInfiniteQuery as useSuspenseInfiniteQueryOriginal,\n useMutation as useMutationOriginal,\n} from '@tanstack/react-query'\nimport type {\n InfiniteData,\n UseInfiniteQueryResult,\n UseQueryResult,\n UseSuspenseInfiniteQueryResult,\n UseSuspenseQueryResult,\n} from '@tanstack/react-query'\nimport type {\n PublicCollection,\n ServerCollection,\n ApiQueryOptions,\n PublicReadQueryOptions,\n PayloadFindResponse,\n PayloadMutationResponse,\n} from '../client/types'\nimport { type CollectionClient, type CollectionType } from '../collection'\nimport { SDKError } from '../internal/errors'\nimport { collectionKeys } from './query-keys'\n\n// ============================================================================\n// Query Params Types\n// ============================================================================\n\ntype CollectionReadOptions<TCollection extends ServerCollection> =\n [TCollection] extends [PublicCollection]\n ? PublicReadQueryOptions\n : ApiQueryOptions\n\nexport interface CollectionQueryParams<\n T extends ServerCollection,\n Options extends ApiQueryOptions = ApiQueryOptions,\n> {\n collection: T\n options?: Options\n}\n\nexport interface CollectionDetailQueryParams<\n T extends ServerCollection,\n Options extends ApiQueryOptions = ApiQueryOptions,\n> {\n collection: T\n id: string\n options?: Options\n}\n\nexport interface CollectionInfiniteQueryParams<\n T extends ServerCollection,\n Options extends ApiQueryOptions = ApiQueryOptions,\n> {\n collection: T\n options?: Omit<Options, 'page'>\n pageSize?: number\n}\n\n// ============================================================================\n// Shared option types\n// ============================================================================\n\nexport interface QueryOptions<TQueryFnData = unknown, TData = TQueryFnData> {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean | 'always'\n refetchInterval?: number | false\n retry?: boolean | number\n select?: (data: TQueryFnData) => TData\n placeholderData?:\n | TQueryFnData\n | ((previousData: TData | undefined) => TQueryFnData | undefined)\n initialData?: TQueryFnData | (() => TQueryFnData)\n initialDataUpdatedAt?: number | (() => number | undefined)\n}\n\nexport type SuspenseQueryOptions<\n TQueryFnData = unknown,\n TData = TQueryFnData,\n> = Omit<QueryOptions<TQueryFnData, TData>, 'enabled' | 'placeholderData'>\n\n// placeholderData/initialData omitted: InfiniteData<T> structure is complex to construct\nexport interface InfiniteQueryOptions<\n TQueryFnData = unknown,\n TData = InfiniteData<TQueryFnData>,\n> {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean | 'always'\n refetchInterval?: number | false\n retry?: boolean | number\n select?: (data: InfiniteData<TQueryFnData>) => TData\n}\n\nexport type SuspenseInfiniteQueryOptions<\n TQueryFnData = unknown,\n TData = InfiniteData<TQueryFnData>,\n> = Omit<InfiniteQueryOptions<TQueryFnData, TData>, 'enabled'>\n\ninterface MutationCallbacks<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: SDKError) => void\n onSettled?: () => void\n}\n\n// ============================================================================\n// Product detail invalidation\n// ============================================================================\n\nconst PRODUCT_DETAIL_INVALIDATING_COLLECTIONS = new Set([\n 'products',\n 'product-variants',\n 'product-options',\n 'product-option-values',\n 'product-categories',\n 'product-tags',\n 'product-collections',\n 'brands',\n 'brand-logos',\n 'images',\n])\n\n// ============================================================================\n// Collection Hooks Mixin\n// ============================================================================\n\nconst DEFAULT_PAGE_SIZE = 20\n\nexport class CollectionHooks<TCollection extends ServerCollection = PublicCollection> {\n protected queryClient: QueryClient\n protected collectionClient: CollectionClient<TCollection>\n\n constructor(\n queryClient: QueryClient,\n collectionClient: CollectionClient<TCollection>,\n ) {\n this.queryClient = queryClient\n this.collectionClient = collectionClient\n }\n\n // ===== useQuery =====\n useQuery<\n T extends TCollection,\n TData = PayloadFindResponse<CollectionType<T>>,\n >(\n params: CollectionQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: QueryOptions<PayloadFindResponse<CollectionType<T>>, TData>,\n ): UseQueryResult<TData> {\n const { collection, options: queryOptions } = params\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .find(queryOptions)\n },\n ...restOptions,\n // NonFunctionGuard<T> incompatible with generic union types — safe cast\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n // ===== useSuspenseQuery =====\n useSuspenseQuery<\n T extends TCollection,\n TData = PayloadFindResponse<CollectionType<T>>,\n >(\n params: CollectionQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: SuspenseQueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >,\n ): UseSuspenseQueryResult<TData> {\n const { collection, options: queryOptions } = params\n\n return useSuspenseQueryOriginal({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .find(queryOptions)\n },\n ...options,\n })\n }\n\n // ===== useQueryById =====\n useQueryById<T extends TCollection, TData = CollectionType<T>>(\n params: CollectionDetailQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: QueryOptions<CollectionType<T>, TData>,\n ): UseQueryResult<TData> {\n const { collection, id, options: queryOptions } = params\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n CollectionType<T>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .findById(id, queryOptions)\n },\n ...restOptions,\n // NonFunctionGuard<T> incompatible with generic union types — safe cast\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n // ===== useSuspenseQueryById =====\n useSuspenseQueryById<T extends TCollection, TData = CollectionType<T>>(\n params: CollectionDetailQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: SuspenseQueryOptions<CollectionType<T>, TData>,\n ): UseSuspenseQueryResult<TData> {\n const { collection, id, options: queryOptions } = params\n\n return useSuspenseQueryOriginal({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .findById(id, queryOptions)\n },\n ...options,\n })\n }\n\n // ===== useInfiniteQuery =====\n useInfiniteQuery<\n T extends TCollection,\n TData = InfiniteData<PayloadFindResponse<CollectionType<T>>>,\n >(\n params: CollectionInfiniteQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: InfiniteQueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n const { collection, options: queryOptions } = params\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? DEFAULT_PAGE_SIZE\n\n return useInfiniteQueryOriginal({\n queryKey: collectionKeys(collection).infinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionClient\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: PayloadFindResponse<CollectionType<T>>) => {\n return lastPage.hasNextPage ? lastPage.nextPage : undefined\n },\n ...options,\n })\n }\n\n // ===== useSuspenseInfiniteQuery =====\n useSuspenseInfiniteQuery<\n T extends TCollection,\n TData = InfiniteData<PayloadFindResponse<CollectionType<T>>>,\n >(\n params: CollectionInfiniteQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: SuspenseInfiniteQueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >,\n ): UseSuspenseInfiniteQueryResult<TData> {\n const { collection, options: queryOptions } = params\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? DEFAULT_PAGE_SIZE\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: collectionKeys(collection).infinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionClient\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: PayloadFindResponse<CollectionType<T>>) => {\n return lastPage.hasNextPage ? lastPage.nextPage : undefined\n },\n ...options,\n })\n }\n\n // ===== prefetchQuery =====\n async prefetchQuery<T extends TCollection>(\n params: CollectionQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: { staleTime?: number },\n ) {\n const { collection, options: queryOptions } = params\n\n return this.queryClient.prefetchQuery({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .find(queryOptions)\n },\n ...options,\n })\n }\n\n // ===== prefetchQueryById =====\n async prefetchQueryById<T extends TCollection>(\n params: CollectionDetailQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: { staleTime?: number },\n ) {\n const { collection, id, options: queryOptions } = params\n\n return this.queryClient.prefetchQuery({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .findById(id, queryOptions)\n },\n ...options,\n })\n }\n\n // ===== prefetchInfiniteQuery =====\n async prefetchInfiniteQuery<T extends TCollection>(\n params: CollectionInfiniteQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: { pages?: number; staleTime?: number },\n ) {\n const { collection, options: queryOptions } = params\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? DEFAULT_PAGE_SIZE\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: collectionKeys(collection).infinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionClient\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: PayloadFindResponse<CollectionType<T>>) => {\n return lastPage.hasNextPage ? lastPage.nextPage : undefined\n },\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n // ===== Mutation Hooks =====\n\n useCreate<T extends TCollection>(\n params: { collection: T },\n options?: MutationCallbacks<PayloadMutationResponse<CollectionType<T>>>,\n ) {\n const { collection } = params\n\n return useMutationOriginal<\n PayloadMutationResponse<CollectionType<T>>,\n SDKError,\n {\n data: Partial<CollectionType<T>>\n file?: File | Blob\n filename?: string\n }\n >({\n mutationFn: async (variables) => {\n return await this.collectionClient\n .from(collection)\n .create(\n variables.data,\n variables.file\n ? { file: variables.file, filename: variables.filename }\n : undefined,\n )\n },\n onSuccess: (data) => {\n this.queryClient.invalidateQueries({\n queryKey: collectionKeys(collection).all,\n })\n if (PRODUCT_DETAIL_INVALIDATING_COLLECTIONS.has(collection)) {\n this.queryClient.invalidateQueries({ queryKey: ['products', 'detail'] })\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n useUpdate<T extends TCollection>(\n params: { collection: T },\n options?: MutationCallbacks<PayloadMutationResponse<CollectionType<T>>>,\n ) {\n const { collection } = params\n\n return useMutationOriginal<\n PayloadMutationResponse<CollectionType<T>>,\n SDKError,\n {\n id: string\n data: Partial<CollectionType<T>>\n file?: File | Blob\n filename?: string\n }\n >({\n mutationFn: async (variables) => {\n return await this.collectionClient\n .from(collection)\n .update(\n variables.id,\n variables.data,\n variables.file\n ? { file: variables.file, filename: variables.filename }\n : undefined,\n )\n },\n onSuccess: (data) => {\n this.queryClient.invalidateQueries({\n queryKey: collectionKeys(collection).all,\n })\n if (PRODUCT_DETAIL_INVALIDATING_COLLECTIONS.has(collection)) {\n this.queryClient.invalidateQueries({ queryKey: ['products', 'detail'] })\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n useRemove<T extends TCollection>(\n params: { collection: T },\n options?: MutationCallbacks<CollectionType<T>>,\n ) {\n const { collection } = params\n\n return useMutationOriginal<CollectionType<T>, SDKError, string>({\n mutationFn: async (id) => {\n return await this.collectionClient.from(collection).remove(id)\n },\n onSuccess: (data) => {\n this.queryClient.invalidateQueries({\n queryKey: collectionKeys(collection).all,\n })\n if (PRODUCT_DETAIL_INVALIDATING_COLLECTIONS.has(collection)) {\n this.queryClient.invalidateQueries({ queryKey: ['products', 'detail'] })\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n // ===== Cache Utilities =====\n\n invalidateQueries<T extends TCollection>(\n collection: T,\n type?: 'list' | 'detail' | 'infinite',\n ) {\n const queryKey = type ? [collection, type] : [collection]\n return this.queryClient.invalidateQueries({ queryKey })\n }\n\n getQueryData<T extends TCollection>(\n collection: T,\n type: 'list',\n options?: ApiQueryOptions,\n ): PayloadFindResponse<CollectionType<T>> | undefined\n getQueryData<T extends TCollection>(\n collection: T,\n type: 'detail',\n id: string,\n options?: ApiQueryOptions,\n ): CollectionType<T> | null | undefined\n getQueryData<T extends TCollection>(\n collection: T,\n type: 'list' | 'detail',\n idOrOptions?: string | ApiQueryOptions,\n options?: ApiQueryOptions,\n ) {\n if (type === 'list') {\n return this.queryClient.getQueryData(\n collectionKeys(collection).list(idOrOptions as ApiQueryOptions),\n )\n }\n return this.queryClient.getQueryData(\n collectionKeys(collection).detail(idOrOptions as string, options),\n )\n }\n\n setQueryData<T extends TCollection>(\n collection: T,\n type: 'list',\n data: PayloadFindResponse<CollectionType<T>>,\n options?: ApiQueryOptions,\n ): void\n setQueryData<T extends TCollection>(\n collection: T,\n type: 'detail',\n id: string,\n data: CollectionType<T> | null,\n options?: ApiQueryOptions,\n ): void\n setQueryData<T extends TCollection>(\n collection: T,\n type: 'list' | 'detail',\n dataOrId: PayloadFindResponse<CollectionType<T>> | string,\n dataOrOptions?: CollectionType<T> | null | ApiQueryOptions,\n options?: ApiQueryOptions,\n ) {\n if (type === 'list') {\n this.queryClient.setQueryData(\n collectionKeys(collection).list(dataOrOptions as ApiQueryOptions),\n dataOrId as PayloadFindResponse<CollectionType<T>>,\n )\n } else {\n this.queryClient.setQueryData(\n collectionKeys(collection).detail(dataOrId as string, options),\n dataOrOptions as CollectionType<T> | null,\n )\n }\n }\n}\n","import {\n QueryClient,\n useQuery as useQueryOriginal,\n useMutation as useMutationOriginal,\n} from '@tanstack/react-query'\nimport type { CustomerAuth } from '../customer/customer-auth'\nimport type {\n CustomerAuthResponse,\n CustomerRefreshResponse,\n CustomerProfile,\n CustomerRegisterData,\n CustomerLoginData,\n UpdateProfileData,\n} from '../customer/types'\nimport { createConfigError, SDKError } from '../internal/errors'\nimport { customerKeys } from './query-keys'\n\n// ============================================================================\n// Mutation helper\n// ============================================================================\n\ninterface MutationCallbacks<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: SDKError) => void\n onSettled?: () => void\n}\n\nfunction createMutation<TData, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n callbacks?: MutationCallbacks<TData>,\n onSuccessExtra?: (data: TData) => void,\n) {\n return useMutationOriginal({\n mutationFn,\n onSuccess: (data) => {\n onSuccessExtra?.(data)\n callbacks?.onSuccess?.(data)\n },\n onError: callbacks?.onError,\n onSettled: callbacks?.onSettled,\n })\n}\n\n// ============================================================================\n// Customer Hooks Mixin\n// ============================================================================\n\nexport class CustomerHooks {\n private queryClient: QueryClient\n private customerAuth?: CustomerAuth\n\n constructor(queryClient: QueryClient, customerAuth?: CustomerAuth) {\n this.queryClient = queryClient\n this.customerAuth = customerAuth\n }\n\n private ensureCustomerAuth(): CustomerAuth {\n if (!this.customerAuth) {\n throw createConfigError(\n 'Customer hooks require Client. Use createClient() instead of createServerClient().',\n )\n }\n return this.customerAuth\n }\n\n private invalidateMe = () => {\n this.queryClient.invalidateQueries({ queryKey: customerKeys.me() })\n }\n\n // ===== useCustomerMe =====\n useCustomerMe(options?: {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean | 'always'\n refetchInterval?: number | false\n retry?: boolean | number\n }) {\n return useQueryOriginal({\n queryKey: customerKeys.me(),\n queryFn: async () => {\n return await this.ensureCustomerAuth().me()\n },\n ...options,\n enabled:\n (options?.enabled ?? true) && !!this.customerAuth?.isAuthenticated(),\n })\n }\n\n // ===== Mutations =====\n\n useCustomerLogin(options?: MutationCallbacks<CustomerAuthResponse>) {\n return createMutation(\n (data: CustomerLoginData) => this.ensureCustomerAuth().login(data),\n options,\n this.invalidateMe,\n )\n }\n\n useCustomerRegister(\n options?: MutationCallbacks<{ customer: CustomerProfile }>,\n ) {\n return createMutation(\n (data: CustomerRegisterData) => this.ensureCustomerAuth().register(data),\n options,\n )\n }\n\n useCustomerLogout(options?: MutationCallbacks<void>) {\n return useMutationOriginal({\n mutationFn: async () => {\n this.ensureCustomerAuth().logout()\n },\n onSuccess: () => {\n this.queryClient.removeQueries({ queryKey: customerKeys.all })\n options?.onSuccess?.()\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n useCustomerForgotPassword(options?: MutationCallbacks<void>) {\n return createMutation(\n (email: string) =>\n this.ensureCustomerAuth()\n .forgotPassword(email)\n .then(() => {}),\n options,\n )\n }\n\n useCustomerResetPassword(options?: MutationCallbacks<void>) {\n return createMutation(\n (data: { token: string; password: string }) =>\n this.ensureCustomerAuth()\n .resetPassword(data.token, data.password)\n .then(() => {}),\n options,\n )\n }\n\n useCustomerRefreshToken(\n options?: MutationCallbacks<CustomerRefreshResponse>,\n ) {\n return createMutation(\n () => this.ensureCustomerAuth().refreshToken(),\n options,\n this.invalidateMe,\n )\n }\n\n useCustomerUpdateProfile(options?: MutationCallbacks<CustomerProfile>) {\n return createMutation(\n (data: UpdateProfileData) =>\n this.ensureCustomerAuth().updateProfile(data),\n options,\n this.invalidateMe,\n )\n }\n\n useCustomerChangePassword(options?: MutationCallbacks<void>) {\n return createMutation(\n (data: { currentPassword: string; newPassword: string }) =>\n this.ensureCustomerAuth()\n .changePassword(data.currentPassword, data.newPassword)\n .then(() => {}),\n options,\n )\n }\n\n // ===== Customer Cache Utilities =====\n\n invalidateCustomerQueries() {\n return this.queryClient.invalidateQueries({ queryKey: customerKeys.all })\n }\n\n getCustomerData(): CustomerProfile | null | undefined {\n return this.queryClient.getQueryData(customerKeys.me())\n }\n\n setCustomerData(data: CustomerProfile | null) {\n this.queryClient.setQueryData(customerKeys.me(), data)\n }\n}\n","const SDK_ERROR_BRAND = Symbol.for('@01.software/sdk/SDKError')\nconst SDK_ERROR_TYPE_BRAND = Symbol.for('@01.software/sdk/SDKError.type')\n\ntype SDKErrorType =\n | 'NetworkError'\n | 'ValidationError'\n | 'ApiError'\n | 'ConfigError'\n | 'TimeoutError'\n | 'GoneError'\n | 'ServiceUnavailableError'\n | 'UsageLimitError'\n | 'AuthError'\n | 'PermissionError'\n | 'NotFoundError'\n | 'ConflictError'\n | 'RateLimitError'\n\nfunction defineSDKErrorBrand(error: SDKError): void {\n Object.defineProperty(error, SDK_ERROR_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n}\n\nfunction defineSDKErrorType(error: SDKError, type: SDKErrorType): void {\n Object.defineProperty(error, SDK_ERROR_TYPE_BRAND, {\n value: type,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n}\n\nexport class SDKError extends Error {\n readonly code: string\n readonly status?: number\n readonly details?: unknown\n readonly userMessage?: string\n readonly suggestion?: string\n readonly requestId?: string\n readonly kind?: 'commerce'\n readonly reason?: CommerceErrorCode | 'unknown_commerce_error'\n readonly rawReason?: string\n /** Machine-readable reason from a non-commerce API response. */\n readonly apiReason?: string\n readonly retryable?: boolean\n readonly retryAfter?: number\n\n constructor(\n code: string,\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n this.userMessage = userMessage\n this.suggestion = suggestion\n this.requestId = requestId\n defineSDKErrorBrand(this)\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, new.target)\n }\n }\n\n getUserMessage(): string {\n return this.userMessage || this.message\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n userMessage: this.userMessage,\n suggestion: this.suggestion,\n ...(this.requestId !== undefined && { requestId: this.requestId }),\n ...(this.kind !== undefined && { kind: this.kind }),\n ...(this.reason !== undefined && { reason: this.reason }),\n ...(this.rawReason !== undefined && { rawReason: this.rawReason }),\n ...(this.apiReason !== undefined && { apiReason: this.apiReason }),\n ...(this.retryable !== undefined && { retryable: this.retryable }),\n ...(this.retryAfter !== undefined && { retryAfter: this.retryAfter }),\n }\n }\n}\n\n/**\n * Canonical Cart/Checkout/PaymentSession error reasons. This public SDK mirror\n * intentionally does not import the private contracts package; parity is\n * enforced by a type test.\n */\nexport const COMMERCE_ERROR_CODES = [\n 'validation_failed',\n 'bad_request',\n 'unauthorized',\n 'forbidden',\n 'account_suspended',\n 'key_invalid',\n 'pat_tenant_header_forbidden',\n 'tenant_mismatch',\n 'test_tenant_expired',\n 'token_invalid',\n 'token_expired',\n 'origin_not_allowed',\n 'server_credentials_required',\n 'role_denied',\n 'scope_denied',\n 'feature_disabled',\n 'not_found',\n 'conflict',\n 'locked',\n 'cart_revision_conflict',\n 'rate_limit_exceeded',\n 'usage_limit_exceeded',\n 'service_unavailable',\n 'idempotency_conflict',\n 'idempotency_in_progress',\n 'idempotency_key_required',\n 'invalid_idempotency_key',\n 'cart_not_active',\n 'cart_locked',\n 'cart_empty',\n 'cart_market_unavailable',\n 'cart_market_mismatch',\n 'checkout_not_open',\n 'checkout_already_open',\n 'payment_slot_held',\n 'reservation_expired',\n 'payment_session_not_cancelable',\n 'payment_session_conflict',\n 'provider_identity_mismatch',\n 'managed_refund_attestation_forbidden',\n 'payment_method_unavailable',\n 'provider_unavailable',\n 'lock_timeout',\n 'price_changed',\n 'pricing_fact_in_use',\n 'insufficient_stock',\n 'reservation_conflict',\n 'stock_lock_unavailable',\n 'variant_not_found',\n 'variant_stock_write_failed',\n 'stock_invariant_violation',\n 'payment_confirmation_in_flight',\n 'checkout_reservation_release_requires_transaction',\n 'admission_metadata_invalid',\n 'admission_metadata_required',\n 'capacity_exceeded',\n 'occurrence_lock_unavailable',\n 'occurrence_not_open',\n 'admission_type_capacity_exceeded',\n 'admission_type_occurrence_mismatch',\n 'admission_hold_expired',\n 'admission_hold_checkout_item_conflict',\n 'admission_hold_checkout_conflict',\n 'admission_hold_quantity_mismatch',\n 'admission_hold_unbound',\n 'admission_hold_missing',\n 'admission_hold_checkout_item_missing',\n 'admission_hold_expiry_failed',\n 'admission_hold_expiry_requires_transaction',\n 'admission_hold_line_item_mismatch',\n 'admission_materialization_failed',\n 'variant_inactive',\n 'variant_product_mismatch',\n 'product_not_public',\n 'market_not_found',\n 'market_shipping_currency_unsupported',\n 'missing_market_rate',\n 'missing_shipping_amount',\n 'no_enabled_payment_provider',\n 'product_market_unavailable',\n 'unsupported_currency',\n 'missing_price_row',\n 'payment_provider_currency_unsupported',\n 'discount_code_not_found',\n 'discount_not_started',\n 'discount_expired',\n 'discount_usage_limit',\n 'discount_per_customer_limit',\n 'discount_customer_required',\n 'discount_first_order_only',\n 'discount_customer_not_eligible',\n 'discount_customer_excluded',\n 'discount_items_required',\n 'discount_product_not_eligible',\n 'discount_product_excluded',\n 'discount_min_order_amount',\n 'discount_currency_scope_required',\n 'discount_allocation_method_unsupported',\n 'currency_mismatch',\n 'customer_token_required',\n 'market_required',\n 'server_derived',\n 'internal_error',\n] as const\n\nexport type CommerceErrorCode = (typeof COMMERCE_ERROR_CODES)[number]\n\ntype CommerceSDKErrorBase = SDKError & {\n readonly kind: 'commerce'\n readonly requestId: string\n readonly retryable: boolean\n readonly retryAfter?: number\n readonly details?: Record<string, unknown>\n}\n\nexport type CommerceSDKError = CommerceSDKErrorBase &\n (\n | { readonly reason: CommerceErrorCode; readonly rawReason?: never }\n | {\n readonly reason: 'unknown_commerce_error'\n readonly rawReason: string\n }\n )\n\nconst COMMERCE_ERROR_CODE_SET: ReadonlySet<string> = new Set(\n COMMERCE_ERROR_CODES,\n)\nconst COMMERCE_ERROR_ENVELOPE_KEYS = new Set([\n 'error',\n 'reason',\n 'requestId',\n 'retryable',\n 'details',\n])\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport type CommerceErrorEnvelope = {\n error: string\n reason: string\n requestId: string\n retryable: boolean\n details?: Record<string, unknown>\n}\n\nfunction commerceProtocolError(\n issue: string,\n trustedRequestId?: string,\n): SDKError {\n return createApiError(\n 'Invalid canonical commerce error response.',\n 502,\n { protocol: 'commerce-error-envelope', issue },\n 'The server returned an incompatible commerce error response.',\n 'Verify that the Console commerce contract is deployed before using this SDK version.',\n trustedRequestId,\n )\n}\n\n/** @internal Strictly parse a canonical commerce error without retaining its raw body. */\nexport function parseCommerceErrorEnvelope(\n body: unknown,\n headerRequestId?: string,\n): CommerceErrorEnvelope {\n if (headerRequestId === undefined) {\n throw commerceProtocolError('missing_request_id_header')\n }\n if (headerRequestId.length === 0) {\n throw commerceProtocolError('empty_request_id_header')\n }\n if (!isPlainRecord(body)) {\n throw commerceProtocolError('expected_object', headerRequestId)\n }\n if (Object.keys(body).some((key) => !COMMERCE_ERROR_ENVELOPE_KEYS.has(key))) {\n throw commerceProtocolError('unexpected_field', headerRequestId)\n }\n if (\n typeof body.error !== 'string' ||\n body.error.length === 0 ||\n typeof body.reason !== 'string' ||\n body.reason.length === 0 ||\n typeof body.requestId !== 'string' ||\n body.requestId.length === 0 ||\n (body.retryable !== undefined && typeof body.retryable !== 'boolean') ||\n (body.details !== undefined && !isPlainRecord(body.details))\n ) {\n throw commerceProtocolError('invalid_field', headerRequestId)\n }\n\n if (headerRequestId !== undefined && headerRequestId !== body.requestId) {\n throw commerceProtocolError('request_id_mismatch', headerRequestId)\n }\n\n return {\n error: body.error,\n reason: body.reason,\n requestId: body.requestId,\n retryable: body.retryable === true,\n ...(body.details === undefined ? {} : { details: body.details }),\n }\n}\n\n/** @internal Validate and apply the canonical commerce error envelope. */\nexport function enhanceCommerceError(\n error: SDKError,\n body: unknown,\n headerRequestId?: string,\n): SDKError {\n const envelope = parseCommerceErrorEnvelope(body, headerRequestId)\n\n const known = COMMERCE_ERROR_CODE_SET.has(envelope.reason)\n Object.assign(error, {\n code: envelope.reason,\n kind: 'commerce' as const,\n reason: known\n ? (envelope.reason as CommerceErrorCode)\n : 'unknown_commerce_error',\n ...(known ? {} : { rawReason: envelope.reason }),\n requestId: envelope.requestId,\n retryable: envelope.retryable,\n details: envelope.details,\n })\n return error\n}\n\n/** @internal Apply a non-commerce reason without canonical-commerce validation. */\nexport function enhanceNonCommerceError(\n error: SDKError,\n reason: unknown,\n): SDKError {\n if (typeof reason === 'string') Object.assign(error, { apiReason: reason })\n return error\n}\n\n/**\n * Read the server-provided machine reason across strict commerce and\n * non-commerce SDK errors. Unknown commerce reasons are returned verbatim.\n */\nexport function getSDKErrorReason(error: SDKError): string | undefined {\n if (error.kind !== 'commerce') return error.apiReason\n return error.reason === 'unknown_commerce_error'\n ? error.rawReason\n : error.reason\n}\n\nexport function isCommerceSDKError(error: unknown): error is CommerceSDKError {\n if (!isSDKError(error) || error.kind !== 'commerce') return false\n if (\n typeof error.requestId !== 'string' ||\n typeof error.retryable !== 'boolean' ||\n (error.retryAfter !== undefined &&\n (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0)) ||\n typeof error.reason !== 'string'\n ) {\n return false\n }\n return error.reason === 'unknown_commerce_error'\n ? typeof error.rawReason === 'string'\n : COMMERCE_ERROR_CODE_SET.has(error.reason) && error.rawReason === undefined\n}\n\nexport class NetworkError extends SDKError {\n constructor(\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('NETWORK_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'NetworkError'\n defineSDKErrorType(this, 'NetworkError')\n }\n}\n\nexport class ValidationError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status = 400,\n ) {\n super('VALIDATION_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'ValidationError'\n defineSDKErrorType(this, 'ValidationError')\n }\n}\n\nexport class ApiError extends SDKError {\n constructor(\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'API_ERROR',\n message,\n status,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'ApiError'\n defineSDKErrorType(this, 'ApiError')\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('CONFIG_ERROR', message, undefined, details, userMessage, suggestion)\n this.name = 'ConfigError'\n defineSDKErrorType(this, 'ConfigError')\n }\n}\n\nexport class TimeoutError extends SDKError {\n constructor(\n message = 'Request timed out.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('TIMEOUT_ERROR', message, 408, details, userMessage, suggestion)\n this.name = 'TimeoutError'\n defineSDKErrorType(this, 'TimeoutError')\n }\n}\n\nexport class GoneError extends SDKError {\n constructor(\n message = 'The requested resource is no longer available.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('GONE_ERROR', message, 410, details, userMessage, suggestion)\n this.name = 'GoneError'\n defineSDKErrorType(this, 'GoneError')\n }\n}\n\nexport class ServiceUnavailableError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message = 'Service temporarily unavailable.',\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super(\n 'SERVICE_UNAVAILABLE_ERROR',\n message,\n 503,\n details,\n userMessage,\n suggestion,\n )\n this.name = 'ServiceUnavailableError'\n this.retryAfter = retryAfter\n defineSDKErrorType(this, 'ServiceUnavailableError')\n }\n}\n\nexport class UsageLimitError extends SDKError {\n readonly usage: { limit: number; current: number; remaining: number }\n\n constructor(\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('USAGE_LIMIT_ERROR', message, 429, details, userMessage, suggestion)\n this.name = 'UsageLimitError'\n this.usage = usage\n defineSDKErrorType(this, 'UsageLimitError')\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n usage: this.usage,\n }\n }\n}\n\nexport class AuthError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'auth_error',\n message,\n 401,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'AuthError'\n defineSDKErrorType(this, 'AuthError')\n }\n}\n\nexport class PermissionError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'permission_error',\n message,\n 403,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'PermissionError'\n defineSDKErrorType(this, 'PermissionError')\n }\n}\n\nexport class NotFoundError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'not_found',\n message,\n 404,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'NotFoundError'\n defineSDKErrorType(this, 'NotFoundError')\n }\n}\n\nexport class ConflictError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super('conflict', message, 409, details, userMessage, suggestion, requestId)\n this.name = 'ConflictError'\n defineSDKErrorType(this, 'ConflictError')\n }\n}\n\nexport class RateLimitError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'rate_limit_exceeded',\n message,\n 429,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'RateLimitError'\n this.retryAfter = retryAfter\n defineSDKErrorType(this, 'RateLimitError')\n }\n}\n\nfunction hasBrandedSDKErrorShape(error: unknown): error is SDKError {\n if (error === null || typeof error !== 'object') return false\n\n const candidate = error as Record<PropertyKey, unknown>\n return (\n candidate[SDK_ERROR_BRAND] === true &&\n typeof candidate.name === 'string' &&\n typeof candidate.code === 'string' &&\n typeof candidate.message === 'string' &&\n (candidate.status === undefined || typeof candidate.status === 'number') &&\n (candidate.userMessage === undefined ||\n typeof candidate.userMessage === 'string') &&\n (candidate.suggestion === undefined ||\n typeof candidate.suggestion === 'string') &&\n (candidate.requestId === undefined ||\n typeof candidate.requestId === 'string') &&\n (candidate.kind === undefined || candidate.kind === 'commerce') &&\n (candidate.reason === undefined || typeof candidate.reason === 'string') &&\n (candidate.rawReason === undefined ||\n typeof candidate.rawReason === 'string') &&\n (candidate.apiReason === undefined ||\n typeof candidate.apiReason === 'string') &&\n (candidate.retryable === undefined ||\n typeof candidate.retryable === 'boolean') &&\n (candidate.retryAfter === undefined ||\n typeof candidate.retryAfter === 'number') &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nfunction hasSDKErrorType(error: unknown, type: SDKErrorType): boolean {\n return (\n hasBrandedSDKErrorShape(error) &&\n (error as unknown as Record<PropertyKey, unknown>)[SDK_ERROR_TYPE_BRAND] ===\n type\n )\n}\n\nexport function isSDKError(error: unknown): error is SDKError {\n return error instanceof SDKError || hasBrandedSDKErrorShape(error)\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError || hasSDKErrorType(error, 'NetworkError')\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n if (\n error instanceof ValidationError ||\n hasSDKErrorType(error, 'ValidationError')\n ) {\n return true\n }\n if (error == null || typeof error !== 'object') return false\n\n const candidate = error as {\n code?: unknown\n name?: unknown\n message?: unknown\n getUserMessage?: unknown\n toJSON?: unknown\n }\n return (\n candidate.name === 'ValidationError' &&\n candidate.code === 'VALIDATION_ERROR' &&\n typeof candidate.message === 'string' &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError || hasSDKErrorType(error, 'ApiError')\n}\n\nexport function isConfigError(error: unknown): error is ConfigError {\n return error instanceof ConfigError || hasSDKErrorType(error, 'ConfigError')\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError || hasSDKErrorType(error, 'TimeoutError')\n}\n\nexport function isGoneError(error: unknown): error is GoneError {\n return error instanceof GoneError || hasSDKErrorType(error, 'GoneError')\n}\n\nexport function isServiceUnavailableError(\n error: unknown,\n): error is ServiceUnavailableError {\n return (\n error instanceof ServiceUnavailableError ||\n hasSDKErrorType(error, 'ServiceUnavailableError')\n )\n}\n\nexport function isUsageLimitError(error: unknown): error is UsageLimitError {\n return (\n error instanceof UsageLimitError ||\n hasSDKErrorType(error, 'UsageLimitError')\n )\n}\n\nexport function isAuthError(error: unknown): error is AuthError {\n return error instanceof AuthError || hasSDKErrorType(error, 'AuthError')\n}\n\nexport function isPermissionError(error: unknown): error is PermissionError {\n return (\n error instanceof PermissionError ||\n hasSDKErrorType(error, 'PermissionError')\n )\n}\n\nexport function isNotFoundError(error: unknown): error is NotFoundError {\n return (\n error instanceof NotFoundError || hasSDKErrorType(error, 'NotFoundError')\n )\n}\n\nexport function isConflictError(error: unknown): error is ConflictError {\n return (\n error instanceof ConflictError || hasSDKErrorType(error, 'ConflictError')\n )\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return (\n error instanceof RateLimitError || hasSDKErrorType(error, 'RateLimitError')\n )\n}\n\nexport const createNetworkError = (\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new NetworkError(message, status, details, userMessage, suggestion)\n\nexport const createValidationError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status?: number,\n) => new ValidationError(message, details, userMessage, suggestion, status)\n\nexport const createApiError = (\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ApiError(message, status, details, userMessage, suggestion, requestId)\n\nexport const createConfigError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ConfigError(message, details, userMessage, suggestion)\n\nexport const createTimeoutError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new TimeoutError(message, details, userMessage, suggestion)\n\nexport const createGoneError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new GoneError(message, details, userMessage, suggestion)\n\nexport const createServiceUnavailableError = (\n message?: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) =>\n new ServiceUnavailableError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n )\n\nexport const createUsageLimitError = (\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new UsageLimitError(message, usage, details, userMessage, suggestion)\n\nexport const createAuthError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new AuthError(message, details, userMessage, suggestion, requestId)\n\nexport const createPermissionError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new PermissionError(message, details, userMessage, suggestion, requestId)\n\nexport const createNotFoundError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new NotFoundError(message, details, userMessage, suggestion, requestId)\n\nexport const createConflictError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ConflictError(message, details, userMessage, suggestion, requestId)\n\nexport const createRateLimitError = (\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) =>\n new RateLimitError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n","import {\n QueryClient,\n useInfiniteQuery as useInfiniteQueryOriginal,\n useQuery as useQueryOriginal,\n useSuspenseInfiniteQuery as useSuspenseInfiniteQueryOriginal,\n useSuspenseQuery as useSuspenseQueryOriginal,\n} from '@tanstack/react-query'\nimport type {\n InfiniteData,\n UseInfiniteQueryResult,\n UseQueryResult,\n UseSuspenseInfiniteQueryResult,\n UseSuspenseQueryResult,\n} from '@tanstack/react-query'\nimport type {\n ApiQueryOptions,\n PayloadFindResponse,\n PublicCollection,\n ServerCollection,\n} from '../client/types'\nimport type { CustomerAuth } from '../customer/customer-auth'\nimport type { CollectionClient } from '../collection'\nimport type {\n ProductDetailParams,\n ProductDetailCatalogResult,\n ProductListingGroupsCatalogItem,\n ProductListingGroupsItem,\n ProductListingPageBaseParams,\n ProductListingPageCatalogParams,\n ProductListingPageFullParams,\n ProductListingPageParams,\n ProductListingPageResult,\n} from '../api'\nimport {\n CollectionHooks,\n type InfiniteQueryOptions,\n type QueryOptions,\n type SuspenseInfiniteQueryOptions,\n type SuspenseQueryOptions,\n} from './collection-hooks'\nimport { CustomerHooks } from './customer-hooks'\nimport { createConfigError } from '../internal/errors'\nimport { listingPageSearchParams } from '../internal/utils/query-string'\nimport {\n COMMERCE_ENDPOINT_OPERATIONS,\n resolveOperationPath,\n} from '../api/endpoints'\nimport type { CommerceEndpointDescriptor } from '../api/endpoints'\nimport {\n canonicalProductListingGroupsQueryOptions,\n productKeys,\n} from './query-keys'\n\n// Re-export everything from sub-modules for barrel compatibility\nexport { collectionKeys, customerKeys } from './query-keys'\nexport { productKeys } from './query-keys'\nexport type {\n CollectionQueryParams,\n CollectionDetailQueryParams,\n CollectionInfiniteQueryParams,\n QueryOptions,\n SuspenseQueryOptions,\n InfiniteQueryOptions,\n SuspenseInfiniteQueryOptions,\n} from './collection-hooks'\n\nexport type ProductListingGroupsQueryOptions = Pick<\n ApiQueryOptions,\n 'page' | 'limit' | 'sort' | 'where'\n> & {\n market?: string\n locale?: ProductListingPageParams['locale']\n fallbackLocale?: ProductListingPageParams['fallbackLocale']\n}\n\ntype ProductDetailConvenienceOptions =\n QueryOptions<ProductDetailCatalogResult> & {\n market?: string\n locale?: ProductDetailParams['locale']\n fallbackLocale?: ProductDetailParams['fallbackLocale']\n }\n\nexport type ReadOnlyQueryHooks = Omit<\n QueryHooks<PublicCollection>,\n | 'useCreate'\n | 'useUpdate'\n | 'useRemove'\n | 'useProductListingGroupsQuery'\n | 'useSuspenseProductListingGroupsQuery'\n | 'useInfiniteProductListingGroupsQuery'\n | 'useSuspenseInfiniteProductListingGroupsQuery'\n | 'prefetchProductListingGroupsQuery'\n | 'prefetchInfiniteProductListingGroupsQuery'\n | 'useProductListingPage'\n | 'useSuspenseProductListingPage'\n | 'useInfiniteProductListingPage'\n | 'prefetchProductListingPage'\n | 'prefetchInfiniteProductListingPage'\n> & {\n useProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: QueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useSuspenseProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: SuspenseQueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useInfiniteProductListingPage<\n TData = InfiniteData<\n ProductListingPageResult<ProductListingGroupsCatalogItem>\n >,\n >(\n params?: ProductListingPageCatalogInfiniteParams,\n options?: InfiniteQueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseInfiniteQueryResult<TData>\n prefetchProductListingPage(\n params?: ProductListingPageCatalogParams,\n options?: { staleTime?: number },\n ): Promise<void>\n prefetchInfiniteProductListingPage(\n params?: ProductListingPageCatalogInfiniteParams,\n options?: { pages?: number; staleTime?: number },\n ): Promise<void>\n}\n\n/**\n * Composes CollectionHooks + CustomerHooks into a single API surface.\n * All methods are delegated; no logic lives here.\n */\ninterface ProductDetailCallable {\n product: {\n detail: (params: ProductDetailParams) => Promise<ProductDetailCatalogResult>\n }\n}\n\ninterface ProductListingPageCatalogCallable {\n product: {\n listingPage: {\n (\n params?: ProductListingPageCatalogParams,\n ): Promise<ProductListingPageResult<ProductListingGroupsCatalogItem>>\n }\n }\n}\n\ninterface ProductListingPageCallable extends ProductListingPageCatalogCallable {\n product: ProductListingPageCatalogCallable['product'] & {\n listingPage: ProductListingPageCatalogCallable['product']['listingPage'] & {\n (\n params: ProductListingPageFullParams,\n ): Promise<ProductListingPageResult<ProductListingGroupsItem>>\n (\n params: ProductListingPageParams,\n ): Promise<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>\n >\n }\n }\n}\n\ntype ProductCommerceCallable = ProductDetailCallable &\n ProductListingPageCallable\n\ntype ProductListingPageCatalogResult =\n ProductListingPageResult<ProductListingGroupsCatalogItem>\ntype ProductListingPageFullResult =\n ProductListingPageResult<ProductListingGroupsItem>\ntype ProductListingPageUnionResult =\n | ProductListingPageCatalogResult\n | ProductListingPageFullResult\ntype ProductListingPageHookOptions<TData> =\n | QueryOptions<ProductListingPageCatalogResult, TData>\n | QueryOptions<ProductListingPageFullResult, TData>\n | QueryOptions<ProductListingPageUnionResult, TData>\ntype ProductListingPageSuspenseHookOptions<TData> =\n | SuspenseQueryOptions<ProductListingPageCatalogResult, TData>\n | SuspenseQueryOptions<ProductListingPageFullResult, TData>\n | SuspenseQueryOptions<ProductListingPageUnionResult, TData>\n\nexport type ProductListingPageInfiniteParams = Omit<\n ProductListingPageBaseParams,\n 'page' | 'limit'\n> & {\n mode?: ProductListingPageParams['mode']\n pageSize?: number\n}\n\nexport type ProductListingPageCatalogInfiniteParams = Omit<\n ProductListingPageInfiniteParams,\n 'mode'\n> & {\n mode?: 'catalog'\n}\n\ntype ProductMarketContext = {\n market?: string\n}\n\ntype ProductMarketAwareCommerce = {\n getDefaultMarket?: () => string | undefined\n}\n\nfunction normalizeMarket(market?: string): string | undefined {\n const normalized = market?.trim()\n return normalized || undefined\n}\n\nfunction requestCommerceFindEndpoint<T>(\n collectionClient: CollectionClient,\n endpoint: CommerceEndpointDescriptor,\n options?: { data?: unknown; query?: string | URLSearchParams },\n): Promise<PayloadFindResponse<T>> {\n const path = resolveOperationPath(endpoint, { query: options?.query })\n if (endpoint.method === 'get') {\n return collectionClient.requestFindEndpointGet<T>(path)\n }\n if (endpoint.method === 'post') {\n return collectionClient.requestFindEndpoint<T>(path, options?.data)\n }\n throw new TypeError(`Unsupported find endpoint method: ${endpoint.method}`)\n}\n\nfunction withDefaultMarket<T extends { market?: string }>(\n params: T | undefined,\n market?: string,\n): T | undefined {\n const defaultMarket = normalizeMarket(market)\n if (!defaultMarket || normalizeMarket(params?.market)) return params\n return { ...(params ?? ({} as T)), market: defaultMarket }\n}\n\nfunction resolveProductMarket(\n commerceClient: ProductMarketAwareCommerce,\n context?: ProductMarketContext,\n): string | undefined {\n return (\n normalizeMarket(context?.market) ??\n normalizeMarket(commerceClient.getDefaultMarket?.())\n )\n}\n\nfunction splitListingGroupsQueryOptions(\n queryOptions?: ProductListingGroupsQueryOptions,\n) {\n const normalized = canonicalProductListingGroupsQueryOptions(queryOptions)\n if (!normalized) return { market: undefined, options: undefined }\n const { market, ...options } = normalized\n return {\n market,\n options: Object.keys(options).length > 0 ? options : undefined,\n }\n}\n\nfunction fetchProductListingGroupsQuery(\n collectionClient: CollectionClient,\n queryOptions?: ProductListingGroupsQueryOptions,\n) {\n const { market, options } = splitListingGroupsQueryOptions(queryOptions)\n return requestCommerceFindEndpoint<ProductListingGroupsItem>(\n collectionClient,\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQuery,\n {\n data: {\n ...(market ? { market } : {}),\n ...(options ? { options } : {}),\n },\n },\n )\n}\n\nfunction fetchProductListingGroupsCatalogQuery(\n collectionClient: CollectionClient,\n queryOptions?: ProductListingGroupsQueryOptions,\n) {\n return requestCommerceFindEndpoint<ProductListingGroupsCatalogItem>(\n collectionClient,\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQueryCatalog,\n { query: listingPageSearchParams(queryOptions) },\n )\n}\n\nexport function productListingPageQueryOptions(\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPage>\n queryFn: () => Promise<\n ProductListingPageResult<ProductListingGroupsCatalogItem>\n >\n}\nexport function productListingPageQueryOptions(\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageFullParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPage>\n queryFn: () => Promise<ProductListingPageResult<ProductListingGroupsItem>>\n}\nexport function productListingPageQueryOptions(\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPage>\n queryFn: () => Promise<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>\n >\n}\nexport function productListingPageQueryOptions(\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageParams = {},\n context?: ProductMarketContext,\n) {\n const effectiveParams =\n withDefaultMarket(\n params,\n resolveProductMarket(\n commerceClient as ProductMarketAwareCommerce,\n context,\n ),\n ) ?? params\n\n return {\n queryKey: productKeys.listingPage(effectiveParams),\n queryFn: () =>\n commerceClient.product.listingPage(\n effectiveParams as ProductListingPageCatalogParams,\n ),\n }\n}\n\nexport function productListingPageInfiniteQueryOptions(\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogInfiniteParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPageInfinite>\n queryFn: (args: {\n pageParam: number\n }) => Promise<ProductListingPageResult<ProductListingGroupsCatalogItem>>\n initialPageParam: number\n getNextPageParam: (\n lastPage: ProductListingPageResult<ProductListingGroupsCatalogItem>,\n ) => number | null | undefined\n}\nexport function productListingPageInfiniteQueryOptions(\n commerceClient: ProductListingPageCallable,\n params?: ProductListingPageInfiniteParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPageInfinite>\n queryFn: (args: {\n pageParam: number\n }) => Promise<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>\n >\n initialPageParam: number\n getNextPageParam: (\n lastPage: ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >,\n ) => number | null | undefined\n}\nexport function productListingPageInfiniteQueryOptions(\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageInfiniteParams = {},\n context?: ProductMarketContext,\n) {\n const {\n pageSize: explicitPageSize,\n page: _page,\n limit: _limit,\n ...pageParams\n } = params as ProductListingPageInfiniteParams & {\n page?: number\n limit?: number\n }\n const pageSize = explicitPageSize ?? 20\n const effectivePageParams =\n withDefaultMarket(\n pageParams,\n resolveProductMarket(\n commerceClient as ProductMarketAwareCommerce,\n context,\n ),\n ) ?? pageParams\n\n return {\n queryKey: productKeys.listingPageInfinite(\n effectivePageParams,\n explicitPageSize,\n ),\n queryFn: ({ pageParam }: { pageParam: number }) =>\n commerceClient.product.listingPage({\n ...effectivePageParams,\n page: pageParam,\n limit: pageSize,\n } as never),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n }\n}\n\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogParams,\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageFullParams,\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageParams,\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageParams = {},\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n) {\n return queryClient.prefetchQuery({\n ...productListingPageQueryOptions(\n commerceClient as ProductListingPageCallable,\n params,\n context,\n ),\n ...options,\n })\n}\n\nexport function prefetchInfiniteProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogInfiniteParams,\n options?: { pages?: number; staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchInfiniteProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCallable,\n params?: ProductListingPageInfiniteParams,\n options?: { pages?: number; staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchInfiniteProductListingPage(\n queryClient: QueryClient,\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageInfiniteParams = {},\n options?: { pages?: number; staleTime?: number },\n context?: ProductMarketContext,\n) {\n return queryClient.prefetchInfiniteQuery({\n ...productListingPageInfiniteQueryOptions(\n commerceClient as ProductListingPageCallable,\n params,\n context,\n ),\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n}\n\nexport class QueryHooks<\n TCollection extends ServerCollection = PublicCollection,\n> extends CollectionHooks<TCollection> {\n private _customer: CustomerHooks\n private _commerce?: ProductCommerceCallable\n private readonly market?: string\n\n constructor(\n queryClient: QueryClient,\n collectionClient: CollectionClient<TCollection>,\n customerAuth?: CustomerAuth,\n commerceClient?: ProductCommerceCallable,\n market?: string,\n ) {\n super(queryClient, collectionClient)\n this._customer = new CustomerHooks(queryClient, customerAuth)\n this._commerce = commerceClient\n this.market = normalizeMarket(market)\n }\n\n private ensureCommerce(): ProductCommerceCallable {\n if (!this._commerce) {\n throw createConfigError(\n 'Product listing page hooks require Client or ServerClient. Use createQueryHooks(client) or createServerQueryHooks(server) instead of constructing QueryHooks directly.',\n )\n }\n return this._commerce\n }\n\n private withProductMarket<T extends { market?: string }>(\n params: T | undefined,\n ): T | undefined {\n return withDefaultMarket(params, this.market)\n }\n\n // --- Customer hooks delegation ---\n useCustomerMe: CustomerHooks['useCustomerMe'] = (...args) =>\n this._customer.useCustomerMe(...args)\n useCustomerLogin: CustomerHooks['useCustomerLogin'] = (...args) =>\n this._customer.useCustomerLogin(...args)\n useCustomerRegister: CustomerHooks['useCustomerRegister'] = (...args) =>\n this._customer.useCustomerRegister(...args)\n useCustomerLogout: CustomerHooks['useCustomerLogout'] = (...args) =>\n this._customer.useCustomerLogout(...args)\n useCustomerForgotPassword: CustomerHooks['useCustomerForgotPassword'] = (\n ...args\n ) => this._customer.useCustomerForgotPassword(...args)\n useCustomerResetPassword: CustomerHooks['useCustomerResetPassword'] = (\n ...args\n ) => this._customer.useCustomerResetPassword(...args)\n useCustomerRefreshToken: CustomerHooks['useCustomerRefreshToken'] = (\n ...args\n ) => this._customer.useCustomerRefreshToken(...args)\n useCustomerUpdateProfile: CustomerHooks['useCustomerUpdateProfile'] = (\n ...args\n ) => this._customer.useCustomerUpdateProfile(...args)\n useCustomerChangePassword: CustomerHooks['useCustomerChangePassword'] = (\n ...args\n ) => this._customer.useCustomerChangePassword(...args)\n\n // --- Customer cache delegation ---\n invalidateCustomerQueries: CustomerHooks['invalidateCustomerQueries'] = () =>\n this._customer.invalidateCustomerQueries()\n getCustomerData: CustomerHooks['getCustomerData'] = () =>\n this._customer.getCustomerData()\n setCustomerData: CustomerHooks['setCustomerData'] = (data) =>\n this._customer.setCustomerData(data)\n\n useProductListingGroupsQuery<\n TData = PayloadFindResponse<ProductListingGroupsItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: QueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: productKeys.listingGroups(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsQuery(this.collectionClient, queryOptions),\n ...restOptions,\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n useProductListingGroupsCatalogQuery<\n TData = PayloadFindResponse<ProductListingGroupsCatalogItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: QueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: productKeys.listingGroupsCatalog(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsCatalogQuery(\n this.collectionClient,\n queryOptions,\n ),\n ...restOptions,\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n useSuspenseProductListingGroupsQuery<\n TData = PayloadFindResponse<ProductListingGroupsItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: SuspenseQueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n\n return useSuspenseQueryOriginal({\n queryKey: productKeys.listingGroups(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsQuery(this.collectionClient, queryOptions),\n ...options,\n })\n }\n\n useSuspenseProductListingGroupsCatalogQuery<\n TData = PayloadFindResponse<ProductListingGroupsCatalogItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: SuspenseQueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n\n return useSuspenseQueryOriginal({\n queryKey: productKeys.listingGroupsCatalog(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsCatalogQuery(\n this.collectionClient,\n queryOptions,\n ),\n ...options,\n })\n }\n\n useInfiniteProductListingGroupsQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: InfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n useInfiniteProductListingGroupsCatalogQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsCatalogItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: InfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsCatalogInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsCatalogQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsCatalogItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n useSuspenseInfiniteProductListingGroupsQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: SuspenseInfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n useSuspenseInfiniteProductListingGroupsCatalogQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsCatalogItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: SuspenseInfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsCatalogInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsCatalogQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsCatalogItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n async prefetchProductListingGroupsQuery(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: { staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n\n return this.queryClient.prefetchQuery({\n queryKey: productKeys.listingGroups(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsQuery(this.collectionClient, queryOptions),\n ...options,\n })\n }\n\n async prefetchProductListingGroupsCatalogQuery(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: { staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n\n return this.queryClient.prefetchQuery({\n queryKey: productKeys.listingGroupsCatalog(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsCatalogQuery(\n this.collectionClient,\n queryOptions,\n ),\n ...options,\n })\n }\n\n async prefetchInfiniteProductListingGroupsQuery(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: { pages?: number; staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: productKeys.listingGroupsInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n async prefetchInfiniteProductListingGroupsCatalogQuery(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: { pages?: number; staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: productKeys.listingGroupsCatalogInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsCatalogQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsCatalogItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n useProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: QueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageFullParams,\n options?: QueryOptions<\n ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useProductListingPage<\n TData =\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageParams,\n options?: QueryOptions<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useProductListingPage<TData = ProductListingPageUnionResult>(\n params: ProductListingPageParams = {},\n options?: ProductListingPageHookOptions<TData>,\n ): UseQueryResult<TData> {\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n unknown\n >\n\n return useQueryOriginal({\n ...productListingPageQueryOptions(this.ensureCommerce(), params, {\n market: this.market,\n }),\n ...restOptions,\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n }) as UseQueryResult<TData>\n }\n\n useSuspenseProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: SuspenseQueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useSuspenseProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageFullParams,\n options?: SuspenseQueryOptions<\n ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useSuspenseProductListingPage<\n TData =\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageParams,\n options?: SuspenseQueryOptions<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useSuspenseProductListingPage<TData = ProductListingPageUnionResult>(\n params: ProductListingPageParams = {},\n options?: ProductListingPageSuspenseHookOptions<TData>,\n ): UseSuspenseQueryResult<TData> {\n const suspenseOptions = options as\n | SuspenseQueryOptions<ProductListingPageUnionResult, TData>\n | undefined\n\n return useSuspenseQueryOriginal({\n ...productListingPageQueryOptions(this.ensureCommerce(), params, {\n market: this.market,\n }),\n ...suspenseOptions,\n }) as UseSuspenseQueryResult<TData>\n }\n\n useInfiniteProductListingPage<\n TData = InfiniteData<\n ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >\n >,\n >(\n params: ProductListingPageInfiniteParams = {},\n options?: InfiniteQueryOptions<\n ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n return useInfiniteQueryOriginal({\n ...productListingPageInfiniteQueryOptions(this.ensureCommerce(), params, {\n market: this.market,\n }),\n ...options,\n }) as UseInfiniteQueryResult<TData>\n }\n\n async prefetchProductListingPage(\n params?: ProductListingPageCatalogParams,\n options?: { staleTime?: number },\n ): Promise<void>\n async prefetchProductListingPage(\n params: ProductListingPageFullParams,\n options?: { staleTime?: number },\n ): Promise<void>\n async prefetchProductListingPage(\n params: ProductListingPageParams,\n options?: { staleTime?: number },\n ): Promise<void>\n async prefetchProductListingPage(\n params: ProductListingPageParams = {},\n options?: { staleTime?: number },\n ) {\n return prefetchProductListingPage(\n this.queryClient,\n this.ensureCommerce(),\n params,\n options,\n { market: this.market },\n )\n }\n\n async prefetchInfiniteProductListingPage(\n params: ProductListingPageInfiniteParams = {},\n options?: { pages?: number; staleTime?: number },\n ) {\n return prefetchInfiniteProductListingPage(\n this.queryClient,\n this.ensureCommerce(),\n params,\n options,\n { market: this.market },\n )\n }\n\n useProductDetail(\n params: ProductDetailParams,\n options?: QueryOptions<ProductDetailCatalogResult>,\n ): UseQueryResult<ProductDetailCatalogResult> {\n const discriminator = 'slug' in params ? params.slug : params.id\n const { enabled, ...restOptions } = options ?? {}\n const queryEnabled = enabled !== false && Boolean(discriminator)\n const effectiveParams = this.withProductMarket(params) ?? params\n\n return useQueryOriginal({\n queryKey: productKeys.detail(effectiveParams),\n queryFn: () => this._commerce!.product.detail(effectiveParams),\n enabled: queryEnabled,\n ...restOptions,\n }) as UseQueryResult<ProductDetailCatalogResult>\n }\n\n useProductDetailBySlug(\n slug: string,\n options?: ProductDetailConvenienceOptions,\n ): UseQueryResult<ProductDetailCatalogResult> {\n const { market, locale, fallbackLocale, ...queryOptions } = options ?? {}\n return this.useProductDetail(\n {\n slug,\n ...(market ? { market } : {}),\n ...(locale ? { locale } : {}),\n ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),\n },\n queryOptions,\n )\n }\n\n useProductDetailById(\n id: string,\n options?: ProductDetailConvenienceOptions,\n ): UseQueryResult<ProductDetailCatalogResult> {\n const { market, locale, fallbackLocale, ...queryOptions } = options ?? {}\n return this.useProductDetail(\n {\n id,\n ...(market ? { market } : {}),\n ...(locale ? { locale } : {}),\n ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),\n },\n queryOptions,\n )\n }\n}\n","import type {\n ProductFallbackLocaleOption,\n ProductLocaleOption,\n} from '../../api/product-api'\n\nfunction normalizedMarket(value: string | undefined): string | undefined {\n const market = value?.trim()\n return market || undefined\n}\n\ntype ProductLocaleQueryOptions = {\n locale?: ProductLocaleOption\n fallbackLocale?: ProductFallbackLocaleOption\n}\n\nfunction appendProductLocaleSearchParams(\n search: URLSearchParams,\n options?: ProductLocaleQueryOptions,\n): void {\n if (options?.locale) search.set('locale', options.locale)\n if (options?.fallbackLocale !== undefined) {\n search.set(\n 'fallbackLocale',\n options.fallbackLocale === false ? 'none' : options.fallbackLocale,\n )\n }\n}\n\nexport function productDetailSearchParams(\n params: ({ slug: string } | { id: string }) & {\n market?: string\n } & ProductLocaleQueryOptions,\n): string {\n const search = new URLSearchParams()\n if ('slug' in params) {\n search.set('slug', params.slug)\n } else {\n search.set('id', params.id)\n }\n const market = normalizedMarket(params.market)\n if (market) search.set('market', market)\n appendProductLocaleSearchParams(search, params)\n return search.toString()\n}\n\nexport function listingGroupsSearchParams(\n params: {\n productIds: string[]\n market?: string\n } & ProductLocaleQueryOptions,\n): string {\n const ids = params.productIds.map(encodeURIComponent).join(',')\n const search = new URLSearchParams()\n const market = normalizedMarket(params.market)\n if (market) search.set('market', market)\n appendProductLocaleSearchParams(search, params)\n const query = search.toString()\n return `ids=${ids}${query ? `&${query}` : ''}`\n}\n\ntype ListingGroupsQueryUrlOptions = {\n market?: string\n locale?: ProductLocaleOption\n fallbackLocale?: ProductFallbackLocaleOption\n page?: number\n limit?: number\n sort?: string | string[]\n where?: Record<string, unknown>\n}\n\nfunction appendListingGroupsQuerySearchParams(\n search: URLSearchParams,\n options?: ListingGroupsQueryUrlOptions,\n): void {\n const market = normalizedMarket(options?.market)\n if (market) search.set('market', market)\n appendProductLocaleSearchParams(search, options)\n if (options?.page != null) search.set('page', String(options.page))\n if (options?.limit != null) search.set('limit', String(options.limit))\n if (options?.sort != null) {\n const sort = options.sort\n search.set('sort', Array.isArray(sort) ? sort.join(',') : sort)\n }\n if (options?.where != null) {\n search.set('whereJson', JSON.stringify(options.where))\n }\n}\n\n/** Server-auth GET PLP listing-groups query (full variant stock fields). */\nexport function listingPageSearchParams(\n options?: ListingGroupsQueryUrlOptions,\n): string {\n const search = new URLSearchParams()\n appendListingGroupsQuerySearchParams(search, options)\n return search.toString()\n}\n\nexport function stockSnapshotSearchParams(params: {\n variantIds: string[]\n}): string {\n return `variantIds=${params.variantIds.map(encodeURIComponent).join(',')}`\n}\n","const operationBrand: unique symbol = Symbol('sdk-http-operation')\n\n/**\n * Opt-in representation for Standard V2 PortOne action capabilities.\n *\n * The default application/json projection stays byte-shape compatible with\n * strict SDK parsers released before these capability literals existed.\n */\nexport const PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE =\n 'application/vnd.01software.portone-action-capabilities.v1+json' as const\n\nexport function requestsPortOneStandardActionCapabilities(\n accept: string | null | undefined,\n): boolean {\n return (\n accept?.trim().toLowerCase() ===\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE\n )\n}\n\nexport type HttpOperation = {\n readonly [operationBrand]: true\n readonly collection: string | null\n readonly method: 'get' | 'post' | 'patch' | 'delete'\n readonly path: `/${string}`\n readonly errorFamily?: 'commerce'\n /**\n * Canonical commerce reasons emitted by an otherwise legacy-compatible\n * endpoint. Only these responses may be normalized and parsed as the strict\n * commerce envelope; every other response retains its established shape.\n */\n readonly typedCommerceErrorReasons?: readonly string[]\n}\n\nconst operation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n errorFamily?: HttpOperation['errorFamily'],\n) =>\n Object.freeze({\n [operationBrand]: true,\n collection,\n method,\n path,\n ...(errorFamily && { errorFamily }),\n } as const)\n\nconst strictCommerceOperation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n) => operation(collection, method, path, 'commerce')\n\nconst selectiveCommerceOperation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n TReasons extends readonly [string, ...string[]],\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n typedCommerceErrorReasons: TReasons,\n) =>\n Object.freeze({\n ...operation(collection, method, path),\n typedCommerceErrorReasons: Object.freeze([...typedCommerceErrorReasons]),\n } as const)\n\nexport const COMMERCE_ENDPOINT_OPERATIONS = {\n products: {\n detail: operation('products', 'get', '/detail'),\n detailCatalog: operation('products', 'get', '/detail/catalog'),\n listingGroups: operation('products', 'get', '/listing-groups'),\n listingGroupsCatalog: operation(\n 'products',\n 'get',\n '/listing-groups/catalog',\n ),\n listingGroupsQuery: operation('products', 'post', '/listing-groups/query'),\n listingGroupsQueryGet: operation(\n 'products',\n 'get',\n '/listing-groups/query',\n ),\n listingGroupsQueryCatalog: operation(\n 'products',\n 'get',\n '/listing-groups/query/catalog',\n ),\n stockCheck: operation('products', 'post', '/stock-check'),\n stockSnapshot: operation('products', 'get', '/stock'),\n upsert: operation('products', 'post', '/upsert'),\n },\n orders: {\n create: operation('orders', 'post', '/create'),\n update: operation('orders', 'post', '/update'),\n confirmPayment: operation('orders', 'post', '/confirm-payment'),\n byPayment: operation('orders', 'get', '/by-payment'),\n cancel: operation('orders', 'post', '/cancel'),\n resolveCancelRefund: selectiveCommerceOperation(\n 'orders',\n 'post',\n '/resolve-cancel-refund',\n ['managed_refund_attestation_forbidden'],\n ),\n checkout: strictCommerceOperation('orders', 'post', '/checkout'),\n createFulfillment: operation('orders', 'post', '/create-fulfillment'),\n updateFulfillment: operation('orders', 'post', '/update-fulfillment'),\n },\n checkouts: {\n detail: strictCommerceOperation('checkouts', 'post', '/detail'),\n query: strictCommerceOperation('checkouts', 'post', '/query'),\n },\n draftOrders: {\n calculate: operation('draft-orders', 'post', '/:id/calculate'),\n complete: operation('draft-orders', 'post', '/:id/complete'),\n finalize: operation('draft-orders', 'post', '/:id/finalize'),\n },\n transactions: {\n update: operation('transactions', 'post', '/update'),\n },\n returns: {\n create: operation('returns', 'post', '/create'),\n update: operation('returns', 'post', '/update'),\n returnRefund: operation('returns', 'post', '/return-refund'),\n },\n fulfillmentOrders: {\n prepare: operation(\n 'fulfillment-orders',\n 'post',\n '/prepare-fulfillment-order',\n ),\n },\n fulfillments: {\n bulkImport: operation('fulfillments', 'post', '/bulk-import'),\n },\n carts: {\n create: strictCommerceOperation('carts', 'post', '/create'),\n retrieve: strictCommerceOperation('carts', 'post', '/retrieve'),\n mine: strictCommerceOperation('carts', 'post', '/mine'),\n merge: strictCommerceOperation('carts', 'post', '/merge'),\n addItem: strictCommerceOperation('carts', 'post', '/add-item'),\n updateItem: strictCommerceOperation('carts', 'post', '/update-item'),\n removeItem: strictCommerceOperation('carts', 'post', '/remove-item'),\n updateDiscountCodes: strictCommerceOperation(\n 'carts',\n 'post',\n '/update-discount-codes',\n ),\n updateAttributes: strictCommerceOperation(\n 'carts',\n 'post',\n '/update-attributes',\n ),\n clear: strictCommerceOperation('carts', 'post', '/clear'),\n },\n paymentSessions: {\n create: strictCommerceOperation('payment-sessions', 'post', '/create'),\n retrieve: strictCommerceOperation('payment-sessions', 'post', '/retrieve'),\n cancel: strictCommerceOperation('payment-sessions', 'post', '/cancel'),\n server: {\n create: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/create',\n ),\n retrieve: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/retrieve',\n ),\n cancel: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/cancel',\n ),\n confirm: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/confirm',\n ),\n findPortOne: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/portone/find',\n ),\n reconcilePortOne: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/portone/reconcile',\n ),\n },\n custom: {\n create: operation('orders', 'post', '/custom-payment-sessions'),\n retrieve: operation(\n 'orders',\n 'post',\n '/custom-payment-sessions/retrieve',\n ),\n confirm: operation('orders', 'post', '/custom-payment-sessions/confirm'),\n },\n },\n shippingPolicies: {\n calculate: operation('shipping-policies', 'post', '/calculate'),\n },\n discounts: {\n validate: operation('discounts', 'post', '/validate'),\n },\n} as const\n\nconst portOneStandardActionCapabilityOperations = new Set<HttpOperation>([\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.create,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.retrieve,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.create,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.retrieve,\n])\n\n/**\n * Whether this operation may negotiate the Standard V2 capability projection.\n *\n * Create still requires a Standard V2 request profile, while retrieve discovers\n * the provider/profile from the stored session. Cancel and confirm deliberately\n * remain on the released JSON representation.\n */\nexport function supportsPortOneStandardActionCapabilityNegotiation(\n descriptor: HttpOperation,\n): boolean {\n return portOneStandardActionCapabilityOperations.has(descriptor)\n}\n\nexport const MEMBERSHIP_ENDPOINT_OPERATIONS = {\n subscribe: operation(null, 'post', '/memberships/subscribe'),\n cancel: operation(null, 'post', '/memberships/:id/cancel'),\n me: operation(null, 'get', '/memberships/me'),\n chargeResult: operation(null, 'post', '/memberships/:id/charge-result'),\n refundResult: operation(null, 'post', '/memberships/:id/refund-result'),\n revoke: operation(null, 'post', '/memberships/:id/revoke'),\n} as const\n\n/** Server-authenticated source-aware Customer Group authority operations. */\nexport const CUSTOMER_GROUP_ENDPOINT_OPERATIONS = {\n members: operation('customer-groups', 'get', '/:id/members'),\n grant: operation('customer-groups', 'post', '/:id/members/grant'),\n revoke: operation('customer-groups', 'post', '/:id/members/revoke'),\n} as const\n\n/** PAT-only operator controls for the active tenant embedded admin binding. */\nexport const EMBEDDED_ADMIN_ENDPOINT_OPERATIONS = {\n show: operation('tenants', 'get', '/embedded-admin-app'),\n configure: operation('tenants', 'patch', '/embedded-admin-app'),\n disable: operation('tenants', 'delete', '/embedded-admin-app'),\n} as const\n\n/** Shaped event operations shared by their owning runtime and SDK surfaces. */\nexport const EVENTS_ENDPOINT_OPERATIONS = {\n events: {\n convertSchedule: operation('events', 'post', '/:id/schedule'),\n },\n occurrences: {\n range: operation('event-occurrences', 'get', '/range'),\n admissionAvailability: operation(\n 'event-occurrences',\n 'get',\n '/admission-availability',\n ),\n },\n} as const\n\n/** Public, shaped browser reads served by community collections. */\nexport const COMMUNITY_ENDPOINT_OPERATIONS = {\n posts: {\n detail: operation('posts', 'get', '/detail'),\n },\n} as const\n\nexport function resolveOperationTemplate(descriptor: HttpOperation): string {\n return descriptor.collection\n ? `/api/${descriptor.collection}${descriptor.path}`\n : `/api${descriptor.path}`\n}\n\nexport function resolveOperationPath(\n descriptor: HttpOperation,\n options?: {\n pathParams?: Readonly<Record<string, string>>\n query?: string | URLSearchParams\n },\n): string {\n const path = resolveOperationTemplate(descriptor).replace(\n /:([A-Za-z][A-Za-z0-9_]*)/g,\n (_, key) => {\n const value = options?.pathParams?.[key]\n if (value === undefined) {\n throw new TypeError(`Missing path parameter: ${key}`)\n }\n return encodeURIComponent(value)\n },\n )\n const unresolved = path.match(/:([A-Za-z][A-Za-z0-9_]*)/)\n if (unresolved) {\n throw new TypeError(`Missing path parameter: ${unresolved[1]}`)\n }\n\n const query = options?.query?.toString().replace(/^\\?/, '')\n return query ? `${path}?${query}` : path\n}\n\nexport function resolveOperationMethod(\n descriptor: HttpOperation,\n): Uppercase<HttpOperation['method']> {\n return descriptor.method.toUpperCase() as Uppercase<HttpOperation['method']>\n}\n","// SDK-facing semantic view over the shared commerce transport manifest.\n//\n// The private http-contracts workspace package is the sole authority for\n// commerce and membership transport identity (collection, method, path).\n// Console mounts the same operations, and\n// `apps/console/tests/unit/sdk/endpoint-contract-parity.test.ts` proves each\n// declared operation is registered exactly once with a handler — see\n// `docs/contracts/platform/public-api-boundary.md` (PLAT-API-016).\n//\n// This module only groups those operations under the names the SDK APIs call\n// them by, including the deliberate browser/server aliases that are an\n// authorization lane rather than a second transport. It must not declare a\n// method or path literal; `tests/unit/api/endpoint-transport-authority.test.ts`\n// fails closed if one reappears.\n//\n// Keep this internal — it is the transport contract, not public SDK surface.\nimport {\n CUSTOMER_GROUP_ENDPOINT_OPERATIONS,\n COMMERCE_ENDPOINT_OPERATIONS,\n MEMBERSHIP_ENDPOINT_OPERATIONS,\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE,\n type HttpOperation,\n} from '@01.software/http-contracts'\n\nexport {\n resolveOperationMethod,\n resolveOperationPath,\n} from '@01.software/http-contracts'\nexport {\n CUSTOMER_GROUP_ENDPOINT_OPERATIONS,\n COMMERCE_ENDPOINT_OPERATIONS,\n MEMBERSHIP_ENDPOINT_OPERATIONS,\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE,\n}\n\nexport type CommerceEndpointDescriptor = HttpOperation\n\n/**\n * Widens a manifest operation to the nameable `HttpOperation` type. Without it\n * the inferred literal type leaks the manifest's private brand symbol into the\n * SDK declaration output (TS4023).\n */\nconst sharedEndpoint = (descriptor: HttpOperation): HttpOperation => descriptor\n\nexport function resolveOperationErrorFamily(\n descriptor: CommerceEndpointDescriptor,\n): 'commerce' | undefined {\n return descriptor.errorFamily\n}\n\nexport function resolveOperationTypedCommerceErrorReasons(\n descriptor: CommerceEndpointDescriptor,\n): readonly string[] | undefined {\n return descriptor.typedCommerceErrorReasons\n}\n\nexport const COMMERCE_ENDPOINTS = {\n products: {\n detail: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.products.detail),\n detailCatalog: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.detailCatalog,\n ),\n listingGroups: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroups,\n ),\n listingGroupsCatalog: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsCatalog,\n ),\n // The manifest keeps the GET read and the POST body-query apart; this\n // semantic name has always resolved to the GET one.\n listingGroupsQuery: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQueryGet,\n ),\n listingGroupsQueryCatalog: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQueryCatalog,\n ),\n stockCheck: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.stockCheck,\n ),\n stockSnapshot: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.stockSnapshot,\n ),\n upsert: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.products.upsert),\n },\n orders: {\n update: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.update),\n byPayment: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.byPayment),\n cancel: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.cancel),\n resolveCancelRefund: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.orders.resolveCancelRefund,\n ),\n createFulfillment: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.orders.createFulfillment,\n ),\n updateFulfillment: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.orders.updateFulfillment,\n ),\n },\n checkouts: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.checkout),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.detail),\n server: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.checkout),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.detail),\n query: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.query),\n },\n },\n returns: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.returns.create),\n update: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.returns.update),\n returnRefund: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.returns.returnRefund,\n ),\n },\n fulfillmentOrders: {\n prepare: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.fulfillmentOrders.prepare,\n ),\n },\n fulfillments: {\n bulkImport: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.fulfillments.bulkImport,\n ),\n },\n carts: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.create),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.retrieve),\n mine: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.mine),\n merge: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.merge),\n server: {\n // Server credentials are an authorization lane, not a second Cart\n // transport. These must stay bound to the registered shared operations.\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.create),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.retrieve),\n mine: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.mine),\n merge: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.merge),\n addItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.addItem),\n updateItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.updateItem),\n removeItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.removeItem),\n updateDiscountCodes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateDiscountCodes,\n ),\n updateAttributes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateAttributes,\n ),\n clear: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.clear),\n },\n addItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.addItem),\n updateItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.updateItem),\n removeItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.removeItem),\n updateDiscountCodes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateDiscountCodes,\n ),\n updateAttributes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateAttributes,\n ),\n clear: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.clear),\n },\n paymentSessions: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.create),\n retrieve: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.retrieve,\n ),\n cancel: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.cancel),\n custom: {\n create: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.create,\n ),\n retrieve: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.retrieve,\n ),\n confirm: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.confirm,\n ),\n },\n server: {\n create: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.create,\n ),\n retrieve: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.retrieve,\n ),\n cancel: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.cancel,\n ),\n confirm: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.confirm,\n ),\n findPortOne: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.findPortOne,\n ),\n reconcilePortOne: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.reconcilePortOne,\n ),\n },\n },\n shippingPolicies: {\n calculate: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.shippingPolicies.calculate,\n ),\n },\n} as const\n","/**\n * Fetch-based SSE connection manager for real-time collection change events.\n * Uses fetch + ReadableStream to support custom auth headers (unlike native EventSource).\n */\n\nexport interface RealtimeEvent {\n collection: string\n operation: string\n id: string | null\n timestamp: string\n}\n\nexport type RealtimeListener = (event: RealtimeEvent) => void\n\nconst INITIAL_RECONNECT_DELAY = 1_000\nconst MAX_RECONNECT_DELAY = 30_000\nconst RECONNECT_BACKOFF_FACTOR = 2\nconst MAX_NO_TOKEN_RETRIES = 5\n\nexport class RealtimeConnection {\n private abortController: AbortController | null = null\n private reconnectAttempt = 0\n private noTokenAttempts = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n private listeners = new Set<RealtimeListener>()\n private _connected = false\n\n constructor(\n private baseUrl: string,\n private publishableKey: string,\n private getToken: () => string | null,\n private collections?: string[],\n ) {}\n\n get connected(): boolean {\n return this._connected\n }\n\n addListener(fn: RealtimeListener): () => void {\n this.listeners.add(fn)\n return () => this.listeners.delete(fn)\n }\n\n connect(): void {\n if (this.abortController) return // Already connecting/connected\n\n this.abortController = new AbortController()\n this.startStream(this.abortController.signal)\n }\n\n disconnect(): void {\n this._connected = false\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n if (this.abortController) {\n this.abortController.abort()\n this.abortController = null\n }\n this.reconnectAttempt = 0\n this.noTokenAttempts = 0\n }\n\n private async startStream(signal: AbortSignal): Promise<void> {\n const token = this.getToken()\n if (!token) {\n this.noTokenAttempts++\n if (this.noTokenAttempts >= MAX_NO_TOKEN_RETRIES) {\n // Stop reconnecting — no token available after multiple attempts\n this._connected = false\n this.abortController = null\n return\n }\n this.scheduleReconnect()\n return\n }\n this.noTokenAttempts = 0\n\n const params = this.collections?.length\n ? `?collections=${this.collections.join(',')}`\n : ''\n const url = `${this.baseUrl}/api/events/stream${params}`\n\n try {\n const response = await fetch(url, {\n headers: {\n 'X-Publishable-Key': this.publishableKey,\n Authorization: `Bearer ${token}`,\n },\n signal,\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n // Token expired — try reconnecting (will get fresh token)\n this.scheduleReconnect()\n return\n }\n throw new Error(`SSE connection failed: ${response.status}`)\n }\n\n if (!response.body) {\n throw new Error('SSE response has no body')\n }\n\n this._connected = true\n this.reconnectAttempt = 0\n\n await this.readStream(response.body, signal)\n } catch {\n if (signal.aborted) return // Intentional disconnect\n this._connected = false\n this.scheduleReconnect()\n }\n }\n\n private async readStream(\n body: ReadableStream<Uint8Array>,\n signal: AbortSignal,\n ): Promise<void> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent = ''\n let currentData = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done || signal.aborted) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? '' // Keep incomplete last line in buffer\n\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7)\n } else if (line.startsWith('data: ')) {\n currentData += (currentData ? '\\n' : '') + line.slice(6)\n } else if (line === '') {\n // Empty line = end of event\n if (currentEvent === 'collection:change' && currentData) {\n try {\n const event: RealtimeEvent = JSON.parse(currentData)\n for (const listener of this.listeners) {\n try {\n listener(event)\n } catch {\n // Listener error — ignore\n }\n }\n } catch {\n // Malformed JSON — ignore\n }\n }\n currentEvent = ''\n currentData = ''\n }\n // Ignore comment lines (: heartbeat)\n }\n }\n } catch {\n // Stream read error\n } finally {\n reader.releaseLock()\n this._connected = false\n if (!signal.aborted) {\n this.scheduleReconnect()\n }\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimer) return\n\n const delay = Math.min(\n INITIAL_RECONNECT_DELAY *\n Math.pow(RECONNECT_BACKOFF_FACTOR, this.reconnectAttempt),\n MAX_RECONNECT_DELAY,\n )\n this.reconnectAttempt++\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null\n this.abortController = new AbortController()\n this.startStream(this.abortController.signal)\n }, delay)\n }\n}\n","import type {\n PublicCollection,\n RootClient,\n RootServerClient,\n ServerCollection,\n} from '../client/types'\nimport type { CollectionClient, ServerCollectionClient } from '../collection'\nimport { QueryHooks, type ReadOnlyQueryHooks } from './query-hooks'\nimport { getQueryClient } from './get-query-client'\nimport type { QueryClient } from '@tanstack/react-query'\n\nfunction getClientMarket(client: {\n getConfig?: () => { market?: string | undefined }\n}): string | undefined {\n return client.getConfig?.().market\n}\n\nfunction createReadOnlyQueryHooksFacade(\n hooks: QueryHooks<PublicCollection>,\n): ReadOnlyQueryHooks {\n return {\n useQuery: hooks.useQuery.bind(hooks),\n useSuspenseQuery: hooks.useSuspenseQuery.bind(hooks),\n useQueryById: hooks.useQueryById.bind(hooks),\n useSuspenseQueryById: hooks.useSuspenseQueryById.bind(hooks),\n useInfiniteQuery: hooks.useInfiniteQuery.bind(hooks),\n useSuspenseInfiniteQuery: hooks.useSuspenseInfiniteQuery.bind(hooks),\n prefetchQuery: hooks.prefetchQuery.bind(hooks),\n prefetchQueryById: hooks.prefetchQueryById.bind(hooks),\n prefetchInfiniteQuery: hooks.prefetchInfiniteQuery.bind(hooks),\n invalidateQueries: hooks.invalidateQueries.bind(hooks),\n getQueryData: hooks.getQueryData.bind(hooks),\n setQueryData: hooks.setQueryData.bind(hooks),\n useCustomerMe: hooks.useCustomerMe.bind(hooks),\n useCustomerLogin: hooks.useCustomerLogin.bind(hooks),\n useCustomerRegister: hooks.useCustomerRegister.bind(hooks),\n useCustomerLogout: hooks.useCustomerLogout.bind(hooks),\n useCustomerForgotPassword: hooks.useCustomerForgotPassword.bind(hooks),\n useCustomerResetPassword: hooks.useCustomerResetPassword.bind(hooks),\n useCustomerRefreshToken: hooks.useCustomerRefreshToken.bind(hooks),\n useCustomerUpdateProfile: hooks.useCustomerUpdateProfile.bind(hooks),\n useCustomerChangePassword: hooks.useCustomerChangePassword.bind(hooks),\n invalidateCustomerQueries: hooks.invalidateCustomerQueries.bind(hooks),\n getCustomerData: hooks.getCustomerData.bind(hooks),\n setCustomerData: hooks.setCustomerData.bind(hooks),\n useProductListingGroupsCatalogQuery:\n hooks.useProductListingGroupsCatalogQuery.bind(hooks),\n useSuspenseProductListingGroupsCatalogQuery:\n hooks.useSuspenseProductListingGroupsCatalogQuery.bind(hooks),\n useInfiniteProductListingGroupsCatalogQuery:\n hooks.useInfiniteProductListingGroupsCatalogQuery.bind(hooks),\n useSuspenseInfiniteProductListingGroupsCatalogQuery:\n hooks.useSuspenseInfiniteProductListingGroupsCatalogQuery.bind(hooks),\n prefetchProductListingGroupsCatalogQuery:\n hooks.prefetchProductListingGroupsCatalogQuery.bind(hooks),\n prefetchInfiniteProductListingGroupsCatalogQuery:\n hooks.prefetchInfiniteProductListingGroupsCatalogQuery.bind(hooks),\n useProductListingPage: hooks.useProductListingPage.bind(hooks),\n useSuspenseProductListingPage:\n hooks.useSuspenseProductListingPage.bind(hooks),\n useInfiniteProductListingPage:\n hooks.useInfiniteProductListingPage.bind(hooks),\n prefetchProductListingPage: hooks.prefetchProductListingPage.bind(hooks),\n prefetchInfiniteProductListingPage:\n hooks.prefetchInfiniteProductListingPage.bind(hooks),\n useProductDetail: hooks.useProductDetail.bind(hooks),\n useProductDetailBySlug: hooks.useProductDetailBySlug.bind(hooks),\n useProductDetailById: hooks.useProductDetailById.bind(hooks),\n } as ReadOnlyQueryHooks\n}\n\nexport function createQueryHooks(\n client: RootClient,\n queryClient: QueryClient = getQueryClient(),\n): ReadOnlyQueryHooks {\n const hooks = new QueryHooks<PublicCollection>(\n queryClient,\n client.collections as unknown as CollectionClient<PublicCollection>,\n client.customer.auth,\n client.commerce as never,\n getClientMarket(client),\n )\n\n return createReadOnlyQueryHooksFacade(hooks)\n}\n\nexport function createServerQueryHooks(\n client: RootServerClient,\n queryClient: QueryClient = getQueryClient(),\n): QueryHooks<ServerCollection> {\n return new QueryHooks<ServerCollection>(\n queryClient,\n client.collections as ServerCollectionClient,\n undefined,\n client.commerce,\n getClientMarket(client),\n )\n}\n"],"mappings":"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","names":["useQueryOriginal","useMutationOriginal","useMutationOriginal","useQueryOriginal","useInfiniteQueryOriginal","useQueryOriginal","useSuspenseInfiniteQueryOriginal","useSuspenseQueryOriginal","useQueryOriginal","useSuspenseQueryOriginal","useInfiniteQueryOriginal","useSuspenseInfiniteQueryOriginal"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/query/get-query-client.ts","../src/core/query/query-keys.ts","../src/core/query/collection-hooks.ts","../src/core/query/customer-hooks.ts","../src/core/errors.ts","../src/core/query/query-hooks.ts","../src/core/internal/utils/query-string.ts","../../../internal/http-contracts/src/index.ts","../src/core/api/endpoints.ts","../src/core/query/realtime.ts","../src/core/query/query-client.ts"],"sourcesContent":["import {\n isServer,\n QueryClient,\n defaultShouldDehydrateQuery,\n} from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n // Infinite staleTime: server-fetched data persists until explicitly invalidated.\n // For browser clients needing fresher data, override per-query:\n // useQuery({ ..., staleTime: 5 * 60 * 1000 })\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) ||\n query.state.status === 'pending',\n shouldRedactErrors: () => false,\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined\nlet browserStorefrontQueryClient: QueryClient | undefined\n\n/** Default React Query client (SSR hydration-friendly: infinite staleTime). */\nexport function getQueryClient() {\n if (isServer) {\n return makeQueryClient()\n }\n if (!browserQueryClient) {\n browserQueryClient = makeQueryClient()\n }\n return browserQueryClient\n}\n\nconst STOREFRONT_STALE_TIME_MS = 60_000\n\nfunction makeStorefrontQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: STOREFRONT_STALE_TIME_MS,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) ||\n query.state.status === 'pending',\n shouldRedactErrors: () => false,\n },\n },\n })\n}\n\n/**\n * Browser storefront client: refetches catalog data after ~1 minute instead of\n * keeping SSR data fresh forever. Use with `createQueryHooks(client, queryClient)`.\n */\nexport function getStorefrontQueryClient() {\n if (isServer) {\n return makeStorefrontQueryClient()\n }\n if (!browserStorefrontQueryClient) {\n browserStorefrontQueryClient = makeStorefrontQueryClient()\n }\n return browserStorefrontQueryClient\n}\n","import type { ServerCollection, ApiQueryOptions } from '../client/types'\nimport type { ProductDetailParams, ProductListingPageParams } from '../api'\nimport type { ProductListingGroupsQueryOptions } from './query-hooks'\n\ntype ProductListingPageKeyParams = {\n mode: 'catalog' | 'full'\n market?: string\n locale?: ProductListingPageParams['locale']\n fallbackLocale?: ProductListingPageParams['fallbackLocale']\n page?: number\n limit?: number\n search?: string\n sort?: ProductListingPageParams['sort']\n filters?: NonNullable<ProductListingPageParams['filters']>\n basePath?: string\n trailingSlash?: boolean\n emit?: ProductListingPageParams['emit']\n preferCompleteVariantFromHint?: ProductListingPageParams['preferCompleteVariantFromHint']\n}\n\nfunction nonEmpty(values: string[] | undefined): string[] | undefined {\n return values?.length ? values : undefined\n}\n\nfunction canonicalProductListingPageParams(\n params: ProductListingPageParams = {},\n limit?: number,\n): ProductListingPageKeyParams {\n const filters = params.filters\n const canonicalFilters: NonNullable<ProductListingPageParams['filters']> = {}\n const ids = nonEmpty(filters?.ids)\n if (ids) canonicalFilters.ids = ids\n const slugs = nonEmpty(filters?.slugs)\n if (slugs) canonicalFilters.slugs = slugs\n const handles = nonEmpty(filters?.handles)\n if (handles) canonicalFilters.handles = handles\n const categoryIds = nonEmpty(filters?.categoryIds)\n if (categoryIds) canonicalFilters.categoryIds = categoryIds\n const tagIds = nonEmpty(filters?.tagIds)\n if (tagIds) canonicalFilters.tagIds = tagIds\n if (filters?.price?.min != null || filters?.price?.max != null) {\n canonicalFilters.price = {\n ...(filters.price.min != null && { min: filters.price.min }),\n ...(filters.price.max != null && { max: filters.price.max }),\n }\n }\n if (filters?.availableForSale != null) {\n canonicalFilters.availableForSale = filters.availableForSale\n }\n\n const search = params.search?.trim()\n const market = params.market?.trim()\n return {\n mode: params.mode ?? 'catalog',\n ...(market && { market }),\n ...(params.locale != null && { locale: params.locale }),\n ...(params.fallbackLocale !== undefined && {\n fallbackLocale: params.fallbackLocale,\n }),\n ...(params.page != null && { page: params.page }),\n ...(limit != null\n ? { limit }\n : params.limit != null\n ? { limit: params.limit }\n : {}),\n ...(search && { search }),\n ...(params.sort != null && { sort: params.sort }),\n ...(Object.keys(canonicalFilters).length > 0 && {\n filters: canonicalFilters,\n }),\n ...(params.basePath != null && { basePath: params.basePath }),\n ...(params.trailingSlash != null && {\n trailingSlash: params.trailingSlash,\n }),\n ...(params.emit != null && { emit: params.emit }),\n ...(params.preferCompleteVariantFromHint != null && {\n preferCompleteVariantFromHint: params.preferCompleteVariantFromHint,\n }),\n }\n}\n\nfunction canonicalMarket(value: string | undefined): string | undefined {\n const market = value?.trim()\n return market || undefined\n}\n\nexport function canonicalProductListingGroupsQueryOptions(\n options?: ProductListingGroupsQueryOptions,\n limit?: number,\n): ProductListingGroupsQueryOptions | undefined {\n const { market: rawMarket, ...rest } = options ?? {}\n const market = canonicalMarket(rawMarket)\n const canonical: ProductListingGroupsQueryOptions = {\n ...rest,\n ...(limit !== undefined ? { limit } : {}),\n ...(market ? { market } : {}),\n }\n return Object.keys(canonical).length > 0 ? canonical : undefined\n}\n\nfunction canonicalProductDetailParams(\n params: ProductDetailParams,\n): ProductDetailParams {\n const market = params.market?.trim()\n const localeOptions = {\n ...(params.locale != null && { locale: params.locale }),\n ...(params.fallbackLocale !== undefined && {\n fallbackLocale: params.fallbackLocale,\n }),\n }\n if ('slug' in params) {\n return {\n slug: params.slug,\n ...(market ? { market } : {}),\n ...localeOptions,\n }\n }\n return {\n id: params.id,\n ...(market ? { market } : {}),\n ...localeOptions,\n }\n}\n\nexport function collectionKeys<T extends ServerCollection>(collection: T) {\n return {\n all: [collection] as const,\n lists: () => [collection, 'list'] as const,\n list: (options?: ApiQueryOptions) => [collection, 'list', options] as const,\n details: () => [collection, 'detail'] as const,\n detail: (id: string, options?: ApiQueryOptions) =>\n [collection, 'detail', id, options] as const,\n infinites: () => [collection, 'infinite'] as const,\n infinite: (options?: Omit<ApiQueryOptions, 'page'>, pageSize?: number) =>\n [\n collection,\n 'infinite',\n pageSize === undefined ? options : { ...options, limit: pageSize },\n ] as const,\n }\n}\n\nexport const customerKeys = {\n all: ['customer'] as const,\n me: () => ['customer', 'me'] as const,\n}\n\nexport const productKeys = {\n listingGroups: (options?: ProductListingGroupsQueryOptions) =>\n [\n 'products',\n 'listing-groups',\n 'list',\n canonicalProductListingGroupsQueryOptions(options),\n ] as const,\n listingGroupsCatalog: (options?: ProductListingGroupsQueryOptions) =>\n [\n 'products',\n 'listing-groups',\n 'catalog',\n canonicalProductListingGroupsQueryOptions(options),\n ] as const,\n listingGroupsInfinite: (\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>,\n pageSize?: number,\n ) =>\n [\n 'products',\n 'listing-groups',\n 'infinite',\n canonicalProductListingGroupsQueryOptions(options, pageSize),\n ] as const,\n listingGroupsCatalogInfinite: (\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>,\n pageSize?: number,\n ) =>\n [\n 'products',\n 'listing-groups',\n 'catalog',\n 'infinite',\n canonicalProductListingGroupsQueryOptions(options, pageSize),\n ] as const,\n listingPage: (params?: ProductListingPageParams) =>\n [\n 'products',\n 'listing-page',\n canonicalProductListingPageParams(params),\n ] as const,\n listingPageInfinite: (\n params?: Omit<ProductListingPageParams, 'page' | 'limit'>,\n pageSize?: number,\n ) =>\n [\n 'products',\n 'listing-page',\n 'infinite',\n canonicalProductListingPageParams(\n params as ProductListingPageParams | undefined,\n pageSize,\n ),\n ] as const,\n detail: (params: ProductDetailParams) =>\n ['products', 'detail', canonicalProductDetailParams(params)] as const,\n detailAll: () => ['products', 'detail'] as const,\n}\n","import {\n QueryClient,\n useQuery as useQueryOriginal,\n useSuspenseQuery as useSuspenseQueryOriginal,\n useInfiniteQuery as useInfiniteQueryOriginal,\n useSuspenseInfiniteQuery as useSuspenseInfiniteQueryOriginal,\n useMutation as useMutationOriginal,\n} from '@tanstack/react-query'\nimport type {\n InfiniteData,\n UseInfiniteQueryResult,\n UseQueryResult,\n UseSuspenseInfiniteQueryResult,\n UseSuspenseQueryResult,\n} from '@tanstack/react-query'\nimport type {\n PublicCollection,\n ServerCollection,\n ApiQueryOptions,\n PublicReadQueryOptions,\n PayloadFindResponse,\n PayloadMutationResponse,\n} from '../client/types'\nimport { type CollectionClient, type CollectionType } from '../collection'\nimport { SDKError } from '../internal/errors'\nimport { collectionKeys } from './query-keys'\n\n// ============================================================================\n// Query Params Types\n// ============================================================================\n\ntype CollectionReadOptions<TCollection extends ServerCollection> =\n [TCollection] extends [PublicCollection]\n ? PublicReadQueryOptions\n : ApiQueryOptions\n\nexport interface CollectionQueryParams<\n T extends ServerCollection,\n Options extends ApiQueryOptions = ApiQueryOptions,\n> {\n collection: T\n options?: Options\n}\n\nexport interface CollectionDetailQueryParams<\n T extends ServerCollection,\n Options extends ApiQueryOptions = ApiQueryOptions,\n> {\n collection: T\n id: string\n options?: Options\n}\n\nexport interface CollectionInfiniteQueryParams<\n T extends ServerCollection,\n Options extends ApiQueryOptions = ApiQueryOptions,\n> {\n collection: T\n options?: Omit<Options, 'page'>\n pageSize?: number\n}\n\n// ============================================================================\n// Shared option types\n// ============================================================================\n\nexport interface QueryOptions<TQueryFnData = unknown, TData = TQueryFnData> {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean | 'always'\n refetchInterval?: number | false\n retry?: boolean | number\n select?: (data: TQueryFnData) => TData\n placeholderData?:\n | TQueryFnData\n | ((previousData: TData | undefined) => TQueryFnData | undefined)\n initialData?: TQueryFnData | (() => TQueryFnData)\n initialDataUpdatedAt?: number | (() => number | undefined)\n}\n\nexport type SuspenseQueryOptions<\n TQueryFnData = unknown,\n TData = TQueryFnData,\n> = Omit<QueryOptions<TQueryFnData, TData>, 'enabled' | 'placeholderData'>\n\n// placeholderData/initialData omitted: InfiniteData<T> structure is complex to construct\nexport interface InfiniteQueryOptions<\n TQueryFnData = unknown,\n TData = InfiniteData<TQueryFnData>,\n> {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean | 'always'\n refetchInterval?: number | false\n retry?: boolean | number\n select?: (data: InfiniteData<TQueryFnData>) => TData\n}\n\nexport type SuspenseInfiniteQueryOptions<\n TQueryFnData = unknown,\n TData = InfiniteData<TQueryFnData>,\n> = Omit<InfiniteQueryOptions<TQueryFnData, TData>, 'enabled'>\n\ninterface MutationCallbacks<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: SDKError) => void\n onSettled?: () => void\n}\n\n// ============================================================================\n// Product detail invalidation\n// ============================================================================\n\nconst PRODUCT_DETAIL_INVALIDATING_COLLECTIONS = new Set([\n 'products',\n 'product-variants',\n 'product-options',\n 'product-option-values',\n 'product-categories',\n 'product-tags',\n 'product-collections',\n 'brands',\n 'brand-logos',\n 'images',\n])\n\n// ============================================================================\n// Collection Hooks Mixin\n// ============================================================================\n\nconst DEFAULT_PAGE_SIZE = 20\n\nexport class CollectionHooks<TCollection extends ServerCollection = PublicCollection> {\n protected queryClient: QueryClient\n protected collectionClient: CollectionClient<TCollection>\n\n constructor(\n queryClient: QueryClient,\n collectionClient: CollectionClient<TCollection>,\n ) {\n this.queryClient = queryClient\n this.collectionClient = collectionClient\n }\n\n // ===== useQuery =====\n useQuery<\n T extends TCollection,\n TData = PayloadFindResponse<CollectionType<T>>,\n >(\n params: CollectionQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: QueryOptions<PayloadFindResponse<CollectionType<T>>, TData>,\n ): UseQueryResult<TData> {\n const { collection, options: queryOptions } = params\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .find(queryOptions)\n },\n ...restOptions,\n // NonFunctionGuard<T> incompatible with generic union types — safe cast\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n // ===== useSuspenseQuery =====\n useSuspenseQuery<\n T extends TCollection,\n TData = PayloadFindResponse<CollectionType<T>>,\n >(\n params: CollectionQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: SuspenseQueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >,\n ): UseSuspenseQueryResult<TData> {\n const { collection, options: queryOptions } = params\n\n return useSuspenseQueryOriginal({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .find(queryOptions)\n },\n ...options,\n })\n }\n\n // ===== useQueryById =====\n useQueryById<T extends TCollection, TData = CollectionType<T>>(\n params: CollectionDetailQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: QueryOptions<CollectionType<T>, TData>,\n ): UseQueryResult<TData> {\n const { collection, id, options: queryOptions } = params\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n CollectionType<T>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .findById(id, queryOptions)\n },\n ...restOptions,\n // NonFunctionGuard<T> incompatible with generic union types — safe cast\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n // ===== useSuspenseQueryById =====\n useSuspenseQueryById<T extends TCollection, TData = CollectionType<T>>(\n params: CollectionDetailQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: SuspenseQueryOptions<CollectionType<T>, TData>,\n ): UseSuspenseQueryResult<TData> {\n const { collection, id, options: queryOptions } = params\n\n return useSuspenseQueryOriginal({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .findById(id, queryOptions)\n },\n ...options,\n })\n }\n\n // ===== useInfiniteQuery =====\n useInfiniteQuery<\n T extends TCollection,\n TData = InfiniteData<PayloadFindResponse<CollectionType<T>>>,\n >(\n params: CollectionInfiniteQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: InfiniteQueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n const { collection, options: queryOptions } = params\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? DEFAULT_PAGE_SIZE\n\n return useInfiniteQueryOriginal({\n queryKey: collectionKeys(collection).infinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionClient\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: PayloadFindResponse<CollectionType<T>>) => {\n return lastPage.hasNextPage ? lastPage.nextPage : undefined\n },\n ...options,\n })\n }\n\n // ===== useSuspenseInfiniteQuery =====\n useSuspenseInfiniteQuery<\n T extends TCollection,\n TData = InfiniteData<PayloadFindResponse<CollectionType<T>>>,\n >(\n params: CollectionInfiniteQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: SuspenseInfiniteQueryOptions<\n PayloadFindResponse<CollectionType<T>>,\n TData\n >,\n ): UseSuspenseInfiniteQueryResult<TData> {\n const { collection, options: queryOptions } = params\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? DEFAULT_PAGE_SIZE\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: collectionKeys(collection).infinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionClient\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: PayloadFindResponse<CollectionType<T>>) => {\n return lastPage.hasNextPage ? lastPage.nextPage : undefined\n },\n ...options,\n })\n }\n\n // ===== prefetchQuery =====\n async prefetchQuery<T extends TCollection>(\n params: CollectionQueryParams<T, CollectionReadOptions<TCollection>>,\n options?: { staleTime?: number },\n ) {\n const { collection, options: queryOptions } = params\n\n return this.queryClient.prefetchQuery({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .find(queryOptions)\n },\n ...options,\n })\n }\n\n // ===== prefetchQueryById =====\n async prefetchQueryById<T extends TCollection>(\n params: CollectionDetailQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: { staleTime?: number },\n ) {\n const { collection, id, options: queryOptions } = params\n\n return this.queryClient.prefetchQuery({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n return await this.collectionClient\n .from(collection)\n .findById(id, queryOptions)\n },\n ...options,\n })\n }\n\n // ===== prefetchInfiniteQuery =====\n async prefetchInfiniteQuery<T extends TCollection>(\n params: CollectionInfiniteQueryParams<\n T,\n CollectionReadOptions<TCollection>\n >,\n options?: { pages?: number; staleTime?: number },\n ) {\n const { collection, options: queryOptions } = params\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? DEFAULT_PAGE_SIZE\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: collectionKeys(collection).infinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionClient\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: PayloadFindResponse<CollectionType<T>>) => {\n return lastPage.hasNextPage ? lastPage.nextPage : undefined\n },\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n // ===== Mutation Hooks =====\n\n useCreate<T extends TCollection>(\n params: { collection: T },\n options?: MutationCallbacks<PayloadMutationResponse<CollectionType<T>>>,\n ) {\n const { collection } = params\n\n return useMutationOriginal<\n PayloadMutationResponse<CollectionType<T>>,\n SDKError,\n {\n data: Partial<CollectionType<T>>\n file?: File | Blob\n filename?: string\n }\n >({\n mutationFn: async (variables) => {\n return await this.collectionClient\n .from(collection)\n .create(\n variables.data,\n variables.file\n ? { file: variables.file, filename: variables.filename }\n : undefined,\n )\n },\n onSuccess: (data) => {\n this.queryClient.invalidateQueries({\n queryKey: collectionKeys(collection).all,\n })\n if (PRODUCT_DETAIL_INVALIDATING_COLLECTIONS.has(collection)) {\n this.queryClient.invalidateQueries({ queryKey: ['products', 'detail'] })\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n useUpdate<T extends TCollection>(\n params: { collection: T },\n options?: MutationCallbacks<PayloadMutationResponse<CollectionType<T>>>,\n ) {\n const { collection } = params\n\n return useMutationOriginal<\n PayloadMutationResponse<CollectionType<T>>,\n SDKError,\n {\n id: string\n data: Partial<CollectionType<T>>\n file?: File | Blob\n filename?: string\n }\n >({\n mutationFn: async (variables) => {\n return await this.collectionClient\n .from(collection)\n .update(\n variables.id,\n variables.data,\n variables.file\n ? { file: variables.file, filename: variables.filename }\n : undefined,\n )\n },\n onSuccess: (data) => {\n this.queryClient.invalidateQueries({\n queryKey: collectionKeys(collection).all,\n })\n if (PRODUCT_DETAIL_INVALIDATING_COLLECTIONS.has(collection)) {\n this.queryClient.invalidateQueries({ queryKey: ['products', 'detail'] })\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n useRemove<T extends TCollection>(\n params: { collection: T },\n options?: MutationCallbacks<CollectionType<T>>,\n ) {\n const { collection } = params\n\n return useMutationOriginal<CollectionType<T>, SDKError, string>({\n mutationFn: async (id) => {\n return await this.collectionClient.from(collection).remove(id)\n },\n onSuccess: (data) => {\n this.queryClient.invalidateQueries({\n queryKey: collectionKeys(collection).all,\n })\n if (PRODUCT_DETAIL_INVALIDATING_COLLECTIONS.has(collection)) {\n this.queryClient.invalidateQueries({ queryKey: ['products', 'detail'] })\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n // ===== Cache Utilities =====\n\n invalidateQueries<T extends TCollection>(\n collection: T,\n type?: 'list' | 'detail' | 'infinite',\n ) {\n const queryKey = type ? [collection, type] : [collection]\n return this.queryClient.invalidateQueries({ queryKey })\n }\n\n getQueryData<T extends TCollection>(\n collection: T,\n type: 'list',\n options?: ApiQueryOptions,\n ): PayloadFindResponse<CollectionType<T>> | undefined\n getQueryData<T extends TCollection>(\n collection: T,\n type: 'detail',\n id: string,\n options?: ApiQueryOptions,\n ): CollectionType<T> | null | undefined\n getQueryData<T extends TCollection>(\n collection: T,\n type: 'list' | 'detail',\n idOrOptions?: string | ApiQueryOptions,\n options?: ApiQueryOptions,\n ) {\n if (type === 'list') {\n return this.queryClient.getQueryData(\n collectionKeys(collection).list(idOrOptions as ApiQueryOptions),\n )\n }\n return this.queryClient.getQueryData(\n collectionKeys(collection).detail(idOrOptions as string, options),\n )\n }\n\n setQueryData<T extends TCollection>(\n collection: T,\n type: 'list',\n data: PayloadFindResponse<CollectionType<T>>,\n options?: ApiQueryOptions,\n ): void\n setQueryData<T extends TCollection>(\n collection: T,\n type: 'detail',\n id: string,\n data: CollectionType<T> | null,\n options?: ApiQueryOptions,\n ): void\n setQueryData<T extends TCollection>(\n collection: T,\n type: 'list' | 'detail',\n dataOrId: PayloadFindResponse<CollectionType<T>> | string,\n dataOrOptions?: CollectionType<T> | null | ApiQueryOptions,\n options?: ApiQueryOptions,\n ) {\n if (type === 'list') {\n this.queryClient.setQueryData(\n collectionKeys(collection).list(dataOrOptions as ApiQueryOptions),\n dataOrId as PayloadFindResponse<CollectionType<T>>,\n )\n } else {\n this.queryClient.setQueryData(\n collectionKeys(collection).detail(dataOrId as string, options),\n dataOrOptions as CollectionType<T> | null,\n )\n }\n }\n}\n","import {\n QueryClient,\n useQuery as useQueryOriginal,\n useMutation as useMutationOriginal,\n} from '@tanstack/react-query'\nimport type { CustomerAuth } from '../customer/customer-auth'\nimport type {\n CustomerAuthResponse,\n CustomerRefreshResponse,\n CustomerProfile,\n CustomerRegisterData,\n CustomerLoginData,\n UpdateProfileData,\n} from '../customer/types'\nimport { createConfigError, SDKError } from '../internal/errors'\nimport { customerKeys } from './query-keys'\n\n// ============================================================================\n// Mutation helper\n// ============================================================================\n\ninterface MutationCallbacks<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: SDKError) => void\n onSettled?: () => void\n}\n\nfunction createMutation<TData, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n callbacks?: MutationCallbacks<TData>,\n onSuccessExtra?: (data: TData) => void,\n) {\n return useMutationOriginal({\n mutationFn,\n onSuccess: (data) => {\n onSuccessExtra?.(data)\n callbacks?.onSuccess?.(data)\n },\n onError: callbacks?.onError,\n onSettled: callbacks?.onSettled,\n })\n}\n\n// ============================================================================\n// Customer Hooks Mixin\n// ============================================================================\n\nexport class CustomerHooks {\n private queryClient: QueryClient\n private customerAuth?: CustomerAuth\n\n constructor(queryClient: QueryClient, customerAuth?: CustomerAuth) {\n this.queryClient = queryClient\n this.customerAuth = customerAuth\n }\n\n private ensureCustomerAuth(): CustomerAuth {\n if (!this.customerAuth) {\n throw createConfigError(\n 'Customer hooks require Client. Use createClient() instead of createServerClient().',\n )\n }\n return this.customerAuth\n }\n\n private invalidateMe = () => {\n this.queryClient.invalidateQueries({ queryKey: customerKeys.me() })\n }\n\n // ===== useCustomerMe =====\n useCustomerMe(options?: {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean | 'always'\n refetchInterval?: number | false\n retry?: boolean | number\n }) {\n return useQueryOriginal({\n queryKey: customerKeys.me(),\n queryFn: async () => {\n return await this.ensureCustomerAuth().me()\n },\n ...options,\n enabled:\n (options?.enabled ?? true) && !!this.customerAuth?.isAuthenticated(),\n })\n }\n\n // ===== Mutations =====\n\n useCustomerLogin(options?: MutationCallbacks<CustomerAuthResponse>) {\n return createMutation(\n (data: CustomerLoginData) => this.ensureCustomerAuth().login(data),\n options,\n this.invalidateMe,\n )\n }\n\n useCustomerRegister(\n options?: MutationCallbacks<{ customer: CustomerProfile }>,\n ) {\n return createMutation(\n (data: CustomerRegisterData) => this.ensureCustomerAuth().register(data),\n options,\n )\n }\n\n useCustomerLogout(options?: MutationCallbacks<void>) {\n return useMutationOriginal({\n mutationFn: async () => {\n try {\n await this.ensureCustomerAuth().logoutAsync()\n } finally {\n this.queryClient.removeQueries({ queryKey: customerKeys.all })\n }\n },\n onSuccess: () => {\n options?.onSuccess?.()\n },\n onError: options?.onError,\n onSettled: options?.onSettled,\n })\n }\n\n useCustomerForgotPassword(options?: MutationCallbacks<void>) {\n return createMutation(\n (email: string) =>\n this.ensureCustomerAuth()\n .forgotPassword(email)\n .then(() => {}),\n options,\n )\n }\n\n useCustomerResetPassword(options?: MutationCallbacks<void>) {\n return createMutation(\n (data: { token: string; password: string }) =>\n this.ensureCustomerAuth()\n .resetPassword(data.token, data.password)\n .then(() => {}),\n options,\n )\n }\n\n useCustomerRefreshToken(\n options?: MutationCallbacks<CustomerRefreshResponse>,\n ) {\n return createMutation(\n () => this.ensureCustomerAuth().refreshToken(),\n options,\n this.invalidateMe,\n )\n }\n\n useCustomerUpdateProfile(options?: MutationCallbacks<CustomerProfile>) {\n return createMutation(\n (data: UpdateProfileData) =>\n this.ensureCustomerAuth().updateProfile(data),\n options,\n this.invalidateMe,\n )\n }\n\n useCustomerChangePassword(options?: MutationCallbacks<void>) {\n return createMutation(\n (data: { currentPassword: string; newPassword: string }) =>\n this.ensureCustomerAuth()\n .changePassword(data.currentPassword, data.newPassword)\n .then(() => {}),\n options,\n )\n }\n\n // ===== Customer Cache Utilities =====\n\n invalidateCustomerQueries() {\n return this.queryClient.invalidateQueries({ queryKey: customerKeys.all })\n }\n\n getCustomerData(): CustomerProfile | null | undefined {\n return this.queryClient.getQueryData(customerKeys.me())\n }\n\n setCustomerData(data: CustomerProfile | null) {\n this.queryClient.setQueryData(customerKeys.me(), data)\n }\n}\n","const SDK_ERROR_BRAND = Symbol.for('@01.software/sdk/SDKError')\nconst SDK_ERROR_TYPE_BRAND = Symbol.for('@01.software/sdk/SDKError.type')\n\ntype SDKErrorType =\n | 'NetworkError'\n | 'ValidationError'\n | 'ApiError'\n | 'ConfigError'\n | 'TimeoutError'\n | 'GoneError'\n | 'ServiceUnavailableError'\n | 'UsageLimitError'\n | 'AuthError'\n | 'PermissionError'\n | 'NotFoundError'\n | 'ConflictError'\n | 'RateLimitError'\n\nfunction defineSDKErrorBrand(error: SDKError): void {\n Object.defineProperty(error, SDK_ERROR_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n}\n\nfunction defineSDKErrorType(error: SDKError, type: SDKErrorType): void {\n Object.defineProperty(error, SDK_ERROR_TYPE_BRAND, {\n value: type,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n}\n\nexport class SDKError extends Error {\n readonly code: string\n readonly status?: number\n readonly details?: unknown\n readonly userMessage?: string\n readonly suggestion?: string\n readonly requestId?: string\n readonly kind?: 'commerce'\n readonly reason?: CommerceErrorCode | 'unknown_commerce_error'\n readonly rawReason?: string\n /** Machine-readable reason from a non-commerce API response. */\n readonly apiReason?: string\n readonly retryable?: boolean\n readonly retryAfter?: number\n\n constructor(\n code: string,\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n this.userMessage = userMessage\n this.suggestion = suggestion\n this.requestId = requestId\n defineSDKErrorBrand(this)\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, new.target)\n }\n }\n\n getUserMessage(): string {\n return this.userMessage || this.message\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n userMessage: this.userMessage,\n suggestion: this.suggestion,\n ...(this.requestId !== undefined && { requestId: this.requestId }),\n ...(this.kind !== undefined && { kind: this.kind }),\n ...(this.reason !== undefined && { reason: this.reason }),\n ...(this.rawReason !== undefined && { rawReason: this.rawReason }),\n ...(this.apiReason !== undefined && { apiReason: this.apiReason }),\n ...(this.retryable !== undefined && { retryable: this.retryable }),\n ...(this.retryAfter !== undefined && { retryAfter: this.retryAfter }),\n }\n }\n}\n\n/**\n * Canonical Cart/Checkout/PaymentSession error reasons. This public SDK mirror\n * intentionally does not import the private contracts package; parity is\n * enforced by a type test.\n */\nexport const COMMERCE_ERROR_CODES = [\n 'validation_failed',\n 'bad_request',\n 'unauthorized',\n 'forbidden',\n 'account_suspended',\n 'key_invalid',\n 'pat_tenant_header_forbidden',\n 'tenant_mismatch',\n 'test_tenant_expired',\n 'token_invalid',\n 'token_expired',\n 'origin_not_allowed',\n 'server_credentials_required',\n 'role_denied',\n 'scope_denied',\n 'feature_disabled',\n 'not_found',\n 'conflict',\n 'locked',\n 'cart_revision_conflict',\n 'rate_limit_exceeded',\n 'usage_limit_exceeded',\n 'service_unavailable',\n 'idempotency_conflict',\n 'idempotency_in_progress',\n 'idempotency_key_required',\n 'invalid_idempotency_key',\n 'cart_not_active',\n 'cart_locked',\n 'cart_empty',\n 'cart_market_unavailable',\n 'cart_market_mismatch',\n 'checkout_not_open',\n 'checkout_already_open',\n 'payment_slot_held',\n 'reservation_expired',\n 'payment_session_not_cancelable',\n 'payment_session_conflict',\n 'provider_identity_mismatch',\n 'managed_refund_attestation_forbidden',\n 'payment_method_unavailable',\n 'provider_unavailable',\n 'lock_timeout',\n 'price_changed',\n 'pricing_fact_in_use',\n 'insufficient_stock',\n 'reservation_conflict',\n 'stock_lock_unavailable',\n 'variant_not_found',\n 'variant_stock_write_failed',\n 'stock_invariant_violation',\n 'payment_confirmation_in_flight',\n 'checkout_reservation_release_requires_transaction',\n 'admission_metadata_invalid',\n 'admission_metadata_required',\n 'capacity_exceeded',\n 'occurrence_lock_unavailable',\n 'occurrence_not_open',\n 'admission_type_capacity_exceeded',\n 'admission_type_occurrence_mismatch',\n 'admission_hold_expired',\n 'admission_hold_checkout_item_conflict',\n 'admission_hold_checkout_conflict',\n 'admission_hold_quantity_mismatch',\n 'admission_hold_unbound',\n 'admission_hold_missing',\n 'admission_hold_checkout_item_missing',\n 'admission_hold_expiry_failed',\n 'admission_hold_expiry_requires_transaction',\n 'admission_hold_line_item_mismatch',\n 'admission_materialization_failed',\n 'variant_inactive',\n 'variant_product_mismatch',\n 'product_not_public',\n 'market_not_found',\n 'market_shipping_currency_unsupported',\n 'missing_market_rate',\n 'missing_shipping_amount',\n 'no_enabled_payment_provider',\n 'product_market_unavailable',\n 'unsupported_currency',\n 'missing_price_row',\n 'payment_provider_currency_unsupported',\n 'discount_code_not_found',\n 'discount_not_started',\n 'discount_expired',\n 'discount_usage_limit',\n 'discount_per_customer_limit',\n 'discount_customer_required',\n 'discount_first_order_only',\n 'discount_customer_not_eligible',\n 'discount_customer_excluded',\n 'discount_items_required',\n 'discount_product_not_eligible',\n 'discount_product_excluded',\n 'discount_min_order_amount',\n 'discount_currency_scope_required',\n 'discount_allocation_method_unsupported',\n 'currency_mismatch',\n 'customer_token_required',\n 'market_required',\n 'server_derived',\n 'internal_error',\n] as const\n\nexport type CommerceErrorCode = (typeof COMMERCE_ERROR_CODES)[number]\n\ntype CommerceSDKErrorBase = SDKError & {\n readonly kind: 'commerce'\n readonly requestId: string\n readonly retryable: boolean\n readonly retryAfter?: number\n readonly details?: Record<string, unknown>\n}\n\nexport type CommerceSDKError = CommerceSDKErrorBase &\n (\n | { readonly reason: CommerceErrorCode; readonly rawReason?: never }\n | {\n readonly reason: 'unknown_commerce_error'\n readonly rawReason: string\n }\n )\n\nconst COMMERCE_ERROR_CODE_SET: ReadonlySet<string> = new Set(\n COMMERCE_ERROR_CODES,\n)\nconst COMMERCE_ERROR_ENVELOPE_KEYS = new Set([\n 'error',\n 'reason',\n 'requestId',\n 'retryable',\n 'details',\n])\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport type CommerceErrorEnvelope = {\n error: string\n reason: string\n requestId: string\n retryable: boolean\n details?: Record<string, unknown>\n}\n\nfunction commerceProtocolError(\n issue: string,\n trustedRequestId?: string,\n): SDKError {\n return createApiError(\n 'Invalid canonical commerce error response.',\n 502,\n { protocol: 'commerce-error-envelope', issue },\n 'The server returned an incompatible commerce error response.',\n 'Verify that the Console commerce contract is deployed before using this SDK version.',\n trustedRequestId,\n )\n}\n\n/** @internal Strictly parse a canonical commerce error without retaining its raw body. */\nexport function parseCommerceErrorEnvelope(\n body: unknown,\n headerRequestId?: string,\n): CommerceErrorEnvelope {\n if (headerRequestId === undefined) {\n throw commerceProtocolError('missing_request_id_header')\n }\n if (headerRequestId.length === 0) {\n throw commerceProtocolError('empty_request_id_header')\n }\n if (!isPlainRecord(body)) {\n throw commerceProtocolError('expected_object', headerRequestId)\n }\n if (Object.keys(body).some((key) => !COMMERCE_ERROR_ENVELOPE_KEYS.has(key))) {\n throw commerceProtocolError('unexpected_field', headerRequestId)\n }\n if (\n typeof body.error !== 'string' ||\n body.error.length === 0 ||\n typeof body.reason !== 'string' ||\n body.reason.length === 0 ||\n typeof body.requestId !== 'string' ||\n body.requestId.length === 0 ||\n (body.retryable !== undefined && typeof body.retryable !== 'boolean') ||\n (body.details !== undefined && !isPlainRecord(body.details))\n ) {\n throw commerceProtocolError('invalid_field', headerRequestId)\n }\n\n if (headerRequestId !== undefined && headerRequestId !== body.requestId) {\n throw commerceProtocolError('request_id_mismatch', headerRequestId)\n }\n\n return {\n error: body.error,\n reason: body.reason,\n requestId: body.requestId,\n retryable: body.retryable === true,\n ...(body.details === undefined ? {} : { details: body.details }),\n }\n}\n\n/** @internal Validate and apply the canonical commerce error envelope. */\nexport function enhanceCommerceError(\n error: SDKError,\n body: unknown,\n headerRequestId?: string,\n): SDKError {\n const envelope = parseCommerceErrorEnvelope(body, headerRequestId)\n\n const known = COMMERCE_ERROR_CODE_SET.has(envelope.reason)\n Object.assign(error, {\n code: envelope.reason,\n kind: 'commerce' as const,\n reason: known\n ? (envelope.reason as CommerceErrorCode)\n : 'unknown_commerce_error',\n ...(known ? {} : { rawReason: envelope.reason }),\n requestId: envelope.requestId,\n retryable: envelope.retryable,\n details: envelope.details,\n })\n return error\n}\n\n/** @internal Apply a non-commerce reason without canonical-commerce validation. */\nexport function enhanceNonCommerceError(\n error: SDKError,\n reason: unknown,\n): SDKError {\n if (typeof reason === 'string') Object.assign(error, { apiReason: reason })\n return error\n}\n\n/**\n * Read the server-provided machine reason across strict commerce and\n * non-commerce SDK errors. Unknown commerce reasons are returned verbatim.\n */\nexport function getSDKErrorReason(error: SDKError): string | undefined {\n if (error.kind !== 'commerce') return error.apiReason\n return error.reason === 'unknown_commerce_error'\n ? error.rawReason\n : error.reason\n}\n\nexport function isCommerceSDKError(error: unknown): error is CommerceSDKError {\n if (!isSDKError(error) || error.kind !== 'commerce') return false\n if (\n typeof error.requestId !== 'string' ||\n typeof error.retryable !== 'boolean' ||\n (error.retryAfter !== undefined &&\n (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0)) ||\n typeof error.reason !== 'string'\n ) {\n return false\n }\n return error.reason === 'unknown_commerce_error'\n ? typeof error.rawReason === 'string'\n : COMMERCE_ERROR_CODE_SET.has(error.reason) && error.rawReason === undefined\n}\n\nexport class NetworkError extends SDKError {\n constructor(\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('NETWORK_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'NetworkError'\n defineSDKErrorType(this, 'NetworkError')\n }\n}\n\nexport class ValidationError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status = 400,\n ) {\n super('VALIDATION_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'ValidationError'\n defineSDKErrorType(this, 'ValidationError')\n }\n}\n\nexport class ApiError extends SDKError {\n constructor(\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'API_ERROR',\n message,\n status,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'ApiError'\n defineSDKErrorType(this, 'ApiError')\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('CONFIG_ERROR', message, undefined, details, userMessage, suggestion)\n this.name = 'ConfigError'\n defineSDKErrorType(this, 'ConfigError')\n }\n}\n\nexport class TimeoutError extends SDKError {\n constructor(\n message = 'Request timed out.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('TIMEOUT_ERROR', message, 408, details, userMessage, suggestion)\n this.name = 'TimeoutError'\n defineSDKErrorType(this, 'TimeoutError')\n }\n}\n\nexport class GoneError extends SDKError {\n constructor(\n message = 'The requested resource is no longer available.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('GONE_ERROR', message, 410, details, userMessage, suggestion)\n this.name = 'GoneError'\n defineSDKErrorType(this, 'GoneError')\n }\n}\n\nexport class ServiceUnavailableError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message = 'Service temporarily unavailable.',\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super(\n 'SERVICE_UNAVAILABLE_ERROR',\n message,\n 503,\n details,\n userMessage,\n suggestion,\n )\n this.name = 'ServiceUnavailableError'\n this.retryAfter = retryAfter\n defineSDKErrorType(this, 'ServiceUnavailableError')\n }\n}\n\nexport class UsageLimitError extends SDKError {\n readonly usage: { limit: number; current: number; remaining: number }\n\n constructor(\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('USAGE_LIMIT_ERROR', message, 429, details, userMessage, suggestion)\n this.name = 'UsageLimitError'\n this.usage = usage\n defineSDKErrorType(this, 'UsageLimitError')\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n usage: this.usage,\n }\n }\n}\n\nexport class AuthError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'auth_error',\n message,\n 401,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'AuthError'\n defineSDKErrorType(this, 'AuthError')\n }\n}\n\nexport class PermissionError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'permission_error',\n message,\n 403,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'PermissionError'\n defineSDKErrorType(this, 'PermissionError')\n }\n}\n\nexport class NotFoundError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'not_found',\n message,\n 404,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'NotFoundError'\n defineSDKErrorType(this, 'NotFoundError')\n }\n}\n\nexport class ConflictError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super('conflict', message, 409, details, userMessage, suggestion, requestId)\n this.name = 'ConflictError'\n defineSDKErrorType(this, 'ConflictError')\n }\n}\n\nexport class RateLimitError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'rate_limit_exceeded',\n message,\n 429,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'RateLimitError'\n this.retryAfter = retryAfter\n defineSDKErrorType(this, 'RateLimitError')\n }\n}\n\nfunction hasBrandedSDKErrorShape(error: unknown): error is SDKError {\n if (error === null || typeof error !== 'object') return false\n\n const candidate = error as Record<PropertyKey, unknown>\n return (\n candidate[SDK_ERROR_BRAND] === true &&\n typeof candidate.name === 'string' &&\n typeof candidate.code === 'string' &&\n typeof candidate.message === 'string' &&\n (candidate.status === undefined || typeof candidate.status === 'number') &&\n (candidate.userMessage === undefined ||\n typeof candidate.userMessage === 'string') &&\n (candidate.suggestion === undefined ||\n typeof candidate.suggestion === 'string') &&\n (candidate.requestId === undefined ||\n typeof candidate.requestId === 'string') &&\n (candidate.kind === undefined || candidate.kind === 'commerce') &&\n (candidate.reason === undefined || typeof candidate.reason === 'string') &&\n (candidate.rawReason === undefined ||\n typeof candidate.rawReason === 'string') &&\n (candidate.apiReason === undefined ||\n typeof candidate.apiReason === 'string') &&\n (candidate.retryable === undefined ||\n typeof candidate.retryable === 'boolean') &&\n (candidate.retryAfter === undefined ||\n typeof candidate.retryAfter === 'number') &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nfunction hasSDKErrorType(error: unknown, type: SDKErrorType): boolean {\n return (\n hasBrandedSDKErrorShape(error) &&\n (error as unknown as Record<PropertyKey, unknown>)[SDK_ERROR_TYPE_BRAND] ===\n type\n )\n}\n\nexport function isSDKError(error: unknown): error is SDKError {\n return error instanceof SDKError || hasBrandedSDKErrorShape(error)\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError || hasSDKErrorType(error, 'NetworkError')\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n if (\n error instanceof ValidationError ||\n hasSDKErrorType(error, 'ValidationError')\n ) {\n return true\n }\n if (error == null || typeof error !== 'object') return false\n\n const candidate = error as {\n code?: unknown\n name?: unknown\n message?: unknown\n getUserMessage?: unknown\n toJSON?: unknown\n }\n return (\n candidate.name === 'ValidationError' &&\n candidate.code === 'VALIDATION_ERROR' &&\n typeof candidate.message === 'string' &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError || hasSDKErrorType(error, 'ApiError')\n}\n\nexport function isConfigError(error: unknown): error is ConfigError {\n return error instanceof ConfigError || hasSDKErrorType(error, 'ConfigError')\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError || hasSDKErrorType(error, 'TimeoutError')\n}\n\nexport function isGoneError(error: unknown): error is GoneError {\n return error instanceof GoneError || hasSDKErrorType(error, 'GoneError')\n}\n\nexport function isServiceUnavailableError(\n error: unknown,\n): error is ServiceUnavailableError {\n return (\n error instanceof ServiceUnavailableError ||\n hasSDKErrorType(error, 'ServiceUnavailableError')\n )\n}\n\nexport function isUsageLimitError(error: unknown): error is UsageLimitError {\n return (\n error instanceof UsageLimitError ||\n hasSDKErrorType(error, 'UsageLimitError')\n )\n}\n\nexport function isAuthError(error: unknown): error is AuthError {\n return error instanceof AuthError || hasSDKErrorType(error, 'AuthError')\n}\n\nexport function isPermissionError(error: unknown): error is PermissionError {\n return (\n error instanceof PermissionError ||\n hasSDKErrorType(error, 'PermissionError')\n )\n}\n\nexport function isNotFoundError(error: unknown): error is NotFoundError {\n return (\n error instanceof NotFoundError || hasSDKErrorType(error, 'NotFoundError')\n )\n}\n\nexport function isConflictError(error: unknown): error is ConflictError {\n return (\n error instanceof ConflictError || hasSDKErrorType(error, 'ConflictError')\n )\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return (\n error instanceof RateLimitError || hasSDKErrorType(error, 'RateLimitError')\n )\n}\n\nexport const createNetworkError = (\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new NetworkError(message, status, details, userMessage, suggestion)\n\nexport const createValidationError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status?: number,\n) => new ValidationError(message, details, userMessage, suggestion, status)\n\nexport const createApiError = (\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ApiError(message, status, details, userMessage, suggestion, requestId)\n\nexport const createConfigError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ConfigError(message, details, userMessage, suggestion)\n\nexport const createTimeoutError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new TimeoutError(message, details, userMessage, suggestion)\n\nexport const createGoneError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new GoneError(message, details, userMessage, suggestion)\n\nexport const createServiceUnavailableError = (\n message?: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) =>\n new ServiceUnavailableError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n )\n\nexport const createUsageLimitError = (\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new UsageLimitError(message, usage, details, userMessage, suggestion)\n\nexport const createAuthError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new AuthError(message, details, userMessage, suggestion, requestId)\n\nexport const createPermissionError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new PermissionError(message, details, userMessage, suggestion, requestId)\n\nexport const createNotFoundError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new NotFoundError(message, details, userMessage, suggestion, requestId)\n\nexport const createConflictError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ConflictError(message, details, userMessage, suggestion, requestId)\n\nexport const createRateLimitError = (\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) =>\n new RateLimitError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n","import {\n QueryClient,\n useInfiniteQuery as useInfiniteQueryOriginal,\n useQuery as useQueryOriginal,\n useSuspenseInfiniteQuery as useSuspenseInfiniteQueryOriginal,\n useSuspenseQuery as useSuspenseQueryOriginal,\n} from '@tanstack/react-query'\nimport type {\n InfiniteData,\n UseInfiniteQueryResult,\n UseQueryResult,\n UseSuspenseInfiniteQueryResult,\n UseSuspenseQueryResult,\n} from '@tanstack/react-query'\nimport type {\n ApiQueryOptions,\n PayloadFindResponse,\n PublicCollection,\n ServerCollection,\n} from '../client/types'\nimport type { CustomerAuth } from '../customer/customer-auth'\nimport type { CollectionClient } from '../collection'\nimport type {\n ProductDetailParams,\n ProductDetailCatalogResult,\n ProductListingGroupsCatalogItem,\n ProductListingGroupsItem,\n ProductListingPageBaseParams,\n ProductListingPageCatalogParams,\n ProductListingPageFullParams,\n ProductListingPageParams,\n ProductListingPageResult,\n} from '../api'\nimport {\n CollectionHooks,\n type InfiniteQueryOptions,\n type QueryOptions,\n type SuspenseInfiniteQueryOptions,\n type SuspenseQueryOptions,\n} from './collection-hooks'\nimport { CustomerHooks } from './customer-hooks'\nimport { createConfigError } from '../internal/errors'\nimport { listingPageSearchParams } from '../internal/utils/query-string'\nimport {\n COMMERCE_ENDPOINT_OPERATIONS,\n resolveOperationPath,\n} from '../api/endpoints'\nimport type { CommerceEndpointDescriptor } from '../api/endpoints'\nimport {\n canonicalProductListingGroupsQueryOptions,\n productKeys,\n} from './query-keys'\n\n// Re-export everything from sub-modules for barrel compatibility\nexport { collectionKeys, customerKeys } from './query-keys'\nexport { productKeys } from './query-keys'\nexport type {\n CollectionQueryParams,\n CollectionDetailQueryParams,\n CollectionInfiniteQueryParams,\n QueryOptions,\n SuspenseQueryOptions,\n InfiniteQueryOptions,\n SuspenseInfiniteQueryOptions,\n} from './collection-hooks'\n\nexport type ProductListingGroupsQueryOptions = Pick<\n ApiQueryOptions,\n 'page' | 'limit' | 'sort' | 'where'\n> & {\n market?: string\n locale?: ProductListingPageParams['locale']\n fallbackLocale?: ProductListingPageParams['fallbackLocale']\n}\n\ntype ProductDetailConvenienceOptions =\n QueryOptions<ProductDetailCatalogResult> & {\n market?: string\n locale?: ProductDetailParams['locale']\n fallbackLocale?: ProductDetailParams['fallbackLocale']\n }\n\nexport type ReadOnlyQueryHooks = Omit<\n QueryHooks<PublicCollection>,\n | 'useCreate'\n | 'useUpdate'\n | 'useRemove'\n | 'useProductListingGroupsQuery'\n | 'useSuspenseProductListingGroupsQuery'\n | 'useInfiniteProductListingGroupsQuery'\n | 'useSuspenseInfiniteProductListingGroupsQuery'\n | 'prefetchProductListingGroupsQuery'\n | 'prefetchInfiniteProductListingGroupsQuery'\n | 'useProductListingPage'\n | 'useSuspenseProductListingPage'\n | 'useInfiniteProductListingPage'\n | 'prefetchProductListingPage'\n | 'prefetchInfiniteProductListingPage'\n> & {\n useProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: QueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useSuspenseProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: SuspenseQueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useInfiniteProductListingPage<\n TData = InfiniteData<\n ProductListingPageResult<ProductListingGroupsCatalogItem>\n >,\n >(\n params?: ProductListingPageCatalogInfiniteParams,\n options?: InfiniteQueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseInfiniteQueryResult<TData>\n prefetchProductListingPage(\n params?: ProductListingPageCatalogParams,\n options?: { staleTime?: number },\n ): Promise<void>\n prefetchInfiniteProductListingPage(\n params?: ProductListingPageCatalogInfiniteParams,\n options?: { pages?: number; staleTime?: number },\n ): Promise<void>\n}\n\n/**\n * Composes CollectionHooks + CustomerHooks into a single API surface.\n * All methods are delegated; no logic lives here.\n */\ninterface ProductDetailCallable {\n product: {\n detail: (params: ProductDetailParams) => Promise<ProductDetailCatalogResult>\n }\n}\n\ninterface ProductListingPageCatalogCallable {\n product: {\n listingPage: {\n (\n params?: ProductListingPageCatalogParams,\n ): Promise<ProductListingPageResult<ProductListingGroupsCatalogItem>>\n }\n }\n}\n\ninterface ProductListingPageCallable extends ProductListingPageCatalogCallable {\n product: ProductListingPageCatalogCallable['product'] & {\n listingPage: ProductListingPageCatalogCallable['product']['listingPage'] & {\n (\n params: ProductListingPageFullParams,\n ): Promise<ProductListingPageResult<ProductListingGroupsItem>>\n (\n params: ProductListingPageParams,\n ): Promise<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>\n >\n }\n }\n}\n\ntype ProductCommerceCallable = ProductDetailCallable &\n ProductListingPageCallable\n\ntype ProductListingPageCatalogResult =\n ProductListingPageResult<ProductListingGroupsCatalogItem>\ntype ProductListingPageFullResult =\n ProductListingPageResult<ProductListingGroupsItem>\ntype ProductListingPageUnionResult =\n | ProductListingPageCatalogResult\n | ProductListingPageFullResult\ntype ProductListingPageHookOptions<TData> =\n | QueryOptions<ProductListingPageCatalogResult, TData>\n | QueryOptions<ProductListingPageFullResult, TData>\n | QueryOptions<ProductListingPageUnionResult, TData>\ntype ProductListingPageSuspenseHookOptions<TData> =\n | SuspenseQueryOptions<ProductListingPageCatalogResult, TData>\n | SuspenseQueryOptions<ProductListingPageFullResult, TData>\n | SuspenseQueryOptions<ProductListingPageUnionResult, TData>\n\nexport type ProductListingPageInfiniteParams = Omit<\n ProductListingPageBaseParams,\n 'page' | 'limit'\n> & {\n mode?: ProductListingPageParams['mode']\n pageSize?: number\n}\n\nexport type ProductListingPageCatalogInfiniteParams = Omit<\n ProductListingPageInfiniteParams,\n 'mode'\n> & {\n mode?: 'catalog'\n}\n\ntype ProductMarketContext = {\n market?: string\n}\n\ntype ProductMarketAwareCommerce = {\n getDefaultMarket?: () => string | undefined\n}\n\nfunction normalizeMarket(market?: string): string | undefined {\n const normalized = market?.trim()\n return normalized || undefined\n}\n\nfunction requestCommerceFindEndpoint<T>(\n collectionClient: CollectionClient,\n endpoint: CommerceEndpointDescriptor,\n options?: { data?: unknown; query?: string | URLSearchParams },\n): Promise<PayloadFindResponse<T>> {\n const path = resolveOperationPath(endpoint, { query: options?.query })\n if (endpoint.method === 'get') {\n return collectionClient.requestFindEndpointGet<T>(path)\n }\n if (endpoint.method === 'post') {\n return collectionClient.requestFindEndpoint<T>(path, options?.data)\n }\n throw new TypeError(`Unsupported find endpoint method: ${endpoint.method}`)\n}\n\nfunction withDefaultMarket<T extends { market?: string }>(\n params: T | undefined,\n market?: string,\n): T | undefined {\n const defaultMarket = normalizeMarket(market)\n if (!defaultMarket || normalizeMarket(params?.market)) return params\n return { ...(params ?? ({} as T)), market: defaultMarket }\n}\n\nfunction resolveProductMarket(\n commerceClient: ProductMarketAwareCommerce,\n context?: ProductMarketContext,\n): string | undefined {\n return (\n normalizeMarket(context?.market) ??\n normalizeMarket(commerceClient.getDefaultMarket?.())\n )\n}\n\nfunction splitListingGroupsQueryOptions(\n queryOptions?: ProductListingGroupsQueryOptions,\n) {\n const normalized = canonicalProductListingGroupsQueryOptions(queryOptions)\n if (!normalized) return { market: undefined, options: undefined }\n const { market, ...options } = normalized\n return {\n market,\n options: Object.keys(options).length > 0 ? options : undefined,\n }\n}\n\nfunction fetchProductListingGroupsQuery(\n collectionClient: CollectionClient,\n queryOptions?: ProductListingGroupsQueryOptions,\n) {\n const { market, options } = splitListingGroupsQueryOptions(queryOptions)\n return requestCommerceFindEndpoint<ProductListingGroupsItem>(\n collectionClient,\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQuery,\n {\n data: {\n ...(market ? { market } : {}),\n ...(options ? { options } : {}),\n },\n },\n )\n}\n\nfunction fetchProductListingGroupsCatalogQuery(\n collectionClient: CollectionClient,\n queryOptions?: ProductListingGroupsQueryOptions,\n) {\n return requestCommerceFindEndpoint<ProductListingGroupsCatalogItem>(\n collectionClient,\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQueryCatalog,\n { query: listingPageSearchParams(queryOptions) },\n )\n}\n\nexport function productListingPageQueryOptions(\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPage>\n queryFn: () => Promise<\n ProductListingPageResult<ProductListingGroupsCatalogItem>\n >\n}\nexport function productListingPageQueryOptions(\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageFullParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPage>\n queryFn: () => Promise<ProductListingPageResult<ProductListingGroupsItem>>\n}\nexport function productListingPageQueryOptions(\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPage>\n queryFn: () => Promise<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>\n >\n}\nexport function productListingPageQueryOptions(\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageParams = {},\n context?: ProductMarketContext,\n) {\n const effectiveParams =\n withDefaultMarket(\n params,\n resolveProductMarket(\n commerceClient as ProductMarketAwareCommerce,\n context,\n ),\n ) ?? params\n\n return {\n queryKey: productKeys.listingPage(effectiveParams),\n queryFn: () =>\n commerceClient.product.listingPage(\n effectiveParams as ProductListingPageCatalogParams,\n ),\n }\n}\n\nexport function productListingPageInfiniteQueryOptions(\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogInfiniteParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPageInfinite>\n queryFn: (args: {\n pageParam: number\n }) => Promise<ProductListingPageResult<ProductListingGroupsCatalogItem>>\n initialPageParam: number\n getNextPageParam: (\n lastPage: ProductListingPageResult<ProductListingGroupsCatalogItem>,\n ) => number | null | undefined\n}\nexport function productListingPageInfiniteQueryOptions(\n commerceClient: ProductListingPageCallable,\n params?: ProductListingPageInfiniteParams,\n context?: ProductMarketContext,\n): {\n queryKey: ReturnType<typeof productKeys.listingPageInfinite>\n queryFn: (args: {\n pageParam: number\n }) => Promise<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>\n >\n initialPageParam: number\n getNextPageParam: (\n lastPage: ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >,\n ) => number | null | undefined\n}\nexport function productListingPageInfiniteQueryOptions(\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageInfiniteParams = {},\n context?: ProductMarketContext,\n) {\n const {\n pageSize: explicitPageSize,\n page: _page,\n limit: _limit,\n ...pageParams\n } = params as ProductListingPageInfiniteParams & {\n page?: number\n limit?: number\n }\n const pageSize = explicitPageSize ?? 20\n const effectivePageParams =\n withDefaultMarket(\n pageParams,\n resolveProductMarket(\n commerceClient as ProductMarketAwareCommerce,\n context,\n ),\n ) ?? pageParams\n\n return {\n queryKey: productKeys.listingPageInfinite(\n effectivePageParams,\n explicitPageSize,\n ),\n queryFn: ({ pageParam }: { pageParam: number }) =>\n commerceClient.product.listingPage({\n ...effectivePageParams,\n page: pageParam,\n limit: pageSize,\n } as never),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n }\n}\n\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogParams,\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageFullParams,\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCallable,\n params: ProductListingPageParams,\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchProductListingPage(\n queryClient: QueryClient,\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageParams = {},\n options?: { staleTime?: number },\n context?: ProductMarketContext,\n) {\n return queryClient.prefetchQuery({\n ...productListingPageQueryOptions(\n commerceClient as ProductListingPageCallable,\n params,\n context,\n ),\n ...options,\n })\n}\n\nexport function prefetchInfiniteProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCatalogCallable,\n params?: ProductListingPageCatalogInfiniteParams,\n options?: { pages?: number; staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchInfiniteProductListingPage(\n queryClient: QueryClient,\n commerceClient: ProductListingPageCallable,\n params?: ProductListingPageInfiniteParams,\n options?: { pages?: number; staleTime?: number },\n context?: ProductMarketContext,\n): Promise<void>\nexport function prefetchInfiniteProductListingPage(\n queryClient: QueryClient,\n commerceClient:\n | ProductListingPageCatalogCallable\n | ProductListingPageCallable,\n params: ProductListingPageInfiniteParams = {},\n options?: { pages?: number; staleTime?: number },\n context?: ProductMarketContext,\n) {\n return queryClient.prefetchInfiniteQuery({\n ...productListingPageInfiniteQueryOptions(\n commerceClient as ProductListingPageCallable,\n params,\n context,\n ),\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n}\n\nexport class QueryHooks<\n TCollection extends ServerCollection = PublicCollection,\n> extends CollectionHooks<TCollection> {\n private _customer: CustomerHooks\n private _commerce?: ProductCommerceCallable\n private readonly market?: string\n\n constructor(\n queryClient: QueryClient,\n collectionClient: CollectionClient<TCollection>,\n customerAuth?: CustomerAuth,\n commerceClient?: ProductCommerceCallable,\n market?: string,\n ) {\n super(queryClient, collectionClient)\n this._customer = new CustomerHooks(queryClient, customerAuth)\n this._commerce = commerceClient\n this.market = normalizeMarket(market)\n }\n\n private ensureCommerce(): ProductCommerceCallable {\n if (!this._commerce) {\n throw createConfigError(\n 'Product listing page hooks require Client or ServerClient. Use createQueryHooks(client) or createServerQueryHooks(server) instead of constructing QueryHooks directly.',\n )\n }\n return this._commerce\n }\n\n private withProductMarket<T extends { market?: string }>(\n params: T | undefined,\n ): T | undefined {\n return withDefaultMarket(params, this.market)\n }\n\n // --- Customer hooks delegation ---\n useCustomerMe: CustomerHooks['useCustomerMe'] = (...args) =>\n this._customer.useCustomerMe(...args)\n useCustomerLogin: CustomerHooks['useCustomerLogin'] = (...args) =>\n this._customer.useCustomerLogin(...args)\n useCustomerRegister: CustomerHooks['useCustomerRegister'] = (...args) =>\n this._customer.useCustomerRegister(...args)\n useCustomerLogout: CustomerHooks['useCustomerLogout'] = (...args) =>\n this._customer.useCustomerLogout(...args)\n useCustomerForgotPassword: CustomerHooks['useCustomerForgotPassword'] = (\n ...args\n ) => this._customer.useCustomerForgotPassword(...args)\n useCustomerResetPassword: CustomerHooks['useCustomerResetPassword'] = (\n ...args\n ) => this._customer.useCustomerResetPassword(...args)\n useCustomerRefreshToken: CustomerHooks['useCustomerRefreshToken'] = (\n ...args\n ) => this._customer.useCustomerRefreshToken(...args)\n useCustomerUpdateProfile: CustomerHooks['useCustomerUpdateProfile'] = (\n ...args\n ) => this._customer.useCustomerUpdateProfile(...args)\n useCustomerChangePassword: CustomerHooks['useCustomerChangePassword'] = (\n ...args\n ) => this._customer.useCustomerChangePassword(...args)\n\n // --- Customer cache delegation ---\n invalidateCustomerQueries: CustomerHooks['invalidateCustomerQueries'] = () =>\n this._customer.invalidateCustomerQueries()\n getCustomerData: CustomerHooks['getCustomerData'] = () =>\n this._customer.getCustomerData()\n setCustomerData: CustomerHooks['setCustomerData'] = (data) =>\n this._customer.setCustomerData(data)\n\n useProductListingGroupsQuery<\n TData = PayloadFindResponse<ProductListingGroupsItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: QueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: productKeys.listingGroups(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsQuery(this.collectionClient, queryOptions),\n ...restOptions,\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n useProductListingGroupsCatalogQuery<\n TData = PayloadFindResponse<ProductListingGroupsCatalogItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: QueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >\n\n return useQueryOriginal({\n queryKey: productKeys.listingGroupsCatalog(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsCatalogQuery(\n this.collectionClient,\n queryOptions,\n ),\n ...restOptions,\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n })\n }\n\n useSuspenseProductListingGroupsQuery<\n TData = PayloadFindResponse<ProductListingGroupsItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: SuspenseQueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n\n return useSuspenseQueryOriginal({\n queryKey: productKeys.listingGroups(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsQuery(this.collectionClient, queryOptions),\n ...options,\n })\n }\n\n useSuspenseProductListingGroupsCatalogQuery<\n TData = PayloadFindResponse<ProductListingGroupsCatalogItem>,\n >(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: SuspenseQueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n\n return useSuspenseQueryOriginal({\n queryKey: productKeys.listingGroupsCatalog(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsCatalogQuery(\n this.collectionClient,\n queryOptions,\n ),\n ...options,\n })\n }\n\n useInfiniteProductListingGroupsQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: InfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n useInfiniteProductListingGroupsCatalogQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsCatalogItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: InfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsCatalogInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsCatalogQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsCatalogItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n useSuspenseInfiniteProductListingGroupsQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: SuspenseInfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n useSuspenseInfiniteProductListingGroupsCatalogQuery<\n TData = InfiniteData<PayloadFindResponse<ProductListingGroupsCatalogItem>>,\n >(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: SuspenseInfiniteQueryOptions<\n PayloadFindResponse<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseInfiniteQueryResult<TData> {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: productKeys.listingGroupsCatalogInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsCatalogQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsCatalogItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n ...options,\n })\n }\n\n async prefetchProductListingGroupsQuery(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: { staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n\n return this.queryClient.prefetchQuery({\n queryKey: productKeys.listingGroups(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsQuery(this.collectionClient, queryOptions),\n ...options,\n })\n }\n\n async prefetchProductListingGroupsCatalogQuery(\n params: { options?: ProductListingGroupsQueryOptions },\n options?: { staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n\n return this.queryClient.prefetchQuery({\n queryKey: productKeys.listingGroupsCatalog(queryOptions),\n queryFn: async () =>\n fetchProductListingGroupsCatalogQuery(\n this.collectionClient,\n queryOptions,\n ),\n ...options,\n })\n }\n\n async prefetchInfiniteProductListingGroupsQuery(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: { pages?: number; staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: productKeys.listingGroupsInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n async prefetchInfiniteProductListingGroupsCatalogQuery(\n params: {\n options?: Omit<ProductListingGroupsQueryOptions, 'page' | 'limit'>\n pageSize?: number\n },\n options?: { pages?: number; staleTime?: number },\n ) {\n const queryOptions = this.withProductMarket(params.options)\n const explicitPageSize = params.pageSize\n const pageSize = explicitPageSize ?? 20\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: productKeys.listingGroupsCatalogInfinite(\n queryOptions,\n explicitPageSize,\n ),\n queryFn: async ({ pageParam }) =>\n fetchProductListingGroupsCatalogQuery(this.collectionClient, {\n ...queryOptions,\n page: pageParam,\n limit: pageSize,\n }),\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: PayloadFindResponse<ProductListingGroupsCatalogItem>,\n ) => (lastPage.hasNextPage ? lastPage.nextPage : undefined),\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n useProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: QueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageFullParams,\n options?: QueryOptions<\n ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useProductListingPage<\n TData =\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageParams,\n options?: QueryOptions<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseQueryResult<TData>\n useProductListingPage<TData = ProductListingPageUnionResult>(\n params: ProductListingPageParams = {},\n options?: ProductListingPageHookOptions<TData>,\n ): UseQueryResult<TData> {\n const { placeholderData, ...restOptions } = (options ?? {}) as QueryOptions<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n unknown\n >\n\n return useQueryOriginal({\n ...productListingPageQueryOptions(this.ensureCommerce(), params, {\n market: this.market,\n }),\n ...restOptions,\n ...(placeholderData !== undefined && {\n placeholderData: placeholderData as never,\n }),\n }) as UseQueryResult<TData>\n }\n\n useSuspenseProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsCatalogItem>,\n >(\n params?: ProductListingPageCatalogParams,\n options?: SuspenseQueryOptions<\n ProductListingPageResult<ProductListingGroupsCatalogItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useSuspenseProductListingPage<\n TData = ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageFullParams,\n options?: SuspenseQueryOptions<\n ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useSuspenseProductListingPage<\n TData =\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n >(\n params: ProductListingPageParams,\n options?: SuspenseQueryOptions<\n | ProductListingPageResult<ProductListingGroupsCatalogItem>\n | ProductListingPageResult<ProductListingGroupsItem>,\n TData\n >,\n ): UseSuspenseQueryResult<TData>\n useSuspenseProductListingPage<TData = ProductListingPageUnionResult>(\n params: ProductListingPageParams = {},\n options?: ProductListingPageSuspenseHookOptions<TData>,\n ): UseSuspenseQueryResult<TData> {\n const suspenseOptions = options as\n | SuspenseQueryOptions<ProductListingPageUnionResult, TData>\n | undefined\n\n return useSuspenseQueryOriginal({\n ...productListingPageQueryOptions(this.ensureCommerce(), params, {\n market: this.market,\n }),\n ...suspenseOptions,\n }) as UseSuspenseQueryResult<TData>\n }\n\n useInfiniteProductListingPage<\n TData = InfiniteData<\n ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >\n >,\n >(\n params: ProductListingPageInfiniteParams = {},\n options?: InfiniteQueryOptions<\n ProductListingPageResult<\n ProductListingGroupsCatalogItem | ProductListingGroupsItem\n >,\n TData\n >,\n ): UseInfiniteQueryResult<TData> {\n return useInfiniteQueryOriginal({\n ...productListingPageInfiniteQueryOptions(this.ensureCommerce(), params, {\n market: this.market,\n }),\n ...options,\n }) as UseInfiniteQueryResult<TData>\n }\n\n async prefetchProductListingPage(\n params?: ProductListingPageCatalogParams,\n options?: { staleTime?: number },\n ): Promise<void>\n async prefetchProductListingPage(\n params: ProductListingPageFullParams,\n options?: { staleTime?: number },\n ): Promise<void>\n async prefetchProductListingPage(\n params: ProductListingPageParams,\n options?: { staleTime?: number },\n ): Promise<void>\n async prefetchProductListingPage(\n params: ProductListingPageParams = {},\n options?: { staleTime?: number },\n ) {\n return prefetchProductListingPage(\n this.queryClient,\n this.ensureCommerce(),\n params,\n options,\n { market: this.market },\n )\n }\n\n async prefetchInfiniteProductListingPage(\n params: ProductListingPageInfiniteParams = {},\n options?: { pages?: number; staleTime?: number },\n ) {\n return prefetchInfiniteProductListingPage(\n this.queryClient,\n this.ensureCommerce(),\n params,\n options,\n { market: this.market },\n )\n }\n\n useProductDetail(\n params: ProductDetailParams,\n options?: QueryOptions<ProductDetailCatalogResult>,\n ): UseQueryResult<ProductDetailCatalogResult> {\n const discriminator = 'slug' in params ? params.slug : params.id\n const { enabled, ...restOptions } = options ?? {}\n const queryEnabled = enabled !== false && Boolean(discriminator)\n const effectiveParams = this.withProductMarket(params) ?? params\n\n return useQueryOriginal({\n queryKey: productKeys.detail(effectiveParams),\n queryFn: () => this._commerce!.product.detail(effectiveParams),\n enabled: queryEnabled,\n ...restOptions,\n }) as UseQueryResult<ProductDetailCatalogResult>\n }\n\n useProductDetailBySlug(\n slug: string,\n options?: ProductDetailConvenienceOptions,\n ): UseQueryResult<ProductDetailCatalogResult> {\n const { market, locale, fallbackLocale, ...queryOptions } = options ?? {}\n return this.useProductDetail(\n {\n slug,\n ...(market ? { market } : {}),\n ...(locale ? { locale } : {}),\n ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),\n },\n queryOptions,\n )\n }\n\n useProductDetailById(\n id: string,\n options?: ProductDetailConvenienceOptions,\n ): UseQueryResult<ProductDetailCatalogResult> {\n const { market, locale, fallbackLocale, ...queryOptions } = options ?? {}\n return this.useProductDetail(\n {\n id,\n ...(market ? { market } : {}),\n ...(locale ? { locale } : {}),\n ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),\n },\n queryOptions,\n )\n }\n}\n","import type {\n ProductFallbackLocaleOption,\n ProductLocaleOption,\n} from '../../api/product-api'\n\nfunction normalizedMarket(value: string | undefined): string | undefined {\n const market = value?.trim()\n return market || undefined\n}\n\ntype ProductLocaleQueryOptions = {\n locale?: ProductLocaleOption\n fallbackLocale?: ProductFallbackLocaleOption\n}\n\nfunction appendProductLocaleSearchParams(\n search: URLSearchParams,\n options?: ProductLocaleQueryOptions,\n): void {\n if (options?.locale) search.set('locale', options.locale)\n if (options?.fallbackLocale !== undefined) {\n search.set(\n 'fallbackLocale',\n options.fallbackLocale === false ? 'none' : options.fallbackLocale,\n )\n }\n}\n\nexport function productDetailSearchParams(\n params: ({ slug: string } | { id: string }) & {\n market?: string\n } & ProductLocaleQueryOptions,\n): string {\n const search = new URLSearchParams()\n if ('slug' in params) {\n search.set('slug', params.slug)\n } else {\n search.set('id', params.id)\n }\n const market = normalizedMarket(params.market)\n if (market) search.set('market', market)\n appendProductLocaleSearchParams(search, params)\n return search.toString()\n}\n\nexport function listingGroupsSearchParams(\n params: {\n productIds: string[]\n market?: string\n } & ProductLocaleQueryOptions,\n): string {\n const ids = params.productIds.map(encodeURIComponent).join(',')\n const search = new URLSearchParams()\n const market = normalizedMarket(params.market)\n if (market) search.set('market', market)\n appendProductLocaleSearchParams(search, params)\n const query = search.toString()\n return `ids=${ids}${query ? `&${query}` : ''}`\n}\n\ntype ListingGroupsQueryUrlOptions = {\n market?: string\n locale?: ProductLocaleOption\n fallbackLocale?: ProductFallbackLocaleOption\n page?: number\n limit?: number\n sort?: string | string[]\n where?: Record<string, unknown>\n}\n\nfunction appendListingGroupsQuerySearchParams(\n search: URLSearchParams,\n options?: ListingGroupsQueryUrlOptions,\n): void {\n const market = normalizedMarket(options?.market)\n if (market) search.set('market', market)\n appendProductLocaleSearchParams(search, options)\n if (options?.page != null) search.set('page', String(options.page))\n if (options?.limit != null) search.set('limit', String(options.limit))\n if (options?.sort != null) {\n const sort = options.sort\n search.set('sort', Array.isArray(sort) ? sort.join(',') : sort)\n }\n if (options?.where != null) {\n search.set('whereJson', JSON.stringify(options.where))\n }\n}\n\n/** Server-auth GET PLP listing-groups query (full variant stock fields). */\nexport function listingPageSearchParams(\n options?: ListingGroupsQueryUrlOptions,\n): string {\n const search = new URLSearchParams()\n appendListingGroupsQuerySearchParams(search, options)\n return search.toString()\n}\n\nexport function stockSnapshotSearchParams(params: {\n variantIds: string[]\n}): string {\n return `variantIds=${params.variantIds.map(encodeURIComponent).join(',')}`\n}\n","const operationBrand: unique symbol = Symbol('sdk-http-operation')\n\n/** Successful legacy privileged-bearer response: canonical UTC rotation deadline. */\nexport const CREDENTIAL_ROTATION_DEADLINE_HEADER =\n 'X-01-Credential-Rotation-Deadline' as const\n\n/**\n * Opt-in representation for Standard V2 PortOne action capabilities.\n *\n * The default application/json projection stays byte-shape compatible with\n * strict SDK parsers released before these capability literals existed.\n */\nexport const PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE =\n 'application/vnd.01software.portone-action-capabilities.v1+json' as const\n\nexport function requestsPortOneStandardActionCapabilities(\n accept: string | null | undefined,\n): boolean {\n return (\n accept?.trim().toLowerCase() ===\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE\n )\n}\n\nexport type HttpOperation = {\n readonly [operationBrand]: true\n readonly collection: string | null\n readonly method: 'get' | 'post' | 'patch' | 'delete'\n readonly path: `/${string}`\n readonly errorFamily?: 'commerce'\n /**\n * Canonical commerce reasons emitted by an otherwise legacy-compatible\n * endpoint. Only these responses may be normalized and parsed as the strict\n * commerce envelope; every other response retains its established shape.\n */\n readonly typedCommerceErrorReasons?: readonly string[]\n}\n\nconst operation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n errorFamily?: HttpOperation['errorFamily'],\n) =>\n Object.freeze({\n [operationBrand]: true,\n collection,\n method,\n path,\n ...(errorFamily && { errorFamily }),\n } as const)\n\nconst strictCommerceOperation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n) => operation(collection, method, path, 'commerce')\n\nconst selectiveCommerceOperation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n TReasons extends readonly [string, ...string[]],\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n typedCommerceErrorReasons: TReasons,\n) =>\n Object.freeze({\n ...operation(collection, method, path),\n typedCommerceErrorReasons: Object.freeze([...typedCommerceErrorReasons]),\n } as const)\n\nexport const COMMERCE_ENDPOINT_OPERATIONS = {\n products: {\n detail: operation('products', 'get', '/detail'),\n detailCatalog: operation('products', 'get', '/detail/catalog'),\n listingGroups: operation('products', 'get', '/listing-groups'),\n listingGroupsCatalog: operation(\n 'products',\n 'get',\n '/listing-groups/catalog',\n ),\n listingGroupsQuery: operation('products', 'post', '/listing-groups/query'),\n listingGroupsQueryGet: operation(\n 'products',\n 'get',\n '/listing-groups/query',\n ),\n listingGroupsQueryCatalog: operation(\n 'products',\n 'get',\n '/listing-groups/query/catalog',\n ),\n stockCheck: operation('products', 'post', '/stock-check'),\n stockSnapshot: operation('products', 'get', '/stock'),\n upsert: operation('products', 'post', '/upsert'),\n },\n orders: {\n create: operation('orders', 'post', '/create'),\n update: operation('orders', 'post', '/update'),\n confirmPayment: operation('orders', 'post', '/confirm-payment'),\n byPayment: operation('orders', 'get', '/by-payment'),\n cancel: operation('orders', 'post', '/cancel'),\n resolveCancelRefund: selectiveCommerceOperation(\n 'orders',\n 'post',\n '/resolve-cancel-refund',\n ['managed_refund_attestation_forbidden'],\n ),\n checkout: strictCommerceOperation('orders', 'post', '/checkout'),\n createFulfillment: operation('orders', 'post', '/create-fulfillment'),\n updateFulfillment: operation('orders', 'post', '/update-fulfillment'),\n },\n checkouts: {\n detail: strictCommerceOperation('checkouts', 'post', '/detail'),\n query: strictCommerceOperation('checkouts', 'post', '/query'),\n },\n draftOrders: {\n calculate: operation('draft-orders', 'post', '/:id/calculate'),\n complete: operation('draft-orders', 'post', '/:id/complete'),\n finalize: operation('draft-orders', 'post', '/:id/finalize'),\n },\n transactions: {\n update: operation('transactions', 'post', '/update'),\n },\n returns: {\n create: operation('returns', 'post', '/create'),\n update: operation('returns', 'post', '/update'),\n returnRefund: operation('returns', 'post', '/return-refund'),\n },\n fulfillmentOrders: {\n prepare: operation(\n 'fulfillment-orders',\n 'post',\n '/prepare-fulfillment-order',\n ),\n },\n fulfillments: {\n bulkImport: operation('fulfillments', 'post', '/bulk-import'),\n },\n carts: {\n create: strictCommerceOperation('carts', 'post', '/create'),\n retrieve: strictCommerceOperation('carts', 'post', '/retrieve'),\n mine: strictCommerceOperation('carts', 'post', '/mine'),\n merge: strictCommerceOperation('carts', 'post', '/merge'),\n addItem: strictCommerceOperation('carts', 'post', '/add-item'),\n updateItem: strictCommerceOperation('carts', 'post', '/update-item'),\n removeItem: strictCommerceOperation('carts', 'post', '/remove-item'),\n updateDiscountCodes: strictCommerceOperation(\n 'carts',\n 'post',\n '/update-discount-codes',\n ),\n updateAttributes: strictCommerceOperation(\n 'carts',\n 'post',\n '/update-attributes',\n ),\n clear: strictCommerceOperation('carts', 'post', '/clear'),\n },\n paymentSessions: {\n create: strictCommerceOperation('payment-sessions', 'post', '/create'),\n retrieve: strictCommerceOperation('payment-sessions', 'post', '/retrieve'),\n cancel: strictCommerceOperation('payment-sessions', 'post', '/cancel'),\n server: {\n create: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/create',\n ),\n retrieve: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/retrieve',\n ),\n cancel: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/cancel',\n ),\n confirm: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/confirm',\n ),\n findPortOne: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/portone/find',\n ),\n reconcilePortOne: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/portone/reconcile',\n ),\n },\n custom: {\n create: operation('orders', 'post', '/custom-payment-sessions'),\n retrieve: operation(\n 'orders',\n 'post',\n '/custom-payment-sessions/retrieve',\n ),\n confirm: operation('orders', 'post', '/custom-payment-sessions/confirm'),\n },\n },\n shippingPolicies: {\n calculate: operation('shipping-policies', 'post', '/calculate'),\n },\n discounts: {\n validate: operation('discounts', 'post', '/validate'),\n },\n} as const\n\nconst portOneStandardActionCapabilityOperations = new Set<HttpOperation>([\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.create,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.retrieve,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.create,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.retrieve,\n])\n\n/**\n * Whether this operation may negotiate the Standard V2 capability projection.\n *\n * Create still requires a Standard V2 request profile, while retrieve discovers\n * the provider/profile from the stored session. Cancel and confirm deliberately\n * remain on the released JSON representation.\n */\nexport function supportsPortOneStandardActionCapabilityNegotiation(\n descriptor: HttpOperation,\n): boolean {\n return portOneStandardActionCapabilityOperations.has(descriptor)\n}\n\nexport const MEMBERSHIP_ENDPOINT_OPERATIONS = {\n subscribe: operation(null, 'post', '/memberships/subscribe'),\n billingCustody: operation(null, 'post', '/memberships/billing-custody'),\n cancel: operation(null, 'post', '/memberships/:id/cancel'),\n me: operation(null, 'get', '/memberships/me'),\n chargeResult: operation(null, 'post', '/memberships/:id/charge-result'),\n refundResult: operation(null, 'post', '/memberships/:id/refund-result'),\n revoke: operation(null, 'post', '/memberships/:id/revoke'),\n} as const\n\n/** Server-only tenant-owned operations; no raw claim collection is published. */\nexport const EXTERNAL_EFFECT_CLAIM_ENDPOINT_OPERATIONS = {\n claim: operation(null, 'post', '/external-effect-claims/claim'),\n get: operation(null, 'post', '/external-effect-claims/get'),\n arm: operation(null, 'post', '/external-effect-claims/arm'),\n release: operation(null, 'post', '/external-effect-claims/release'),\n report: operation(null, 'post', '/external-effect-claims/report'),\n recovery: operation(null, 'post', '/external-effect-claims/recovery'),\n} as const\n\n/** Bound-server, purpose-specific installation ciphertext operations. */\nexport const INSTALLATION_CREDENTIAL_ENDPOINT_OPERATIONS = {\n create: operation(null, 'post', '/installation-credentials/create'),\n get: operation(null, 'post', '/installation-credentials/get'),\n replace: operation(null, 'post', '/installation-credentials/replace'),\n dispose: operation(null, 'post', '/installation-credentials/dispose'),\n} as const\n\n/** Server-only shaped external Customer links owned by the Customers bucket. */\nexport const EXTERNAL_CUSTOMER_LINK_ENDPOINT_OPERATIONS = {\n connect: operation('customers', 'post', '/external-links/connect'),\n get: operation('customers', 'post', '/external-links/get'),\n list: operation('customers', 'post', '/external-links/list'),\n unlink: operation('customers', 'post', '/external-links/unlink'),\n capturePreviousState: operation(\n 'customers',\n 'post',\n '/external-links/capture-previous-state',\n ),\n clearPreviousState: operation(\n 'customers',\n 'post',\n '/external-links/clear-previous-state',\n ),\n} as const\n\n/** Server-authenticated source-aware Customer Group authority operations. */\nexport const CUSTOMER_GROUP_ENDPOINT_OPERATIONS = {\n members: operation('customer-groups', 'get', '/:id/members'),\n grant: operation('customer-groups', 'post', '/:id/members/grant'),\n revoke: operation('customer-groups', 'post', '/:id/members/revoke'),\n} as const\n\n/** Browser-public customer self actions; each operation owns its authentication. */\nexport const CUSTOMER_AUTH_ENDPOINT_OPERATIONS = {\n revokeRefresh: operation('customers', 'post', '/revoke-refresh'),\n withdraw: operation('customers', 'post', '/withdraw'),\n} as const\n\n/** PAT-only operator controls for the active tenant embedded admin binding. */\nexport const EMBEDDED_ADMIN_ENDPOINT_OPERATIONS = {\n show: operation('tenants', 'get', '/embedded-admin-app'),\n configure: operation('tenants', 'patch', '/embedded-admin-app'),\n disable: operation('tenants', 'delete', '/embedded-admin-app'),\n} as const\n\n/** Shaped event operations shared by their owning runtime and SDK surfaces. */\nexport const EVENTS_ENDPOINT_OPERATIONS = {\n events: {\n convertSchedule: operation('events', 'post', '/:id/schedule'),\n },\n occurrences: {\n range: operation('event-occurrences', 'get', '/range'),\n admissionAvailability: operation(\n 'event-occurrences',\n 'get',\n '/admission-availability',\n ),\n },\n} as const\n\n/** Public, shaped browser reads served by community collections. */\nexport const COMMUNITY_ENDPOINT_OPERATIONS = {\n posts: {\n detail: operation('posts', 'get', '/detail'),\n },\n} as const\n\n/** Public, shaped gallery item reads. Linked raw videos remain server-only. */\nexport const GALLERY_ENDPOINT_OPERATIONS = {\n items: {\n storefront: operation('gallery-items', 'get', '/storefront'),\n },\n} as const\n\n/** Public, shaped VOD playback admission. Raw videos remain server-only. */\nexport const VIDEO_ENDPOINT_OPERATIONS = {\n playback: operation('videos', 'post', '/:id/playback'),\n} as const\n\nexport function resolveOperationTemplate(descriptor: HttpOperation): string {\n return descriptor.collection\n ? `/api/${descriptor.collection}${descriptor.path}`\n : `/api${descriptor.path}`\n}\n\nexport function resolveOperationPath(\n descriptor: HttpOperation,\n options?: {\n pathParams?: Readonly<Record<string, string>>\n query?: string | URLSearchParams\n },\n): string {\n const path = resolveOperationTemplate(descriptor).replace(\n /:([A-Za-z][A-Za-z0-9_]*)/g,\n (_, key) => {\n const value = options?.pathParams?.[key]\n if (value === undefined) {\n throw new TypeError(`Missing path parameter: ${key}`)\n }\n return encodeURIComponent(value)\n },\n )\n const unresolved = path.match(/:([A-Za-z][A-Za-z0-9_]*)/)\n if (unresolved) {\n throw new TypeError(`Missing path parameter: ${unresolved[1]}`)\n }\n\n const query = options?.query?.toString().replace(/^\\?/, '')\n return query ? `${path}?${query}` : path\n}\n\nexport function resolveOperationMethod(\n descriptor: HttpOperation,\n): Uppercase<HttpOperation['method']> {\n return descriptor.method.toUpperCase() as Uppercase<HttpOperation['method']>\n}\n","// SDK-facing semantic view over the shared commerce transport manifest.\n//\n// The private http-contracts workspace package is the sole authority for\n// commerce and membership transport identity (collection, method, path).\n// Console mounts the same operations, and\n// `apps/console/tests/unit/sdk/endpoint-contract-parity.test.ts` proves each\n// declared operation is registered exactly once with a handler — see\n// `docs/contracts/platform/public-api-boundary.md` (PLAT-API-016).\n//\n// This module only groups those operations under the names the SDK APIs call\n// them by, including the deliberate browser/server aliases that are an\n// authorization lane rather than a second transport. It must not declare a\n// method or path literal; `tests/unit/api/endpoint-transport-authority.test.ts`\n// fails closed if one reappears.\n//\n// Keep this internal — it is the transport contract, not public SDK surface.\nimport {\n CUSTOMER_GROUP_ENDPOINT_OPERATIONS,\n EXTERNAL_CUSTOMER_LINK_ENDPOINT_OPERATIONS,\n COMMERCE_ENDPOINT_OPERATIONS,\n EXTERNAL_EFFECT_CLAIM_ENDPOINT_OPERATIONS,\n INSTALLATION_CREDENTIAL_ENDPOINT_OPERATIONS,\n MEMBERSHIP_ENDPOINT_OPERATIONS,\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE,\n type HttpOperation,\n} from '@01.software/http-contracts'\n\nexport {\n resolveOperationMethod,\n resolveOperationPath,\n} from '@01.software/http-contracts'\nexport {\n CUSTOMER_GROUP_ENDPOINT_OPERATIONS,\n EXTERNAL_CUSTOMER_LINK_ENDPOINT_OPERATIONS,\n COMMERCE_ENDPOINT_OPERATIONS,\n EXTERNAL_EFFECT_CLAIM_ENDPOINT_OPERATIONS,\n INSTALLATION_CREDENTIAL_ENDPOINT_OPERATIONS,\n MEMBERSHIP_ENDPOINT_OPERATIONS,\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE,\n}\n\nexport type CommerceEndpointDescriptor = HttpOperation\n\n/**\n * Widens a manifest operation to the nameable `HttpOperation` type. Without it\n * the inferred literal type leaks the manifest's private brand symbol into the\n * SDK declaration output (TS4023).\n */\nconst sharedEndpoint = (descriptor: HttpOperation): HttpOperation => descriptor\n\nexport function resolveOperationErrorFamily(\n descriptor: CommerceEndpointDescriptor,\n): 'commerce' | undefined {\n return descriptor.errorFamily\n}\n\nexport function resolveOperationTypedCommerceErrorReasons(\n descriptor: CommerceEndpointDescriptor,\n): readonly string[] | undefined {\n return descriptor.typedCommerceErrorReasons\n}\n\nexport const COMMERCE_ENDPOINTS = {\n products: {\n detail: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.products.detail),\n detailCatalog: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.detailCatalog,\n ),\n listingGroups: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroups,\n ),\n listingGroupsCatalog: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsCatalog,\n ),\n // The manifest keeps the GET read and the POST body-query apart; this\n // semantic name has always resolved to the GET one.\n listingGroupsQuery: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQueryGet,\n ),\n listingGroupsQueryCatalog: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.listingGroupsQueryCatalog,\n ),\n stockCheck: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.stockCheck,\n ),\n stockSnapshot: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.products.stockSnapshot,\n ),\n upsert: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.products.upsert),\n },\n orders: {\n update: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.update),\n byPayment: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.byPayment),\n cancel: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.cancel),\n resolveCancelRefund: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.orders.resolveCancelRefund,\n ),\n createFulfillment: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.orders.createFulfillment,\n ),\n updateFulfillment: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.orders.updateFulfillment,\n ),\n },\n checkouts: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.checkout),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.detail),\n server: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.checkout),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.detail),\n query: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.query),\n },\n },\n returns: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.returns.create),\n update: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.returns.update),\n returnRefund: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.returns.returnRefund,\n ),\n },\n fulfillmentOrders: {\n prepare: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.fulfillmentOrders.prepare,\n ),\n },\n fulfillments: {\n bulkImport: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.fulfillments.bulkImport,\n ),\n },\n carts: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.create),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.retrieve),\n mine: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.mine),\n merge: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.merge),\n server: {\n // Server credentials are an authorization lane, not a second Cart\n // transport. These must stay bound to the registered shared operations.\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.create),\n retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.retrieve),\n mine: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.mine),\n merge: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.merge),\n addItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.addItem),\n updateItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.updateItem),\n removeItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.removeItem),\n updateDiscountCodes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateDiscountCodes,\n ),\n updateAttributes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateAttributes,\n ),\n clear: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.clear),\n },\n addItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.addItem),\n updateItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.updateItem),\n removeItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.removeItem),\n updateDiscountCodes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateDiscountCodes,\n ),\n updateAttributes: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.carts.updateAttributes,\n ),\n clear: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.clear),\n },\n paymentSessions: {\n create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.create),\n retrieve: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.retrieve,\n ),\n cancel: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.cancel),\n custom: {\n create: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.create,\n ),\n retrieve: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.retrieve,\n ),\n confirm: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.confirm,\n ),\n },\n server: {\n create: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.create,\n ),\n retrieve: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.retrieve,\n ),\n cancel: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.cancel,\n ),\n confirm: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.confirm,\n ),\n findPortOne: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.findPortOne,\n ),\n reconcilePortOne: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.reconcilePortOne,\n ),\n },\n },\n shippingPolicies: {\n calculate: sharedEndpoint(\n COMMERCE_ENDPOINT_OPERATIONS.shippingPolicies.calculate,\n ),\n },\n} as const\n","/**\n * Fetch-based SSE connection manager for real-time collection change events.\n * Uses fetch + ReadableStream to support custom auth headers (unlike native EventSource).\n */\n\nexport interface RealtimeEvent {\n collection: string\n operation: string\n id: string | null\n timestamp: string\n}\n\nexport type RealtimeListener = (event: RealtimeEvent) => void\n\nconst INITIAL_RECONNECT_DELAY = 1_000\nconst MAX_RECONNECT_DELAY = 30_000\nconst RECONNECT_BACKOFF_FACTOR = 2\nconst MAX_NO_TOKEN_RETRIES = 5\n\nexport class RealtimeConnection {\n private abortController: AbortController | null = null\n private reconnectAttempt = 0\n private noTokenAttempts = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n private listeners = new Set<RealtimeListener>()\n private _connected = false\n\n constructor(\n private baseUrl: string,\n private publishableKey: string,\n private getToken: () => string | null,\n private collections?: string[],\n ) {}\n\n get connected(): boolean {\n return this._connected\n }\n\n addListener(fn: RealtimeListener): () => void {\n this.listeners.add(fn)\n return () => this.listeners.delete(fn)\n }\n\n connect(): void {\n if (this.abortController) return // Already connecting/connected\n\n this.abortController = new AbortController()\n this.startStream(this.abortController.signal)\n }\n\n disconnect(): void {\n this._connected = false\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n if (this.abortController) {\n this.abortController.abort()\n this.abortController = null\n }\n this.reconnectAttempt = 0\n this.noTokenAttempts = 0\n }\n\n private async startStream(signal: AbortSignal): Promise<void> {\n const token = this.getToken()\n if (!token) {\n this.noTokenAttempts++\n if (this.noTokenAttempts >= MAX_NO_TOKEN_RETRIES) {\n // Stop reconnecting — no token available after multiple attempts\n this._connected = false\n this.abortController = null\n return\n }\n this.scheduleReconnect()\n return\n }\n this.noTokenAttempts = 0\n\n const params = this.collections?.length\n ? `?collections=${this.collections.join(',')}`\n : ''\n const url = `${this.baseUrl}/api/events/stream${params}`\n\n try {\n const response = await fetch(url, {\n headers: {\n 'X-Publishable-Key': this.publishableKey,\n Authorization: `Bearer ${token}`,\n },\n signal,\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n // Token expired — try reconnecting (will get fresh token)\n this.scheduleReconnect()\n return\n }\n throw new Error(`SSE connection failed: ${response.status}`)\n }\n\n if (!response.body) {\n throw new Error('SSE response has no body')\n }\n\n this._connected = true\n this.reconnectAttempt = 0\n\n await this.readStream(response.body, signal)\n } catch {\n if (signal.aborted) return // Intentional disconnect\n this._connected = false\n this.scheduleReconnect()\n }\n }\n\n private async readStream(\n body: ReadableStream<Uint8Array>,\n signal: AbortSignal,\n ): Promise<void> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent = ''\n let currentData = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done || signal.aborted) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? '' // Keep incomplete last line in buffer\n\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7)\n } else if (line.startsWith('data: ')) {\n currentData += (currentData ? '\\n' : '') + line.slice(6)\n } else if (line === '') {\n // Empty line = end of event\n if (currentEvent === 'collection:change' && currentData) {\n try {\n const event: RealtimeEvent = JSON.parse(currentData)\n for (const listener of this.listeners) {\n try {\n listener(event)\n } catch {\n // Listener error — ignore\n }\n }\n } catch {\n // Malformed JSON — ignore\n }\n }\n currentEvent = ''\n currentData = ''\n }\n // Ignore comment lines (: heartbeat)\n }\n }\n } catch {\n // Stream read error\n } finally {\n reader.releaseLock()\n this._connected = false\n if (!signal.aborted) {\n this.scheduleReconnect()\n }\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimer) return\n\n const delay = Math.min(\n INITIAL_RECONNECT_DELAY *\n Math.pow(RECONNECT_BACKOFF_FACTOR, this.reconnectAttempt),\n MAX_RECONNECT_DELAY,\n )\n this.reconnectAttempt++\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null\n this.abortController = new AbortController()\n this.startStream(this.abortController.signal)\n }, delay)\n }\n}\n","import type {\n PublicCollection,\n RootClient,\n RootServerClient,\n ServerCollection,\n} from '../client/types'\nimport type { CollectionClient, ServerCollectionClient } from '../collection'\nimport { QueryHooks, type ReadOnlyQueryHooks } from './query-hooks'\nimport { getQueryClient } from './get-query-client'\nimport type { QueryClient } from '@tanstack/react-query'\n\nfunction getClientMarket(client: {\n getConfig?: () => { market?: string | undefined }\n}): string | undefined {\n return client.getConfig?.().market\n}\n\nfunction createReadOnlyQueryHooksFacade(\n hooks: QueryHooks<PublicCollection>,\n): ReadOnlyQueryHooks {\n return {\n useQuery: hooks.useQuery.bind(hooks),\n useSuspenseQuery: hooks.useSuspenseQuery.bind(hooks),\n useQueryById: hooks.useQueryById.bind(hooks),\n useSuspenseQueryById: hooks.useSuspenseQueryById.bind(hooks),\n useInfiniteQuery: hooks.useInfiniteQuery.bind(hooks),\n useSuspenseInfiniteQuery: hooks.useSuspenseInfiniteQuery.bind(hooks),\n prefetchQuery: hooks.prefetchQuery.bind(hooks),\n prefetchQueryById: hooks.prefetchQueryById.bind(hooks),\n prefetchInfiniteQuery: hooks.prefetchInfiniteQuery.bind(hooks),\n invalidateQueries: hooks.invalidateQueries.bind(hooks),\n getQueryData: hooks.getQueryData.bind(hooks),\n setQueryData: hooks.setQueryData.bind(hooks),\n useCustomerMe: hooks.useCustomerMe.bind(hooks),\n useCustomerLogin: hooks.useCustomerLogin.bind(hooks),\n useCustomerRegister: hooks.useCustomerRegister.bind(hooks),\n useCustomerLogout: hooks.useCustomerLogout.bind(hooks),\n useCustomerForgotPassword: hooks.useCustomerForgotPassword.bind(hooks),\n useCustomerResetPassword: hooks.useCustomerResetPassword.bind(hooks),\n useCustomerRefreshToken: hooks.useCustomerRefreshToken.bind(hooks),\n useCustomerUpdateProfile: hooks.useCustomerUpdateProfile.bind(hooks),\n useCustomerChangePassword: hooks.useCustomerChangePassword.bind(hooks),\n invalidateCustomerQueries: hooks.invalidateCustomerQueries.bind(hooks),\n getCustomerData: hooks.getCustomerData.bind(hooks),\n setCustomerData: hooks.setCustomerData.bind(hooks),\n useProductListingGroupsCatalogQuery:\n hooks.useProductListingGroupsCatalogQuery.bind(hooks),\n useSuspenseProductListingGroupsCatalogQuery:\n hooks.useSuspenseProductListingGroupsCatalogQuery.bind(hooks),\n useInfiniteProductListingGroupsCatalogQuery:\n hooks.useInfiniteProductListingGroupsCatalogQuery.bind(hooks),\n useSuspenseInfiniteProductListingGroupsCatalogQuery:\n hooks.useSuspenseInfiniteProductListingGroupsCatalogQuery.bind(hooks),\n prefetchProductListingGroupsCatalogQuery:\n hooks.prefetchProductListingGroupsCatalogQuery.bind(hooks),\n prefetchInfiniteProductListingGroupsCatalogQuery:\n hooks.prefetchInfiniteProductListingGroupsCatalogQuery.bind(hooks),\n useProductListingPage: hooks.useProductListingPage.bind(hooks),\n useSuspenseProductListingPage:\n hooks.useSuspenseProductListingPage.bind(hooks),\n useInfiniteProductListingPage:\n hooks.useInfiniteProductListingPage.bind(hooks),\n prefetchProductListingPage: hooks.prefetchProductListingPage.bind(hooks),\n prefetchInfiniteProductListingPage:\n hooks.prefetchInfiniteProductListingPage.bind(hooks),\n useProductDetail: hooks.useProductDetail.bind(hooks),\n useProductDetailBySlug: hooks.useProductDetailBySlug.bind(hooks),\n useProductDetailById: hooks.useProductDetailById.bind(hooks),\n } as ReadOnlyQueryHooks\n}\n\nexport function createQueryHooks(\n client: RootClient,\n queryClient: QueryClient = getQueryClient(),\n): ReadOnlyQueryHooks {\n const hooks = new QueryHooks<PublicCollection>(\n queryClient,\n client.collections as unknown as CollectionClient<PublicCollection>,\n client.customer.auth,\n client.commerce as never,\n getClientMarket(client),\n )\n\n return createReadOnlyQueryHooksFacade(hooks)\n}\n\nexport function createServerQueryHooks(\n client: RootServerClient,\n queryClient: QueryClient = getQueryClient(),\n): QueryHooks<ServerCollection> {\n return new QueryHooks<ServerCollection>(\n queryClient,\n client.collections as ServerCollectionClient,\n undefined,\n client.commerce,\n getClientMarket(client),\n )\n}\n"],"mappings":"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","names":["useQueryOriginal","useMutationOriginal","useMutationOriginal","useQueryOriginal","useInfiniteQueryOriginal","useQueryOriginal","useSuspenseInfiniteQueryOriginal","useSuspenseQueryOriginal","useQueryOriginal","useSuspenseQueryOriginal","useInfiniteQueryOriginal","useSuspenseInfiniteQueryOriginal"]}
|