/** * MULTI-TENANCY - Tenant isolation, resource quotas, cost tracking * Per-tenant configs, data separation, resource management */ export interface Tenant { id: string; name: string; slug: string; status: TenantStatus; tier: TenantTier; config: TenantConfig; quotas: TenantQuotas; metadata?: Record; created_at: Date; updated_at: Date; } export declare enum TenantStatus { ACTIVE = "active", SUSPENDED = "suspended", TRIAL = "trial", DELETED = "deleted" } export declare enum TenantTier { FREE = "free", STARTER = "starter", PROFESSIONAL = "professional", ENTERPRISE = "enterprise" } export interface TenantConfig { allowed_providers?: string[]; allowed_models?: string[]; default_model?: string; default_provider?: string; features?: TenantFeatures; custom_settings?: Record; } export interface TenantFeatures { caching_enabled: boolean; streaming_enabled: boolean; function_calling_enabled: boolean; vision_enabled: boolean; embeddings_enabled: boolean; fine_tuning_enabled: boolean; batch_processing_enabled: boolean; custom_models_enabled: boolean; } export interface TenantQuotas { max_requests_per_minute?: number; max_requests_per_day?: number; max_tokens_per_request?: number; max_concurrent_requests?: number; monthly_budget?: number; storage_quota_gb?: number; } export interface TenantUsage { tenant_id: string; period_start: Date; period_end: Date; total_requests: number; total_tokens: number; total_cost: number; requests_by_model: Record; tokens_by_model: Record; cost_by_model: Record; storage_used_gb: number; } export interface TenantContext { tenant_id: string; user_id?: string; request_id: string; timestamp: Date; } export declare class TenantManager { private tenants; private usage_records; private active_requests; /** * Create a new tenant */ createTenant(name: string, slug: string, tier: TenantTier): Tenant; /** * Get tenant by ID */ getTenant(tenant_id: string): Tenant | null; /** * Get tenant by slug */ getTenantBySlug(slug: string): Tenant | null; /** * Update tenant */ updateTenant(tenant_id: string, updates: Partial): Tenant | null; /** * Check if tenant can make request */ canMakeRequest(tenant_id: string): { allowed: boolean; reason?: string; }; /** * Track request start */ trackRequestStart(tenant_id: string, request_id: string): void; /** * Track request end */ trackRequestEnd(tenant_id: string, request_id: string, usage: { model: string; tokens: number; cost: number; }): void; /** * Get tenant usage */ getUsage(tenant_id: string, period?: { start: Date; end: Date; }): TenantUsage; /** * List all tenants */ listTenants(options?: { status?: TenantStatus; tier?: TenantTier; }): Tenant[]; /** * Suspend tenant */ suspendTenant(tenant_id: string, reason?: string): boolean; /** * Activate tenant */ activateTenant(tenant_id: string): boolean; /** * Delete tenant (soft delete) */ deleteTenant(tenant_id: string): boolean; private getDefaultConfig; private getDefaultQuotas; private recordUsage; private getRecentUsage; private getTodayUsage; private getMonthUsage; private generateId; } export declare class TenantIsolation { private tenant_manager; constructor(tenant_manager: TenantManager); /** * Create tenant context for request */ createContext(tenant_id: string, user_id?: string): TenantContext | null; /** * Validate tenant can access resource */ canAccessResource(context: TenantContext, resource_type: string, _resource_id: string): boolean; /** * Get tenant-scoped resource key */ getScopedKey(tenant_id: string, key: string): string; private generateRequestId; } //# sourceMappingURL=multi-tenancy.d.ts.map