export interface LauncherConfig { position?: 'top-right' | 'bottom-right' | 'bottom-left'; theme?: 'light' | 'dark'; } export interface ThemeData { colors: { primary: string; secondary: string; background: string; text: string; [key: string]: string; }; fonts: { primary: string; secondary?: string; }; borderRadius: string; [key: string]: unknown; } export interface MetadataObject { [key: string]: string | number | boolean | null | MetadataObject; } export declare function isThemeData(value: unknown): value is ThemeData; export declare function isMetadataObject(value: unknown): value is MetadataObject; export declare function isListingRecommendation(value: unknown): value is ListingRecommendation; export interface LevelData { currentLevelName: string; nextLevelName: string; myPoints: number; progress: number; isMaxLevel: boolean; pointsToNextLevel: number; currentLevel: any; nextLevel: any; timestamp: number; } export interface SessionState { isAuthenticated: boolean; userData: UserData | null; sessionToken: string | null; lastChecked: number; } export interface UserData { id: string; email?: string; name?: string; profile?: Record; } export interface PointsData { externalData?: ExternalPointsData; } export interface ExternalPointsData { myPoints: number; currentLevelName: string; nextLevelName: string; progress: number; isMaxLevel: boolean; pointsToNextLevel: number; currentLevel: LevelData | null; nextLevel: LevelData | null; lastUpdated: number; } export interface LevelDataChangedPayload { currentLevelName: string; nextLevelName: string; myPoints: number; progress: number; isMaxLevel: boolean; pointsToNextLevel: number; currentLevel: LevelData | null; nextLevel: LevelData | null; timestamp: number; } export interface PointsEarnedPayload { earnedPoints: number; levelChanged: boolean; newTotalPoints: number; currentLevelName: string; nextLevelName: string; progress: number; pointsToNextLevel: number; timestamp: number; } export interface LevelUpPayload { oldLevelName: string; newLevelName: string; totalPoints: number; progress: number; isMaxLevel: boolean; pointsToNextLevel: number; timestamp: number; } export interface ChannelDataChangedPayload { channel: { id: string; name: string; slug: string; logoId: string; theme: ThemeData | null; metadata: MetadataObject; } | null; channelLogo: string | null; timestamp: number; } export interface BrandingChangedPayload { colors: ThemeData['colors']; theme: ThemeData; channelLogo: string | null; timestamp: number; } export interface ProfileDataChangedPayload { profile: { id: string; email: string; firstName: string; lastName: string; walletAddress: string; solanaWalletAddress: string; emailVerified: boolean; metadata: MetadataObject; } | null; avatarName: string | null; profilePic: string | null; timestamp: number; } export interface ExternalBrandData { channelLogo: string | null; colors: ThemeData['colors']; theme: ThemeData; channel: { id: string; name: string; slug: string; logoId: string; theme: ThemeData | null; metadata: MetadataObject; } | null; lastUpdated: number; } export interface ExternalProfileData { profile: { id: string; email: string; firstName: string; lastName: string; walletAddress: string; solanaWalletAddress: string; emailVerified: boolean; metadata: MetadataObject; } | null; avatarName: string | null; profilePic: string | null; lastUpdated: number; } export interface ButtonConfig { id: string; label: string; icon?: string; action: string; visibleWhen: 'always' | 'authenticated' | 'unauthenticated' | 'has-points'; enabledWhen: 'always' | 'authenticated' | 'unauthenticated' | 'has-points'; pointsCost?: number; pointsReward?: number; metadata?: Record; } export interface ListingRecommendation { id: string; workspaceId: string; channelId: string; name: string; description: string; parentListingId: string | null; eligibilityRqbQuery: { id: string; rules: Array>; combinator: string; not: boolean; }; visibilityRqbQuery: { id: string; rules: Array>; combinator: string; not: boolean; }; price: number; currency: string; supply: number; currentSupply: number; status: string; listed: boolean; metadata: { accentColor?: string; bannerImageId?: string; bannerImage?: string; [key: string]: unknown; }; startDate: string; expirationDate: string | null; type: string; sortOrder: number; ordersPerUser: number; cooldownPeriod: number | null; cooldownUnit: string | null; cooldownWindow: string; createdAt: string; updatedAt: string; deletedAt: string | null; listingAssets: Array<{ id: string; workspaceId: string; channelId: string; listingId: string; assetId: string; assetTable: string; createdAt: string; updatedAt: string; deletedAt: string | null; }>; _count: { orders: number; }; keywordScore: number; } export interface RecommendationRequest { channelId: string; profileId: string; page_url: string; keywords: string[]; } export interface RecommendationCache { recommendation: ListingRecommendation | null; timestamp: number; url: string; keywords: string[]; } export interface UrlTrackingConfig { debounceMs: number; maxKeywords: number; } export interface PageKeywords { url: string; keywords: string[]; extractedAt: number; } export interface WidgetDependencies { sdk: any; config: LauncherConfig; } export interface ProfileData { profile: { id: string; email: string; firstName: string; lastName: string; walletAddress: string; solanaWalletAddress: string; emailVerified: boolean; metadata: any; } | null; avatarName: string | null; profilePic: string | null; timestamp: number; } export interface BrandingData { colors: any; theme: any; channelLogo: string | null; timestamp: number; } export interface ChannelData { channel: { id: string; name: string; slug: string; logoId: string; theme: any; metadata: any; } | null; channelLogo: string | null; timestamp: number; } export interface ContentCache { hash: string; keywords: string[]; timestamp: number; }