type SophiEnvironment = "production" | "staging" | "development"; type SophiLauncherPosition = "right-center" | "right-bottom" | "left-center" | "left-bottom"; interface SophiWidgetHandlers { addToCart?: (data: unknown) => unknown; sendToCheckout?: (data: unknown) => unknown; addToFavorite?: (data: unknown) => unknown; error?: (error: unknown) => unknown; } interface SophiWidgetLauncherConfig { apiKey?: string; userId?: string; userName?: string; environment?: SophiEnvironment; sdk?: { autoLoad?: boolean; url?: string; }; launcher?: { enabled?: boolean; position?: SophiLauncherPosition; text?: string; backgroundColor?: string; textColor?: string; }; modal?: { title?: string; }; widget?: { containerSelector?: string; width?: string; height?: string; }; handlers?: SophiWidgetHandlers; } interface SophiWidgetPublicApi { open: () => Promise | unknown; close: () => void; init: () => Promise | unknown; destroy: () => Promise; getInstance: () => unknown | null; isInitialized: () => boolean; isOpen: () => boolean; setUserId: (userId?: string | null) => Promise | unknown; setUser: (userId?: string | null, userName?: string | null) => Promise | unknown; on?: (...args: unknown[]) => unknown; off?: (...args: unknown[]) => unknown; } declare global { interface Window { sophiWidgetConfig?: SophiWidgetLauncherConfig; sophiWidget?: SophiWidgetPublicApi; SophiWebSDK?: { SophiWidget: new () => { init: (config: Record) => Promise | void; destroy?: () => Promise | void; on?: (...args: unknown[]) => unknown; off?: (...args: unknown[]) => unknown; }; }; sophiAddToCart?: (data: unknown) => unknown; sophiSendToCheckout?: (data: unknown) => unknown; sophiAddToFavorite?: (data: unknown) => unknown; } } declare function initSophiWidgetLauncher(config?: SophiWidgetLauncherConfig): SophiWidgetPublicApi; export { initSophiWidgetLauncher };