import { OnDestroy } from '@angular/core'; import { Observable } from 'rxjs'; import * as i0 from "@angular/core"; /** * Broadcast message types for cross-window communication */ export type BroadcastMessageType = 'SESSION_LOGOUT' | 'SESSION_EXPIRED' | 'SESSION_EXTENDED' | 'SESSION_LOCKED' | 'SESSION_UNLOCKED' | 'SESSION_REVOKED' | 'CONFLICT_RESOLVED' | 'LOCK_ACQUIRED' | 'LOCK_RELEASED'; /** * Broadcast message payload */ export interface BroadcastMessage { type: BroadcastMessageType; sessionId?: string; timestamp: number; tabId: string; payload?: any; } /** * Service for cross-window/tab synchronization using BroadcastChannel API * Falls back to localStorage events for browsers that don't support BroadcastChannel */ export declare class FgsBroadcastService implements OnDestroy { private config; private ngZone; private channel; private readonly channelName; private readonly tabId; private isInitialized; private readonly lockKey; private readonly lockTimeout; private activeLocks; private messageReceived; private logoutReceived; private sessionExpiredReceived; private sessionExtendedReceived; private sessionLockedReceived; private sessionUnlockedReceived; private storageHandler; /** * Observable for all broadcast messages */ messageReceived$: Observable; /** * Observable for logout broadcasts from other tabs */ logoutReceived$: Observable; /** * Observable for session expired broadcasts */ sessionExpiredReceived$: Observable; /** * Observable for session extended broadcasts */ sessionExtendedReceived$: Observable; /** * Observable for session locked broadcasts */ sessionLockedReceived$: Observable; /** * Observable for session unlocked broadcasts */ sessionUnlockedReceived$: Observable; private get debug(); /** * Get current tab ID */ getTabId(): string; /** * Initialize the broadcast channel */ initialize(): void; /** * Initialize BroadcastChannel */ private initializeBroadcastChannel; /** * Initialize localStorage fallback for cross-tab communication */ private initializeStorageFallback; /** * Handle incoming broadcast message */ private handleMessage; /** * Broadcast a message to all other tabs */ broadcast(type: BroadcastMessageType, payload?: any, sessionId?: string): void; /** * Broadcast via localStorage (fallback) */ private broadcastViaStorage; /** * Broadcast logout event */ broadcastLogout(sessionId?: string): void; /** * Broadcast session expired event */ broadcastSessionExpired(sessionId?: string): void; /** * Broadcast session extended event */ broadcastSessionExtended(sessionId?: string): void; /** * Broadcast session locked event */ broadcastSessionLocked(sessionId?: string): void; /** * Broadcast session unlocked event */ broadcastSessionUnlocked(sessionId?: string): void; /** * Acquire a distributed lock for a specific operation * Returns true if lock was acquired, false if lock is held by another tab */ acquireLock(lockName: string): boolean; /** * Release a distributed lock */ releaseLock(lockName: string): void; /** * Check if a lock is currently held */ isLockHeld(lockName: string): boolean; /** * Execute a function with a distributed lock * Returns null if lock couldn't be acquired */ withLock(lockName: string, fn: () => Promise): Promise; /** * Generate unique tab ID */ private generateTabId; /** * Cleanup on destroy */ ngOnDestroy(): void; /** * Debug logging */ private log; /** * Error logging */ private logError; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } //# sourceMappingURL=broadcast.service.d.ts.map