import { NextRequest, NextResponse } from "next/server";
export interface TenantContext {
    siteId: string;
    siteName: string;
    siteSlug: string;
    domain?: string | null;
    subdomain?: string | null;
    isPublished: boolean;
    settings?: Record<string, unknown> | null;
}
type RoutingStrategy = "subdomain" | "domain" | "path";
interface MultiTenantConfig {
    strategy: RoutingStrategy;
    mainDomain: string;
    adminPath: string;
    apiPath: string;
    publicPath: string;
    excludePaths: string[];
}
export declare class MultiTenantManager {
    private config;
    constructor(config?: Partial<MultiTenantConfig>);
    extractTenantContext(request: NextRequest): Promise<TenantContext | null>;
    private extractFromSubdomain;
    private extractFromDomain;
    private extractFromPath;
    shouldProcessAsTenant(request: NextRequest): boolean;
    handleTenantRouting(request: NextRequest, tenantContext: TenantContext): Promise<NextResponse>;
    isAdminAccess(request: NextRequest): boolean;
    isApiRequest(request: NextRequest): boolean;
    isStaticRequest(request: NextRequest): boolean;
}
export declare const multiTenantManager: MultiTenantManager;
export declare function multiTenantMiddleware(request: NextRequest): Promise<NextResponse>;
export declare function getTenantId(request: NextRequest | Request): string | null;
export declare function getTenantSlug(request: NextRequest | Request): string | null;
export declare function getTenantName(request: NextRequest | Request): string | null;
export declare function getTenantDomain(request: NextRequest | Request): string | null;
export declare function getTenantSubdomain(request: NextRequest | Request): string | null;
export declare function getTenantContext(headers: Headers): TenantContext | null;
export {};
//# sourceMappingURL=multi-tenant.d.ts.map