UNPKG

saltfish

Version:

An interactive video-guided tour system for web applications

177 lines 5.75 kB
import type { SaltfishConfig, PlaylistOptions, WatchedPlaylists, Step } from '../../types'; import type { ShadowDOMManager } from '../../managers/ShadowDOMManager'; import type { VideoManager } from '../../managers/VideoManager'; import type { CursorManager } from '../../managers/CursorManager'; import type { InteractionManager } from '../../managers/InteractionManager'; import type { AnalyticsManager } from '../../managers/AnalyticsManager'; import type { SessionManager } from '../../managers/SessionManager'; import type { TransitionManager } from '../../managers/TransitionManager'; import type { TriggerManager } from '../../managers/TriggerManager'; import type { ABTestManager } from '../../managers/ABTestManager'; import type { EventManager } from '../../managers/EventManager'; import type { PlaylistManager } from '../../managers/PlaylistManager'; import type { StepTimeoutManager } from '../../managers/StepTimeoutManager'; import type { UIManager } from '../../managers/UIManager'; import type { StorageManager } from '../../managers/StorageManager'; /** * Base interface for all services */ export interface Service { /** * Initialize the service with configuration */ initialize?(config: SaltfishConfig): Promise<void>; /** * Cleanup service resources */ destroy(): void; } /** * Service for handling player initialization logic */ export interface IPlayerInitializationService extends Service { /** * Initialize the player with configuration */ initialize(config: SaltfishConfig): Promise<void>; /** * Fetch user data from backend */ fetchUserData(userId: string, userData?: Record<string, unknown>): Promise<void>; /** * Load anonymous user data from localStorage */ loadAnonymousUserData(userId: string, userData?: Record<string, unknown>): Promise<void>; /** * Check for in-progress playlists and resume them */ checkAndResumeInProgressPlaylist(watchedPlaylists: WatchedPlaylists): Promise<boolean>; /** * Get or create persistent anonymous user ID */ getOrCreateAnonymousUserId(): string; /** * Get the last config for restoration after reinitialization */ getLastConfig(): SaltfishConfig | null; } /** * Service for handling user identification and A/B testing */ export interface IUserManagementService extends Service { /** * Identify a user with ID and optional data */ identifyUser(userId: string, userData?: Record<string, unknown>): void; /** * Identify user anonymously with optional data */ identifyAnonymous(userData?: Record<string, unknown>): Promise<void>; /** * Record A/B test attempt for analytics */ recordABTestAttempt(playlistId: string): Promise<void>; /** * Get the last user identification for restoration */ getLastUserIdentification(): { userId: string; userData?: Record<string, unknown>; } | null; /** * Get the user data loaded promise for waiting on A/B test assignments */ getUserDataLoadedPromise(): Promise<void> | null; /** * Resolve the user data loaded promise (internal method) */ resolveUserDataLoaded(): void; } /** * Service for handling playlist lifecycle and coordination */ export interface IPlaylistOrchestrator extends Service { /** * Start a playlist with given options */ startPlaylist(playlistId: string, options?: PlaylistOptions): Promise<void>; /** * Reset current playlist to initial state */ resetPlaylist(): void; } /** * Service for handling state machine action registration */ export interface IStateMachineActionHandler extends Service { /** * Register all state machine actions with the store */ registerStateMachineActions(): void; /** * Get video URL for a step (with translation support) */ getVideoUrl(step: Step): string; /** * Set the destroy callback for player destruction */ setDestroyCallback(callback: () => void): void; /** * Find next video URL for preloading */ findNextVideoUrl(currentStep: Step): string | null; } /** * Service for handling manager coordination and lifecycle */ export interface IManagerOrchestrator extends Service { /** * Set up UI and event updaters */ setupUpdaters(): void; /** * Handle store state changes */ handleStoreChanges(): void; /** * Clean up current playlist state */ cleanupCurrentPlaylist(): void; /** * Clean up playlist while preserving trigger monitoring */ cleanupPlaylist(): void; /** * Get all managed managers for external access */ getManagers(): ManagedManagers; } /** * Collection of all manager instances * Uses concrete types for now - we'll create interfaces when we split god objects */ export interface ManagedManagers { shadowDOMManager: ShadowDOMManager; videoManager: VideoManager; cursorManager: CursorManager; interactionManager: InteractionManager; analyticsManager: AnalyticsManager; sessionManager: SessionManager; transitionManager: TransitionManager; triggerManager: TriggerManager; abTestManager: ABTestManager; eventManager: EventManager; playlistManager: PlaylistManager; stepTimeoutManager: StepTimeoutManager; uiManager: UIManager; storageManager: StorageManager; } /** * Factory for creating manager instances */ export interface IManagerFactory { createManagers(): ManagedManagers; resetManagers(managers: ManagedManagers): void; destroyManagers(managers: ManagedManagers): void; } //# sourceMappingURL=ServiceInterfaces.d.ts.map