UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

229 lines • 22.3 kB
import type Medusa from "@medusajs/js-sdk"; import type { HttpTypes } from "@medusajs/types"; import { type AuthHooks, type CreateAuthHooksConfig } from "../auth/hooks"; import { type MedusaAuthCredentials, type MedusaAuthServiceConfig, type MedusaConfirmCustomerAccountDeactivationInput, type MedusaDeactivateCustomerAccountResult, type MedusaRegisterData, type MedusaRequestCustomerAccountDeactivationResult, type MedusaUpdateCustomerData } from "../auth/medusa-service"; import type { AuthQueryKeys, AuthService } from "../auth/types"; import { type CartHooks, type CreateCartHooksConfig } from "../cart/hooks"; import { createMedusaCartService, type MedusaCartAddItemParams, type MedusaCartCreateParams, type MedusaCartServiceConfig, type MedusaCartUpdateItemParams, type MedusaCartUpdateParams, type MedusaCompleteCartResult } from "../cart/medusa-service"; import type { AddLineItemInputBase, CartCreateInputBase, CartQueryKeys, UpdateCartInputBase, UpdateLineItemInputBase } from "../cart/types"; import { type CatalogHooks, type CreateCatalogHooksConfig } from "../catalog/hooks"; import type { createMedusaCatalogService, MedusaCatalogListInput, MedusaCatalogServiceConfig } from "../catalog/medusa-service"; import type { CatalogFacets, CatalogQueryKeys } from "../catalog/types"; import { type CategoryHooks, type CreateCategoryHooksConfig } from "../categories/hooks"; import type { createMedusaCategoryService, MedusaCategoryDetailInput, MedusaCategoryListInput, MedusaCategoryServiceConfig } from "../categories/medusa-service"; import type { CategoryQueryKeys } from "../categories/types"; import { type CheckoutHooks, type CreateCheckoutHooksConfig } from "../checkout/hooks"; import { createMedusaCheckoutService, type MedusaCheckoutServiceConfig } from "../checkout/medusa-service"; import type { CheckoutQueryKeys } from "../checkout/types"; import { type CollectionHooks, type CreateCollectionHooksConfig } from "../collections/hooks"; import type { createMedusaCollectionService, MedusaCollectionDetailInput, MedusaCollectionListInput, MedusaCollectionServiceConfig } from "../collections/medusa-service"; import type { CollectionQueryKeys } from "../collections/types"; import { type CreateCustomerHooksConfig, type CustomerHooks } from "../customers/hooks"; import { type MedusaCustomerAddressCreateInput, type MedusaCustomerAddressUpdateInput, type MedusaCustomerListInput, type MedusaCustomerProfileUpdateInput } from "../customers/medusa-service"; import type { CustomerAddressCreateInputBase, CustomerAddressUpdateInputBase, CustomerQueryKeys, CustomerService } from "../customers/types"; import { type CreateOrderHooksConfig, type OrderHooks } from "../orders/hooks"; import type { MedusaOrderDetailHookInput, MedusaOrderDetailInput, MedusaOrderListHookInput, MedusaOrderListInput, MedusaOrderServiceConfig } from "../orders/medusa-service"; import type { OrderQueryKeys, OrderService } from "../orders/types"; import { type CreateProductAttributeHooksConfig, type ProductAttributeHooks } from "../product-attributes/hooks"; import type { MedusaProductAttributeServiceConfig, MedusaProductAttributesInput } from "../product-attributes/medusa-service"; import type { ProductAttribute, ProductAttributeQueryKeys, ProductAttributeService } from "../product-attributes/types"; import { type CreateProductListHooksConfig, type ProductListHooks } from "../product-lists/hooks"; import type { MedusaProductListDetailHookInput, MedusaProductListDetailInput, MedusaProductListDetailKeyInput, MedusaProductListListHookInput, MedusaProductListListInput, MedusaProductListListKeyInput, MedusaProductListServiceConfig } from "../product-lists/medusa-service"; import type { ProductListBase, ProductListItemBase, ProductListQueryKeys, ProductListService } from "../product-lists/types"; import { type CreateProductLocationAvailabilityHooksConfig, type ProductLocationAvailabilityHooks } from "../product-location-availability/hooks"; import type { MedusaProductLocationAvailabilityInput, MedusaProductLocationAvailabilityServiceConfig } from "../product-location-availability/medusa-service"; import type { ProductLocationAvailabilityQueryKeys, ProductLocationAvailabilityResponse, ProductLocationAvailabilityService } from "../product-location-availability/types"; import { type CreateProductHooksConfig, type ProductHooks } from "../products/hooks"; import type { createMedusaProductService, MedusaProductDetailInput, MedusaProductListInput, MedusaProductServiceConfig } from "../products/medusa-service"; import type { ProductQueryKeys } from "../products/types"; import { type CreateRegionHooksConfig, type RegionHooks } from "../regions/hooks"; import type { createMedusaRegionService, MedusaRegionDetailInput, MedusaRegionListInput } from "../regions/medusa-service"; import type { RegionQueryKeys } from "../regions/types"; import { type CreateProductReviewHooksConfig, type ProductReviewHooks } from "../reviews/hooks"; import type { MedusaProductReviewListInput, MedusaProductReviewServiceConfig } from "../reviews/medusa-service"; import type { ProductReviewQueryKeys, ProductReviewService, ReviewBase } from "../reviews/types"; import type { CacheConfig } from "../shared/cache-config"; import type { ActiveCartQueryKeyMatcher } from "../shared/cart-cache-sync"; import type { QueryNamespace } from "../shared/query-keys"; import { createMedusaCartFlow } from "./cart-flow"; import { createMedusaCheckoutFlow } from "./checkout-flow"; import { createMedusaStorefrontQueryKeys as createMedusaStorefrontQueryKeysFromFoundation, type MedusaStorefrontQueryKeys as MedusaStorefrontQueryKeysFromFoundation } from "./foundation"; type OmitFactoryConfig<TConfig> = Omit<TConfig, "service" | "queryKeys" | "queryKeyNamespace" | "cacheConfig">; type MedusaAuthHooksConfig = OmitFactoryConfig<CreateAuthHooksConfig<HttpTypes.StoreCustomer, MedusaAuthCredentials, MedusaRegisterData, MedusaUpdateCustomerData, unknown, string, string, MedusaRequestCustomerAccountDeactivationResult, MedusaConfirmCustomerAccountDeactivationInput, MedusaDeactivateCustomerAccountResult>>; type MedusaAuthService = AuthService<HttpTypes.StoreCustomer, MedusaAuthCredentials, MedusaRegisterData, MedusaUpdateCustomerData, unknown, string, string, MedusaRequestCustomerAccountDeactivationResult, MedusaConfirmCustomerAccountDeactivationInput, MedusaDeactivateCustomerAccountResult>; type MedusaCartHooksConfig<TAddressInput, TAddressPayload> = Omit<OmitFactoryConfig<CreateCartHooksConfig<HttpTypes.StoreCart, CartCreateInputBase, MedusaCartCreateParams, UpdateCartInputBase, MedusaCartUpdateParams, AddLineItemInputBase, MedusaCartAddItemParams, UpdateLineItemInputBase, MedusaCartUpdateItemParams, MedusaCompleteCartResult, TAddressInput, TAddressPayload>>, "buildAddParams"> & { /** * Optional in preset config: Medusa default mapper is provided internally. */ buildAddParams?: (input: AddLineItemInputBase) => MedusaCartAddItemParams; }; type MedusaCartFlowConfig = { isActiveCartQueryKey?: ActiveCartQueryKeyMatcher; }; type MedusaCheckoutHooksConfig = Omit<OmitFactoryConfig<CreateCheckoutHooksConfig<HttpTypes.StoreCart, HttpTypes.StoreCartShippingOption, HttpTypes.StorePaymentProvider, HttpTypes.StorePaymentCollection, HttpTypes.StoreCompleteCartResponse>>, "cartQueryKeys">; type MedusaProductHooksConfig<TProduct> = OmitFactoryConfig<CreateProductHooksConfig<TProduct, MedusaProductListInput, MedusaProductListInput, MedusaProductDetailInput, MedusaProductDetailInput>>; type MedusaProductListHooksConfig = Omit<OmitFactoryConfig<CreateProductListHooksConfig<ProductListBase<ProductListItemBase>, ProductListItemBase, HttpTypes.StoreCart, MedusaProductListListHookInput, MedusaProductListListInput, MedusaProductListDetailHookInput, MedusaProductListDetailInput, MedusaProductListListKeyInput, MedusaProductListDetailKeyInput>>, "cartQueryKeys" | "cartStorage" | "isActiveCartQueryKey">; type MedusaProductReviewHooksConfig = OmitFactoryConfig<CreateProductReviewHooksConfig<ReviewBase, MedusaProductReviewListInput, MedusaProductReviewListInput>>; type MedusaProductAttributeHooksConfig = OmitFactoryConfig<CreateProductAttributeHooksConfig<ProductAttribute, MedusaProductAttributesInput, MedusaProductAttributesInput>>; type MedusaProductLocationAvailabilityHooksConfig = OmitFactoryConfig<CreateProductLocationAvailabilityHooksConfig<ProductLocationAvailabilityResponse, MedusaProductLocationAvailabilityInput, MedusaProductLocationAvailabilityInput>>; type MedusaOrderHooksConfig = OmitFactoryConfig<CreateOrderHooksConfig<HttpTypes.StoreOrder, MedusaOrderListHookInput, MedusaOrderListInput, MedusaOrderDetailHookInput, MedusaOrderDetailInput>>; type MedusaOrderService = OrderService<HttpTypes.StoreOrder, MedusaOrderListInput, MedusaOrderDetailInput>; type MedusaProductListService = ProductListService<ProductListBase<ProductListItemBase>, ProductListItemBase, HttpTypes.StoreCart, MedusaProductListListInput, MedusaProductListDetailInput>; type MedusaProductReviewService = ProductReviewService<ReviewBase, MedusaProductReviewListInput>; type MedusaProductAttributeService = ProductAttributeService<ProductAttribute, MedusaProductAttributesInput>; type MedusaProductLocationAvailabilityService = ProductLocationAvailabilityService<ProductLocationAvailabilityResponse, MedusaProductLocationAvailabilityInput>; type MedusaCustomerAddressUpdateHookInput = MedusaCustomerAddressUpdateInput & { addressId?: string; }; type MedusaCustomerHooksConfig<TCreateInput extends CustomerAddressCreateInputBase, TUpdateInput extends CustomerAddressUpdateInputBase> = OmitFactoryConfig<CreateCustomerHooksConfig<HttpTypes.StoreCustomer, HttpTypes.StoreCustomerAddress, MedusaCustomerListInput, MedusaCustomerListInput, TCreateInput, MedusaCustomerAddressCreateInput, TUpdateInput, MedusaCustomerAddressUpdateInput, MedusaCustomerProfileUpdateInput, MedusaCustomerProfileUpdateInput>>; type MedusaCustomerService = CustomerService<HttpTypes.StoreCustomer, HttpTypes.StoreCustomerAddress, MedusaCustomerListInput, MedusaCustomerAddressCreateInput, MedusaCustomerAddressUpdateInput, MedusaCustomerProfileUpdateInput>; type MedusaRegionHooksConfig = OmitFactoryConfig<CreateRegionHooksConfig<HttpTypes.StoreRegion, MedusaRegionListInput, MedusaRegionListInput, MedusaRegionDetailInput, MedusaRegionDetailInput>>; type MedusaCategoryHooksConfig<TCategory> = OmitFactoryConfig<CreateCategoryHooksConfig<TCategory, MedusaCategoryListInput, MedusaCategoryListInput, MedusaCategoryDetailInput, MedusaCategoryDetailInput>>; type MedusaCollectionHooksConfig<TCollection> = OmitFactoryConfig<CreateCollectionHooksConfig<TCollection, MedusaCollectionListInput, MedusaCollectionListInput, MedusaCollectionDetailInput, MedusaCollectionDetailInput>>; type MedusaCatalogHooksConfig<TProduct, TFacets> = Omit<CreateCatalogHooksConfig<TProduct, MedusaCatalogListInput, MedusaCatalogListInput, TFacets>, "service" | "queryKeys" | "queryKeyNamespace" | "cacheConfig" | "fallbackFacets">; type IsExactly<TLeft, TRight> = [TLeft] extends [TRight] ? [TRight] extends [TLeft] ? true : false : false; type MedusaCatalogPresetConfig<TProduct, TFacets> = { serviceConfig?: MedusaCatalogServiceConfig<TProduct, MedusaCatalogListInput, TFacets>; hooks?: MedusaCatalogHooksConfig<TProduct, TFacets>; queryKeys?: CatalogQueryKeys<MedusaCatalogListInput>; }; type MedusaCatalogPresetOption<TProduct, TFacets> = IsExactly<TFacets, CatalogFacets> extends true ? { catalog?: MedusaCatalogPresetConfig<TProduct, TFacets> & { fallbackFacets?: TFacets; }; } : { catalog: MedusaCatalogPresetConfig<TProduct, TFacets> & { fallbackFacets: TFacets; }; }; type CreateMedusaStorefrontPresetConfigBase<TProduct = HttpTypes.StoreProduct, TCategory = HttpTypes.StoreProductCategory, TCollection = HttpTypes.StoreCollection, TCartAddressInput = Record<string, unknown>, TCartAddressPayload = Record<string, unknown>, TCustomerAddressCreateInput extends CustomerAddressCreateInputBase = MedusaCustomerAddressCreateInput, TCustomerAddressUpdateInput extends CustomerAddressUpdateInputBase = MedusaCustomerAddressUpdateHookInput> = { sdk: Medusa; queryKeyNamespace?: QueryNamespace; cacheConfig?: CacheConfig; auth?: { service?: MedusaAuthService; serviceConfig?: MedusaAuthServiceConfig; hooks?: MedusaAuthHooksConfig; queryKeys?: AuthQueryKeys; }; cart?: { serviceConfig?: MedusaCartServiceConfig; hooks?: MedusaCartHooksConfig<TCartAddressInput, TCartAddressPayload>; queryKeys?: CartQueryKeys; flow?: MedusaCartFlowConfig; }; checkout?: { serviceConfig?: MedusaCheckoutServiceConfig; hooks?: MedusaCheckoutHooksConfig; queryKeys?: CheckoutQueryKeys; }; products?: { serviceConfig?: MedusaProductServiceConfig<TProduct, MedusaProductListInput, MedusaProductDetailInput>; hooks?: MedusaProductHooksConfig<TProduct>; queryKeys?: ProductQueryKeys<MedusaProductListInput, MedusaProductDetailInput>; }; productLists?: { service?: MedusaProductListService; serviceConfig?: MedusaProductListServiceConfig<ProductListBase<ProductListItemBase>, ProductListItemBase, HttpTypes.StoreCart>; hooks?: MedusaProductListHooksConfig; queryKeys?: ProductListQueryKeys<MedusaProductListListKeyInput, MedusaProductListDetailKeyInput>; }; productAttributes?: { service?: MedusaProductAttributeService; serviceConfig?: MedusaProductAttributeServiceConfig; hooks?: MedusaProductAttributeHooksConfig; queryKeys?: ProductAttributeQueryKeys<MedusaProductAttributesInput>; }; productLocationAvailability?: { service?: MedusaProductLocationAvailabilityService; serviceConfig?: MedusaProductLocationAvailabilityServiceConfig; hooks?: MedusaProductLocationAvailabilityHooksConfig; queryKeys?: ProductLocationAvailabilityQueryKeys<MedusaProductLocationAvailabilityInput>; }; reviews?: { service?: MedusaProductReviewService; serviceConfig?: MedusaProductReviewServiceConfig<ReviewBase>; hooks?: MedusaProductReviewHooksConfig; queryKeys?: ProductReviewQueryKeys<MedusaProductReviewListInput>; }; orders?: { service?: MedusaOrderService; serviceConfig?: MedusaOrderServiceConfig; hooks?: MedusaOrderHooksConfig; queryKeys?: OrderQueryKeys<MedusaOrderListInput, MedusaOrderDetailInput>; }; customers?: { service?: MedusaCustomerService; hooks?: MedusaCustomerHooksConfig<TCustomerAddressCreateInput, TCustomerAddressUpdateInput>; queryKeys?: CustomerQueryKeys<MedusaCustomerListInput>; }; regions?: { hooks?: MedusaRegionHooksConfig; queryKeys?: RegionQueryKeys<MedusaRegionListInput, MedusaRegionDetailInput>; }; categories?: { serviceConfig?: MedusaCategoryServiceConfig<TCategory, MedusaCategoryListInput, MedusaCategoryDetailInput>; hooks?: MedusaCategoryHooksConfig<TCategory>; queryKeys?: CategoryQueryKeys<MedusaCategoryListInput, MedusaCategoryDetailInput>; }; collections?: { serviceConfig?: MedusaCollectionServiceConfig<TCollection, MedusaCollectionListInput, MedusaCollectionDetailInput>; hooks?: MedusaCollectionHooksConfig<TCollection>; queryKeys?: CollectionQueryKeys<MedusaCollectionListInput, MedusaCollectionDetailInput>; }; }; export type CreateMedusaStorefrontPresetConfig<TProduct = HttpTypes.StoreProduct, TCategory = HttpTypes.StoreProductCategory, TCollection = HttpTypes.StoreCollection, TCatalogProduct = HttpTypes.StoreProduct, TCatalogFacets = CatalogFacets, TCartAddressInput = Record<string, unknown>, TCartAddressPayload = Record<string, unknown>, TCustomerAddressCreateInput extends CustomerAddressCreateInputBase = MedusaCustomerAddressCreateInput, TCustomerAddressUpdateInput extends CustomerAddressUpdateInputBase = MedusaCustomerAddressUpdateHookInput> = CreateMedusaStorefrontPresetConfigBase<TProduct, TCategory, TCollection, TCartAddressInput, TCartAddressPayload, TCustomerAddressCreateInput, TCustomerAddressUpdateInput> & MedusaCatalogPresetOption<TCatalogProduct, TCatalogFacets>; type MedusaStorefrontServices<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets> = { auth: MedusaAuthService; cart: ReturnType<typeof createMedusaCartService>; checkout: ReturnType<typeof createMedusaCheckoutService>; products: ReturnType<typeof createMedusaProductService<TProduct, MedusaProductListInput, MedusaProductDetailInput>>; productLists: MedusaProductListService; productAttributes: MedusaProductAttributeService; productLocationAvailability: MedusaProductLocationAvailabilityService; reviews: MedusaProductReviewService; orders: MedusaOrderService; customers: MedusaCustomerService; regions: ReturnType<typeof createMedusaRegionService>; categories: ReturnType<typeof createMedusaCategoryService<TCategory, MedusaCategoryListInput, MedusaCategoryDetailInput>>; collections: ReturnType<typeof createMedusaCollectionService<TCollection, MedusaCollectionListInput, MedusaCollectionDetailInput>>; catalog: ReturnType<typeof createMedusaCatalogService<TCatalogProduct, MedusaCatalogListInput, TCatalogFacets>>; }; type MedusaStorefrontHooks<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets, TCartAddressInput, TCartAddressPayload, TCustomerAddressCreateInput extends CustomerAddressCreateInputBase, TCustomerAddressUpdateInput extends CustomerAddressUpdateInputBase> = { auth: AuthHooks<HttpTypes.StoreCustomer, MedusaAuthCredentials, MedusaRegisterData, MedusaUpdateCustomerData, unknown, string, string, MedusaRequestCustomerAccountDeactivationResult, MedusaConfirmCustomerAccountDeactivationInput, MedusaDeactivateCustomerAccountResult>; cart: CartHooks<HttpTypes.StoreCart, CartCreateInputBase, MedusaCartCreateParams, UpdateCartInputBase, MedusaCartUpdateParams, AddLineItemInputBase, MedusaCartAddItemParams, UpdateLineItemInputBase, MedusaCartUpdateItemParams, MedusaCompleteCartResult, TCartAddressInput, TCartAddressPayload>; checkout: CheckoutHooks<HttpTypes.StoreCart, HttpTypes.StoreCartShippingOption, HttpTypes.StorePaymentProvider, HttpTypes.StorePaymentCollection, HttpTypes.StoreCompleteCartResponse>; products: ProductHooks<TProduct, MedusaProductListInput, MedusaProductDetailInput>; productLists: ProductListHooks<ProductListBase<ProductListItemBase>, ProductListItemBase, HttpTypes.StoreCart, MedusaProductListListHookInput, MedusaProductListDetailHookInput>; productAttributes: ProductAttributeHooks<ProductAttribute, MedusaProductAttributesInput>; productLocationAvailability: ProductLocationAvailabilityHooks<ProductLocationAvailabilityResponse, MedusaProductLocationAvailabilityInput>; reviews: ProductReviewHooks<ReviewBase, MedusaProductReviewListInput, MedusaProductReviewListInput>; orders: OrderHooks<HttpTypes.StoreOrder, MedusaOrderListHookInput, MedusaOrderDetailHookInput>; customers: CustomerHooks<HttpTypes.StoreCustomer, HttpTypes.StoreCustomerAddress, MedusaCustomerListInput, MedusaCustomerListInput, TCustomerAddressCreateInput, MedusaCustomerAddressCreateInput, TCustomerAddressUpdateInput, MedusaCustomerAddressUpdateInput, MedusaCustomerProfileUpdateInput, MedusaCustomerProfileUpdateInput>; regions: RegionHooks<HttpTypes.StoreRegion, MedusaRegionListInput, MedusaRegionListInput, MedusaRegionDetailInput, MedusaRegionDetailInput>; categories: CategoryHooks<TCategory, MedusaCategoryListInput, MedusaCategoryListInput, MedusaCategoryDetailInput, MedusaCategoryDetailInput>; collections: CollectionHooks<TCollection, MedusaCollectionListInput, MedusaCollectionListInput, MedusaCollectionDetailInput, MedusaCollectionDetailInput>; catalog: CatalogHooks<TCatalogProduct, MedusaCatalogListInput, MedusaCatalogListInput, TCatalogFacets>; }; type MedusaStorefrontPresetResult<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets, TCartAddressInput, TCartAddressPayload, TCustomerAddressCreateInput extends CustomerAddressCreateInputBase, TCustomerAddressUpdateInput extends CustomerAddressUpdateInputBase> = { namespace: QueryNamespace; cacheConfig: CacheConfig; queryKeys: MedusaStorefrontQueryKeys; services: MedusaStorefrontServices<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets>; hooks: MedusaStorefrontHooks<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets, TCartAddressInput, TCartAddressPayload, TCustomerAddressCreateInput, TCustomerAddressUpdateInput>; flows: { cart: ReturnType<typeof createMedusaCartFlow>; checkout: ReturnType<typeof createMedusaCheckoutFlow>; }; }; export declare const createMedusaStorefrontQueryKeys: typeof createMedusaStorefrontQueryKeysFromFoundation; export type MedusaStorefrontQueryKeys = MedusaStorefrontQueryKeysFromFoundation; /** * Create a complete Medusa storefront data preset with shared namespace/cache config. * * This factory intentionally wires query keys/services/hooks for every domain in one * place so applications can keep only thin customer-specific override modules. */ export declare function createMedusaStorefrontPreset<TProduct = HttpTypes.StoreProduct, TCategory = HttpTypes.StoreProductCategory, TCollection = HttpTypes.StoreCollection, TCatalogProduct = HttpTypes.StoreProduct, TCatalogFacets = CatalogFacets, TCartAddressInput = Record<string, unknown>, TCartAddressPayload = Record<string, unknown>, TCustomerAddressCreateInput extends CustomerAddressCreateInputBase = MedusaCustomerAddressCreateInput, TCustomerAddressUpdateInput extends CustomerAddressUpdateInputBase = MedusaCustomerAddressUpdateHookInput>(config: CreateMedusaStorefrontPresetConfig<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets, TCartAddressInput, TCartAddressPayload, TCustomerAddressCreateInput, TCustomerAddressUpdateInput>): MedusaStorefrontPresetResult<TProduct, TCategory, TCollection, TCatalogProduct, TCatalogFacets, TCartAddressInput, TCartAddressPayload, TCustomerAddressCreateInput, TCustomerAddressUpdateInput>; export {}; //# sourceMappingURL=preset.d.ts.map