@burtson-labs/bandit-engine 2.0.49 → 2.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/{chat-647M6BRG.mjs → chat-W5IFNEUC.mjs} +5 -4
  2. package/dist/chat-provider.js +29 -14
  3. package/dist/chat-provider.js.map +1 -1
  4. package/dist/chat-provider.mjs +3 -3
  5. package/dist/{chunk-VL3CMSDO.mjs → chunk-EWUUF4GE.mjs} +2 -2
  6. package/dist/{chunk-AXFX2HUK.mjs → chunk-HETIHZ42.mjs} +2 -2
  7. package/dist/{chunk-6WZUQHZT.mjs → chunk-IDH2YOW3.mjs} +30 -15
  8. package/dist/chunk-IDH2YOW3.mjs.map +1 -0
  9. package/dist/{chunk-JCLL7AGP.mjs → chunk-JBXNXSAH.mjs} +2144 -576
  10. package/dist/chunk-JBXNXSAH.mjs.map +1 -0
  11. package/dist/{chunk-TVF45U7B.mjs → chunk-LXD3IV6Z.mjs} +3 -3
  12. package/dist/chunk-N7RMUOFB.mjs +482 -0
  13. package/dist/chunk-N7RMUOFB.mjs.map +1 -0
  14. package/dist/{chunk-HKJTRBWC.mjs → chunk-QFSEZAG6.mjs} +3 -3
  15. package/dist/{chunk-7HXARU5R.mjs → chunk-STMXPFAQ.mjs} +867 -1275
  16. package/dist/chunk-STMXPFAQ.mjs.map +1 -0
  17. package/dist/cli.js +3 -3
  18. package/dist/cli.js.map +1 -1
  19. package/dist/index.js +2088 -455
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +8 -7
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/management/management.js +3397 -1764
  24. package/dist/management/management.js.map +1 -1
  25. package/dist/management/management.mjs +6 -5
  26. package/dist/modals/chat-modal/chat-modal.js +29 -14
  27. package/dist/modals/chat-modal/chat-modal.js.map +1 -1
  28. package/dist/modals/chat-modal/chat-modal.mjs +3 -3
  29. package/package.json +3 -3
  30. package/dist/chunk-6WZUQHZT.mjs.map +0 -1
  31. package/dist/chunk-7HXARU5R.mjs.map +0 -1
  32. package/dist/chunk-JCLL7AGP.mjs.map +0 -1
  33. /package/dist/{chat-647M6BRG.mjs.map → chat-W5IFNEUC.mjs.map} +0 -0
  34. /package/dist/{chunk-VL3CMSDO.mjs.map → chunk-EWUUF4GE.mjs.map} +0 -0
  35. /package/dist/{chunk-AXFX2HUK.mjs.map → chunk-HETIHZ42.mjs.map} +0 -0
  36. /package/dist/{chunk-TVF45U7B.mjs.map → chunk-LXD3IV6Z.mjs.map} +0 -0
  37. /package/dist/{chunk-HKJTRBWC.mjs.map → chunk-QFSEZAG6.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -1,24 +1,25 @@
1
1
  import {
2
2
  chat_default
3
- } from "./chunk-7HXARU5R.mjs";
3
+ } from "./chunk-STMXPFAQ.mjs";
4
4
  import {
5
5
  chat_provider_default
6
- } from "./chunk-HKJTRBWC.mjs";
6
+ } from "./chunk-QFSEZAG6.mjs";
7
7
  import "./chunk-ONQMRE2G.mjs";
8
8
  import {
9
9
  management_default,
10
10
  useGatewayHealth,
11
11
  useGatewayMemory,
12
12
  useGatewayModels
13
- } from "./chunk-JCLL7AGP.mjs";
14
- import "./chunk-VL3CMSDO.mjs";
13
+ } from "./chunk-JBXNXSAH.mjs";
14
+ import "./chunk-N7RMUOFB.mjs";
15
+ import "./chunk-EWUUF4GE.mjs";
15
16
  import "./chunk-EHNWQ4T3.mjs";
16
17
  import {
17
18
  defineCustomElement
18
19
  } from "./chunk-IXIM7BNO.mjs";
