import { type ContentTypeKey, type ApiClient, type PublishedBlockBaseline } from "@riverbankcms/api/content-editor";
import type { ContentEntrySnapshot } from "@riverbankcms/content-model";
export type { ApiClient };
export type ContentEntryServiceConfig<TResponse, TSnapshot extends ContentEntrySnapshot> = {
    type: ContentTypeKey;
    siteId: string;
    entryId: string;
    routeId?: string;
    snapshotFromResponse: (response: TResponse) => TSnapshot;
    publishedContentFromResponse?: (response: TResponse) => Record<string, unknown> | null | undefined;
    onResponse?: (response: TResponse) => void;
};
export type PublishEntryResult<TSnapshot extends ContentEntrySnapshot> = Readonly<{
    snapshot: TSnapshot;
    publishedContent?: Record<string, unknown> | null;
    publishedBlocks?: readonly PublishedBlockBaseline[];
}>;
export declare function createContentEntryServices<TResponse, TMetadataPayload extends Record<string, unknown>, TPublishPayload, TSnapshot extends ContentEntrySnapshot>(apiClient: ApiClient, config: ContentEntryServiceConfig<TResponse, TSnapshot>): {
    saveContent(content: Record<string, unknown>): Promise<TResponse>;
    saveMetadata(payload: TMetadataPayload): Promise<{
        id: string;
        siteId: string;
        nodeId: string | null;
        nodeType: "page" | "content_entry" | null;
        draftTitle: string | null;
        draftPath: string | null;
        draftStatus: string | null;
        publishedTitle: string | null;
        publishedPath: string | null;
        status: string | null;
        publishedAt: string | null;
        scheduledPublishAt: string | null;
        draftMetaTitle: string | null;
        draftMetaDescription: string | null;
        canonicalUrl: string | null;
        publishedMetaTitle: string | null;
        publishedMetaDescription: string | null;
        ogImageId: string | null;
        draftUpdatedAt: string | null;
        updatedBy: string | null;
    }>;
    publishDetailed: (payload: TPublishPayload | undefined) => Promise<{
        snapshot: TSnapshot;
        publishedContent: Record<string, unknown> | undefined;
        publishedBlocks: PublishedBlockBaseline[] | undefined;
    }>;
    publish(payload: TPublishPayload | undefined): Promise<TSnapshot>;
    discardDraft(): Promise<TSnapshot>;
    deleteEntry(): Promise<void>;
};
