/**
 * Centralized Inspector SPA mount resolver and installer.
 *
 * Single source of truth for "where is the Inspector for this server":
 *   DISABLE > PUBLIC_INSPECTOR_URL > STATIC_DIR > bundled fallback
 *
 * Used by actions.ts (Express mount) and root_landing (landing-page link).
 */
import type express from "express";
export interface InspectorMountConfig {
    kind: "disabled" | "external" | "local";
    basePath: string;
    /** Absolute URL for external Inspector; undefined for local/disabled. */
    externalUrl?: string;
    /** Filesystem directory to serve; undefined for external/disabled. */
    staticDir?: string;
}
/**
 * Resolve the bundled Inspector dist directory. Returns null when the
 * bundled dist is not present (e.g. submodule not built, or SKIP_INSPECTOR_BUILD).
 */
export declare function resolveBundledInspectorDir(): string | null;
/**
 * Determine the Inspector configuration from environment variables.
 *
 * Precedence: DISABLE > PUBLIC_INSPECTOR_URL > STATIC_DIR > bundled fallback.
 */
export declare function resolveInspectorMount(env?: NodeJS.ProcessEnv): InspectorMountConfig;
/**
 * Inject `<meta name="neotoma-api-base" content="<origin>">` into the
 * Inspector's index.html so the SPA discovers the API origin at runtime.
 */
export declare function injectInspectorApiBaseMeta(html: string, origin: string): string;
/** `stampPath` must be the absolute path (e.g. `/inspector/__live/build_stamp`). */
export declare function appendInspectorLiveReloadScript(html: string, stampPath: string): string;
/**
 * Read the Inspector's index.html from the given directory.
 */
export declare function readInspectorIndexHtml(dir: string): string | null;
/**
 * Fingerprint for `vite build --watch` output used by live-reload polling.
 *
 * Using only `index.html` mtime misses lazy-route / code-split rebuilds:
 * those updates often touch only `assets/*.js` while the HTML shell stays
 * byte-identical, so the stamp must consider built assets too.
 */
/**
 * Normalize the pathname used for Inspector routing checks (SPA vs Vite assets).
 * Collapses duplicate slashes and strips query/hash fragments; decodes
 * percent-escapes so `/inspector//assets/x` and encoded variants still match.
 */
export declare function normalizeInspectorUrlPathname(pathname: string): string;
/**
 * True when the URL is a Vite-emitted static file under the Inspector mount
 * (`/inspector/assets/...` by default). The SPA shell handler must not respond
 * with index.html for these paths: missing chunks would be served as
 * text/html and break strict MIME checks (blank shell + console errors).
 */
export declare function isInspectorViteAssetUrlPath(basePath: string, pathname: string): boolean;
export declare function computeInspectorBuildOutputStamp(staticDir: string): number;
export declare function installInspectorMount(app: express.Application, env: NodeJS.ProcessEnv | undefined, logger: {
    info: (msg: string) => void;
    warn: (msg: string) => void;
}): void;
/**
 * Resolve the Inspector URL for the root landing page.
 *
 * Returns null when the Inspector is disabled or unavailable; an absolute
 * external URL when PUBLIC_INSPECTOR_URL is set; or a same-origin path
 * when a local mount is active.
 */
export declare function resolveInspectorLandingUrl(base: string, env?: NodeJS.ProcessEnv): string | null;
//# sourceMappingURL=inspector_mount.d.ts.map