/** * Tenant Resolution Middleware * * Resolves tenant from request (subdomain, path, or custom domain) * and attaches to request context */ import type { Tenant, RequestContext } from '../types/index.js'; export interface TenantStore { /** * Find tenant by slug */ findBySlug(slug: string): Promise; /** * Find tenant by custom domain */ findByCustomDomain(domain: string): Promise; /** * Find tenant by ID */ findById(id: string): Promise; } export declare class MemoryTenantStore implements TenantStore { private tenants; private slugIndex; private domainIndex; /** * Add a tenant to the store */ add(tenant: Tenant): void; findBySlug(slug: string): Promise; findByCustomDomain(domain: string): Promise; findById(id: string): Promise; } export interface TenantResolverConfig { /** Base domain for subdomain resolution (e.g., 'serv.example.com') */ baseDomain: string; /** Tenant store implementation */ store: TenantStore; /** Path prefix for path-based tenant resolution */ pathPrefix?: string; } export declare class TenantResolver { private config; constructor(config: TenantResolverConfig); /** * Resolve tenant from HTTP request */ resolve(request: { host?: string; url?: string; headers?: { host?: string; }; }): Promise; /** * Extract subdomain from host */ private extractSubdomain; /** * Extract tenant slug from URL path */ private extractPathSlug; } export interface ContextBuilderConfig { tenantResolver: TenantResolver; } export declare class RequestContextBuilder { private tenantResolver; constructor(config: ContextBuilderConfig); /** * Build request context from HTTP request */ build(request: { host?: string; url?: string; headers?: { host?: string; authorization?: string; }; }): Promise; } /** * Extract tenant slug from URL for routing */ export declare function extractTenantSlug(url: string, pathPrefix?: string): string | null; /** * Build tenant-specific URL */ export declare function buildTenantUrl(baseUrl: string, tenant: Tenant, path: string): string; /** * Build resource URI for OAuth audience */ export declare function buildResourceUri(baseUrl: string, tenant: Tenant): string; //# sourceMappingURL=tenant.d.ts.map