import type { BrandKit, Catalog, CatalogCollection, CatalogCustomizationPolicy, CatalogListing, CatalogProduct, CatalogStatus, ListingStatus, ProductVariant } from "../core/catalog"; import type { CommerceDb } from "./queries"; export type SaveStorefrontCatalogInput = { brandKit?: BrandKit | null; currency?: string; id?: string; locale?: string; name: string; settings?: Record; slug: string; status?: CatalogStatus; }; export type SaveStorefrontListingInput = { basePriceCents?: number | null; catalogId: string; compareAtCents?: number | null; customization?: CatalogCustomizationPolicy; customizationMode?: "approved" | "both" | "customizable" | "none"; description?: string | null; id?: string; metadata?: Record; position?: number; productId: string; slug: string; status?: ListingStatus; tags?: string[]; title?: string | null; }; export type SaveStorefrontCollectionInput = { catalogId: string; description?: string | null; id?: string; imageUrl?: string | null; position?: number; slug: string; status?: CatalogStatus; title: string; }; export declare class StorefrontMerchandisingError extends Error { readonly code: "catalog_not_found" | "collection_not_found" | "invalid_customization" | "invalid_price" | "invalid_slug" | "listing_not_found" | "listing_not_ready" | "product_not_found" | "storefront_not_ready"; constructor(code: "catalog_not_found" | "collection_not_found" | "invalid_customization" | "invalid_price" | "invalid_slug" | "listing_not_found" | "listing_not_ready" | "product_not_found" | "storefront_not_ready"); } export declare const storefrontPriceIsValid: (basePriceCents?: number | null, compareAtCents?: number | null) => boolean; export declare const storefrontCustomizationIsValid: (mode?: SaveStorefrontListingInput["customizationMode"], policy?: CatalogCustomizationPolicy) => boolean; export declare const createStorefrontMerchandisingService: (db: CommerceDb) => { listFleetCatalogs: () => Promise<{ activeListings: number; catalog: { brand_kit: BrandKit | null; created_at: Date; currency: string; id: string; locale: string; name: string; owner_key: string; settings: Record | null; slug: string; status: string; updated_at: Date; }; healthy: boolean; listings: number; publishable: boolean; readyListings: number; }[]>; listOwnerCatalogs: (ownerKey: string) => Promise<{ activeListings: number; catalog: { brand_kit: BrandKit | null; created_at: Date; currency: string; id: string; locale: string; name: string; owner_key: string; settings: Record | null; slug: string; status: string; updated_at: Date; }; healthy: boolean; listings: number; publishable: boolean; readyListings: number; }[]>; publishedStorefront: (ownerKey: string, slug: string) => Promise<{ catalog: Catalog; collections: CatalogCollection[]; listings: { listing: CatalogListing; product: CatalogProduct; variants: ProductVariant[]; }[]; memberships: { collectionId: string; listingId: string; position: number; }[]; }>; removeCollectionListing: (ownerKey: string, input: { collectionId: string; listingId: string; }) => Promise<{ id: string; position: number; collection_id: string; listing_id: string; }[]>; saveCatalog: (ownerKey: string, input: SaveStorefrontCatalogInput) => Promise<{ name: string; id: string; created_at: Date; status: string; slug: string; brand_kit: BrandKit | null; currency: string; locale: string; owner_key: string; settings: Record | null; updated_at: Date; } | undefined>; saveCollection: (ownerKey: string, input: SaveStorefrontCollectionInput) => Promise<{ id: string; created_at: Date; status: string; title: string; slug: string; image_url: string | null; updated_at: Date; description: string | null; catalog_id: string; position: number; } | undefined>; saveListing: (ownerKey: string, input: SaveStorefrontListingInput) => Promise<{ metadata: Record | null; id: string; created_at: Date; product_id: string; status: string; title: string | null; slug: string; tags: string[] | null; updated_at: Date; description: string | null; compare_at_cents: number | null; base_price_cents: number | null; catalog_id: string; customization: CatalogCustomizationPolicy | null; customization_mode: string; position: number; } | undefined>; setCollectionListing: (ownerKey: string, input: { collectionId: string; listingId: string; position?: number; }) => Promise<{ id: string; position: number; collection_id: string; listing_id: string; } | undefined>; workspace: (ownerKey: string, catalogId: string) => Promise<{ catalog: { brand_kit: BrandKit | null; created_at: Date; currency: string; id: string; locale: string; name: string; owner_key: string; settings: Record | null; slug: string; status: string; updated_at: Date; }; collections: { catalog_id: string; created_at: Date; description: string | null; id: string; image_url: string | null; position: number; slug: string; status: string; title: string; updated_at: Date; }[]; listings: { listing: { base_price_cents: number | null; catalog_id: string; compare_at_cents: number | null; created_at: Date; customization: CatalogCustomizationPolicy | null; customization_mode: string; description: string | null; id: string; metadata: Record | null; position: number; product_id: string; slug: string; status: string; tags: string[] | null; title: string | null; updated_at: Date; }; product: { attributes: Record | null; brand: string; category: string; created_at: Date; decoration_areas: import("..").DecorationArea[] | null; description: string; external_id: string | null; id: string; last_seen_at: Date | null; media: import("..").ProductMedia[] | null; metadata: Record | null; option_names: string[] | null; product_type: string; slug: string; source_id: string | null; status: string; style_code: string; sync_generation: string | null; tags: string[] | null; title: string; updated_at: Date; }; }[]; memberships: { collectionId: string; listingId: string; position: number; }[]; posture: { activeListings: number; catalog: { brand_kit: BrandKit | null; created_at: Date; currency: string; id: string; locale: string; name: string; owner_key: string; settings: Record | null; slug: string; status: string; updated_at: Date; }; healthy: boolean; listings: number; publishable: boolean; readyListings: number; } | null; }>; }; export type StorefrontMerchandisingService = ReturnType;