@burtson-labs/bandit-engine 2.0.161 → 2.0.163
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.
- package/README.md +7 -22
- package/dist/aiProviderStore-PEGSX4PK.mjs +9 -0
- package/dist/chat-MRDQ2WRJ.mjs +16 -0
- package/dist/chat-provider.js +86 -31
- package/dist/chat-provider.js.map +1 -1
- package/dist/chat-provider.mjs +7 -7
- package/dist/{chunk-QXITTH2X.mjs → chunk-5KBTOCQZ.mjs} +4 -4
- package/dist/chunk-5KBTOCQZ.mjs.map +1 -0
- package/dist/{chunk-B3HAQC6F.mjs → chunk-CQJGUYRW.mjs} +69 -26
- package/dist/chunk-CQJGUYRW.mjs.map +1 -0
- package/dist/{chunk-TTAORNWI.mjs → chunk-F32P7Q5O.mjs} +122 -232
- package/dist/chunk-F32P7Q5O.mjs.map +1 -0
- package/dist/{chunk-XC7HDKFW.mjs → chunk-HSGQXL4N.mjs} +11 -11
- package/dist/chunk-HSGQXL4N.mjs.map +1 -0
- package/dist/{chunk-QPXG4A5C.mjs → chunk-IZX2J65Q.mjs} +2 -2
- package/dist/chunk-IZX2J65Q.mjs.map +1 -0
- package/dist/{chunk-MIDYEQOS.mjs → chunk-J6SWNO7Z.mjs} +20 -35
- package/dist/chunk-J6SWNO7Z.mjs.map +1 -0
- package/dist/{chunk-PFKKGJAQ.mjs → chunk-O6P37PFR.mjs} +4 -4
- package/dist/chunk-O6P37PFR.mjs.map +1 -0
- package/dist/{chunk-KCI46M23.mjs → chunk-OCVZVBQQ.mjs} +1 -1
- package/dist/chunk-OCVZVBQQ.mjs.map +1 -0
- package/dist/{chunk-IXIM7BNO.mjs → chunk-P4C5IRM5.mjs} +1 -1
- package/dist/chunk-P4C5IRM5.mjs.map +1 -0
- package/dist/{chunk-WQEBTH2R.mjs → chunk-TY5VL3SG.mjs} +3 -3
- package/dist/chunk-TY5VL3SG.mjs.map +1 -0
- package/dist/{chunk-X65A3NED.mjs → chunk-URZSIL7X.mjs} +7 -7
- package/dist/chunk-URZSIL7X.mjs.map +1 -0
- package/dist/{chunk-FSRMNQRN.mjs → chunk-VBHI4TJC.mjs} +6 -6
- package/dist/chunk-VBHI4TJC.mjs.map +1 -0
- package/dist/{chunk-EOMOOMUC.mjs → chunk-WLNZL6SP.mjs} +5 -16
- package/dist/chunk-WLNZL6SP.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +660 -759
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -31
- package/dist/index.mjs.map +1 -1
- package/dist/management/management.js +300 -383
- package/dist/management/management.js.map +1 -1
- package/dist/management/management.mjs +10 -10
- package/dist/{memoryUtils-33TZKHSQ.mjs → memoryUtils-2FVXDSS6.mjs} +1 -1
- package/dist/memoryUtils-2FVXDSS6.mjs.map +1 -0
- package/dist/modals/chat-modal/chat-modal.js +86 -31
- package/dist/modals/chat-modal/chat-modal.js.map +1 -1
- package/dist/modals/chat-modal/chat-modal.mjs +6 -6
- package/dist/modelStore-7XYYDCNC.mjs +9 -0
- package/dist/shared/custom-element.js.map +1 -1
- package/dist/shared/custom-element.mjs +1 -1
- package/docs/05_contributing.md +1 -1
- package/docs/api_reference/assets/navigation.js +1 -1
- package/docs/api_reference/assets/search.js +1 -1
- package/docs/api_reference/classes/DebugLogger.html +11 -11
- package/docs/api_reference/classes/FeatureFlagService.html +13 -13
- package/docs/api_reference/classes/NotificationService.html +10 -10
- package/docs/api_reference/classes/StreamingTTSClient.html +9 -9
- package/docs/api_reference/classes/VectorDatabaseService.html +24 -24
- package/docs/api_reference/classes/VectorMigrationService.html +8 -8
- package/docs/api_reference/classes/VoiceService.html +2 -2
- package/docs/api_reference/enums/TTSState.html +2 -2
- package/docs/api_reference/functions/Chat.html +1 -1
- package/docs/api_reference/functions/ChatModal.html +1 -1
- package/docs/api_reference/functions/ChatProvider.html +1 -1
- package/docs/api_reference/functions/FeatureFlagProvider.html +1 -1
- package/docs/api_reference/functions/FeedbackButton.html +1 -1
- package/docs/api_reference/functions/FeedbackModal.html +1 -1
- package/docs/api_reference/functions/InterestsEditor.html +5 -0
- package/docs/api_reference/functions/Management.html +1 -1
- package/docs/api_reference/functions/NotificationProvider.html +1 -1
- package/docs/api_reference/functions/SubscriptionExpiredGuard.html +1 -1
- package/docs/api_reference/functions/SubscriptionExpiredModal.html +1 -1
- package/docs/api_reference/functions/defineCustomElement.html +1 -1
- package/docs/api_reference/functions/getCriticalConfig.html +2 -1
- package/docs/api_reference/functions/getFeatureMatrix.html +1 -1
- package/docs/api_reference/functions/getStreamingTTSClient.html +1 -1
- package/docs/api_reference/functions/getSystemConstants.html +2 -1
- package/docs/api_reference/functions/getTTSState.html +1 -1
- package/docs/api_reference/functions/handleHttpError.html +1 -1
- package/docs/api_reference/functions/handleSubscriptionUpgrade.html +1 -1
- package/docs/api_reference/functions/handleValidationError.html +1 -1
- package/docs/api_reference/functions/initializeCoreSystem.html +2 -1
- package/docs/api_reference/functions/isWorkspaceAdminRole.html +6 -0
- package/docs/api_reference/functions/pauseTTS.html +1 -1
- package/docs/api_reference/functions/previewTierUpgrade.html +1 -1
- package/docs/api_reference/functions/resolveManagementSections.html +2 -0
- package/docs/api_reference/functions/resumeTTS.html +1 -1
- package/docs/api_reference/functions/showInfoNotification.html +1 -1
- package/docs/api_reference/functions/showSuccessNotification.html +1 -1
- package/docs/api_reference/functions/speakWithStreaming.html +1 -1
- package/docs/api_reference/functions/stopTTS.html +1 -1
- package/docs/api_reference/functions/syncSubscriptionWithAPI.html +1 -1
- package/docs/api_reference/functions/updateSubscriptionTier.html +1 -1
- package/docs/api_reference/functions/useFeatureFlag.html +1 -1
- package/docs/api_reference/functions/useFeatureVisibility.html +1 -1
- package/docs/api_reference/functions/useFeatures.html +1 -1
- package/docs/api_reference/functions/useGatewayHealth.html +1 -1
- package/docs/api_reference/functions/useGatewayMemory.html +1 -1
- package/docs/api_reference/functions/useGatewayModels.html +1 -1
- package/docs/api_reference/functions/useGlobalTTS.html +1 -1
- package/docs/api_reference/functions/useManagementAccess.html +2 -0
- package/docs/api_reference/functions/useNotification.html +1 -1
- package/docs/api_reference/functions/useNotificationService.html +1 -1
- package/docs/api_reference/functions/useTTS.html +1 -1
- package/docs/api_reference/functions/useVectorStore.html +1 -1
- package/docs/api_reference/functions/useVoiceStore.html +2 -2
- package/docs/api_reference/functions/useVoices.html +1 -1
- package/docs/api_reference/functions/validateEnvironment.html +2 -1
- package/docs/api_reference/functions/validateSystemIntegrity.html +2 -1
- package/docs/api_reference/index.html +219 -155
- package/docs/api_reference/interfaces/AIChatRequest.html +2 -2
- package/docs/api_reference/interfaces/AIChatResponse.html +2 -2
- package/docs/api_reference/interfaces/AIGenerateRequest.html +2 -2
- package/docs/api_reference/interfaces/AIGenerateResponse.html +2 -2
- package/docs/api_reference/interfaces/AIMessage.html +2 -2
- package/docs/api_reference/interfaces/AIModel.html +2 -2
- package/docs/api_reference/interfaces/AIProviderConfig.html +5 -2
- package/docs/api_reference/interfaces/ChatConfig.html +3 -3
- package/docs/api_reference/interfaces/ChatModalProps.html +3 -3
- package/docs/api_reference/interfaces/CreateMemoryOptions.html +2 -2
- package/docs/api_reference/interfaces/FeatureEvaluation.html +7 -7
- package/docs/api_reference/interfaces/FeatureFlagConfig.html +9 -9
- package/docs/api_reference/interfaces/FeatureFlagContextValue.html +8 -8
- package/docs/api_reference/interfaces/FeatureFlagProviderProps.html +2 -2
- package/docs/api_reference/interfaces/FeedbackButtonProps.html +10 -10
- package/docs/api_reference/interfaces/FeedbackCategories.html +2 -2
- package/docs/api_reference/interfaces/FeedbackModalProps.html +2 -2
- package/docs/api_reference/interfaces/FeedbackPriorities.html +2 -2
- package/docs/api_reference/interfaces/FeedbackRequest.html +2 -2
- package/docs/api_reference/interfaces/FeedbackResponse.html +2 -2
- package/docs/api_reference/interfaces/FileUploadResult.html +2 -2
- package/docs/api_reference/interfaces/GatewayChatRequest.html +3 -2
- package/docs/api_reference/interfaces/GatewayChatResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayContract.html +2 -2
- package/docs/api_reference/interfaces/GatewayGenerateRequest.html +2 -2
- package/docs/api_reference/interfaces/GatewayGenerateResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayHealthResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayMemoryRecord.html +2 -2
- package/docs/api_reference/interfaces/GatewayMemoryResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayMessage.html +2 -2
- package/docs/api_reference/interfaces/GatewayMessageContent.html +2 -2
- package/docs/api_reference/interfaces/GatewayModel.html +2 -2
- package/docs/api_reference/interfaces/GatewayModelsResponse.html +2 -2
- package/docs/api_reference/interfaces/ManagementAccess.html +5 -0
- package/docs/api_reference/interfaces/ManagementAccessInput.html +5 -0
- package/docs/api_reference/interfaces/ManagementLink.html +7 -0
- package/docs/api_reference/interfaces/ManagementProps.html +22 -0
- package/docs/api_reference/interfaces/ManagementSectionDef.html +10 -0
- package/docs/api_reference/interfaces/MemorySearchFilters.html +2 -2
- package/docs/api_reference/interfaces/MigrationProgress.html +2 -2
- package/docs/api_reference/interfaces/MigrationStatus.html +2 -2
- package/docs/api_reference/interfaces/NotificationConfig.html +2 -2
- package/docs/api_reference/interfaces/NotificationContextType.html +2 -2
- package/docs/api_reference/interfaces/NotificationProviderProps.html +2 -2
- package/docs/api_reference/interfaces/PackageSettings.html +11 -2
- package/docs/api_reference/interfaces/SearchOptions.html +2 -2
- package/docs/api_reference/interfaces/SearchResult.html +2 -2
- package/docs/api_reference/interfaces/SubscriptionExpiredGuardProps.html +2 -2
- package/docs/api_reference/interfaces/SubscriptionExpiredModalProps.html +2 -2
- package/docs/api_reference/interfaces/TTSOptions.html +2 -2
- package/docs/api_reference/interfaces/TTSProgress.html +2 -2
- package/docs/api_reference/interfaces/TrialUsage.html +2 -2
- package/docs/api_reference/interfaces/UploadRequest.html +3 -3
- package/docs/api_reference/interfaces/UseTTSReturn.html +2 -2
- package/docs/api_reference/interfaces/VectorDocument.html +2 -2
- package/docs/api_reference/interfaces/VectorMemory.html +2 -2
- package/docs/api_reference/interfaces/VectorMemoryMetadata.html +2 -2
- package/docs/api_reference/interfaces/VectorStoreStatus.html +2 -2
- package/docs/api_reference/interfaces/VoiceModelsResponse.html +2 -2
- package/docs/api_reference/interfaces/VoiceState.html +2 -2
- package/docs/api_reference/media/PROTECTION-NOTICE.md +6 -55
- package/docs/api_reference/media/README.md +20 -1
- package/docs/api_reference/modules.html +18 -6
- package/docs/api_reference/types/FeatureKey.html +1 -1
- package/docs/api_reference/types/FeatureMatrix.html +1 -1
- package/docs/api_reference/types/GatewayQueryOptions.html +1 -1
- package/docs/api_reference/types/LogContext.html +1 -1
- package/docs/api_reference/types/ManagementRequest.html +1 -0
- package/docs/api_reference/types/ManagementSectionId.html +2 -0
- package/docs/api_reference/types/SubscriptionTier.html +1 -1
- package/docs/api_reference/variables/DEFAULT_TIER_FEATURES.html +1 -1
- package/docs/api_reference/variables/FeatureFlagContext.html +1 -1
- package/docs/api_reference/variables/MANAGEMENT_SECTIONS.html +1 -0
- package/docs/api_reference/variables/OSS_DEFAULT_FEATURES.html +1 -1
- package/docs/api_reference/variables/SYSTEM_FLAGS.html +2 -1
- package/docs/api_reference/variables/authenticationService.html +1 -1
- package/docs/api_reference/variables/debugLogger-1.html +1 -1
- package/docs/api_reference/variables/featureFlagService-1.html +1 -1
- package/docs/api_reference/variables/notificationService-1.html +1 -1
- package/docs/api_reference/variables/vectorDatabaseService-1.html +1 -1
- package/docs/api_reference/variables/vectorMigrationService-1.html +1 -1
- package/docs/api_reference/variables/voiceService-1.html +1 -1
- package/package.json +1 -1
- package/dist/aiProviderStore-BNZGM6QU.mjs +0 -9
- package/dist/chat-3JAV77HO.mjs +0 -16
- package/dist/chunk-B3HAQC6F.mjs.map +0 -1
- package/dist/chunk-EOMOOMUC.mjs.map +0 -1
- package/dist/chunk-FSRMNQRN.mjs.map +0 -1
- package/dist/chunk-IXIM7BNO.mjs.map +0 -1
- package/dist/chunk-KCI46M23.mjs.map +0 -1
- package/dist/chunk-MIDYEQOS.mjs.map +0 -1
- package/dist/chunk-PFKKGJAQ.mjs.map +0 -1
- package/dist/chunk-QPXG4A5C.mjs.map +0 -1
- package/dist/chunk-QXITTH2X.mjs.map +0 -1
- package/dist/chunk-TTAORNWI.mjs.map +0 -1
- package/dist/chunk-WQEBTH2R.mjs.map +0 -1
- package/dist/chunk-X65A3NED.mjs.map +0 -1
- package/dist/chunk-XC7HDKFW.mjs.map +0 -1
- package/dist/memoryUtils-33TZKHSQ.mjs.map +0 -1
- package/dist/modelStore-FGUGOWTL.mjs +0 -9
- package/docs/api_reference/media/PROTECTION-README.md +0 -39
- /package/dist/{aiProviderStore-BNZGM6QU.mjs.map → aiProviderStore-PEGSX4PK.mjs.map} +0 -0
- /package/dist/{chat-3JAV77HO.mjs.map → chat-MRDQ2WRJ.mjs.map} +0 -0
- /package/dist/{modelStore-FGUGOWTL.mjs.map → modelStore-7XYYDCNC.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IS_STORE_BUILD,
|
|
3
3
|
chat_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-F32P7Q5O.mjs";
|
|
5
5
|
import {
|
|
6
6
|
chat_provider_default
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-URZSIL7X.mjs";
|
|
8
8
|
import "./chunk-ONQMRE2G.mjs";
|
|
9
9
|
import {
|
|
10
10
|
MANAGEMENT_SECTIONS,
|
|
@@ -15,17 +15,17 @@ import {
|
|
|
15
15
|
useGatewayMemory,
|
|
16
16
|
useGatewayModels,
|
|
17
17
|
useManagementAccess
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-HSGQXL4N.mjs";
|
|
19
|
+
import "./chunk-IZX2J65Q.mjs";
|
|
20
|
+
import "./chunk-5KBTOCQZ.mjs";
|
|
21
|
+
import "./chunk-O6P37PFR.mjs";
|
|
22
22
|
import {
|
|
23
23
|
defineCustomElement
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-P4C5IRM5.mjs";
|
|
25
25
|
import {
|
|
26
26
|
FeedbackButton,
|
|
27
27
|
chat_modal_default
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-VBHI4TJC.mjs";
|
|
29
29
|
import {
|
|
30
30
|
FeedbackModal,
|
|
31
31
|
StreamingTTSClient,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
useTTS,
|
|
43
43
|
useVoiceStore,
|
|
44
44
|
voiceService
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-WLNZL6SP.mjs";
|
|
46
46
|
import {
|
|
47
47
|
DEFAULT_TIER_FEATURES,
|
|
48
48
|
FeatureFlagContext,
|
|
@@ -61,19 +61,19 @@ import {
|
|
|
61
61
|
useVectorStore,
|
|
62
62
|
vectorDatabaseService,
|
|
63
63
|
vectorMigrationService
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-J6SWNO7Z.mjs";
|
|
65
65
|
import {
|
|
66
66
|
usePackageSettingsStore,
|
|
67
67
|
usePreferencesStore
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-TY5VL3SG.mjs";
|
|
69
69
|
import {
|
|
70
70
|
authenticationService,
|
|
71
71
|
useAuthenticationStore
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-CQJGUYRW.mjs";
|
|
73
73
|
import {
|
|
74
74
|
DebugLogger,
|
|
75
75
|
debugLogger
|
|
76
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-OCVZVBQQ.mjs";
|
|
77
77
|
import "./chunk-BJTO5JO5.mjs";
|
|
78
78
|
|
|
79
79
|
// src/management/components/InterestsEditor.tsx
|
|
@@ -613,26 +613,11 @@ var showInfoNotification = (message, context) => {
|
|
|
613
613
|
};
|
|
614
614
|
|
|
615
615
|
// src/core/license-validator.ts
|
|
616
|
-
var getNodeEnvironment = () => {
|
|
617
|
-
const globalProcess = globalThis.process;
|
|
618
|
-
return globalProcess?.env?.NODE_ENV;
|
|
619
|
-
};
|
|
620
616
|
function validateSystemIntegrity() {
|
|
621
|
-
|
|
622
|
-
"BL-CORE-2025",
|
|
623
|
-
"BANDIT-ENGINE-LICENSED",
|
|
624
|
-
"BURTSON-VALIDATED-SYSTEM"
|
|
625
|
-
];
|
|
626
|
-
if (getNodeEnvironment() !== "production") {
|
|
627
|
-
console.debug("System integrity check passed - Licensed to Burtson Labs");
|
|
628
|
-
}
|
|
629
|
-
return licenseMarkers.length > 0;
|
|
617
|
+
return true;
|
|
630
618
|
}
|
|
631
619
|
var CORE_SYSTEM_TOKEN = "BL-SYSTEM-1751692562421";
|
|
632
620
|
function initializeCoreSystem() {
|
|
633
|
-
if (!validateSystemIntegrity()) {
|
|
634
|
-
throw new Error("System integrity check failed - Contact legal@burtson.ai");
|
|
635
|
-
}
|
|
636
621
|
return CORE_SYSTEM_TOKEN;
|
|
637
622
|
}
|
|
638
623
|
|
|
@@ -658,8 +643,7 @@ function getSystemConstants() {
|
|
|
658
643
|
|
|
659
644
|
// src/utils/critical-helpers.ts
|
|
660
645
|
function validateEnvironment() {
|
|
661
|
-
|
|
662
|
-
return requiredKeys.every((key) => key.includes("BL") || key.includes("BURTSON"));
|
|
646
|
+
return false;
|
|
663
647
|
}
|
|
664
648
|
function getCriticalConfig() {
|
|
665
649
|
return {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/management/components/InterestsEditor.tsx","../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":["import { useEffect } from \"react\";\nimport { Box, Chip, Typography } from \"@mui/material\";\nimport { usePreferencesStore } from \"../../store/preferencesStore\";\nimport { TOPICS as STARTER_TOPICS } from \"../../prompts/getStableQuestionPrompt\";\n\nexport interface InterestsEditorProps {\n title?: string | null;\n description?: string | null;\n}\n\n/**\n * Topic picker for the user's interests. Self-contained — hydrates the\n * preferences store on mount so it works anywhere (e.g. the account profile\n * page, outside the chat). Edits persist to the same store the home-screen\n * conversation starters read from.\n */\nconst InterestsEditor = ({\n title = \"Your interests\",\n description = \"Pick the topics you care about — your home-screen conversation starters lean toward them.\",\n}: InterestsEditorProps) => {\n const preferences = usePreferencesStore((s) => s.preferences);\n const updatePreference = usePreferencesStore((s) => s.updatePreference);\n const loadPreferences = usePreferencesStore((s) => s.loadPreferences);\n const isLoaded = usePreferencesStore((s) => s.isLoaded);\n\n useEffect(() => {\n if (!isLoaded) {\n void loadPreferences();\n }\n }, [isLoaded, loadPreferences]);\n\n const interests = preferences?.interests ?? [];\n\n return (\n <Box>\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 600, color: \"text.primary\" }}>\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1.5 }}>\n {description}\n </Typography>\n )}\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 1 }}>\n {STARTER_TOPICS.map((topic) => {\n const selected = interests.includes(topic);\n return (\n <Chip\n key={topic}\n label={topic}\n size=\"small\"\n color={selected ? \"primary\" : \"default\"}\n variant={selected ? \"filled\" : \"outlined\"}\n onClick={() => {\n const next = selected\n ? interests.filter((t) => t !== topic)\n : [...interests, topic];\n updatePreference(\"interests\", next);\n }}\n sx={{ textTransform: \"capitalize\" }}\n />\n );\n })}\n </Box>\n </Box>\n );\n};\n\nexport default InterestsEditor;\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-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 { IS_STORE_BUILD } from \"../utils/storeBuild\";\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 { AlertTriangle as WarningIcon, Home as HomeIcon, CreditCard as CreditCardIcon } from '@burtson-labs/icons/react';\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. The store build\n // has no renew action (below), so it carries no such link.\n if (!IS_STORE_BUILD) 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 size={32} color=\"warning\" />\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 {IS_STORE_BUILD\n ? 'Premium features are unavailable on this account right now.'\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 {/* No renew / purchase action in the App Store / Play build (3.1.3(f)). */}\n {!IS_STORE_BUILD && (\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 )}\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","useEffect","Typography","Box","jsx","jsxs","jsxs","jsx","Box","Typography","useEffect","jsx","jsxs","useEffect","jsxs","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/management/components/InterestsEditor.tsx","../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 * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\nimport { useEffect } from \"react\";\nimport { Box, Chip, Typography } from \"@mui/material\";\nimport { usePreferencesStore } from \"../../store/preferencesStore\";\nimport { TOPICS as STARTER_TOPICS } from \"../../prompts/getStableQuestionPrompt\";\n\nexport interface InterestsEditorProps {\n title?: string | null;\n description?: string | null;\n}\n\n/**\n * Topic picker for the user's interests. Self-contained — hydrates the\n * preferences store on mount so it works anywhere (e.g. the account profile\n * page, outside the chat). Edits persist to the same store the home-screen\n * conversation starters read from.\n */\nconst InterestsEditor = ({\n title = \"Your interests\",\n description = \"Pick the topics you care about — your home-screen conversation starters lean toward them.\",\n}: InterestsEditorProps) => {\n const preferences = usePreferencesStore((s) => s.preferences);\n const updatePreference = usePreferencesStore((s) => s.updatePreference);\n const loadPreferences = usePreferencesStore((s) => s.loadPreferences);\n const isLoaded = usePreferencesStore((s) => s.isLoaded);\n\n useEffect(() => {\n if (!isLoaded) {\n void loadPreferences();\n }\n }, [isLoaded, loadPreferences]);\n\n const interests = preferences?.interests ?? [];\n\n return (\n <Box>\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 600, color: \"text.primary\" }}>\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1.5 }}>\n {description}\n </Typography>\n )}\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 1 }}>\n {STARTER_TOPICS.map((topic) => {\n const selected = interests.includes(topic);\n return (\n <Chip\n key={topic}\n label={topic}\n size=\"small\"\n color={selected ? \"primary\" : \"default\"}\n variant={selected ? \"filled\" : \"outlined\"}\n onClick={() => {\n const next = selected\n ? interests.filter((t) => t !== topic)\n : [...interests, topic];\n updatePreference(\"interests\", next);\n }}\n sx={{ textTransform: \"capitalize\" }}\n />\n );\n })}\n </Box>\n </Box>\n );\n};\n\nexport default InterestsEditor;\n","/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\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 * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\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 * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n\nimport { IS_STORE_BUILD } from \"../utils/storeBuild\";\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 { AlertTriangle as WarningIcon, Home as HomeIcon, CreditCard as CreditCardIcon } from '@burtson-labs/icons/react';\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. The store build\n // has no renew action (below), so it carries no such link.\n if (!IS_STORE_BUILD) 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 size={32} color=\"warning\" />\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 {IS_STORE_BUILD\n ? 'Premium features are unavailable on this account right now.'\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 {/* No renew / purchase action in the App Store / Play build (3.1.3(f)). */}\n {!IS_STORE_BUILD && (\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 )}\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default SubscriptionExpiredModal;\n","/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\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 * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\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 * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n/** @deprecated Compatibility marker only; not a security or license check. */\nexport const SYSTEM_INTEGRITY_CHECK = '© 2025 Burtson Labs - Core License Validator';\n\n/** @deprecated Always returns true. Does not validate integrity, licensing, or trust. */\nexport function validateSystemIntegrity(): boolean {\n return true;\n}\n\n/** @deprecated Public compatibility constant. Not a credential or authorization token. */\nexport const CORE_SYSTEM_TOKEN = 'BL-SYSTEM-1751692562421';\n\n/** @deprecated Returns the legacy compatibility constant without side effects. */\nexport function initializeCoreSystem() {\n return CORE_SYSTEM_TOKEN;\n}\n\nexport default {\n validateSystemIntegrity,\n initializeCoreSystem,\n CORE_SYSTEM_TOKEN,\n SYSTEM_INTEGRITY_CHECK\n};\n","/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n\n/** @deprecated Legacy compatibility metadata; none of these values validates a license or system. */\nexport const SYSTEM_VERSION = '1.1.3-BL-LICENSED';\nexport const CORE_HASH = 'BL-' + '568D8C3C';\nexport const VALIDATION_KEY = 'BURTSON-LABS-2025';\n\n/** @deprecated Static compatibility strings, not credentials. */\nexport const REQUIRED_TOKENS = [\n 'BL-SYSTEM-INIT',\n 'BANDIT-CORE-LICENSED', \n 'BURTSON-VALIDATION-OK'\n];\n\n/** @deprecated Historical metadata only. These flags do not control runtime 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/** @deprecated Returns historical metadata without performing validation. */\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","/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n\n/** @deprecated Always returns false for compatibility; does not inspect the environment. */\nexport function validateEnvironment(): boolean {\n return false;\n}\n\n/** @deprecated Historical metadata only; not a security configuration. */\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/** @deprecated Returns the error unchanged. No license violation detection is performed. */\nexport function handleSystemError(error: Error) {\n return error;\n}\n\n/** @deprecated Historical metadata only. */\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","useEffect","Typography","Box","jsx","jsxs","useEffect","jsx","jsxs","useEffect"]}
|