/// <reference types="node" />
import { CreateFetchQueueOptions } from './fetcher';
import { type Entity, type FlatEntity, type RequestParameters } from './types';
import type lunr from 'lunr';
export interface NotionPageTreeParameters {
    private_file_path?: string;
    createFetchQueueOptions?: CreateFetchQueueOptions;
    searchIndexing?: boolean;
}
export interface NotionPageTreeDataSet {
    page_collection: Record<string, FlatEntity> | undefined;
    root: Entity | undefined;
    search_index: lunr.Index | undefined;
    search_suggestion: string[] | undefined;
}
export default class NotionPageTree {
    data_set: NotionPageTreeDataSet;
    private_file_path: string;
    requestParameters: RequestParameters;
    createFetchQueueOptions: CreateFetchQueueOptions;
    searchIndexing: boolean;
    fetchLoopTimer?: NodeJS.Timeout;
    constructor(options?: NotionPageTreeParameters);
    /**
     * Find cached documents to serve immediately.
     */
    parseCachedDocument(): Promise<void>;
    /**
     * Look for environment variables that are needed to fetch page tree.
     * If they don't exist, ask for it.
     */
    /**
     * Look for environment variables that are needed to fetch page tree.
     * @param prompt If variables are missing, prompt user with interactive CLI.
     * @param forceRewrite Prompt user with interactive CLI even if variables exist.
     * @returns
     * client: Notion API client instance.
     *
     * entry_id: Root entry's id (any block is allowed).
     *
     * entry_key: Root entry's integration key. Create one here (https://www.notion.so/my-integrations). ⚠️ Must be added to the entry block's "share" settings.
     *
     * entry_type: 'page' | 'database' | 'block'(all the others)
     */
    setRequestParameters({ prompt, forceRewrite }: {
        prompt?: boolean | undefined;
        forceRewrite?: boolean | undefined;
    }): Promise<RequestParameters>;
    /**
     * Fetch pages asynchronously, and then assign results to variables.
     */
    fetchOnce(): Promise<void>;
    /**
     * Create asynchronouse fetch loop, which waits for `fetchIntervalMinutes` after each fetch is completed.
     */
    startFetchLoop(fetchInterval: number): Promise<void>;
    /**
     * Stop the fetch loop after current fetch is resolved.
     */
    stopFetchLoop(): void;
    /**
     * Setup servers that serves fetched pages and its search indexes. See details in readme.
     */
    setupServer({ port }: {
        port: number;
    }): import("http").Server;
}
