import type { PublicTeamMemberBlockItem } from "@riverbankcms/api";
import type { AddressedLocationValue, BusinessAddress, BookingFlexibleBalanceConfig, BookingInstalmentPlanConfig } from "@riverbankcms/core";
import type { MediaAssetIndexItem, SiteFooterContent, SiteHeaderContent, Theme } from "../contracts";
import type { BlockFieldConfig as SdkBlockFieldConfig, BlockFieldOptionsMap as SdkBlockFieldOptionsMap, ContentConfig as SdkContentConfig, ContainerOptionsConfig as SdkContainerOptionsConfig, FieldSelectOption as SdkFieldSelectOption, SdkCustomBlock, SdkThemeConfig, SdkThemePalette, SectionBackground as SdkSectionBackground, SectionOptionsConfig as SdkSectionOptionsConfig, SiteStyleConfig as SdkSiteStyleConfig } from "../config/types";
export type { PublicTeamMemberBlockItem, PublicTeamMemberSummary, } from "@riverbankcms/api";
export type RuntimeSiteSdkConfig = {
    theme?: SdkThemeConfig;
    customBlocks?: SdkCustomBlock[];
};
export type HTTPMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD";
export type ApiResponseKind = "json" | "stream" | "text" | "void" | "blob";
export type ApiAuthRequirement = "public" | "user" | "admin" | "service";
export interface APIEndpointBase<TBody = unknown, TQuery = unknown, TResponse = unknown> {
    path: string;
    method: HTTPMethod;
    body?: TBody;
    query?: TQuery;
    response?: TResponse;
    revalidate?: number;
    tags?: string[];
    responseKind?: ApiResponseKind;
    auth?: ApiAuthRequirement;
}
export interface ApiResponse<TData> {
    success: true;
    data: TData;
    meta: ResponseMeta;
}
export type ApiErrorCode = "auth:unauthenticated" | "auth:token_expired" | "auth:token_invalid" | "auth:forbidden" | "auth:mfa_required" | "auth:sudo_required" | "auth:insufficient_permissions" | "auth:impersonation_restricted" | "validation:invalid_input" | "validation:missing_field" | "validation:invalid_format" | "validation:payload_too_large" | "resource:not_found" | "resource:already_exists" | "resource:conflict" | "resource:gone" | "rate_limit:exceeded" | "billing:payment_required" | "billing:plan_limit_exceeded" | "billing:pass_redemption_failed" | "server:internal_error" | "server:unavailable" | "external:service_error" | "external:registrar_orphaned_contact_profile" | "network:connection_error" | "network:timeout" | "network:dns_error";
export interface FieldError {
    field: string;
    code: string;
    message: string;
}
export interface ApiError {
    success: false;
    error: {
        code: ApiErrorCode;
        message: string;
        requestId: string;
        timestamp: string;
        status: number;
        fieldErrors?: FieldError[];
    };
}
export type ApiResult<TData> = ApiResponse<TData> | ApiError;
export type ApiVersion = "2025-01-01";
export interface ResponseMeta {
    requestId: string;
    timestamp: string;
    apiVersion: ApiVersion;
    deprecations?: DeprecationWarning[];
}
export interface DeprecationWarning {
    feature: string;
    message: string;
    sunsetDate: string;
    alternative?: string;
}
export type ContentEntryStatus = "draft" | "published" | "scheduled" | "archived";
export type ContentEntryListStage = "published" | "preview";
export type ContentTypeRoutingSubroute = {
    kind: string;
    segmentType: "uuid" | "iso-date" | "uuid-or-date" | "slug";
    precedence?: "subroute-first" | "content-first";
};
export type ContentTypeRoutingInfo = {
    key: string;
    hasPages: boolean;
    routePattern: string | null;
    subroutes?: ContentTypeRoutingSubroute[];
};
export type PublicProductCategorySelector = Readonly<{
    kind: "category";
    productCategoryId: string;
}> | Readonly<{
    kind: "current-category-page";
    productCategoryEntryId: string;
}>;
export type PublicProductCategorySelectorQuery = Readonly<{
    productCategoryScope?: undefined;
    productCategoryId?: undefined;
    productCategoryEntryId?: undefined;
}> | Readonly<{
    productCategoryScope: "category";
    productCategoryId: string;
    productCategoryEntryId?: undefined;
}> | Readonly<{
    productCategoryScope: "current-category-page";
    productCategoryEntryId: string;
    productCategoryId?: undefined;
}>;
export type InternalLinkPayload = {
    kind: "internal";
    routeId: string;
    entityId: string;
    entityType: "page" | "content";
    href: string;
    title: string;
    typeLabel: string;
    contentTypeKey?: string | null;
    contentTypeName?: string | null;
    updatedAt?: string | null;
};
export type PageLinkPayload = {
    kind: "page";
    identifier: string;
    routeId?: string | null;
    href?: string | null;
};
export type EntryLinkPayload = {
    kind: "entry";
    contentType: string;
    identifier: string;
    routeId?: string | null;
    href?: string | null;
};
export type PortalLinkPayload = {
    kind: "portal";
    path?: string | null;
    labels?: {
        loggedOut?: string;
        loggedIn?: string;
    };
};
export type CartLinkLabelConfig = {
    kind: "icon-only";
} | {
    kind: "icon-with-label";
    label: string;
};
export type CartLinkPayload = {
    kind: "cart";
    badge: "show-count" | "hidden";
    label: CartLinkLabelConfig;
};
export type LinkPayload = InternalLinkPayload | PageLinkPayload | EntryLinkPayload | {
    kind: "external";
    href: string;
} | {
    kind: "url";
    href: string;
} | PortalLinkPayload | CartLinkPayload;
export type NavigationLinkInput = PageLinkPayload | EntryLinkPayload | {
    kind: "external";
    href: string;
} | {
    kind: "url";
    href: string;
} | PortalLinkPayload | CartLinkPayload;
export interface NavigationItemRecord {
    id: string;
    label: string;
    url: unknown | null;
    position?: number;
    orderIndex?: number;
    urlType?: string | null;
    parentId?: string | null;
    menuId?: string | null;
    isCta?: boolean | null;
    createdAt?: string | null;
    updatedAt?: string | null;
}
export interface NavigationMenuRecord {
    id: string;
    identifier: string | null;
    name: string;
    isPrimary: boolean;
    isFooter: boolean;
    createdAt?: string | null;
    updatedAt?: string | null;
}
export interface NavigationMenuWithItems extends NavigationMenuRecord {
    items: NavigationItemRecord[];
}
export type SiteLayoutSettingsPayload = {
    logoAssetId: string | null;
    header: SiteHeaderContent;
    footer: SiteFooterContent;
};
export type SiteLayoutResolvedPayload = SiteLayoutSettingsPayload & {
    logo?: {
        assetId: string | null;
        url: string | null;
        alt: string | null;
        width?: number | null;
        height?: number | null;
    };
};
export interface SiteAnalyticsCookieBannerCopyOverrides {
    title?: string;
    body?: string;
    acceptLabel?: string;
    rejectLabel?: string;
    policyLinkLabel?: string;
}
export interface SiteAnalyticsSettingsPayload {
    enabled: boolean;
    cookieBanner?: SiteAnalyticsCookieBannerCopyOverrides;
}
export type SitePrivacyPolicyCapabilities = {
    usesNecessaryCookies: boolean;
    usesAnalyticsCookies: boolean;
    usesForms: boolean;
    usesNewsletter: boolean;
    usesBookings: boolean;
    usesCustomerPortal: boolean;
    usesPayments: boolean;
    usesSensitiveClientRecords: boolean;
};
export type SitePrivacyPolicySection = {
    id: string;
    title: string;
    paragraphs: string[];
};
export type SitePrivacyPolicyDocument = {
    title: string;
    effectiveDate: string;
    sections: SitePrivacyPolicySection[];
};
export type SiteLegalJurisdiction = "UK" | "US" | "EU" | "CA" | "AU" | "OTHER";
export type SiteLegalProfilePayload = {
    legalEntityName: string | null;
    privacyContactEmail: string | null;
    jurisdiction: SiteLegalJurisdiction;
};
export type SiteRuntimePrivacyPolicy = {
    path: string;
    enabled: boolean;
    legalProfile: SiteLegalProfilePayload;
    capabilities: SitePrivacyPolicyCapabilities;
    document: SitePrivacyPolicyDocument | null;
};
export type SiteFont = {
    id: string;
    family?: string;
    familyName?: string;
    displayName?: string | null;
    isVariable?: boolean;
    variableWeightMin?: number | null;
    variableWeightMax?: number | null;
    category?: string | null;
    files?: Array<{
        id?: string;
        storagePath?: string | null;
        style?: string | null;
        weight?: number | null;
        url?: string | null;
    }>;
};
export type SiteFooterBlock = {
    id: string | null;
    kind: string;
    purpose: string;
    content?: Record<string, unknown>;
};
export type SiteRouteRecord = {
    path: string;
    draftPath: string | null;
    status: string | null;
    draftStatus?: string | null;
    publishedAt?: string | null;
};
export type SiteResponse = {
    site: {
        id: string;
        title: string;
        slug: string;
        created_at: string;
        updated_at: string;
        maintenance_mode_enabled?: boolean;
        maintenance_mode_message?: unknown | null;
        deployment_mode?: "managed" | "headless_cms" | "headless_full" | null;
        is_sdk_site?: boolean | null;
        businessAddress?: BusinessAddress | null;
        venuesById?: Record<string, AddressedLocationValue>;
    };
    favicon?: {
        assetId: string;
        url: string;
        mimeType: string;
    } | null;
    theme: Theme;
    themeId?: string | null;
    selectionId?: string | null;
    /**
     * Persisted Style configurator selections (Phase C). Optional so legacy
     * payloads without these columns still satisfy the type — consumers fall
     * back to the site style's defaults when null.
     */
    selectionButtonPersonalityId?: string | null;
    selectionPaletteVariantId?: string | null;
    selectionPaletteOverrides?: Record<string, string> | null;
    navigation: NavigationMenuWithItems[];
    appointmentsEnabled?: boolean;
    portalEnabled?: boolean;
    commerceEnabled?: boolean;
    analytics?: SiteAnalyticsSettingsPayload;
    privacyPolicy?: SiteRuntimePrivacyPolicy;
    routes: Record<string, SiteRouteRecord>;
    layout: SiteLayoutResolvedPayload;
    customDomain: string | null;
    sdkConfig?: RuntimeSiteSdkConfig | null;
    customBlocks?: SdkCustomBlock[];
    footerBlocks?: SiteFooterBlock[];
    supabaseUrl?: string;
    contentTypes?: ContentTypeRoutingInfo[];
    pagesByIdentifier?: Record<string, string>;
    entriesByIdentifier?: Record<string, Record<string, string>>;
    hasCustomFonts?: boolean;
    fonts?: SiteFont[];
    googleSiteVerificationToken?: string | null;
};
export type SdkRuntimePage = {
    id: string;
    routeId: string | null;
    name: string;
    path: string | null;
    purpose: string;
    title?: string | null;
    draftTitle?: string | null;
    slug?: string | null;
    draftSlug?: string | null;
    status: string;
    draftStatus?: string | null;
    publishedAt?: string | null;
    draftUpdatedAt?: string | null;
    metaTitle?: string | null;
    metaDescription?: string | null;
    draftMetaTitle?: string | null;
    draftMetaDescription?: string | null;
    ogImageId?: string | null;
    ogImageUrl?: string | null;
    canonicalUrl?: string | null;
    blocks: Array<{
        id: string;
        kind: string;
        purpose?: string;
        content: Record<string, unknown>;
    }>;
};
export type SdkTemplate = {
    id: string;
    contentTypeKey?: string | null;
    isDefault?: boolean;
    blocks: Array<{
        id: string;
        blockKind: string;
        content: Record<string, unknown> | null;
        bindings: Record<string, unknown> | null;
    }>;
};
export type PageResponse = {
    page: SdkRuntimePage;
    templates?: SdkTemplate[];
    mediaAssets?: SdkRuntimeMediaAsset[];
    type?: "page";
} | {
    entry: SdkRuntimeEntry;
    templates: SdkTemplate[];
    contentTypeSchema: Record<string, unknown> | null;
    mediaAssets?: SdkRuntimeMediaAsset[];
    type: "entry";
};
export type SdkRuntimeMediaAsset = MediaAssetIndexItem;
export type SdkRuntimeEntry = {
    id: string;
    routeId: string | null;
    type: string | null;
    title: string;
    slug: string | null;
    status: string;
    publishAt: string | null;
    path: string | null;
    draftPath: string | null;
    content: Record<string, unknown>;
    draftContent: Record<string, unknown> | null;
    publishedContent: Record<string, unknown> | null;
    metaTitle: string | null;
    draftMetaTitle: string | null;
    metaDescription: string | null;
    draftMetaDescription: string | null;
    ogImageId: string | null;
    ogImageUrl: string | null;
    canonicalUrl: string | null;
    createdAt: string;
    updatedAt: string;
};
export type PublishedContentEntryPreview = {
    id: string;
    title: string;
    slug: string;
    path: string;
    excerpt: string;
    publishedAt: string | null;
    image: {
        url?: string | null;
        alt?: string | null;
    } | null;
};
export type EntryResponse = {
    data: PublishedContentEntryPreview | null;
};
export type EntryImage = {
    url?: string | null;
    alt?: string | null;
} | null;
export type ContentEntryListItem<TContent = Record<string, unknown>> = {
    id: string;
    slug: string | null;
    path: string;
    title: string;
    status: ContentEntryStatus;
    publishedAt: string | null;
    content: TContent;
    excerpt: string;
    image: EntryImage;
    routeId: string | null;
};
export type PublicContentTypeFieldMeta = {
    id: string;
    type: string;
    mediaKinds: Array<"image" | "video" | "audio" | "document" | "spreadsheet" | "archive"> | null;
};
export type PublicContentTypeMeta = {
    key: string;
    titleField: string | null;
    fields: PublicContentTypeFieldMeta[];
};
export type ListPublishedEntriesMeta = {
    total: number;
    limit: number;
    offset: number;
    hasMore: boolean;
};
export type EntriesResponse<TContent = Record<string, unknown>> = {
    entries: ContentEntryListItem<TContent>[];
    meta?: ListPublishedEntriesMeta;
    contentType?: PublicContentTypeMeta | null;
};
export interface FormRecord {
    id: string;
    slug: string;
    name: string;
    schema: Record<string, unknown>;
    settings: Record<string, unknown>;
    schemaJson?: Record<string, unknown> | null;
    settingsJson?: Record<string, unknown> | null;
    siteId?: string;
    userId?: string;
    createdAt: string | null;
    updatedAt: string | null;
}
export type PublicFormResponse = {
    form: FormRecord;
};
export type PublicFormsResponse = {
    forms: FormRecord[];
};
export type PublicBookingService = {
    id: string;
    siteId: string;
    title: string;
    description: string | null;
    durationMinutes: number;
};
export type PublicBookingServicesResponse = {
    services: PublicBookingService[];
};
export type PublicEventsResponse = Array<{
    kind?: "event" | "course_session";
    id: string;
    occurrenceId: string;
    seriesId: string;
    title: string;
    description: string | null;
    presentation?: {
        cardTitleOverride?: string | null;
        summary?: string | null;
        image?: {
            type: "image" | "video" | "audio" | "document" | "spreadsheet" | "archive";
            purpose?: string;
            placeholder?: boolean;
            assetId?: string;
            src?: string;
            alt?: string;
            width?: number;
            height?: number;
            storageBucket?: string;
            storagePath?: string;
            transform?: {
                rect?: [number, number, number, number];
                hotspot?: {
                    x: number;
                    y: number;
                    radius?: number;
                };
            };
        } | null;
        tags?: string[];
        ctaLabel?: string | null;
        badges?: string[];
    };
    slug: string;
    path: string;
    requiresRegistration: boolean;
    startsAt: string;
    endsAt: string;
    capacity: number | null;
    registeredCount: number;
    availableSpots: number | null;
    waitlistEnabled: boolean;
    venue: {
        id: string;
        name: string;
        address: string | null;
        location?: {
            lat: number;
            lng: number;
        } | null;
    } | null;
    eventCategory: {
        id: string;
        name: string;
        color: string | null;
    } | null;
    teamMembers?: Array<{
        id: string;
        name: string;
        roleLabel: string | null;
        summary: string | null;
        profilePath: string | null;
    }>;
    status?: "active" | "draft" | "archived";
    pricingType: "free" | "paid" | "pass_only" | "membership_only";
    price: number | null;
    currency: string;
    paymentTerms: {
        allowedOptions: Array<{
            kind: "upfront";
        } | {
            kind: "deferred_manual";
        } | {
            kind: "instalment_plan";
            plan: Record<string, unknown>;
        }>;
    };
    pricingMode?: "single" | "ticket_types";
    ticketTypes?: Array<{
        id: string;
        siteId: string;
        eventSeriesId: string;
        name: string;
        description: string | null;
        priceAmount: number;
        isActive: boolean;
        sortOrder: number;
        capacityMode: "limited" | "unlimited";
        capacityLimit: number | null;
        saleStartsAt: string | null;
        saleEndsAt: string | null;
        availability: {
            kind: "available";
            remainingCapacity: number | null;
        } | {
            kind: "unavailable";
            reason: "inactive" | "not_on_sale_yet" | "sale_ended" | "sold_out" | "event_sold_out";
            remainingCapacity: number | null;
        };
        createdAt: string;
        updatedAt: string;
    }>;
    accessRestriction: "none" | "category";
    allowedCategoryIds: string[];
    requireGuestDetails?: boolean;
    timeZone?: string;
    acceptsPasses?: boolean;
    acceptsMemberships?: boolean;
    course?: {
        id: string;
        pricing?: {
            bookingRequirement: "none" | "required";
            pricingStrategy: "free" | "single" | "tiered";
            currency: string;
            singlePriceAmount: number | null;
            paymentTerms: {
                allowedOptions: Array<{
                    kind: "upfront";
                } | {
                    kind: "deferred_manual";
                } | {
                    kind: "instalment_plan";
                    plan: BookingInstalmentPlanConfig;
                } | {
                    kind: "flexible_balance";
                    config: BookingFlexibleBalanceConfig;
                }>;
            };
            options: Array<{
                id: string;
                name: string;
                description: string | null;
                priceAmount: number;
                isActive: boolean;
                sortOrder: number;
                capacityLimit: number | null;
                saleStartsAt: string | null;
                saleEndsAt: string | null;
                attendanceScope?: "in_person" | "online" | "both" | null;
            }>;
        };
        priceCents: number | null;
        currency: string;
        enrollmentOpen: boolean;
    } | null;
}>;
export type PublicEventDetailsResponse = {
    events: PublicEventsResponse;
    sitePasses: PublicPassesResponse;
    siteMemberships: PublicMembershipsResponse;
};
export type PublicCoursesResponse = Array<{
    id: string;
    title: string;
    slug: string;
    description: unknown;
    enrollmentOpen: boolean;
    priceCents: number | null;
    currency: string;
    enrollmentCapacity: number | null;
    acceptsMemberships: boolean;
    status: string;
    sessionsCount: number;
    enrolledCount: number;
    availableSpots: number | null;
    sessions: Array<{
        id: string;
        startsAt: string;
        endsAt: string;
        capacityOverride?: number | null;
        overrides?: Record<string, unknown> | null;
    }>;
    venue: {
        id: string;
        name: string;
        address: string | null;
    } | null;
    contentEntryId: string | null;
}>;
export type PublicTeamMembersResponse = {
    teamMembers: PublicTeamMemberBlockItem[];
};
export type PublicProductsResponse = {
    products: Array<{
        id: string;
        contentEntryId: string | null;
        title: string;
        slug: string;
        path: string | null;
        status: "draft" | "active";
        priceCents: number;
        currency: string;
        productType: "physical" | "digital";
        requiresShipping: boolean;
        hasVariants: boolean;
        trackInventory: boolean;
        soldOut: boolean;
        category: {
            id: string;
            name: string;
            slug: string;
        } | null;
        summary: string | null;
        badges: string[];
        ctaLabel: string | null;
        body: unknown | null;
        gallery: Array<{
            url: string;
            alt: string | null;
        }>;
        variants: Array<{
            id: string;
            title: string;
            sku: string | null;
            priceCents: number;
            stockQuantity: number | null;
            soldOut: boolean;
        }>;
    }>;
};
export type PublicPassesResponse = {
    passes: Array<{
        id: string;
        productUseCase: "event_pass" | "appointment_package";
        name: string;
        description: string | null;
        price: number;
        currency: string;
        creditsTotal: number;
        pricePerCredit: number;
        validDays: number | null;
        eligibleCategoryIds: string[];
        eligibleCategoryNames: string[];
    }>;
};
export type PublicMembershipsResponse = {
    memberships: Array<{
        id: string;
        name: string;
        description: string | null;
        price: number;
        currency: string;
        billingInterval: "month" | "year";
        eligibleCategoryIds: string[];
        eligibleCategoryNames: string[];
    }>;
};
export type ResolveEntrySubrouteResponse = {
    subroute: {
        kind: "event-occurrence";
        occurrence: {
            id: string;
            seriesId: string;
            startsAt: string;
            endsAt: string;
            timeZone: string;
            status: string;
            capacityOverride: number | null;
            overridesJson: Record<string, unknown>;
        };
    } | {
        kind: "course-run";
        run: {
            courseId: string;
            seriesId: string;
            runSlug: string;
            runName: string | null;
        };
    } | null;
};
export type ResolveEventOccurrenceResponse = {
    occurrence: {
        id: string;
        seriesId: string;
        startsAt: string;
        endsAt: string;
        timeZone: string;
        status: string;
        capacityOverride: number | null;
        overridesJson: Record<string, unknown>;
    } | null;
};
export type CheckRedirectResponse = {
    redirectTo: string | null;
    status?: number;
};
export type RoutableContentItem = {
    routeId: string;
    entityId: string;
    entityType: "page" | "content";
    identifier: string | null;
    contentTypeKey?: string | null;
    contentTypeName?: string | null;
    title: string;
    draftTitle: string | null;
    path: string;
    draftPath: string | null;
    status: string;
    draftStatus: string | null;
    typeLabel: string;
    updatedAt: string | null;
};
export type RoutableContentResponse = {
    items: RoutableContentItem[];
};
export type SitemapRouteItem = {
    path: string;
    lastModified: string | null;
    indexable: boolean;
};
export type SitemapRoutesResponse = {
    items: SitemapRouteItem[];
    total: number;
    page: number;
    pageSize: number;
    allowIndexingInProduction: boolean;
};
export type PublicEndpointName = "getSite" | "getContentByPath" | "listPublishedEntries" | "getPublishedEntryPreview" | "getPublicFormById" | "listPublicForms" | "getPublicBookingServices" | "getPublicChallenge" | "listPublicEvents" | "batchBlockLoaders" | "listPublicCourses" | "listPublicTeamMembers" | "listPublicProducts" | "listPublicPasses" | "listPublicMemberships" | "resolveEntrySubroute" | "resolveEventOccurrence" | "checkRedirect" | "getRoutableContent" | "getPublicSitemapRoutes";
export type PublicAPIEndpoints = {
    getSite: APIEndpointBase<never, {
        id?: string;
        slug?: string;
        domain?: string;
        scope?: "full";
    }, SiteResponse>;
    getContentByPath: APIEndpointBase<{
        path: string;
        preview?: boolean;
    }, {
        siteId: string;
    }, PageResponse>;
    listPublishedEntries: APIEndpointBase<never, {
        siteId: string;
        type: string;
        limit?: string;
        offset?: string;
        order?: "published_at.asc" | "published_at.desc" | "title.asc" | "title.desc" | "updated_at.asc" | "updated_at.desc";
        stage?: ContentEntryListStage;
        meta?: string;
        mode?: "manual";
        entryIds?: string;
    }, EntriesResponse>;
    getPublishedEntryPreview: APIEndpointBase<never, {
        siteId: string;
        type: string;
        slug: string;
    }, EntryResponse>;
    getPublicFormById: APIEndpointBase<never, {
        formId: string;
        siteId: string;
    }, PublicFormResponse>;
    listPublicForms: APIEndpointBase<never, {
        siteId: string;
    }, PublicFormsResponse>;
    getPublicBookingServices: APIEndpointBase<never, {
        siteId: string;
        ids?: string;
    }, PublicBookingServicesResponse>;
    getPublicChallenge: APIEndpointBase<never, never, string>;
    listPublicEvents: APIEndpointBase<never, {
        siteId: string;
        limit?: string;
        from?: string;
        to?: string;
        afterStartsAt?: string;
        afterId?: string;
        stage?: string;
        categoryIds?: string;
        venueId?: string;
        kind?: string;
        entryId?: string;
        seriesId?: string;
        includeOccurrenceId?: string;
    }, PublicEventsResponse>;
    batchBlockLoaders: APIEndpointBase<{
        requests: Array<{
            id: string;
            endpoint: "getPublicEventDetails";
            params?: {
                limit?: string;
                from?: string;
                to?: string;
                afterStartsAt?: string;
                afterId?: string;
                categoryIds?: string;
                venueId?: string;
                staffMemberId?: string;
                kind?: string;
                entryId?: string;
                seriesId?: string;
                includeOccurrenceId?: string;
            };
        } | {
            id: string;
            endpoint: "listPublicTeamMembers";
            params?: {
                siteId?: string;
                stage?: string;
            };
        }>;
    }, {
        siteId: string;
        stage?: string;
    }, {
        results: Record<string, {
            ok: true;
            data: unknown;
        } | {
            ok: false;
            error: {
                code: string;
                message: string;
            };
        }>;
    }>;
    listPublicCourses: APIEndpointBase<never, {
        siteId: string;
        limit?: string;
        stage?: string;
    }, PublicCoursesResponse>;
    listPublicTeamMembers: APIEndpointBase<never, {
        siteId: string;
        stage?: string;
    }, PublicTeamMembersResponse>;
    listPublicProducts: APIEndpointBase<never, {
        siteId: string;
        stage?: "published" | "preview";
    } & PublicProductCategorySelectorQuery, PublicProductsResponse>;
    listPublicPasses: APIEndpointBase<never, {
        siteId: string;
        categories?: string;
    }, PublicPassesResponse>;
    listPublicMemberships: APIEndpointBase<never, {
        siteId: string;
        categories?: string;
    }, PublicMembershipsResponse>;
    resolveEntrySubroute: APIEndpointBase<never, {
        siteId: string;
        entryId: string;
        kind: "event-occurrence" | "course-run";
        segment: string;
        stage?: "preview" | "published";
    }, ResolveEntrySubrouteResponse>;
    resolveEventOccurrence: APIEndpointBase<never, {
        siteId: string;
        entryId: string;
        segment: string;
    }, ResolveEventOccurrenceResponse>;
    checkRedirect: APIEndpointBase<never, {
        site: string;
        path: string;
    }, CheckRedirectResponse>;
    getRoutableContent: APIEndpointBase<never, {
        siteId: string;
        publishedOnly?: string;
    }, RoutableContentResponse>;
    getPublicSitemapRoutes: APIEndpointBase<never, {
        siteId: string;
        page?: string;
        pageSize?: string;
    }, SitemapRoutesResponse>;
};
export type SdkConfigContract = {
    theme?: SdkThemeConfig;
    styles?: SdkSiteStyleConfig;
    blockFieldOptions?: SdkBlockFieldOptionsMap;
    blockFieldExtensions?: Record<string, unknown>;
    content?: SdkContentConfig;
};
export type PublicSdkThemePalette = SdkThemePalette;
export type PublicSdkThemeConfig = SdkThemeConfig;
export type PublicSdkSiteStyleConfig = SdkSiteStyleConfig;
export type PublicSdkSectionBackground = SdkSectionBackground;
export type PublicSdkSectionOptionsConfig = SdkSectionOptionsConfig;
export type PublicSdkContainerOptionsConfig = SdkContainerOptionsConfig;
export type PublicSdkBlockFieldConfig = SdkBlockFieldConfig;
export type PublicSdkBlockFieldOptionsMap = SdkBlockFieldOptionsMap;
export type PublicSdkFieldSelectOption = SdkFieldSelectOption;