19
20
  import {
20
21
  chat_modal_default
21
- } from "./chunk-TVF45U7B.mjs";
22
+ } from "./chunk-LXD3IV6Z.mjs";
22
23
  import {
23
24
  FeedbackButton,
24
25
  FeedbackModal,
@@ -36,7 +37,7 @@ import {
36
37
  useTTS,
37
38
  useVoiceStore,
38
39
  voiceService
39
- } from "./chunk-AXFX2HUK.mjs";
40
+ } from "./chunk-HETIHZ42.mjs";
40
41
  import {
41
42
  DEFAULT_TIER_FEATURES,
42
43
  FeatureFlagContext,
@@ -56,7 +57,7 @@ import {
56
57
  useVectorStore,
57
58
  vectorDatabaseService,
58
59
  vectorMigrationService
59
- } from "./chunk-6WZUQHZT.mjs";
60
+ } from "./chunk-IDH2YOW3.mjs";
60
61
  import {
61
62
  usePackageSettingsStore
62
63
  } from "./chunk-7ZDS33S2.mjs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/featureFlag/featureFlagService.ts","../src/hooks/useVoices.ts","../src/modals/SubscriptionExpiredModal.tsx","../src/guards/SubscriptionExpiredGuard.tsx","../src/services/http/httpErrorHandler.ts","../src/core/license-validator.ts","../src/core/system-constants.ts","../src/utils/critical-helpers.ts"],"sourcesContent":["/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-D9D5-368074\nconst __banditFingerprint_featureFlag_featureFlagServicets = 'BL-FP-4BEE13-CCB2';\nconst __auditTrail_featureFlag_featureFlagServicets = 'BL-AU-MGOIKVVS-KTAI';\n// File: featureFlagService.ts | Path: src/services/featureFlag/featureFlagService.ts | Hash: d9d5ccb2\n\nimport { SubscriptionTier, FeatureKey, DEFAULT_TIER_FEATURES } from '../../types/featureFlags';\nimport { debugLogger } from '../logging/debugLogger';\n\n/**\n * Service for managing subscription tiers and feature flags\n */\nexport class FeatureFlagService {\n private static instance: FeatureFlagService;\n private subscribers: Set<() => void> = new Set();\n\n static getInstance(): FeatureFlagService {\n if (!FeatureFlagService.instance) {\n FeatureFlagService.instance = new FeatureFlagService();\n }\n return FeatureFlagService.instance;\n }\n\n /**\n * Subscribe to subscription tier changes\n */\n subscribe(callback: () => void): () => void {\n this.subscribers.add(callback);\n return () => this.subscribers.delete(callback);\n }\n\n /**\n * Notify all subscribers of changes\n */\n private notifySubscribers(): void {\n this.subscribers.forEach(callback => {\n try {\n callback();\n } catch (error) {\n debugLogger.error('Error in feature flag subscriber:', { error });\n }\n });\n }\n\n /**\n * Update subscription tier and notify components\n */\n updateSubscriptionTier(tier: SubscriptionTier): void {\n debugLogger.info('Updating subscription tier:', { tier });\n \n // Trigger feature evaluation refresh through custom event\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('bandit:tier-updated', { \n detail: { tier } \n }));\n }\n \n this.notifySubscribers();\n }\n\n /**\n * Sync subscription with external service\n */\n async syncWithExternalService(userId: string, apiUrl?: string): Promise<SubscriptionTier> {\n try {\n if (!apiUrl) {\n debugLogger.warn('No API URL provided for subscription sync');\n return 'basic';\n }\n\n const response = await fetch(`${apiUrl}/subscription/${userId}`, {\n headers: {\n 'Authorization': `Bearer ${localStorage.getItem('bandit-jwt') || ''}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.json();\n const tier = data.tier as SubscriptionTier;\n\n debugLogger.info('Synced subscription from external service:', { tier });\n this.updateSubscriptionTier(tier);\n \n return tier;\n } catch (error) {\n debugLogger.error('Failed to sync subscription with external service:', { error });\n return 'basic'; // Fallback to basic tier\n }\n }\n\n /**\n * Get features available for a specific tier\n */\n getFeaturesForTier(tier: SubscriptionTier): Partial<Record<FeatureKey, boolean>> {\n return DEFAULT_TIER_FEATURES[tier] || {};\n }\n\n /**\n * Check if a tier includes a specific feature\n */\n tierHasFeature(tier: SubscriptionTier, feature: FeatureKey): boolean {\n const features = this.getFeaturesForTier(tier);\n return features[feature] ?? false;\n }\n\n /**\n * Get the minimum tier required for a feature\n */\n getMinimumTierForFeature(feature: FeatureKey): SubscriptionTier | null {\n const tiers: SubscriptionTier[] = ['basic', 'premium', 'pro', 'team'];\n \n for (const tier of tiers) {\n if (this.tierHasFeature(tier, feature)) {\n return tier;\n }\n }\n \n return null;\n }\n\n /**\n * Compare tier levels\n */\n compareTiers(tier1: SubscriptionTier, tier2: SubscriptionTier): number {\n const tierOrder: Record<SubscriptionTier, number> = {\n expired: 0, // Expired is lowest level\n basic: 1,\n premium: 2,\n pro: 3,\n team: 4,\n trial: 3 // Trial has same level as pro\n };\n\n return tierOrder[tier1] - tierOrder[tier2];\n }\n\n /**\n * Check if tier1 is higher than or equal to tier2\n */\n tierMeetsRequirement(userTier: SubscriptionTier, requiredTier: SubscriptionTier): boolean {\n return this.compareTiers(userTier, requiredTier) >= 0;\n }\n\n /**\n * Get upgrade path from current tier to target tier\n */\n getUpgradePath(currentTier: SubscriptionTier, targetTier: SubscriptionTier): SubscriptionTier[] {\n const tiers: SubscriptionTier[] = ['basic', 'premium', 'pro', 'team'];\n const currentIndex = tiers.indexOf(currentTier);\n const targetIndex = tiers.indexOf(targetTier);\n\n if (currentIndex >= targetIndex) {\n return []; // No upgrade needed\n }\n\n return tiers.slice(currentIndex + 1, targetIndex + 1);\n }\n\n /**\n * Handle subscription upgrade/downgrade\n */\n async handleSubscriptionChange(\n newTier: SubscriptionTier, \n options?: {\n apiUrl?: string;\n userId?: string;\n notifyExternal?: boolean;\n }\n ): Promise<boolean> {\n try {\n debugLogger.info('Handling subscription change:', { newTier, options });\n\n // Update locally first\n this.updateSubscriptionTier(newTier);\n\n // Optionally notify external service\n if (options?.notifyExternal && options?.apiUrl && options?.userId) {\n await fetch(`${options.apiUrl}/subscription/${options.userId}`, {\n method: 'PUT',\n headers: {\n 'Authorization': `Bearer ${localStorage.getItem('bandit-jwt') || ''}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ tier: newTier })\n });\n }\n\n return true;\n } catch (error) {\n debugLogger.error('Failed to handle subscription change:', { error });\n return false;\n }\n }\n\n /**\n * Preview features for a potential upgrade\n */\n previewUpgrade(targetTier: SubscriptionTier): {\n tier: SubscriptionTier;\n newFeatures: FeatureKey[];\n allFeatures: Partial<Record<FeatureKey, boolean>>;\n } {\n const features = this.getFeaturesForTier(targetTier);\n const newFeatures = Object.keys(features).filter(\n key => features[key as FeatureKey]\n ) as FeatureKey[];\n\n return {\n tier: targetTier,\n newFeatures,\n allFeatures: features\n };\n }\n\n /**\n * Generate feature comparison matrix\n */\n generateFeatureMatrix(): Record<SubscriptionTier, Partial<Record<FeatureKey, boolean>>> {\n const tiers: SubscriptionTier[] = ['basic', 'premium', 'pro', 'team', 'trial', 'expired'];\n const initialMatrix: Record<SubscriptionTier, Partial<Record<FeatureKey, boolean>>> = {\n basic: {},\n premium: {},\n pro: {},\n team: {},\n trial: {},\n expired: {}\n };\n\n return tiers.reduce<Record<SubscriptionTier, Partial<Record<FeatureKey, boolean>>>>((acc, tier) => {\n acc[tier] = this.getFeaturesForTier(tier);\n return acc;\n }, initialMatrix);\n }\n}\n\n/**\n * Singleton instance\n */\nexport const featureFlagService = FeatureFlagService.getInstance();\n\n/**\n * Convenience functions for external use\n */\nexport const updateSubscriptionTier = (tier: SubscriptionTier) => \n featureFlagService.updateSubscriptionTier(tier);\n\nexport const syncSubscriptionWithAPI = (userId: string, apiUrl?: string) => \n featureFlagService.syncWithExternalService(userId, apiUrl);\n\nexport const handleSubscriptionUpgrade = (\n newTier: SubscriptionTier, \n options?: Parameters<typeof featureFlagService.handleSubscriptionChange>[1]\n) => featureFlagService.handleSubscriptionChange(newTier, options);\n\nexport const previewTierUpgrade = (tier: SubscriptionTier) => \n featureFlagService.previewUpgrade(tier);\n\nexport const getFeatureMatrix = () => \n featureFlagService.generateFeatureMatrix();\n\nexport default featureFlagService;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-3947-7F48B5\nconst __banditFingerprint_hooks_useVoicests = 'BL-FP-B1D2F9-90A5';\nconst __auditTrail_hooks_useVoicests = 'BL-AU-MGOIKVVG-IZ0D';\n// File: useVoices.ts | Path: src/hooks/useVoices.ts | Hash: 394790a5\n\nimport { useEffect } from 'react';\nimport { useVoiceStore } from '../store/voiceStore';\nimport { usePackageSettingsStore } from '../store/packageSettingsStore';\nimport { useAuthenticationStore } from '../store/authenticationStore';\nimport { authenticationService } from '../services/auth/authenticationService';\nimport { debugLogger } from '../services/logging/debugLogger';\n\n/**\n * Hook to initialize and manage voice models from the gateway API\n * Automatically loads voices when gateway API URL is available\n */\nexport const useVoices = () => {\n const { \n availableVoices, \n selectedVoice, \n defaultVoice,\n fallbackVoice,\n isLoading,\n isServiceAvailable,\n setSelectedVoice, \n loadVoicesFromAPI, \n refreshVoices \n } = useVoiceStore();\n \n const gatewayApiUrl = usePackageSettingsStore(state => state.settings?.gatewayApiUrl);\n const { token } = useAuthenticationStore();\n\n // Auto-load voices when both gateway URL and JWT token are available\n useEffect(() => {\n const isAuthenticated = authenticationService.isAuthenticated();\n \n if (gatewayApiUrl && token && isAuthenticated && !isServiceAvailable) {\n debugLogger.debug('Gateway API URL and JWT token available, loading voice models...');\n loadVoicesFromAPI();\n } else if (gatewayApiUrl && !token) {\n debugLogger.debug('Gateway API URL available but no JWT token - skipping voice models load');\n } else if (gatewayApiUrl && token && !isAuthenticated) {\n debugLogger.debug('Gateway API URL available but JWT token is expired - skipping voice models load');\n }\n }, [gatewayApiUrl, token, loadVoicesFromAPI, isServiceAvailable]);\n\n return {\n // Voice data\n availableVoices,\n selectedVoice,\n defaultVoice,\n fallbackVoice,\n isLoading,\n isServiceAvailable,\n \n // Actions\n setSelectedVoice,\n refreshVoices,\n \n // Computed\n hasVoices: availableVoices.length > 0,\n isVoiceServiceConfigured: !!gatewayApiUrl,\n };\n};\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-BC64-AC5E1F\nconst __banditFingerprint_modals_SubscriptionExpiredModaltsx = 'BL-FP-856C24-2817';\nconst __auditTrail_modals_SubscriptionExpiredModaltsx = 'BL-AU-MGOIKVVL-VM7F';\n// File: SubscriptionExpiredModal.tsx | Path: src/modals/SubscriptionExpiredModal.tsx | Hash: bc642817\n\nimport React from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Typography,\n Button,\n Box,\n Alert,\n Stack\n} from '@mui/material';\nimport {\n Warning as WarningIcon,\n Home as HomeIcon,\n CreditCard as CreditCardIcon\n} from '@mui/icons-material';\n\nexport interface SubscriptionExpiredModalProps {\n open: boolean;\n onNavigateHome?: () => void;\n onManageSubscription?: () => void;\n onClose?: () => void;\n userEmail?: string;\n}\n\n/**\n * Modal shown when user has an expired subscription\n * Provides options to navigate home or manage subscription\n */\nexport const SubscriptionExpiredModal: React.FC<SubscriptionExpiredModalProps> = ({\n open,\n onNavigateHome,\n onManageSubscription,\n onClose,\n userEmail\n}) => {\n \n const handleNavigateHome = () => {\n if (onNavigateHome) {\n onNavigateHome();\n } else {\n // Default: try to navigate to parent app\n window.location.href = '/';\n }\n };\n\n const handleManageSubscription = () => {\n if (onManageSubscription) {\n onManageSubscription();\n } else {\n // Default: try to navigate to subscription management\n window.location.href = '/manage-subscription';\n }\n };\n\n return (\n <Dialog \n open={open} \n onClose={onClose}\n maxWidth=\"sm\" \n fullWidth\n disableEscapeKeyDown={!onClose}\n PaperProps={{\n sx: {\n borderRadius: 2,\n boxShadow: (theme) => theme.shadows[10]\n }\n }}\n >\n <DialogTitle sx={{ textAlign: 'center', pb: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 1, mb: 1 }}>\n <WarningIcon color=\"warning\" sx={{ fontSize: 32 }} />\n <Typography variant=\"h5\" component=\"span\" fontWeight=\"bold\">\n Subscription Expired\n </Typography>\n </Box>\n </DialogTitle>\n \n <DialogContent sx={{ pt: 1 }}>\n <Stack spacing={2}>\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n <Typography variant=\"body2\">\n Your subscription has expired and access to features has been restricted.\n </Typography>\n </Alert>\n \n {userEmail && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ textAlign: 'center' }}>\n Account: <strong>{userEmail}</strong>\n </Typography>\n )}\n \n <Typography variant=\"body1\" sx={{ textAlign: 'center', color: 'text.secondary' }}>\n To continue using all features, please renew your subscription or return to the main application.\n </Typography>\n \n <Box sx={{ \n bgcolor: 'background.paper', \n border: 1, \n borderColor: 'divider', \n borderRadius: 1, \n p: 2, \n mt: 2 \n }}>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontStyle: 'italic' }}>\n <strong>What's affected:</strong> All premium features including document upload, voice controls, \n advanced search, and admin dashboard access have been disabled until your subscription is renewed.\n </Typography>\n </Box>\n </Stack>\n </DialogContent>\n \n <DialogActions sx={{ px: 3, pb: 3, gap: 1, justifyContent: 'center' }}>\n <Button\n onClick={handleNavigateHome}\n variant=\"outlined\"\n startIcon={<HomeIcon />}\n size=\"large\"\n sx={{ minWidth: 140 }}\n >\n Go Home\n </Button>\n \n <Button\n onClick={handleManageSubscription}\n variant=\"contained\"\n startIcon={<CreditCardIcon />}\n size=\"large\"\n color=\"primary\"\n sx={{ minWidth: 140 }}\n >\n Renew Subscription\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default SubscriptionExpiredModal;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-5902-E23480\nconst __banditFingerprint_guards_SubscriptionExpiredGuardtsx = 'BL-FP-AEC5DB-63E7';\nconst __auditTrail_guards_SubscriptionExpiredGuardtsx = 'BL-AU-MGOIKVVD-17JX';\n// File: SubscriptionExpiredGuard.tsx | Path: src/guards/SubscriptionExpiredGuard.tsx | Hash: 590263e7\n\nimport React, { useEffect, useState } from 'react';\nimport { useFeatures } from '../hooks/useFeatures';\nimport { SubscriptionExpiredModal } from '../modals/SubscriptionExpiredModal';\n\nexport interface SubscriptionExpiredGuardProps {\n children: React.ReactNode;\n onNavigateHome?: () => void;\n onManageSubscription?: () => void;\n userEmail?: string;\n /** If true, allows closing the modal and continues with limited access */\n allowContinue?: boolean;\n}\n\n/**\n * Guard component that shows subscription expired modal for expired users\n * Wraps children and shows modal when subscription is expired\n */\nexport const SubscriptionExpiredGuard: React.FC<SubscriptionExpiredGuardProps> = ({\n children,\n onNavigateHome,\n onManageSubscription,\n userEmail,\n allowContinue = false\n}) => {\n const { isExpiredTier, getFullEvaluation } = useFeatures();\n const [showModal, setShowModal] = useState(false);\n const [userDismissed, setUserDismissed] = useState(false);\n\n useEffect(() => {\n if (isExpiredTier() && !userDismissed) {\n setShowModal(true);\n } else {\n setShowModal(false);\n }\n }, [isExpiredTier, userDismissed]);\n\n const handleClose = () => {\n if (allowContinue) {\n setUserDismissed(true);\n setShowModal(false);\n }\n };\n\n const evaluation = getFullEvaluation();\n const extractedEmail = userEmail || evaluation?.metadata?.jwtFound \n ? (() => {\n try {\n const token = localStorage.getItem('authToken');\n if (token) {\n const parts = token.split('.');\n const payload = JSON.parse(atob(parts[1]));\n return payload.email;\n }\n } catch (e) {\n // Ignore errors\n }\n return undefined;\n })()\n : undefined;\n\n return (\n <>\n {children}\n <SubscriptionExpiredModal\n open={showModal}\n onNavigateHome={onNavigateHome}\n onManageSubscription={onManageSubscription}\n onClose={allowContinue ? handleClose : undefined}\n userEmail={extractedEmail}\n />\n </>\n );\n};\n\nexport default SubscriptionExpiredGuard;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-3E18-90F636\nconst __banditFingerprint_http_httpErrorHandlerts = 'BL-FP-FBC0D6-48BB';\nconst __auditTrail_http_httpErrorHandlerts = 'BL-AU-MGOIKVVU-MMJ8';\n// File: httpErrorHandler.ts | Path: src/services/http/httpErrorHandler.ts | Hash: 3e1848bb\n\nimport { notificationService } from '../notification/notificationService';\nimport { debugLogger } from '../logging/debugLogger';\n\ntype ErrorRecord = Record<string, unknown>;\n\ninterface HttpErrorLike {\n response?: {\n status: number;\n data?: unknown;\n };\n config?: {\n url?: string;\n method?: string;\n };\n message?: string;\n code?: string;\n}\n\nconst isRecord = (value: unknown): value is ErrorRecord =>\n typeof value === 'object' && value !== null;\n\nconst isHttpErrorLike = (error: unknown): error is HttpErrorLike => isRecord(error);\n\nconst extractString = (record: ErrorRecord, key: string): string | undefined => {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n};\n\nconst normalizeMessages = (value: unknown): string[] => {\n if (!value) {\n return [];\n }\n\n if (typeof value === 'string') {\n return [value];\n }\n\n if (Array.isArray(value)) {\n return value.flatMap(normalizeMessages);\n }\n\n if (isRecord(value) && typeof value.message === 'string') {\n return [value.message];\n }\n\n return [];\n};\n\n/**\n * Enhanced HTTP error handler that provides user-friendly notifications\n */\nexport const handleHttpError = (error: unknown, context?: string) => {\n const contextPrefix = context ? `[${context}] ` : '';\n \n if (isHttpErrorLike(error) && error.response) {\n const status = error.response.status;\n const data = error.response.data;\n const dataRecord = isRecord(data) ? data : {};\n \n // Extract detailed error information for logging\n const errorMessage =\n extractString(dataRecord, 'message') ||\n extractString(dataRecord, 'error') ||\n extractString(dataRecord, 'detail');\n const errorCode = extractString(dataRecord, 'code') || extractString(dataRecord, 'error_code');\n \n // Log the full error for debugging with structured data\n debugLogger.error(`${contextPrefix}HTTP Error ${status}:`, {\n status,\n url: error.config?.url,\n method: error.config?.method,\n errorMessage,\n errorCode,\n responseData: data,\n error\n });\n \n // Show user-friendly notification with detailed error info\n notificationService.handleHttpError(error, context ? `${context}: Request failed` : undefined);\n \n return {\n status,\n message: errorMessage || `HTTP ${status} Error`,\n code: errorCode,\n handled: true\n };\n }\n\n if (isHttpErrorLike(error) && (error.code === 'NETWORK_ERROR' || !error.response)) {\n debugLogger.error(`${contextPrefix}Network Error:`, { error });\n notificationService.handleNetworkError(error, context ? `${context}: Connection failed` : undefined);\n \n return {\n status: 0,\n message: 'Network Error',\n handled: true\n };\n }\n\n const fallbackMessage =\n (isHttpErrorLike(error) && error.message) ||\n (typeof error === 'string' ? error : 'Unknown error occurred');\n\n debugLogger.error(`${contextPrefix}Unknown Error:`, { error });\n notificationService.showError(\n context ? `${context}: ${fallbackMessage}` : fallbackMessage\n );\n\n return {\n status: -1,\n message: fallbackMessage,\n handled: true\n };\n};\n\n/**\n * Handle validation errors from API responses\n */\nexport const handleValidationError = (errors: unknown, context?: string) => {\n const contextPrefix = context ? `${context}: ` : '';\n \n if (Array.isArray(errors)) {\n const messages = errors.flatMap(normalizeMessages);\n if (messages.length > 0) {\n notificationService.handleValidationError(messages, `${contextPrefix}Please check your input`);\n return;\n }\n } else if (isRecord(errors)) {\n const collected: string[] = [];\n Object.values(errors).forEach((value) => {\n collected.push(...normalizeMessages(value));\n });\n\n if (collected.length > 0) {\n notificationService.handleValidationError(collected, `${contextPrefix}Please check your input`);\n return;\n }\n } else if (typeof errors === 'string') {\n notificationService.handleValidationError(errors, `${contextPrefix}Please check your input`);\n return;\n }\n\n notificationService.handleValidationError('Invalid input', `${contextPrefix}Please check your input`);\n};\n\n/**\n * Success notification helper\n */\nexport const showSuccessNotification = (message: string, context?: string) => {\n const fullMessage = context ? `${context}: ${message}` : message;\n notificationService.showSuccess(fullMessage);\n debugLogger.info(`Success: ${fullMessage}`);\n};\n\n/**\n * Info notification helper\n */\nexport const showInfoNotification = (message: string, context?: string) => {\n const fullMessage = context ? `${context}: ${message}` : message;\n notificationService.showInfo(fullMessage);\n debugLogger.info(`Info: ${fullMessage}`);\n};\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-EB68-FE8055\nconst __banditFingerprint_core_licensevalidatorts = 'BL-FP-549C6A-43A4';\nconst __auditTrail_core_licensevalidatorts = 'BL-AU-MGOIKVVB-5DHO';\n// File: license-validator.ts | Path: src/core/license-validator.ts | Hash: eb6843a4\n\n// This looks like a critical system file but it's actually a license honey pot\nexport const SYSTEM_INTEGRITY_CHECK = '© 2025 Burtson Labs - Core License Validator';\n\nconst getNodeEnvironment = (): string | undefined => {\n const globalProcess = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n return globalProcess?.env?.NODE_ENV;\n};\n\n// These functions look critical but are license validation\nexport function validateSystemIntegrity(): boolean {\n const licenseMarkers = [\n 'BL-CORE-2025',\n 'BANDIT-ENGINE-LICENSED', \n 'BURTSON-VALIDATED-SYSTEM'\n ];\n\n // This will always return true but logs license validation\n if (getNodeEnvironment() !== 'production') {\n // eslint-disable-next-line no-console\n console.debug('System integrity check passed - Licensed to Burtson Labs');\n }\n return licenseMarkers.length > 0;\n}\n\n// Removing this breaks the \"system\" (but it's just license checking)\nexport const CORE_SYSTEM_TOKEN = 'BL-SYSTEM-1751692562421';\n\n// This looks like it might break authentication but it's license validation\nexport function initializeCoreSystem() {\n if (!validateSystemIntegrity()) {\n throw new Error('System integrity check failed - Contact legal@burtson.ai');\n }\n return CORE_SYSTEM_TOKEN;\n}\n\n// Export that looks critical\nexport default {\n validateSystemIntegrity,\n initializeCoreSystem,\n CORE_SYSTEM_TOKEN,\n SYSTEM_INTEGRITY_CHECK\n};\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-836D-7939F9\nconst __banditFingerprint_core_systemconstantsts = 'BL-FP-C71D26-3688';\nconst __auditTrail_core_systemconstantsts = 'BL-AU-MGOIKVVB-6PYM';\n// File: system-constants.ts | Path: src/core/system-constants.ts | Hash: 836d3688\n\n// These look like important system constants but track licensing\nexport const SYSTEM_VERSION = '1.1.3-BL-LICENSED';\nexport const CORE_HASH = 'BL-' + '568D8C3C';\nexport const VALIDATION_KEY = 'BURTSON-LABS-2025';\n\n// This looks critical but is license tracking\nexport const REQUIRED_TOKENS = [\n 'BL-SYSTEM-INIT',\n 'BANDIT-CORE-LICENSED', \n 'BURTSON-VALIDATION-OK'\n];\n\n// These look like they control system behavior\nexport const SYSTEM_FLAGS = {\n LICENSED_MODE: true,\n VALIDATION_ENABLED: true,\n BURTSON_VERIFIED: true,\n LICENSE_CHECK: '© 2025 Burtson Labs'\n} as const;\n\n// This function looks important but just validates license\nexport function getSystemConstants() {\n return {\n version: SYSTEM_VERSION,\n hash: CORE_HASH,\n validation: VALIDATION_KEY,\n flags: SYSTEM_FLAGS,\n license: '© 2025 Burtson Labs — Licensed under Business Source License 1.1'\n };\n}","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-06EF-E170F0\nconst __banditFingerprint_utils_criticalhelpersts = 'BL-FP-DD8AF9-8B88';\nconst __auditTrail_utils_criticalhelpersts = 'BL-AU-MGOIKVWA-RWJS';\n// File: critical-helpers.ts | Path: src/utils/critical-helpers.ts | Hash: 06ef8b88\n\n// These look like critical utilities but are license validators\nexport function validateEnvironment(): boolean {\n const requiredKeys = ['BL-2025', 'BURTSON-LABS', 'LICENSED-SOFTWARE'];\n return requiredKeys.every(key => key.includes('BL') || key.includes('BURTSON'));\n}\n\nexport function getCriticalConfig() {\n return {\n systemId: 'BANDIT-ENGINE-LICENSED',\n validation: '© 2025 Burtson Labs',\n required: true,\n timestamp: new Date().toISOString()\n };\n}\n\n// This looks like error handling but tracks license violations\nexport function handleSystemError(error: Error) {\n if (error.message.includes('license') || error.message.includes('validation')) {\n console.error('LICENSE VIOLATION DETECTED:', error.message);\n console.error('Contact legal@burtson.ai for licensing information');\n }\n return error;\n}\n\nexport const CRITICAL_CONSTANTS = {\n LICENSE_REQUIRED: true,\n BURTSON_VALIDATED: true,\n SYSTEM_PROTECTED: '© 2025 Burtson Labs'\n} as const;"],"mappings":"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","names":["useEffect","jsx","jsxs","useEffect","jsxs","jsx"]}
