/** * Authentication Manager * * Handles Google authentication and user tier detection * Integrates with Google Cloud Identity for enterprise features */ /// import { EventEmitter } from "events"; import { OAuth2Tokens, RefreshTokenResult, ValidationResult } from "../types/auth.js"; export interface UserProfile { id: string; email: string; name: string; tier: "free" | "pro" | "enterprise" | "ultra"; organization?: string; permissions: string[]; quotas: { daily: number; monthly: number; concurrent: number; }; metadata: { createdAt: Date; lastActive: Date; totalRequests: number; subscription?: any; tierDetection?: { method: string; confidence: number; detectedAt: Date; features: string[]; }; }; } export interface AuthConfig { clientId?: string; clientSecret?: string; redirectUri?: string; scopes?: string[]; serviceAccountPath?: string; projectId?: string; tierDetection?: { enableVertexAI?: boolean; enableWorkspaceIntegration?: boolean; customEnterprisePatterns?: string[]; ultraFeatureChecks?: string[]; }; } export declare class AuthenticationManager extends EventEmitter { private oauth2Client?; private googleAuth?; private cache; private logger; private config; private userTokens; private tokenRefreshTimers; private readonly TOKEN_REFRESH_BUFFER; private readonly DEFAULT_SCOPES; private readonly TIER_DETECTION_SCOPES; constructor(config?: AuthConfig); /** * Initialize authentication clients */ private initializeAuth; /** * Generate OAuth URL for user authentication */ generateAuthUrl(state?: string): string; /** * Exchange authorization code for tokens */ authenticateUser(code: string): Promise; /** * Refresh OAuth2 tokens for a user */ refreshToken(userId: string): Promise; /** * Validate OAuth2 tokens for a user */ validateTokens(userId: string): Promise; /** * Schedule automatic token refresh before expiration */ private scheduleTokenRefresh; /** * Clear token refresh timer for a user */ private clearTokenRefreshTimer; /** * Check if refresh token error indicates need for re-authentication */ private isRefreshTokenInvalid; /** * Get stored tokens for a user */ getUserTokens(userId: string): OAuth2Tokens | undefined; /** * Check if user needs token refresh */ needsTokenRefresh(userId: string): Promise; /** * Force refresh token for a user (even if not expired) */ forceRefreshToken(userId: string): Promise; /** * Comprehensive user tier detection with multiple strategies */ detectUserTier(email?: string, tokens?: any): Promise<{ tier: "free" | "pro" | "enterprise" | "ultra"; method: string; confidence: number; features: string[]; }>; /** * Detect Ultra tier features (Google AI Advanced, Vertex AI Enterprise) */ private detectUltraTier; /** * Detect Enterprise tier (Google Workspace + Enterprise features) */ private detectEnterpriseTier; /** * Detect Pro tier (Paid subscription) */ private detectProTier; /** * Check Vertex AI Enterprise access */ private checkVertexAIAccess; /** * Check Google AI Advanced subscription */ private checkGoogleAIAdvanced; /** * Check enterprise billing patterns */ private checkEnterpriseBilling; /** * Check for custom integrations */ private checkCustomIntegrations; /** * Check Google Workspace status */ private checkGoogleWorkspace; /** * Analyze domain patterns for enterprise indicators */ private analyzeDomainPatterns; /** * Check for enterprise OAuth scopes */ private checkEnterpriseScopes; /** * Check for payment method (enhanced from existing stub) */ private checkPaymentMethod; /** * Analyze usage patterns to suggest tier */ private analyzeUsagePatterns; /** * Get organization information from email domain */ private getOrganization; /** * Get user permissions based on email and tier */ private getUserPermissions; /** * Get quota limits for user tier */ private getTierQuotas; /** * Check for pro subscription (placeholder for billing integration) */ private checkProSubscription; /** * Validate and refresh user session */ validateSession(userId: string): Promise; /** * Check if user has permission */ hasPermission(userId: string, permission: string): Promise; /** * Check quota usage */ checkQuota(userId: string, requestCount?: number): Promise; /** * Service account authentication for internal operations */ getServiceAccountAuth(): Promise; /** * Revoke user tokens */ revokeUser(userId: string): Promise; /** * Get current user context for security operations */ getCurrentUserContext(): Promise<{ userId: string; tier: string; permissions: string[]; } | null>; /** * Get current user ID from active session */ getCurrentUserId(): Promise; /** * Determine user tier (alias for detectUserTier for backwards compatibility) */ determineUserTier(email?: string, tokens?: any): Promise<{ tier: "free" | "pro" | "enterprise" | "ultra"; method: string; confidence: number; features: string[]; }>; /** * Get authentication metrics */ getMetrics(): { configuredClients: { oauth2: boolean; serviceAccount: boolean; }; scopes: string[]; tokenManagement: { activeUsers: number; scheduledRefreshes: number; refreshBufferMs: number; }; }; } //# sourceMappingURL=auth-manager.d.ts.map