ugly-app 0.1.0
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/.claude/settings.local.json +18 -0
- package/.env.example +9 -0
- package/.yarn-metadata.json +113 -0
- package/README.md +709 -0
- package/dist/cli/authCommands.d.ts +6 -0
- package/dist/cli/authCommands.d.ts.map +1 -0
- package/dist/cli/authCommands.js +50 -0
- package/dist/cli/authCommands.js.map +1 -0
- package/dist/cli/build.d.ts +2 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +26 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/configure.d.ts +2 -0
- package/dist/cli/configure.d.ts.map +1 -0
- package/dist/cli/configure.js +53 -0
- package/dist/cli/configure.js.map +1 -0
- package/dist/cli/dev.d.ts +2 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +66 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +340 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/initDb.d.ts +2 -0
- package/dist/cli/initDb.d.ts.map +1 -0
- package/dist/cli/initDb.js +110 -0
- package/dist/cli/initDb.js.map +1 -0
- package/dist/cli/logQuery.d.ts +12 -0
- package/dist/cli/logQuery.d.ts.map +1 -0
- package/dist/cli/logQuery.js +176 -0
- package/dist/cli/logQuery.js.map +1 -0
- package/dist/cli/migrate.d.ts +4 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +62 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/publishAssets.d.ts +6 -0
- package/dist/cli/publishAssets.d.ts.map +1 -0
- package/dist/cli/publishAssets.js +87 -0
- package/dist/cli/publishAssets.js.map +1 -0
- package/dist/cli/purgeAssets.d.ts +2 -0
- package/dist/cli/purgeAssets.d.ts.map +1 -0
- package/dist/cli/purgeAssets.js +36 -0
- package/dist/cli/purgeAssets.js.map +1 -0
- package/dist/cli/scaffold.d.ts +2 -0
- package/dist/cli/scaffold.d.ts.map +1 -0
- package/dist/cli/scaffold.js +37 -0
- package/dist/cli/scaffold.js.map +1 -0
- package/dist/cli/serverLogQuery.d.ts +6 -0
- package/dist/cli/serverLogQuery.d.ts.map +1 -0
- package/dist/cli/serverLogQuery.js +76 -0
- package/dist/cli/serverLogQuery.js.map +1 -0
- package/dist/cli/storageClient.d.ts +3 -0
- package/dist/cli/storageClient.d.ts.map +1 -0
- package/dist/cli/storageClient.js +22 -0
- package/dist/cli/storageClient.js.map +1 -0
- package/dist/cli/uglyappConfig.d.ts +29 -0
- package/dist/cli/uglyappConfig.d.ts.map +1 -0
- package/dist/cli/uglyappConfig.js +125 -0
- package/dist/cli/uglyappConfig.js.map +1 -0
- package/dist/client/AppProvider.d.ts +32 -0
- package/dist/client/AppProvider.d.ts.map +1 -0
- package/dist/client/AppProvider.js +126 -0
- package/dist/client/AppProvider.js.map +1 -0
- package/dist/client/ErrorLog.d.ts +16 -0
- package/dist/client/ErrorLog.d.ts.map +1 -0
- package/dist/client/ErrorLog.js +28 -0
- package/dist/client/ErrorLog.js.map +1 -0
- package/dist/client/FeedbackContext.d.ts +7 -0
- package/dist/client/FeedbackContext.d.ts.map +1 -0
- package/dist/client/FeedbackContext.js +15 -0
- package/dist/client/FeedbackContext.js.map +1 -0
- package/dist/client/Logger.d.ts +2 -0
- package/dist/client/Logger.d.ts.map +1 -0
- package/dist/client/Logger.js +72 -0
- package/dist/client/Logger.js.map +1 -0
- package/dist/client/LoginPopup.d.ts +7 -0
- package/dist/client/LoginPopup.d.ts.map +1 -0
- package/dist/client/LoginPopup.js +55 -0
- package/dist/client/LoginPopup.js.map +1 -0
- package/dist/client/Router.d.ts +56 -0
- package/dist/client/Router.d.ts.map +1 -0
- package/dist/client/Router.js +224 -0
- package/dist/client/Router.js.map +1 -0
- package/dist/client/Screenshot.d.ts +7 -0
- package/dist/client/Screenshot.d.ts.map +1 -0
- package/dist/client/Screenshot.js +54 -0
- package/dist/client/Screenshot.js.map +1 -0
- package/dist/client/ViewFlipper.d.ts +16 -0
- package/dist/client/ViewFlipper.d.ts.map +1 -0
- package/dist/client/ViewFlipper.js +156 -0
- package/dist/client/ViewFlipper.js.map +1 -0
- package/dist/client/animation/Animated.d.ts +14 -0
- package/dist/client/animation/Animated.d.ts.map +1 -0
- package/dist/client/animation/Animated.js +97 -0
- package/dist/client/animation/Animated.js.map +1 -0
- package/dist/client/animation/animatedValue.d.ts +41 -0
- package/dist/client/animation/animatedValue.d.ts.map +1 -0
- package/dist/client/animation/animatedValue.js +123 -0
- package/dist/client/animation/animatedValue.js.map +1 -0
- package/dist/client/animations/FadeIn.d.ts +6 -0
- package/dist/client/animations/FadeIn.d.ts.map +1 -0
- package/dist/client/animations/FadeIn.js +24 -0
- package/dist/client/animations/FadeIn.js.map +1 -0
- package/dist/client/animations/SlideFromBottom.d.ts +6 -0
- package/dist/client/animations/SlideFromBottom.d.ts.map +1 -0
- package/dist/client/animations/SlideFromBottom.js +24 -0
- package/dist/client/animations/SlideFromBottom.js.map +1 -0
- package/dist/client/animations/SlideFromRight.d.ts +6 -0
- package/dist/client/animations/SlideFromRight.d.ts.map +1 -0
- package/dist/client/animations/SlideFromRight.js +24 -0
- package/dist/client/animations/SlideFromRight.js.map +1 -0
- package/dist/client/audio/AudioPlayer.d.ts +11 -0
- package/dist/client/audio/AudioPlayer.d.ts.map +1 -0
- package/dist/client/audio/AudioPlayer.js +51 -0
- package/dist/client/audio/AudioPlayer.js.map +1 -0
- package/dist/client/audio/AudioRecorder.d.ts +11 -0
- package/dist/client/audio/AudioRecorder.d.ts.map +1 -0
- package/dist/client/audio/AudioRecorder.js +66 -0
- package/dist/client/audio/AudioRecorder.js.map +1 -0
- package/dist/client/audio/audioPlayer.worklet.d.ts +2 -0
- package/dist/client/audio/audioPlayer.worklet.d.ts.map +1 -0
- package/dist/client/audio/audioPlayer.worklet.js +46 -0
- package/dist/client/audio/audioPlayer.worklet.js.map +1 -0
- package/dist/client/audio/useSTT.d.ts +19 -0
- package/dist/client/audio/useSTT.d.ts.map +1 -0
- package/dist/client/audio/useSTT.js +91 -0
- package/dist/client/audio/useSTT.js.map +1 -0
- package/dist/client/audio/useTTS.d.ts +17 -0
- package/dist/client/audio/useTTS.d.ts.map +1 -0
- package/dist/client/audio/useTTS.js +70 -0
- package/dist/client/audio/useTTS.js.map +1 -0
- package/dist/client/components/Button.d.ts +22 -0
- package/dist/client/components/Button.d.ts.map +1 -0
- package/dist/client/components/Button.js +27 -0
- package/dist/client/components/Button.js.map +1 -0
- package/dist/client/components/Card.d.ts +8 -0
- package/dist/client/components/Card.d.ts.map +1 -0
- package/dist/client/components/Card.js +6 -0
- package/dist/client/components/Card.js.map +1 -0
- package/dist/client/components/EnumInput.d.ts +16 -0
- package/dist/client/components/EnumInput.d.ts.map +1 -0
- package/dist/client/components/EnumInput.js +11 -0
- package/dist/client/components/EnumInput.js.map +1 -0
- package/dist/client/components/FeedbackButton.d.ts +9 -0
- package/dist/client/components/FeedbackButton.d.ts.map +1 -0
- package/dist/client/components/FeedbackButton.js +112 -0
- package/dist/client/components/FeedbackButton.js.map +1 -0
- package/dist/client/components/Header.d.ts +10 -0
- package/dist/client/components/Header.d.ts.map +1 -0
- package/dist/client/components/Header.js +12 -0
- package/dist/client/components/Header.js.map +1 -0
- package/dist/client/components/Image.d.ts +20 -0
- package/dist/client/components/Image.d.ts.map +1 -0
- package/dist/client/components/Image.js +12 -0
- package/dist/client/components/Image.js.map +1 -0
- package/dist/client/components/Input.d.ts +14 -0
- package/dist/client/components/Input.d.ts.map +1 -0
- package/dist/client/components/Input.js +19 -0
- package/dist/client/components/Input.js.map +1 -0
- package/dist/client/components/Modal.d.ts +9 -0
- package/dist/client/components/Modal.d.ts.map +1 -0
- package/dist/client/components/Modal.js +19 -0
- package/dist/client/components/Modal.js.map +1 -0
- package/dist/client/components/PageLayout.d.ts +9 -0
- package/dist/client/components/PageLayout.d.ts.map +1 -0
- package/dist/client/components/PageLayout.js +6 -0
- package/dist/client/components/PageLayout.js.map +1 -0
- package/dist/client/components/Panel.d.ts +8 -0
- package/dist/client/components/Panel.d.ts.map +1 -0
- package/dist/client/components/Panel.js +5 -0
- package/dist/client/components/Panel.js.map +1 -0
- package/dist/client/components/PopupPanel.d.ts +9 -0
- package/dist/client/components/PopupPanel.d.ts.map +1 -0
- package/dist/client/components/PopupPanel.js +5 -0
- package/dist/client/components/PopupPanel.js.map +1 -0
- package/dist/client/components/Pressable.d.ts +14 -0
- package/dist/client/components/Pressable.d.ts.map +1 -0
- package/dist/client/components/Pressable.js +8 -0
- package/dist/client/components/Pressable.js.map +1 -0
- package/dist/client/components/ScrollView.d.ts +9 -0
- package/dist/client/components/ScrollView.d.ts.map +1 -0
- package/dist/client/components/ScrollView.js +7 -0
- package/dist/client/components/ScrollView.js.map +1 -0
- package/dist/client/components/SettingGroup.d.ts +10 -0
- package/dist/client/components/SettingGroup.d.ts.map +1 -0
- package/dist/client/components/SettingGroup.js +8 -0
- package/dist/client/components/SettingGroup.js.map +1 -0
- package/dist/client/components/Text.d.ts +21 -0
- package/dist/client/components/Text.d.ts.map +1 -0
- package/dist/client/components/Text.js +43 -0
- package/dist/client/components/Text.js.map +1 -0
- package/dist/client/components/Toast.d.ts +10 -0
- package/dist/client/components/Toast.d.ts.map +1 -0
- package/dist/client/components/Toast.js +21 -0
- package/dist/client/components/Toast.js.map +1 -0
- package/dist/client/components/View.d.ts +9 -0
- package/dist/client/components/View.d.ts.map +1 -0
- package/dist/client/components/View.js +5 -0
- package/dist/client/components/View.js.map +1 -0
- package/dist/client/components/index.d.ts +33 -0
- package/dist/client/components/index.d.ts.map +1 -0
- package/dist/client/components/index.js +17 -0
- package/dist/client/components/index.js.map +1 -0
- package/dist/client/components/zIndex.d.ts +10 -0
- package/dist/client/components/zIndex.d.ts.map +1 -0
- package/dist/client/components/zIndex.js +12 -0
- package/dist/client/components/zIndex.js.map +1 -0
- package/dist/client/createSocket.d.ts +26 -0
- package/dist/client/createSocket.d.ts.map +1 -0
- package/dist/client/createSocket.js +138 -0
- package/dist/client/createSocket.js.map +1 -0
- package/dist/client/index.d.ts +27 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/playwright/index.d.ts +16 -0
- package/dist/playwright/index.d.ts.map +1 -0
- package/dist/playwright/index.js +32 -0
- package/dist/playwright/index.js.map +1 -0
- package/dist/server/App.d.ts +43 -0
- package/dist/server/App.d.ts.map +1 -0
- package/dist/server/App.js +215 -0
- package/dist/server/App.js.map +1 -0
- package/dist/server/Auth.d.ts +21 -0
- package/dist/server/Auth.d.ts.map +1 -0
- package/dist/server/Auth.js +171 -0
- package/dist/server/Auth.js.map +1 -0
- package/dist/server/Cache.d.ts +38 -0
- package/dist/server/Cache.d.ts.map +1 -0
- package/dist/server/Cache.js +113 -0
- package/dist/server/Cache.js.map +1 -0
- package/dist/server/ChangeStream.d.ts +22 -0
- package/dist/server/ChangeStream.d.ts.map +1 -0
- package/dist/server/ChangeStream.js +93 -0
- package/dist/server/ChangeStream.js.map +1 -0
- package/dist/server/DB.d.ts +17 -0
- package/dist/server/DB.d.ts.map +1 -0
- package/dist/server/DB.js +442 -0
- package/dist/server/DB.js.map +1 -0
- package/dist/server/Email.d.ts +22 -0
- package/dist/server/Email.d.ts.map +1 -0
- package/dist/server/Email.js +64 -0
- package/dist/server/Email.js.map +1 -0
- package/dist/server/EmailTemplate.d.ts +17 -0
- package/dist/server/EmailTemplate.d.ts.map +1 -0
- package/dist/server/EmailTemplate.js +29 -0
- package/dist/server/EmailTemplate.js.map +1 -0
- package/dist/server/FeedbackReport.d.ts +19 -0
- package/dist/server/FeedbackReport.d.ts.map +1 -0
- package/dist/server/FeedbackReport.js +94 -0
- package/dist/server/FeedbackReport.js.map +1 -0
- package/dist/server/ImageGen.d.ts +5 -0
- package/dist/server/ImageGen.d.ts.map +1 -0
- package/dist/server/ImageGen.js +5 -0
- package/dist/server/ImageGen.js.map +1 -0
- package/dist/server/Logging.d.ts +59 -0
- package/dist/server/Logging.d.ts.map +1 -0
- package/dist/server/Logging.js +293 -0
- package/dist/server/Logging.js.map +1 -0
- package/dist/server/Nats.d.ts +56 -0
- package/dist/server/Nats.d.ts.map +1 -0
- package/dist/server/Nats.js +162 -0
- package/dist/server/Nats.js.map +1 -0
- package/dist/server/NatsStore.d.ts +26 -0
- package/dist/server/NatsStore.d.ts.map +1 -0
- package/dist/server/NatsStore.js +86 -0
- package/dist/server/NatsStore.js.map +1 -0
- package/dist/server/PushNotification.d.ts +33 -0
- package/dist/server/PushNotification.d.ts.map +1 -0
- package/dist/server/PushNotification.js +131 -0
- package/dist/server/PushNotification.js.map +1 -0
- package/dist/server/RateLimit.d.ts +28 -0
- package/dist/server/RateLimit.d.ts.map +1 -0
- package/dist/server/RateLimit.js +101 -0
- package/dist/server/RateLimit.js.map +1 -0
- package/dist/server/Redis.d.ts +61 -0
- package/dist/server/Redis.d.ts.map +1 -0
- package/dist/server/Redis.js +226 -0
- package/dist/server/Redis.js.map +1 -0
- package/dist/server/Router.d.ts +27 -0
- package/dist/server/Router.d.ts.map +1 -0
- package/dist/server/Router.js +71 -0
- package/dist/server/Router.js.map +1 -0
- package/dist/server/Socket.d.ts +8 -0
- package/dist/server/Socket.d.ts.map +1 -0
- package/dist/server/Socket.js +278 -0
- package/dist/server/Socket.js.map +1 -0
- package/dist/server/SpendTracker.d.ts +18 -0
- package/dist/server/SpendTracker.d.ts.map +1 -0
- package/dist/server/SpendTracker.js +110 -0
- package/dist/server/SpendTracker.js.map +1 -0
- package/dist/server/Storage.d.ts +16 -0
- package/dist/server/Storage.d.ts.map +1 -0
- package/dist/server/Storage.js +95 -0
- package/dist/server/Storage.js.map +1 -0
- package/dist/server/TextGen.d.ts +5 -0
- package/dist/server/TextGen.d.ts.map +1 -0
- package/dist/server/TextGen.js +6 -0
- package/dist/server/TextGen.js.map +1 -0
- package/dist/server/WorkerQueue.d.ts +27 -0
- package/dist/server/WorkerQueue.d.ts.map +1 -0
- package/dist/server/WorkerQueue.js +147 -0
- package/dist/server/WorkerQueue.js.map +1 -0
- package/dist/server/ai/ImageGenClient.d.ts +6 -0
- package/dist/server/ai/ImageGenClient.d.ts.map +1 -0
- package/dist/server/ai/ImageGenClient.js +29 -0
- package/dist/server/ai/ImageGenClient.js.map +1 -0
- package/dist/server/ai/ProviderBalance.d.ts +15 -0
- package/dist/server/ai/ProviderBalance.d.ts.map +1 -0
- package/dist/server/ai/ProviderBalance.js +110 -0
- package/dist/server/ai/ProviderBalance.js.map +1 -0
- package/dist/server/ai/ProviderSelector.d.ts +13 -0
- package/dist/server/ai/ProviderSelector.d.ts.map +1 -0
- package/dist/server/ai/ProviderSelector.js +25 -0
- package/dist/server/ai/ProviderSelector.js.map +1 -0
- package/dist/server/ai/TextGenClient.d.ts +9 -0
- package/dist/server/ai/TextGenClient.d.ts.map +1 -0
- package/dist/server/ai/TextGenClient.js +72 -0
- package/dist/server/ai/TextGenClient.js.map +1 -0
- package/dist/server/ai/fallbacks.d.ts +9 -0
- package/dist/server/ai/fallbacks.d.ts.map +1 -0
- package/dist/server/ai/fallbacks.js +77 -0
- package/dist/server/ai/fallbacks.js.map +1 -0
- package/dist/server/ai/index.d.ts +12 -0
- package/dist/server/ai/index.d.ts.map +1 -0
- package/dist/server/ai/index.js +37 -0
- package/dist/server/ai/index.js.map +1 -0
- package/dist/server/ai/providers/Claude.d.ts +3 -0
- package/dist/server/ai/providers/Claude.d.ts.map +1 -0
- package/dist/server/ai/providers/Claude.js +124 -0
- package/dist/server/ai/providers/Claude.js.map +1 -0
- package/dist/server/ai/providers/FAL.d.ts +3 -0
- package/dist/server/ai/providers/FAL.d.ts.map +1 -0
- package/dist/server/ai/providers/FAL.js +24 -0
- package/dist/server/ai/providers/FAL.js.map +1 -0
- package/dist/server/ai/providers/Fireworks.d.ts +3 -0
- package/dist/server/ai/providers/Fireworks.d.ts.map +1 -0
- package/dist/server/ai/providers/Fireworks.js +79 -0
- package/dist/server/ai/providers/Fireworks.js.map +1 -0
- package/dist/server/ai/providers/Google.d.ts +3 -0
- package/dist/server/ai/providers/Google.d.ts.map +1 -0
- package/dist/server/ai/providers/Google.js +105 -0
- package/dist/server/ai/providers/Google.js.map +1 -0
- package/dist/server/ai/providers/GoogleImage.d.ts +3 -0
- package/dist/server/ai/providers/GoogleImage.d.ts.map +1 -0
- package/dist/server/ai/providers/GoogleImage.js +24 -0
- package/dist/server/ai/providers/GoogleImage.js.map +1 -0
- package/dist/server/ai/providers/Groq.d.ts +3 -0
- package/dist/server/ai/providers/Groq.d.ts.map +1 -0
- package/dist/server/ai/providers/Groq.js +99 -0
- package/dist/server/ai/providers/Groq.js.map +1 -0
- package/dist/server/ai/providers/Kie.d.ts +3 -0
- package/dist/server/ai/providers/Kie.d.ts.map +1 -0
- package/dist/server/ai/providers/Kie.js +79 -0
- package/dist/server/ai/providers/Kie.js.map +1 -0
- package/dist/server/ai/providers/KieImage.d.ts +3 -0
- package/dist/server/ai/providers/KieImage.d.ts.map +1 -0
- package/dist/server/ai/providers/KieImage.js +50 -0
- package/dist/server/ai/providers/KieImage.js.map +1 -0
- package/dist/server/ai/providers/OpenAIText.d.ts +3 -0
- package/dist/server/ai/providers/OpenAIText.d.ts.map +1 -0
- package/dist/server/ai/providers/OpenAIText.js +103 -0
- package/dist/server/ai/providers/OpenAIText.js.map +1 -0
- package/dist/server/ai/providers/Together.d.ts +3 -0
- package/dist/server/ai/providers/Together.d.ts.map +1 -0
- package/dist/server/ai/providers/Together.js +99 -0
- package/dist/server/ai/providers/Together.js.map +1 -0
- package/dist/server/ai/providers/TogetherImage.d.ts +3 -0
- package/dist/server/ai/providers/TogetherImage.d.ts.map +1 -0
- package/dist/server/ai/providers/TogetherImage.js +24 -0
- package/dist/server/ai/providers/TogetherImage.js.map +1 -0
- package/dist/server/ai/providers/Wavespeed.d.ts +3 -0
- package/dist/server/ai/providers/Wavespeed.d.ts.map +1 -0
- package/dist/server/ai/providers/Wavespeed.js +53 -0
- package/dist/server/ai/providers/Wavespeed.js.map +1 -0
- package/dist/server/ai/registry.d.ts +10 -0
- package/dist/server/ai/registry.d.ts.map +1 -0
- package/dist/server/ai/registry.js +26 -0
- package/dist/server/ai/registry.js.map +1 -0
- package/dist/server/ai/types.d.ts +67 -0
- package/dist/server/ai/types.d.ts.map +1 -0
- package/dist/server/ai/types.js +17 -0
- package/dist/server/ai/types.js.map +1 -0
- package/dist/server/audio/STTStream.d.ts +12 -0
- package/dist/server/audio/STTStream.d.ts.map +1 -0
- package/dist/server/audio/STTStream.js +59 -0
- package/dist/server/audio/STTStream.js.map +1 -0
- package/dist/server/audio/TTSStream.d.ts +16 -0
- package/dist/server/audio/TTSStream.d.ts.map +1 -0
- package/dist/server/audio/TTSStream.js +151 -0
- package/dist/server/audio/TTSStream.js.map +1 -0
- package/dist/server/audio/index.d.ts +5 -0
- package/dist/server/audio/index.d.ts.map +1 -0
- package/dist/server/audio/index.js +14 -0
- package/dist/server/audio/index.js.map +1 -0
- package/dist/server/audio/resample.d.ts +7 -0
- package/dist/server/audio/resample.d.ts.map +1 -0
- package/dist/server/audio/resample.js +17 -0
- package/dist/server/audio/resample.js.map +1 -0
- package/dist/server/audio/stt/GroqWhisper.d.ts +3 -0
- package/dist/server/audio/stt/GroqWhisper.d.ts.map +1 -0
- package/dist/server/audio/stt/GroqWhisper.js +91 -0
- package/dist/server/audio/stt/GroqWhisper.js.map +1 -0
- package/dist/server/audio/stt/registry.d.ts +5 -0
- package/dist/server/audio/stt/registry.d.ts.map +1 -0
- package/dist/server/audio/stt/registry.js +11 -0
- package/dist/server/audio/stt/registry.js.map +1 -0
- package/dist/server/audio/stt/types.d.ts +25 -0
- package/dist/server/audio/stt/types.d.ts.map +1 -0
- package/dist/server/audio/stt/types.js +2 -0
- package/dist/server/audio/stt/types.js.map +1 -0
- package/dist/server/audio/stt/vad.d.ts +18 -0
- package/dist/server/audio/stt/vad.d.ts.map +1 -0
- package/dist/server/audio/stt/vad.js +90 -0
- package/dist/server/audio/stt/vad.js.map +1 -0
- package/dist/server/audio/tts/InWorld.d.ts +3 -0
- package/dist/server/audio/tts/InWorld.d.ts.map +1 -0
- package/dist/server/audio/tts/InWorld.js +147 -0
- package/dist/server/audio/tts/InWorld.js.map +1 -0
- package/dist/server/audio/tts/providers/Azure.d.ts +3 -0
- package/dist/server/audio/tts/providers/Azure.d.ts.map +1 -0
- package/dist/server/audio/tts/providers/Azure.js +31 -0
- package/dist/server/audio/tts/providers/Azure.js.map +1 -0
- package/dist/server/audio/tts/registry.d.ts +6 -0
- package/dist/server/audio/tts/registry.d.ts.map +1 -0
- package/dist/server/audio/tts/registry.js +12 -0
- package/dist/server/audio/tts/registry.js.map +1 -0
- package/dist/server/audio/tts/types.d.ts +20 -0
- package/dist/server/audio/tts/types.d.ts.map +1 -0
- package/dist/server/audio/tts/types.js +2 -0
- package/dist/server/audio/tts/types.js.map +1 -0
- package/dist/server/billing/BillingGateway.d.ts +40 -0
- package/dist/server/billing/BillingGateway.d.ts.map +1 -0
- package/dist/server/billing/BillingGateway.js +116 -0
- package/dist/server/billing/BillingGateway.js.map +1 -0
- package/dist/server/billing/BillingLedger.d.ts +67 -0
- package/dist/server/billing/BillingLedger.d.ts.map +1 -0
- package/dist/server/billing/BillingLedger.js +214 -0
- package/dist/server/billing/BillingLedger.js.map +1 -0
- package/dist/server/billing/CreditStore.d.ts +58 -0
- package/dist/server/billing/CreditStore.d.ts.map +1 -0
- package/dist/server/billing/CreditStore.js +112 -0
- package/dist/server/billing/CreditStore.js.map +1 -0
- package/dist/server/billing/LimitEnforcer.d.ts +73 -0
- package/dist/server/billing/LimitEnforcer.d.ts.map +1 -0
- package/dist/server/billing/LimitEnforcer.js +276 -0
- package/dist/server/billing/LimitEnforcer.js.map +1 -0
- package/dist/server/billing/UserLimitCache.d.ts +35 -0
- package/dist/server/billing/UserLimitCache.d.ts.map +1 -0
- package/dist/server/billing/UserLimitCache.js +91 -0
- package/dist/server/billing/UserLimitCache.js.map +1 -0
- package/dist/server/billing/index.d.ts +6 -0
- package/dist/server/billing/index.d.ts.map +1 -0
- package/dist/server/billing/index.js +4 -0
- package/dist/server/billing/index.js.map +1 -0
- package/dist/server/billing/types.d.ts +95 -0
- package/dist/server/billing/types.d.ts.map +1 -0
- package/dist/server/billing/types.js +19 -0
- package/dist/server/billing/types.js.map +1 -0
- package/dist/server/embeddings/EmbeddingClient.d.ts +8 -0
- package/dist/server/embeddings/EmbeddingClient.d.ts.map +1 -0
- package/dist/server/embeddings/EmbeddingClient.js +30 -0
- package/dist/server/embeddings/EmbeddingClient.js.map +1 -0
- package/dist/server/embeddings/index.d.ts +5 -0
- package/dist/server/embeddings/index.d.ts.map +1 -0
- package/dist/server/embeddings/index.js +6 -0
- package/dist/server/embeddings/index.js.map +1 -0
- package/dist/server/embeddings/providers/OpenAI.d.ts +3 -0
- package/dist/server/embeddings/providers/OpenAI.d.ts.map +1 -0
- package/dist/server/embeddings/providers/OpenAI.js +28 -0
- package/dist/server/embeddings/providers/OpenAI.js.map +1 -0
- package/dist/server/embeddings/registry.d.ts +7 -0
- package/dist/server/embeddings/registry.d.ts.map +1 -0
- package/dist/server/embeddings/registry.js +15 -0
- package/dist/server/embeddings/registry.js.map +1 -0
- package/dist/server/embeddings/types.d.ts +12 -0
- package/dist/server/embeddings/types.d.ts.map +1 -0
- package/dist/server/embeddings/types.js +2 -0
- package/dist/server/embeddings/types.js.map +1 -0
- package/dist/server/index.d.ts +59 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +41 -0
- package/dist/server/index.js.map +1 -0
- package/dist/shared/Api.d.ts +40 -0
- package/dist/shared/Api.d.ts.map +1 -0
- package/dist/shared/Api.js +30 -0
- package/dist/shared/Api.js.map +1 -0
- package/dist/shared/Audio.d.ts +108 -0
- package/dist/shared/Audio.d.ts.map +1 -0
- package/dist/shared/Audio.js +3 -0
- package/dist/shared/Audio.js.map +1 -0
- package/dist/shared/DB.d.ts +339 -0
- package/dist/shared/DB.d.ts.map +1 -0
- package/dist/shared/DB.js +51 -0
- package/dist/shared/DB.js.map +1 -0
- package/dist/shared/Errors.d.ts +10 -0
- package/dist/shared/Errors.d.ts.map +1 -0
- package/dist/shared/Errors.js +19 -0
- package/dist/shared/Errors.js.map +1 -0
- package/dist/shared/FeedbackReport.d.ts +38 -0
- package/dist/shared/FeedbackReport.d.ts.map +1 -0
- package/dist/shared/FeedbackReport.js +14 -0
- package/dist/shared/FeedbackReport.js.map +1 -0
- package/dist/shared/Router.d.ts +28 -0
- package/dist/shared/Router.d.ts.map +1 -0
- package/dist/shared/Router.js +82 -0
- package/dist/shared/Router.js.map +1 -0
- package/dist/shared/Socket.d.ts +26 -0
- package/dist/shared/Socket.d.ts.map +1 -0
- package/dist/shared/Socket.js +2 -0
- package/dist/shared/Socket.js.map +1 -0
- package/dist/shared/index.d.ts +28 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +61 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/webrtc/index.d.ts +14 -0
- package/dist/webrtc/index.d.ts.map +1 -0
- package/dist/webrtc/index.js +24 -0
- package/dist/webrtc/index.js.map +1 -0
- package/package.json +97 -0
- package/templates/.claude/skills/assets.md +39 -0
- package/templates/.claude/skills/check-errors.md +35 -0
- package/templates/.claude/skills/check-feedback.md +23 -0
- package/templates/.claude/skills/check-perf.md +22 -0
- package/templates/.claude/skills/create-test-users.md +34 -0
- package/templates/.claude/skills/extend-api.md +37 -0
- package/templates/.claude/skills/fix-code.md +5 -0
- package/templates/.claude/skills/fix-errors.md +9 -0
- package/templates/.claude/skills/fix-feedback.md +8 -0
- package/templates/.claude/skills/fix-perf.md +8 -0
- package/templates/.claude/skills/uploads.md +38 -0
- package/templates/.claude/skills/use-ai.md +49 -0
- package/templates/.env.example +49 -0
- package/templates/.husky/pre-commit +2 -0
- package/templates/CLAUDE.md +199 -0
- package/templates/client/App.tsx +33 -0
- package/templates/client/index.html +14 -0
- package/templates/client/main.tsx +52 -0
- package/templates/client/pages/AuthDemoPage.tsx +85 -0
- package/templates/client/pages/HomePage.tsx +111 -0
- package/templates/client/pages/SearchPage.tsx +48 -0
- package/templates/client/pages/UserPage.tsx +33 -0
- package/templates/client/router.ts +4 -0
- package/templates/docker-compose.yml +50 -0
- package/templates/index.html +14 -0
- package/templates/package.json +56 -0
- package/templates/playwright.config.ts +21 -0
- package/templates/server/index.ts +24 -0
- package/templates/shared/api.ts +36 -0
- package/templates/shared/collections.ts +11 -0
- package/templates/shared/dbIndexes.ts +11 -0
- package/templates/shared/pages.ts +8 -0
- package/templates/vite.config.ts +17 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
import { ResolveFeedbackInput, SubmitFeedbackInput, } from '../shared/FeedbackReport.js';
|
|
3
|
+
import { getDbName, getMongoClient } from './DB.js';
|
|
4
|
+
export function createSubmitFeedbackHandler(db) {
|
|
5
|
+
return async (input) => {
|
|
6
|
+
const now = Date.now();
|
|
7
|
+
const id = nanoid();
|
|
8
|
+
const doc = {
|
|
9
|
+
id,
|
|
10
|
+
userId: input.userId,
|
|
11
|
+
type: input.type,
|
|
12
|
+
message: input.message,
|
|
13
|
+
url: input.url,
|
|
14
|
+
screenshotUri: input.screenshotUri,
|
|
15
|
+
context: input.context,
|
|
16
|
+
status: 'pending',
|
|
17
|
+
version: 1,
|
|
18
|
+
created: now,
|
|
19
|
+
updated: now,
|
|
20
|
+
};
|
|
21
|
+
await db
|
|
22
|
+
.collection('feedbackReport')
|
|
23
|
+
.insertOne({ ...doc, _id: id });
|
|
24
|
+
return { id };
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function createResolveFeedbackHandler(db) {
|
|
28
|
+
return async (input) => {
|
|
29
|
+
const now = Date.now();
|
|
30
|
+
const result = await db.collection('feedbackReport').updateOne({ id: input.feedbackId }, {
|
|
31
|
+
$set: {
|
|
32
|
+
status: input.status,
|
|
33
|
+
resolution: input.resolution,
|
|
34
|
+
resolvedAt: now,
|
|
35
|
+
updated: now,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (result.matchedCount === 0)
|
|
39
|
+
throw new Error(`Feedback not found: ${input.feedbackId}`);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function getMyFeedbackMarkdown(db, userId) {
|
|
43
|
+
// Mark pending → captured on read (so maintain bot doesn't double-process)
|
|
44
|
+
await db
|
|
45
|
+
.collection('feedbackReport')
|
|
46
|
+
.updateMany({ userId, status: 'pending' }, { $set: { status: 'captured', updated: Date.now() } });
|
|
47
|
+
const docs = (await db
|
|
48
|
+
.collection('feedbackReport')
|
|
49
|
+
.find({ userId })
|
|
50
|
+
.sort({ created: -1 })
|
|
51
|
+
.limit(100)
|
|
52
|
+
.toArray());
|
|
53
|
+
if (docs.length === 0)
|
|
54
|
+
return '# My Feedback\n\nNo feedback submitted yet.\n';
|
|
55
|
+
const lines = ['# My Feedback\n'];
|
|
56
|
+
for (const doc of docs) {
|
|
57
|
+
const date = new Date(doc.created).toISOString().split('T')[0];
|
|
58
|
+
lines.push(`## [${date}] ${doc.message} — ${doc.type}`);
|
|
59
|
+
lines.push(`**Status:** ${doc.status}`);
|
|
60
|
+
if (doc.resolution)
|
|
61
|
+
lines.push(`**Response:** ${doc.resolution}`);
|
|
62
|
+
lines.push('');
|
|
63
|
+
}
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
66
|
+
export function registerFeedbackHandlers(router, maintainBotUserId) {
|
|
67
|
+
router.registerFunction('submitFeedback', async (ctx, input) => {
|
|
68
|
+
// Use getMongoClient() directly — ctx.db is a typed wrapper, not a raw Mongo Db
|
|
69
|
+
const client = await getMongoClient();
|
|
70
|
+
const db = client.db(getDbName());
|
|
71
|
+
const handler = createSubmitFeedbackHandler(db);
|
|
72
|
+
return handler({
|
|
73
|
+
userId: ctx.userId,
|
|
74
|
+
...input,
|
|
75
|
+
});
|
|
76
|
+
}, {
|
|
77
|
+
_input: undefined,
|
|
78
|
+
_output: undefined,
|
|
79
|
+
inputSchema: SubmitFeedbackInput,
|
|
80
|
+
});
|
|
81
|
+
router.registerFunction('resolveFeedback', async (ctx, input) => {
|
|
82
|
+
if (ctx.userId !== maintainBotUserId)
|
|
83
|
+
throw new Error('Not authorized');
|
|
84
|
+
const client = await getMongoClient();
|
|
85
|
+
const db = client.db(getDbName());
|
|
86
|
+
const handler = createResolveFeedbackHandler(db);
|
|
87
|
+
return handler(input);
|
|
88
|
+
}, {
|
|
89
|
+
_input: undefined,
|
|
90
|
+
_output: undefined,
|
|
91
|
+
inputSchema: ResolveFeedbackInput,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=FeedbackReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackReport.js","sourceRoot":"","sources":["../../src/server/FeedbackReport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageGen.d.ts","sourceRoot":"","sources":["../../src/server/ImageGen.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageGen.js","sourceRoot":"","sources":["../../src/server/ImageGen.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,qDAAqD;AACrD,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { TypedDB } from '../shared/DB.js';
|
|
2
|
+
import type { StorageClient } from './Storage.js';
|
|
3
|
+
export type LogLevel = 'log' | 'info' | 'warn' | 'error' | 'debug';
|
|
4
|
+
export interface Logger {
|
|
5
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
6
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
7
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
8
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
9
|
+
perf(operation: string): () => void;
|
|
10
|
+
feedback(input: {
|
|
11
|
+
type: 'bug' | 'design' | 'feature';
|
|
12
|
+
message: string;
|
|
13
|
+
screenshotTempKey?: string;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createLogger(userId: string, storage: StorageClient, db: TypedDB<any>): Logger;
|
|
17
|
+
export declare function initServerErrorCapture(): void;
|
|
18
|
+
export interface DevLogEntry {
|
|
19
|
+
timestamp: string;
|
|
20
|
+
level: LogLevel;
|
|
21
|
+
category: string | undefined;
|
|
22
|
+
message: string;
|
|
23
|
+
args: unknown[];
|
|
24
|
+
source: 'server' | 'browser';
|
|
25
|
+
}
|
|
26
|
+
/** Write a log entry to the dev JSONL file. source defaults to 'browser'. */
|
|
27
|
+
export declare function writeClientLogEntry(entry: {
|
|
28
|
+
level: string;
|
|
29
|
+
message: string;
|
|
30
|
+
args?: unknown[];
|
|
31
|
+
source?: 'browser' | 'server';
|
|
32
|
+
}): void;
|
|
33
|
+
/**
|
|
34
|
+
* Register a pattern string as an "expected" error.
|
|
35
|
+
* If any captured error message contains this pattern it will be classified as
|
|
36
|
+
* expected and only logged to the console — not persisted to MongoDB.
|
|
37
|
+
*/
|
|
38
|
+
export declare function registerExpectedErrorPattern(pattern: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Classify an error message as expected or unexpected based on registered patterns.
|
|
41
|
+
* @returns 'expected' if the message matches any registered pattern, 'unexpected' otherwise
|
|
42
|
+
*/
|
|
43
|
+
export declare function classifyError(message: string): 'expected' | 'unexpected';
|
|
44
|
+
/**
|
|
45
|
+
* Capture a server-side error.
|
|
46
|
+
*
|
|
47
|
+
* - Expected errors (matched by a registered pattern) are written to console.error only.
|
|
48
|
+
* - Unexpected errors are also persisted to the MongoDB `errorLog` collection.
|
|
49
|
+
* Documents are deduplicated by hash: repeated errors increment `count` instead of
|
|
50
|
+
* inserting a duplicate record.
|
|
51
|
+
*
|
|
52
|
+
* @param message A const string following the pattern '[Area] Description of cause'
|
|
53
|
+
* @param error The caught value (typically an Error instance)
|
|
54
|
+
* @param context Optional key/value pairs for structured diagnostics
|
|
55
|
+
*/
|
|
56
|
+
export declare function captureServerError(message: string, error: unknown, context?: Record<string, unknown>): void;
|
|
57
|
+
/** Override console.* globally to capture all output to JSONL in dev mode */
|
|
58
|
+
export declare function initDevLogs(): void;
|
|
59
|
+
//# sourceMappingURL=Logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logging.d.ts","sourceRoot":"","sources":["../../src/server/Logging.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE;QACd,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAGD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GACf,MAAM,CAuFR;AAGD,wBAAgB,sBAAsB,IAAI,IAAI,CA+B7C;AAID,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAsED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC/B,GAAG,IAAI,CAQP;AAUD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAKxE;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CA6CN;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,IAAI,IAAI,CAsClC"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
import crypto from 'node:crypto';
|
|
3
|
+
import fsSync from 'node:fs';
|
|
4
|
+
import fs from 'node:fs/promises';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { BUILTIN_DEFS, dbDefaults } from '../shared/DB.js';
|
|
7
|
+
import { getDbName, getMongoClient } from './DB.js';
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
export function createLogger(userId, storage, db) {
|
|
10
|
+
function writeErrorLog(level, message, meta) {
|
|
11
|
+
const doc = {
|
|
12
|
+
...dbDefaults(),
|
|
13
|
+
id: nanoid(),
|
|
14
|
+
level,
|
|
15
|
+
message,
|
|
16
|
+
source: 'server',
|
|
17
|
+
userId,
|
|
18
|
+
meta: meta ?? null,
|
|
19
|
+
};
|
|
20
|
+
// Fire-and-forget — logging should never throw in handler context
|
|
21
|
+
db.setDoc(BUILTIN_DEFS.errorLog, doc).catch((e) => console.error('[Logger] Failed to write log', e));
|
|
22
|
+
}
|
|
23
|
+
function writeConsoleLog(level, message, meta) {
|
|
24
|
+
const doc = {
|
|
25
|
+
...dbDefaults(),
|
|
26
|
+
id: nanoid(),
|
|
27
|
+
level,
|
|
28
|
+
message,
|
|
29
|
+
userId,
|
|
30
|
+
meta: meta ?? null,
|
|
31
|
+
};
|
|
32
|
+
// Fire-and-forget — logging should never throw in handler context
|
|
33
|
+
db.setDoc(BUILTIN_DEFS.consoleLog, doc).catch((e) => console.error('[Logger] Failed to write log', e));
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
error: (msg, meta) => writeErrorLog('error', msg, meta),
|
|
37
|
+
warn: (msg, meta) => writeConsoleLog('warn', msg, meta),
|
|
38
|
+
info: (msg, meta) => writeConsoleLog('info', msg, meta),
|
|
39
|
+
debug: (msg, meta) => writeConsoleLog('debug', msg, meta),
|
|
40
|
+
perf(operation) {
|
|
41
|
+
const start = Date.now();
|
|
42
|
+
return () => {
|
|
43
|
+
const durationMs = Date.now() - start;
|
|
44
|
+
const doc = {
|
|
45
|
+
...dbDefaults(),
|
|
46
|
+
id: nanoid(),
|
|
47
|
+
operation,
|
|
48
|
+
durationMs,
|
|
49
|
+
userId,
|
|
50
|
+
};
|
|
51
|
+
db.setDoc(BUILTIN_DEFS.perfLog, doc).catch((e) => console.error('[Logger] Failed to write perf log', e));
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
async feedback({ type, message, screenshotTempKey }) {
|
|
55
|
+
let screenshotUrl = null;
|
|
56
|
+
if (screenshotTempKey) {
|
|
57
|
+
try {
|
|
58
|
+
const destKey = `feedback/${nanoid()}.png`;
|
|
59
|
+
screenshotUrl = await storage.moveToPublic(screenshotTempKey, destKey);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
console.error('[Logger] Failed to promote feedback screenshot', e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const doc = {
|
|
66
|
+
...dbDefaults(),
|
|
67
|
+
id: nanoid(),
|
|
68
|
+
type,
|
|
69
|
+
message,
|
|
70
|
+
screenshotUrl,
|
|
71
|
+
userId,
|
|
72
|
+
};
|
|
73
|
+
await db.setDoc(BUILTIN_DEFS.feedbackLog, doc);
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Auto-capture unhandled server exceptions — uses raw mongo since these run outside request context
|
|
78
|
+
export function initServerErrorCapture() {
|
|
79
|
+
const writeErrorLog = (message, stack) => {
|
|
80
|
+
const id = nanoid();
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
+
const doc = {
|
|
83
|
+
_id: id,
|
|
84
|
+
id,
|
|
85
|
+
version: 1,
|
|
86
|
+
created: new Date(),
|
|
87
|
+
updated: new Date(),
|
|
88
|
+
level: 'error',
|
|
89
|
+
message,
|
|
90
|
+
stack,
|
|
91
|
+
source: 'server',
|
|
92
|
+
userId: null,
|
|
93
|
+
};
|
|
94
|
+
getMongoClient()
|
|
95
|
+
.then((client) => client.db(getDbName()).collection('errorLog').insertOne(doc))
|
|
96
|
+
.catch(() => { });
|
|
97
|
+
};
|
|
98
|
+
process.on('uncaughtException', (err) => {
|
|
99
|
+
writeErrorLog(err.message, err.stack ?? null);
|
|
100
|
+
});
|
|
101
|
+
process.on('unhandledRejection', (reason) => {
|
|
102
|
+
const msg = reason instanceof Error ? reason.message : String(reason);
|
|
103
|
+
const stack = reason instanceof Error ? reason.stack ?? null : null;
|
|
104
|
+
writeErrorLog(msg, stack);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function extractCategory(message) {
|
|
108
|
+
const match = /^\[([A-Z][A-Za-z0-9]*)\]/.exec(message);
|
|
109
|
+
return match?.[1];
|
|
110
|
+
}
|
|
111
|
+
function getLogFilePath() {
|
|
112
|
+
const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
|
113
|
+
return path.join(process.cwd(), 'logs', `dev-${date}.jsonl`);
|
|
114
|
+
}
|
|
115
|
+
function serializeArg(arg) {
|
|
116
|
+
if (arg instanceof Error) {
|
|
117
|
+
return { __error: true, message: arg.message, stack: arg.stack };
|
|
118
|
+
}
|
|
119
|
+
return arg;
|
|
120
|
+
}
|
|
121
|
+
function writeLogEntry(level, args, source = 'server') {
|
|
122
|
+
try {
|
|
123
|
+
const firstString = args.find((a) => typeof a === 'string');
|
|
124
|
+
const message = firstString ?? '';
|
|
125
|
+
const category = extractCategory(message);
|
|
126
|
+
const entry = {
|
|
127
|
+
timestamp: new Date().toISOString(),
|
|
128
|
+
level,
|
|
129
|
+
category,
|
|
130
|
+
message,
|
|
131
|
+
args: args.map(serializeArg),
|
|
132
|
+
source,
|
|
133
|
+
};
|
|
134
|
+
const line = JSON.stringify(entry) + '\n';
|
|
135
|
+
const filePath = getLogFilePath();
|
|
136
|
+
// Ensure directory exists synchronously and append; use sync to avoid event-loop issues in console overrides
|
|
137
|
+
try {
|
|
138
|
+
fsSync.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Already exists
|
|
142
|
+
}
|
|
143
|
+
fsSync.appendFileSync(filePath, line, 'utf-8');
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Never throw from logging — it would cause infinite recursion
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async function cleanupOldLogs() {
|
|
150
|
+
const logsDir = path.join(process.cwd(), 'logs');
|
|
151
|
+
try {
|
|
152
|
+
const files = await fs.readdir(logsDir);
|
|
153
|
+
const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000;
|
|
154
|
+
for (const file of files) {
|
|
155
|
+
if (!file.startsWith('dev-') || !file.endsWith('.jsonl'))
|
|
156
|
+
continue;
|
|
157
|
+
const filePath = path.join(logsDir, file);
|
|
158
|
+
const stat = await fs.stat(filePath);
|
|
159
|
+
if (stat.mtimeMs < cutoff) {
|
|
160
|
+
await fs.unlink(filePath);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Logs dir doesn't exist yet — that's fine
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** Write a log entry to the dev JSONL file. source defaults to 'browser'. */
|
|
169
|
+
export function writeClientLogEntry(entry) {
|
|
170
|
+
if (process.env['NODE_ENV'] !== 'development')
|
|
171
|
+
return;
|
|
172
|
+
const level = entry.level ?? 'log';
|
|
173
|
+
writeLogEntry(level, [entry.message, ...(entry.args ?? [])], entry.source ?? 'browser');
|
|
174
|
+
}
|
|
175
|
+
// ─── Error Classification & Capture ──────────────────────────────────────────
|
|
176
|
+
/**
|
|
177
|
+
* Registry of expected error patterns. Populated at startup by consuming apps
|
|
178
|
+
* via registerExpectedErrorPattern().
|
|
179
|
+
*/
|
|
180
|
+
const expectedErrorPatterns = [];
|
|
181
|
+
/**
|
|
182
|
+
* Register a pattern string as an "expected" error.
|
|
183
|
+
* If any captured error message contains this pattern it will be classified as
|
|
184
|
+
* expected and only logged to the console — not persisted to MongoDB.
|
|
185
|
+
*/
|
|
186
|
+
export function registerExpectedErrorPattern(pattern) {
|
|
187
|
+
expectedErrorPatterns.push(pattern);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Classify an error message as expected or unexpected based on registered patterns.
|
|
191
|
+
* @returns 'expected' if the message matches any registered pattern, 'unexpected' otherwise
|
|
192
|
+
*/
|
|
193
|
+
export function classifyError(message) {
|
|
194
|
+
for (const pattern of expectedErrorPatterns) {
|
|
195
|
+
if (message.includes(pattern))
|
|
196
|
+
return 'expected';
|
|
197
|
+
}
|
|
198
|
+
return 'unexpected';
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Generate an MD5 hash over (message + normalizedStack) for error grouping.
|
|
202
|
+
* Uses Node's built-in crypto — no additional dependencies.
|
|
203
|
+
*/
|
|
204
|
+
function generateErrorHash(message, stack) {
|
|
205
|
+
const normalizedStack = (stack ?? '').substring(0, 500);
|
|
206
|
+
return crypto
|
|
207
|
+
.createHash('md5')
|
|
208
|
+
.update(`${message}:${normalizedStack}`)
|
|
209
|
+
.digest('hex');
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Capture a server-side error.
|
|
213
|
+
*
|
|
214
|
+
* - Expected errors (matched by a registered pattern) are written to console.error only.
|
|
215
|
+
* - Unexpected errors are also persisted to the MongoDB `errorLog` collection.
|
|
216
|
+
* Documents are deduplicated by hash: repeated errors increment `count` instead of
|
|
217
|
+
* inserting a duplicate record.
|
|
218
|
+
*
|
|
219
|
+
* @param message A const string following the pattern '[Area] Description of cause'
|
|
220
|
+
* @param error The caught value (typically an Error instance)
|
|
221
|
+
* @param context Optional key/value pairs for structured diagnostics
|
|
222
|
+
*/
|
|
223
|
+
export function captureServerError(message, error, context) {
|
|
224
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
225
|
+
const classification = classifyError(message);
|
|
226
|
+
console.error('[captureServerError]', message, {
|
|
227
|
+
context,
|
|
228
|
+
stack,
|
|
229
|
+
classification,
|
|
230
|
+
});
|
|
231
|
+
if (classification === 'expected')
|
|
232
|
+
return;
|
|
233
|
+
// Persist unexpected errors asynchronously — never throw from here
|
|
234
|
+
const hash = generateErrorHash(message, stack);
|
|
235
|
+
const timestamp = Date.now();
|
|
236
|
+
getMongoClient()
|
|
237
|
+
.then((client) => {
|
|
238
|
+
const collection = client.db(getDbName()).collection('errorLog');
|
|
239
|
+
return collection.updateOne({ hash }, {
|
|
240
|
+
$inc: { count: 1 },
|
|
241
|
+
$set: {
|
|
242
|
+
message,
|
|
243
|
+
stack: stack ?? null,
|
|
244
|
+
context: context ?? {},
|
|
245
|
+
updatedAt: timestamp,
|
|
246
|
+
},
|
|
247
|
+
$setOnInsert: {
|
|
248
|
+
_id: nanoid(),
|
|
249
|
+
hash,
|
|
250
|
+
timestamp,
|
|
251
|
+
count: 0, // $inc will make this 1 on insert
|
|
252
|
+
},
|
|
253
|
+
}, { upsert: true });
|
|
254
|
+
})
|
|
255
|
+
.catch((e) => {
|
|
256
|
+
console.error('[captureServerError] Failed to persist error to MongoDB', e);
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/** Override console.* globally to capture all output to JSONL in dev mode */
|
|
260
|
+
export function initDevLogs() {
|
|
261
|
+
if (process.env['NODE_ENV'] !== 'development')
|
|
262
|
+
return;
|
|
263
|
+
// Start cleanup in background
|
|
264
|
+
cleanupOldLogs().catch(() => { });
|
|
265
|
+
const original = {
|
|
266
|
+
log: console.log.bind(console),
|
|
267
|
+
info: console.info.bind(console),
|
|
268
|
+
warn: console.warn.bind(console),
|
|
269
|
+
error: console.error.bind(console),
|
|
270
|
+
debug: console.debug.bind(console),
|
|
271
|
+
};
|
|
272
|
+
console.log = (...args) => {
|
|
273
|
+
original.log(...args);
|
|
274
|
+
writeLogEntry('log', args);
|
|
275
|
+
};
|
|
276
|
+
console.info = (...args) => {
|
|
277
|
+
original.info(...args);
|
|
278
|
+
writeLogEntry('info', args);
|
|
279
|
+
};
|
|
280
|
+
console.warn = (...args) => {
|
|
281
|
+
original.warn(...args);
|
|
282
|
+
writeLogEntry('warn', args);
|
|
283
|
+
};
|
|
284
|
+
console.error = (...args) => {
|
|
285
|
+
original.error(...args);
|
|
286
|
+
writeLogEntry('error', args);
|
|
287
|
+
};
|
|
288
|
+
// console.debug: captured to JSONL but NOT printed to stdout
|
|
289
|
+
console.debug = (...args) => {
|
|
290
|
+
writeLogEntry('debug', args);
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=Logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logging.js","sourceRoot":"","sources":["../../src/server/Logging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { JetStreamClient, NatsConnection, RetentionPolicy } from 'nats';
|
|
2
|
+
export interface NatsConfig {
|
|
3
|
+
url?: string;
|
|
4
|
+
creds?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Connect to NATS. Called once at server startup.
|
|
8
|
+
* Development: connects to localhost:4222
|
|
9
|
+
* Production: uses NATS_URL env var (and NATS_CREDS for Synadia Cloud)
|
|
10
|
+
*/
|
|
11
|
+
export declare function connectNats(config?: NatsConfig): Promise<NatsConnection>;
|
|
12
|
+
/**
|
|
13
|
+
* Get the active NATS connection. Throws if not connected.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getNatsConnection(): NatsConnection;
|
|
16
|
+
/**
|
|
17
|
+
* Publish a message to a NATS subject.
|
|
18
|
+
* @param subject - NATS subject (e.g. 'user.updates.abc123')
|
|
19
|
+
* @param payload - JSON-serializable payload
|
|
20
|
+
*/
|
|
21
|
+
export declare function natsPublish(subject: string, payload: unknown): void;
|
|
22
|
+
/**
|
|
23
|
+
* Subscribe to a NATS subject.
|
|
24
|
+
* Returns an unsubscribe function — ALWAYS call it when done to prevent leaks.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const unsub = await natsSubscribe('user.updates.*', (msg) => {
|
|
28
|
+
* console.log(msg.subject, msg.data);
|
|
29
|
+
* });
|
|
30
|
+
* // Later:
|
|
31
|
+
* unsub();
|
|
32
|
+
*/
|
|
33
|
+
export declare function natsSubscribe(subject: string, handler: (msg: {
|
|
34
|
+
subject: string;
|
|
35
|
+
data: unknown;
|
|
36
|
+
}) => void | Promise<void>): Promise<() => void>;
|
|
37
|
+
/**
|
|
38
|
+
* Get the JetStream client for durable queues.
|
|
39
|
+
* JetStream must be enabled on the NATS server (pass -js flag).
|
|
40
|
+
*/
|
|
41
|
+
export declare function getJetStream(): Promise<JetStreamClient>;
|
|
42
|
+
/**
|
|
43
|
+
* Ensure a JetStream stream exists (idempotent).
|
|
44
|
+
* Creates the stream if it doesn't exist; updates if config differs.
|
|
45
|
+
*/
|
|
46
|
+
export declare function ensureStream(config: {
|
|
47
|
+
name: string;
|
|
48
|
+
subjects: string[];
|
|
49
|
+
retentionPolicy?: RetentionPolicy;
|
|
50
|
+
}): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Gracefully close the NATS connection.
|
|
53
|
+
* Call during server shutdown.
|
|
54
|
+
*/
|
|
55
|
+
export declare function closeNats(): Promise<void>;
|
|
56
|
+
//# sourceMappingURL=Nats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Nats.d.ts","sourceRoot":"","sources":["../../src/server/Nats.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,cAAc,EACd,eAAe,EAEhB,MAAM,MAAM,CAAC;AAed,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAGnE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACzE,OAAO,CAAC,MAAM,IAAI,CAAC,CA8CrB;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAM7D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhB;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/C"}
|