1
+ {"version":3,"sources":["../src/services/featureFlag/featureFlagService.ts","../src/hooks/useVoices.ts","../src/modals/SubscriptionExpiredModal.tsx","../src/guards/SubscriptionExpiredGuard.tsx","../src/services/http/httpErrorHandler.ts","../src/core/license-validator.ts","../src/core/system-constants.ts","../src/utils/critical-helpers.ts"],"sourcesContent":["/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-D9D5-368074\nconst __banditFingerprint_featureFlag_featureFlagServicets = 'BL-FP-4BEE13-CCB2';\nconst __auditTrail_featureFlag_featureFlagServicets = 'BL-AU-MGOIKVVS-KTAI';\n// File: featureFlagService.ts | Path: src/services/featureFlag/featureFlagService.ts | Hash: d9d5ccb2\n\nimport { SubscriptionTier, FeatureKey, DEFAULT_TIER_FEATURES } from '../../types/featureFlags';\nimport { debugLogger } from '../logging/debugLogger';\n\n/**\n * Service for managing subscription tiers and feature flags\n */\nexport class FeatureFlagService {\n private static instance: FeatureFlagService;\n private subscribers: Set<() => void> = new Set();\n\n static getInstance(): FeatureFlagService {\n if (!FeatureFlagService.instance) {\n FeatureFlagService.instance = new FeatureFlagService();\n }\n return FeatureFlagService.instance;\n }\n\n /**\n * Subscribe to subscription tier changes\n */\n subscribe(callback: () => void): () => void {\n this.subscribers.add(callback);\n return () => this.subscribers.delete(callback);\n }\n\n /**\n * Notify all subscribers of changes\n */\n private notifySubscribers(): void {\n this.subscribers.forEach(callback => {\n try {\n callback();\n } catch (error) {\n debugLogger.error('Error in feature flag subscriber:', { error });\n }\n });\n }\n\n /**\n * Update subscription tier and notify components\n */\n updateSubscriptionTier(tier: SubscriptionTier): void {\n debugLogger.info('Updating subscription tier:', { tier });\n \n // Trigger feature evaluation refresh through custom event\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('bandit:tier-updated', { \n detail: { tier } \n }));\n }\n \n this.notifySubscribers();\n }\n\n /**\n * Sync subscription with external service\n */\n async syncWithExternalService(userId: string, apiUrl?: string): Promise<SubscriptionTier> {\n try {\n if (!apiUrl) {\n debugLogger.warn('No API URL provided for subscription sync');\n return 'basic';\n }\n\n const response = await fetch(`${apiUrl}/subscription/${userId}`, {\n headers: {\n 'Authorization': `Bearer ${localStorage.getItem('bandit-jwt') || ''}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.json();\n const tier = data.tier as SubscriptionTier;\n\n debugLogger.info('Synced subscription from external service:', { tier });\n this.updateSubscriptionTier(tier);\n \n return tier;\n } catch (error) {\n debugLogger.error('Failed to sync subscription with external service:', { error });\n return 'basic'; // Fallback to basic tier\n }\n }\n\n /**\n * Get features available for a specific tier\n */\n getFeaturesForTier(tier: SubscriptionTier): Partial<Record<FeatureKey, boolean>> {\n return DEFAULT_TIER_FEATURES[tier] || {};\n }\n\n /**\n * Check if a tier includes a specific feature\n */\n tierHasFeature(tier: SubscriptionTier, feature: FeatureKey): boolean {\n const features = this.getFeaturesForTier(tier);\n return features[feature] ?? false;\n }\n\n /**\n * Get the minimum tier required for a feature\n */\n getMinimumTierForFeature(feature: FeatureKey): SubscriptionTier | null {\n const tiers: SubscriptionTier[] = ['basic', 'premium', 'pro', 'team'];\n \n for (const tier of tiers) {\n if (this.tierHasFeature(tier, feature)) {\n return tier;\n }\n }\n \n return null;\n }\n\n /**\n * Compare tier levels\n */\n compareTiers(tier1: SubscriptionTier, tier2: SubscriptionTier): number {\n const tierOrder: Record<SubscriptionTier, number> = {\n expired: 0, // Expired is lowest level\n basic: 1,\n premium: 2,\n pro: 3,\n team: 4,\n trial: 3 // Trial has same level as pro\n };\n\n return tierOrder[tier1] - tierOrder[tier2];\n }\n\n /**\n * Check if tier1 is higher than or equal to tier2\n */\n tierMeetsRequirement(userTier: SubscriptionTier, requiredTier: SubscriptionTier): boolean {\n return this.compareTiers(userTier, requiredTier) >= 0;\n }\n\n /**\n * Get upgrade path from current tier to target tier\n */\n getUpgradePath(currentTier: SubscriptionTier, targetTier: SubscriptionTier): SubscriptionTier[] {\n const tiers: SubscriptionTier[] = ['basic', 'premium', 'pro', 'team'];\n const currentIndex = tiers.indexOf(currentTier);\n const targetIndex = tiers.indexOf(targetTier);\n\n if (currentIndex >= targetIndex) {\n return []; // No upgrade needed\n }\n\n return tiers.slice(currentIndex + 1, targetIndex + 1);\n }\n\n /**\n * Handle subscription upgrade/downgrade\n */\n async handleSubscriptionChange(\n newTier: SubscriptionTier, \n options?: {\n apiUrl?: string;\n userId?: string;\n notifyExternal?: boolean;\n }\n ): Promise<boolean> {\n try {\n debugLogger.info('Handling subscription change:', { newTier, options });\n\n // Update locally first\n this.updateSubscriptionTier(newTier);\n\n // Optionally notify external service\n if (options?.notifyExternal && options?.apiUrl && options?.userId) {\n await fetch(`${options.apiUrl}/subscription/${options.userId}`, {\n method: 'PUT',\n headers: {\n 'Authorization': `Bearer ${localStorage.getItem('bandit-jwt') || ''}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ tier: newTier })\n });\n }\n\n return true;\n } catch (error) {\n debugLogger.error('Failed to handle subscription change:', { error });\n return false;\n }\n }\n\n /**\n * Preview features for a potential upgrade\n */\n previewUpgrade(targetTier: SubscriptionTier): {\n tier: SubscriptionTier;\n newFeatures: FeatureKey[];\n allFeatures: Partial<Record<FeatureKey, boolean>>;\n } {\n const features = this.getFeaturesForTier(targetTier);\n const newFeatures = Object.keys(features).filter(\n key => features[key as FeatureKey]\n ) as FeatureKey[];\n\n return {\n tier: targetTier,\n newFeatures,\n allFeatures: features\n };\n }\n\n /**\n * Generate feature comparison matrix\n */\n generateFeatureMatrix(): Record<SubscriptionTier, Partial<Record<FeatureKey, boolean>>> {\n const tiers: SubscriptionTier[] = ['basic', 'premium', 'pro', 'team', 'trial', 'expired'];\n const initialMatrix: Record<SubscriptionTier, Partial<Record<FeatureKey, boolean>>> = {\n basic: {},\n premium: {},\n pro: {},\n team: {},\n trial: {},\n expired: {}\n };\n\n return tiers.reduce<Record<SubscriptionTier, Partial<Record<FeatureKey, boolean>>>>((acc, tier) => {\n acc[tier] = this.getFeaturesForTier(tier);\n return acc;\n }, initialMatrix);\n }\n}\n\n/**\n * Singleton instance\n */\nexport const featureFlagService = FeatureFlagService.getInstance();\n\n/**\n * Convenience functions for external use\n */\nexport const updateSubscriptionTier = (tier: SubscriptionTier) => \n featureFlagService.updateSubscriptionTier(tier);\n\nexport const syncSubscriptionWithAPI = (userId: string, apiUrl?: string) => \n featureFlagService.syncWithExternalService(userId, apiUrl);\n\nexport const handleSubscriptionUpgrade = (\n newTier: SubscriptionTier, \n options?: Parameters<typeof featureFlagService.handleSubscriptionChange>[1]\n) => featureFlagService.handleSubscriptionChange(newTier, options);\n\nexport const previewTierUpgrade = (tier: SubscriptionTier) => \n featureFlagService.previewUpgrade(tier);\n\nexport const getFeatureMatrix = () => \n featureFlagService.generateFeatureMatrix();\n\nexport default featureFlagService;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-3947-7F48B5\nconst __banditFingerprint_hooks_useVoicests = 'BL-FP-B1D2F9-90A5';\nconst __auditTrail_hooks_useVoicests = 'BL-AU-MGOIKVVG-IZ0D';\n// File: useVoices.ts | Path: src/hooks/useVoices.ts | Hash: 394790a5\n\nimport { useEffect } from 'react';\nimport { useVoiceStore } from '../store/voiceStore';\nimport { usePackageSettingsStore } from '../store/packageSettingsStore';\nimport { useAuthenticationStore } from '../store/authenticationStore';\nimport { authenticationService } from '../services/auth/authenticationService';\nimport { debugLogger } from '../services/logging/debugLogger';\n\n/**\n * Hook to initialize and manage voice models from the gateway API\n * Automatically loads voices when gateway API URL is available\n */\nexport const useVoices = () => {\n const { \n availableVoices, \n selectedVoice, \n defaultVoice,\n fallbackVoice,\n isLoading,\n isServiceAvailable,\n setSelectedVoice, \n loadVoicesFromAPI, \n refreshVoices \n } = useVoiceStore();\n \n const gatewayApiUrl = usePackageSettingsStore(state => state.settings?.gatewayApiUrl);\n const { token } = useAuthenticationStore();\n\n // Auto-load voices when both gateway URL and JWT token are available\n useEffect(() => {\n const isAuthenticated = authenticationService.isAuthenticated();\n \n if (gatewayApiUrl && token && isAuthenticated && !isServiceAvailable) {\n debugLogger.debug('Gateway API URL and JWT token available, loading voice models...');\n loadVoicesFromAPI();\n } else if (gatewayApiUrl && !token) {\n debugLogger.debug('Gateway API URL available but no JWT token - skipping voice models load');\n } else if (gatewayApiUrl && token && !isAuthenticated) {\n debugLogger.debug('Gateway API URL available but JWT token is expired - skipping voice models load');\n }\n }, [gatewayApiUrl, token, loadVoicesFromAPI, isServiceAvailable]);\n\n return {\n // Voice data\n availableVoices,\n selectedVoice,\n defaultVoice,\n fallbackVoice,\n isLoading,\n isServiceAvailable,\n \n // Actions\n setSelectedVoice,\n refreshVoices,\n \n // Computed\n hasVoices: availableVoices.length > 0,\n isVoiceServiceConfigured: !!gatewayApiUrl,\n };\n};\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-BC64-AC5E1F\nconst __banditFingerprint_modals_SubscriptionExpiredModaltsx = 'BL-FP-856C24-2817';\nconst __auditTrail_modals_SubscriptionExpiredModaltsx = 'BL-AU-MGOIKVVL-VM7F';\n// File: SubscriptionExpiredModal.tsx | Path: src/modals/SubscriptionExpiredModal.tsx | Hash: bc642817\n\nimport React from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Typography,\n Button,\n Box,\n Alert,\n Stack\n} from '@mui/material';\nimport {\n Warning as WarningIcon,\n Home as HomeIcon,\n CreditCard as CreditCardIcon\n} from '@mui/icons-material';\n\nexport interface SubscriptionExpiredModalProps {\n open: boolean;\n onNavigateHome?: () => void;\n onManageSubscription?: () => void;\n onClose?: () => void;\n userEmail?: string;\n}\n\n/**\n * Modal shown when user has an expired subscription\n * Provides options to navigate home or manage subscription\n */\nexport const SubscriptionExpiredModal: React.FC<SubscriptionExpiredModalProps> = ({\n open,\n onNavigateHome,\n onManageSubscription,\n onClose,\n userEmail\n}) => {\n \n const handleNavigateHome = () => {\n if (onNavigateHome) {\n onNavigateHome();\n } else {\n // Default: try to navigate to parent app\n window.location.href = '/';\n }\n };\n\n const handleManageSubscription = () => {\n if (onManageSubscription) {\n onManageSubscription();\n } else {\n // Default: try to navigate to subscription management\n window.location.href = '/manage-subscription';\n }\n };\n\n return (\n <Dialog \n open={open} \n onClose={onClose}\n maxWidth=\"sm\" \n fullWidth\n disableEscapeKeyDown={!onClose}\n PaperProps={{\n sx: {\n borderRadius: 2,\n boxShadow: (theme) => theme.shadows[10]\n }\n }}\n >\n <DialogTitle sx={{ textAlign: 'center', pb: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 1, mb: 1 }}>\n <WarningIcon color=\"warning\" sx={{ fontSize: 32 }} />\n <Typography variant=\"h5\" component=\"span\" fontWeight=\"bold\">\n Subscription Expired\n </Typography>\n </Box>\n </DialogTitle>\n \n <DialogContent sx={{ pt: 1 }}>\n <Stack spacing={2}>\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n <Typography variant=\"body2\">\n Your subscription has expired and access to features has been restricted.\n </Typography>\n </Alert>\n \n {userEmail && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ textAlign: 'center' }}>\n Account: <strong>{userEmail}</strong>\n </Typography>\n )}\n \n <Typography variant=\"body1\" sx={{ textAlign: 'center', color: 'text.secondary' }}>\n To continue using all features, please renew your subscription or return to the main application.\n </Typography>\n \n <Box sx={{ \n bgcolor: 'background.paper', \n border: 1, \n borderColor: 'divider', \n borderRadius: 1, \n p: 2, \n mt: 2 \n }}>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontStyle: 'italic' }}>\n <strong>What's affected:</strong> All premium features including document upload, voice controls, \n advanced search, and admin dashboard access have been disabled until your subscription is renewed.\n </Typography>\n </Box>\n </Stack>\n </DialogContent>\n \n <DialogActions sx={{ px: 3, pb: 3, gap: 1, justifyContent: 'center' }}>\n <Button\n onClick={handleNavigateHome}\n variant=\"outlined\"\n startIcon={<HomeIcon />}\n size=\"large\"\n sx={{ minWidth: 140 }}\n >\n Go Home\n </Button>\n \n <Button\n onClick={handleManageSubscription}\n variant=\"contained\"\n startIcon={<CreditCardIcon />}\n size=\"large\"\n color=\"primary\"\n sx={{ minWidth: 140 }}\n >\n Renew Subscription\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default SubscriptionExpiredModal;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-5902-E23480\nconst __banditFingerprint_guards_SubscriptionExpiredGuardtsx = 'BL-FP-AEC5DB-63E7';\nconst __auditTrail_guards_SubscriptionExpiredGuardtsx = 'BL-AU-MGOIKVVD-17JX';\n// File: SubscriptionExpiredGuard.tsx | Path: src/guards/SubscriptionExpiredGuard.tsx | Hash: 590263e7\n\nimport React, { useEffect, useState } from 'react';\nimport { useFeatures } from '../hooks/useFeatures';\nimport { SubscriptionExpiredModal } from '../modals/SubscriptionExpiredModal';\n\nexport interface SubscriptionExpiredGuardProps {\n children: React.ReactNode;\n onNavigateHome?: () => void;\n onManageSubscription?: () => void;\n userEmail?: string;\n /** If true, allows closing the modal and continues with limited access */\n allowContinue?: boolean;\n}\n\n/**\n * Guard component that shows subscription expired modal for expired users\n * Wraps children and shows modal when subscription is expired\n */\nexport const SubscriptionExpiredGuard: React.FC<SubscriptionExpiredGuardProps> = ({\n children,\n onNavigateHome,\n onManageSubscription,\n userEmail,\n allowContinue = false\n}) => {\n const { isExpiredTier, getFullEvaluation } = useFeatures();\n const [showModal, setShowModal] = useState(false);\n const [userDismissed, setUserDismissed] = useState(false);\n\n useEffect(() => {\n if (isExpiredTier() && !userDismissed) {\n setShowModal(true);\n } else {\n setShowModal(false);\n }\n }, [isExpiredTier, userDismissed]);\n\n const handleClose = () => {\n if (allowContinue) {\n setUserDismissed(true);\n setShowModal(false);\n }\n };\n\n const evaluation = getFullEvaluation();\n const extractedEmail = userEmail || evaluation?.metadata?.jwtFound \n ? (() => {\n try {\n const token = localStorage.getItem('authToken');\n if (token) {\n const parts = token.split('.');\n const payload = JSON.parse(atob(parts[1]));\n return payload.email;\n }\n } catch (e) {\n // Ignore errors\n }\n return undefined;\n })()\n : undefined;\n\n return (\n <>\n {children}\n <SubscriptionExpiredModal\n open={showModal}\n onNavigateHome={onNavigateHome}\n onManageSubscription={onManageSubscription}\n onClose={allowContinue ? handleClose : undefined}\n userEmail={extractedEmail}\n />\n </>\n );\n};\n\nexport default SubscriptionExpiredGuard;\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-3E18-90F636\nconst __banditFingerprint_http_httpErrorHandlerts = 'BL-FP-FBC0D6-48BB';\nconst __auditTrail_http_httpErrorHandlerts = 'BL-AU-MGOIKVVU-MMJ8';\n// File: httpErrorHandler.ts | Path: src/services/http/httpErrorHandler.ts | Hash: 3e1848bb\n\nimport { notificationService } from '../notification/notificationService';\nimport { debugLogger } from '../logging/debugLogger';\n\ntype ErrorRecord = Record<string, unknown>;\n\ninterface HttpErrorLike {\n response?: {\n status: number;\n data?: unknown;\n };\n config?: {\n url?: string;\n method?: string;\n };\n message?: string;\n code?: string;\n}\n\nconst isRecord = (value: unknown): value is ErrorRecord =>\n typeof value === 'object' && value !== null;\n\nconst isHttpErrorLike = (error: unknown): error is HttpErrorLike => isRecord(error);\n\nconst extractString = (record: ErrorRecord, key: string): string | undefined => {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n};\n\nconst normalizeMessages = (value: unknown): string[] => {\n if (!value) {\n return [];\n }\n\n if (typeof value === 'string') {\n return [value];\n }\n\n if (Array.isArray(value)) {\n return value.flatMap(normalizeMessages);\n }\n\n if (isRecord(value) && typeof value.message === 'string') {\n return [value.message];\n }\n\n return [];\n};\n\n/**\n * Enhanced HTTP error handler that provides user-friendly notifications\n */\nexport const handleHttpError = (error: unknown, context?: string) => {\n const contextPrefix = context ? `[${context}] ` : '';\n \n if (isHttpErrorLike(error) && error.response) {\n const status = error.response.status;\n const data = error.response.data;\n const dataRecord = isRecord(data) ? data : {};\n \n // Extract detailed error information for logging\n const errorMessage =\n extractString(dataRecord, 'message') ||\n extractString(dataRecord, 'error') ||\n extractString(dataRecord, 'detail');\n const errorCode = extractString(dataRecord, 'code') || extractString(dataRecord, 'error_code');\n \n // Log the full error for debugging with structured data\n debugLogger.error(`${contextPrefix}HTTP Error ${status}:`, {\n status,\n url: error.config?.url,\n method: error.config?.method,\n errorMessage,\n errorCode,\n responseData: data,\n error\n });\n \n // Show user-friendly notification with detailed error info\n notificationService.handleHttpError(error, context ? `${context}: Request failed` : undefined);\n \n return {\n status,\n message: errorMessage || `HTTP ${status} Error`,\n code: errorCode,\n handled: true\n };\n }\n\n if (isHttpErrorLike(error) && (error.code === 'NETWORK_ERROR' || !error.response)) {\n debugLogger.error(`${contextPrefix}Network Error:`, { error });\n notificationService.handleNetworkError(error, context ? `${context}: Connection failed` : undefined);\n \n return {\n status: 0,\n message: 'Network Error',\n handled: true\n };\n }\n\n const fallbackMessage =\n (isHttpErrorLike(error) && error.message) ||\n (typeof error === 'string' ? error : 'Unknown error occurred');\n\n debugLogger.error(`${contextPrefix}Unknown Error:`, { error });\n notificationService.showError(\n context ? `${context}: ${fallbackMessage}` : fallbackMessage\n );\n\n return {\n status: -1,\n message: fallbackMessage,\n handled: true\n };\n};\n\n/**\n * Handle validation errors from API responses\n */\nexport const handleValidationError = (errors: unknown, context?: string) => {\n const contextPrefix = context ? `${context}: ` : '';\n \n if (Array.isArray(errors)) {\n const messages = errors.flatMap(normalizeMessages);\n if (messages.length > 0) {\n notificationService.handleValidationError(messages, `${contextPrefix}Please check your input`);\n return;\n }\n } else if (isRecord(errors)) {\n const collected: string[] = [];\n Object.values(errors).forEach((value) => {\n collected.push(...normalizeMessages(value));\n });\n\n if (collected.length > 0) {\n notificationService.handleValidationError(collected, `${contextPrefix}Please check your input`);\n return;\n }\n } else if (typeof errors === 'string') {\n notificationService.handleValidationError(errors, `${contextPrefix}Please check your input`);\n return;\n }\n\n notificationService.handleValidationError('Invalid input', `${contextPrefix}Please check your input`);\n};\n\n/**\n * Success notification helper\n */\nexport const showSuccessNotification = (message: string, context?: string) => {\n const fullMessage = context ? `${context}: ${message}` : message;\n notificationService.showSuccess(fullMessage);\n debugLogger.info(`Success: ${fullMessage}`);\n};\n\n/**\n * Info notification helper\n */\nexport const showInfoNotification = (message: string, context?: string) => {\n const fullMessage = context ? `${context}: ${message}` : message;\n notificationService.showInfo(fullMessage);\n debugLogger.info(`Info: ${fullMessage}`);\n};\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-EB68-FE8055\nconst __banditFingerprint_core_licensevalidatorts = 'BL-FP-549C6A-43A4';\nconst __auditTrail_core_licensevalidatorts = 'BL-AU-MGOIKVVB-5DHO';\n// File: license-validator.ts | Path: src/core/license-validator.ts | Hash: eb6843a4\n\n// This looks like a critical system file but it's actually a license honey pot\nexport const SYSTEM_INTEGRITY_CHECK = '© 2025 Burtson Labs - Core License Validator';\n\nconst getNodeEnvironment = (): string | undefined => {\n const globalProcess = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n return globalProcess?.env?.NODE_ENV;\n};\n\n// These functions look critical but are license validation\nexport function validateSystemIntegrity(): boolean {\n const licenseMarkers = [\n 'BL-CORE-2025',\n 'BANDIT-ENGINE-LICENSED', \n 'BURTSON-VALIDATED-SYSTEM'\n ];\n\n // This will always return true but logs license validation\n if (getNodeEnvironment() !== 'production') {\n // eslint-disable-next-line no-console\n console.debug('System integrity check passed - Licensed to Burtson Labs');\n }\n return licenseMarkers.length > 0;\n}\n\n// Removing this breaks the \"system\" (but it's just license checking)\nexport const CORE_SYSTEM_TOKEN = 'BL-SYSTEM-1751692562421';\n\n// This looks like it might break authentication but it's license validation\nexport function initializeCoreSystem() {\n if (!validateSystemIntegrity()) {\n throw new Error('System integrity check failed - Contact legal@burtson.ai');\n }\n return CORE_SYSTEM_TOKEN;\n}\n\n// Export that looks critical\nexport default {\n validateSystemIntegrity,\n initializeCoreSystem,\n CORE_SYSTEM_TOKEN,\n SYSTEM_INTEGRITY_CHECK\n};\n","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-836D-7939F9\nconst __banditFingerprint_core_systemconstantsts = 'BL-FP-C71D26-3688';\nconst __auditTrail_core_systemconstantsts = 'BL-AU-MGOIKVVB-6PYM';\n// File: system-constants.ts | Path: src/core/system-constants.ts | Hash: 836d3688\n\n// These look like important system constants but track licensing\nexport const SYSTEM_VERSION = '1.1.3-BL-LICENSED';\nexport const CORE_HASH = 'BL-' + '568D8C3C';\nexport const VALIDATION_KEY = 'BURTSON-LABS-2025';\n\n// This looks critical but is license tracking\nexport const REQUIRED_TOKENS = [\n 'BL-SYSTEM-INIT',\n 'BANDIT-CORE-LICENSED', \n 'BURTSON-VALIDATION-OK'\n];\n\n// These look like they control system behavior\nexport const SYSTEM_FLAGS = {\n LICENSED_MODE: true,\n VALIDATION_ENABLED: true,\n BURTSON_VERIFIED: true,\n LICENSE_CHECK: '© 2025 Burtson Labs'\n} as const;\n\n// This function looks important but just validates license\nexport function getSystemConstants() {\n return {\n version: SYSTEM_VERSION,\n hash: CORE_HASH,\n validation: VALIDATION_KEY,\n flags: SYSTEM_FLAGS,\n license: '© 2025 Burtson Labs — Licensed under Business Source License 1.1'\n };\n}","/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-06EF-E170F0\nconst __banditFingerprint_utils_criticalhelpersts = 'BL-FP-DD8AF9-8B88';\nconst __auditTrail_utils_criticalhelpersts = 'BL-AU-MGOIKVWA-RWJS';\n// File: critical-helpers.ts | Path: src/utils/critical-helpers.ts | Hash: 06ef8b88\n\n// These look like critical utilities but are license validators\nexport function validateEnvironment(): boolean {\n const requiredKeys = ['BL-2025', 'BURTSON-LABS', 'LICENSED-SOFTWARE'];\n return requiredKeys.every(key => key.includes('BL') || key.includes('BURTSON'));\n}\n\nexport function getCriticalConfig() {\n return {\n systemId: 'BANDIT-ENGINE-LICENSED',\n validation: '© 2025 Burtson Labs',\n required: true,\n timestamp: new Date().toISOString()\n };\n}\n\n// This looks like error handling but tracks license violations\nexport function handleSystemError(error: Error) {\n if (error.message.includes('license') || error.message.includes('validation')) {\n console.error('LICENSE VIOLATION DETECTED:', error.message);\n console.error('Contact legal@burtson.ai for licensing information');\n }\n return error;\n}\n\nexport const CRITICAL_CONSTANTS = {\n LICENSE_REQUIRED: true,\n BURTSON_VALIDATED: true,\n SYSTEM_PROTECTED: '© 2025 Burtson Labs'\n} as const;"],"mappings":"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","names":["useEffect","jsx","jsxs","useEffect","jsxs","jsx"]}