import type Medusa from "@medusajs/js-sdk";
import type { HttpTypes } from "@medusajs/types";
import type { ProductService } from "./types";
type MedusaProductListQuery = HttpTypes.StoreProductListParams & Record<string, unknown>;
export type MedusaProductListInput = HttpTypes.StoreProductListParams & {
    locale?: string;
};
export type MedusaProductDetailInput = {
    handle: string;
    region_id?: string;
    country_code?: string;
    province?: string;
    cart_id?: string;
    locale?: string;
    fields?: string;
};
export type MedusaProductTransformListContext<TListParams extends MedusaProductListInput> = {
    params: TListParams;
    query: MedusaProductListQuery;
    response: HttpTypes.StoreProductListResponse;
};
export type MedusaProductTransformDetailContext<TDetailParams extends MedusaProductDetailInput> = {
    params: TDetailParams;
    query: MedusaProductListQuery;
    response: HttpTypes.StoreProductListResponse;
};
export type MedusaProductServiceConfig<TProduct, TListParams extends MedusaProductListInput, TDetailParams extends MedusaProductDetailInput> = {
    listPath?: string;
    defaultListFields?: string;
    defaultDetailFields?: string;
    /**
     * Custom list query builder.
     *
     * When provided, `defaultListFields` is not applied automatically.
     * Include desired `fields` directly in the returned query object.
     */
    normalizeListQuery?: (params: TListParams) => MedusaProductListQuery;
    /**
     * Custom detail query builder.
     *
     * When provided, `defaultDetailFields` is not applied automatically.
     * Include desired `fields` directly in the returned query object.
     */
    normalizeDetailQuery?: (params: TDetailParams) => MedusaProductListQuery;
    transformProduct?: (product: HttpTypes.StoreProduct) => TProduct;
    transformListProduct?: (product: HttpTypes.StoreProduct, context: MedusaProductTransformListContext<TListParams>) => TProduct;
    transformDetailProduct?: (product: HttpTypes.StoreProduct, context: MedusaProductTransformDetailContext<TDetailParams>) => TProduct;
    createGlobalFetcher?: boolean;
};
/**
 * Creates a ProductService for Medusa Store API.
 *
 * Uses `/store/products` through `sdk.client.fetch` so query cancellation works
 * with `AbortSignal` passed by TanStack Query.
 *
 * @example
 * ```typescript
 * import { createProductHooks } from "@techsio/storefront-data/products/hooks"
 * import { createMedusaProductService } from "@techsio/storefront-data/products/medusa-service"
 * import { sdk } from "@/lib/medusa-client"
 *
 * const service = createMedusaProductService(sdk, {
 *   defaultListFields: "id,title,handle,thumbnail",
 *   defaultDetailFields: "id,title,handle,description,*variants.calculated_price",
 * })
 *
 * const productHooks = createProductHooks({
 *   service,
 *   queryKeyNamespace: "my-app",
 * })
 * ```
 */
export declare function createMedusaProductService<TProduct = HttpTypes.StoreProduct, TListParams extends MedusaProductListInput = MedusaProductListInput, TDetailParams extends MedusaProductDetailInput = MedusaProductDetailInput>(sdk: Medusa, config?: MedusaProductServiceConfig<TProduct, TListParams, TDetailParams>): ProductService<TProduct, TListParams, TDetailParams>;
export {};
//# sourceMappingURL=medusa-service.d.ts.map