machinaos 0.0.76 → 0.0.78
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 +143 -107
- package/client/dist/assets/ActionBar-Du2MSFSz.js +1 -0
- package/client/dist/assets/ApiKeyInput-k2LBmBjb.js +1 -0
- package/client/dist/assets/ApiKeyPanel-C_bV9U0X.js +1 -0
- package/client/dist/assets/ApiUsageSection-CmVfwZzL.js +1 -0
- package/client/dist/assets/EmailPanel-CeKIMGu-.js +1 -0
- package/client/dist/assets/OAuthPanel-KA3t3Q2K.js +1 -0
- package/client/dist/assets/QrPairingPanel-NgNpJNuk.js +1 -0
- package/client/dist/assets/RateLimitSection-Du5YNVIA.js +1 -0
- package/client/dist/assets/StatusCard-DNLyayXc.js +1 -0
- package/client/dist/assets/index-DQ0nwhec.js +257 -0
- package/client/dist/assets/index-DxmbVskS.css +1 -0
- package/client/dist/assets/vendor-flow-CZmBvHRo.js +1 -0
- package/client/dist/assets/vendor-icons-CVrPjN2Q.js +22 -0
- package/client/dist/assets/vendor-markdown-CRou3yQ5.js +62 -0
- package/client/dist/assets/vendor-misc-C4VxKHs5.js +1 -0
- package/client/dist/assets/vendor-query-SzWcOU0G.js +1 -0
- package/client/dist/assets/vendor-radix-Dnos29jG.js +56 -0
- package/client/dist/assets/vendor-react-DvWIbVx0.js +1 -0
- package/client/dist/index.html +37 -3
- package/client/index.html +28 -1
- package/client/package.json +44 -40
- package/client/src/App.tsx +2 -0
- package/client/src/Dashboard.tsx +157 -45
- package/client/src/ParameterPanel.tsx +3 -5
- package/client/src/adapters/nodeSpecToDescription.ts +1 -0
- package/client/src/assets/icons/NodeIcon.tsx +32 -0
- package/client/src/assets/icons/index.ts +4 -0
- package/client/src/assets/icons/stripe.svg +1 -0
- package/client/src/assets/icons/themedGlyphs.ts +404 -0
- package/client/src/components/AIAgentNode.tsx +77 -53
- package/client/src/components/GenericNode.tsx +34 -52
- package/client/src/components/OutputPanel.tsx +64 -147
- package/client/src/components/ParameterRenderer.tsx +5 -3
- package/client/src/components/SkillEditorModal.tsx +9 -18
- package/client/src/components/SquareNode.tsx +97 -115
- package/client/src/components/StartNode.tsx +32 -42
- package/client/src/components/SvgFilterDefs.tsx +54 -0
- package/client/src/components/TeamMonitorNode.tsx +12 -14
- package/client/src/components/ToolkitNode.tsx +35 -60
- package/client/src/components/TriggerNode.tsx +43 -77
- package/client/src/components/__tests__/CredentialsModal.test.tsx +49 -45
- package/client/src/components/credentials/CredentialsModal.tsx +98 -30
- package/client/src/components/credentials/CredentialsPalette.tsx +73 -5
- package/client/src/components/credentials/catalogueAdapter.ts +17 -1
- package/client/src/components/credentials/panels/ApiKeyPanel.tsx +102 -37
- package/client/src/components/credentials/panels/EmailPanel.tsx +7 -19
- package/client/src/components/credentials/panels/OAuthPanel.tsx +5 -1
- package/client/src/components/credentials/panels/QrPairingPanel.tsx +1 -3
- package/client/src/components/credentials/primitives/ActionBar.tsx +7 -11
- package/client/src/components/credentials/primitives/OAuthConnect.tsx +19 -28
- package/client/src/components/credentials/sections/ProviderDefaultsSection.tsx +24 -3
- package/client/src/components/credentials/types.ts +12 -2
- package/client/src/components/credentials/useCredentialPanel.ts +43 -19
- package/client/src/components/icons/AIProviderIcons.tsx +16 -0
- package/client/src/components/onboarding/OnboardingWizard.tsx +23 -63
- package/client/src/components/onboarding/nodeRoleClasses.ts +23 -0
- package/client/src/components/onboarding/steps/CanvasStep.tsx +15 -21
- package/client/src/components/onboarding/steps/ConceptsStep.tsx +2 -11
- package/client/src/components/onboarding/steps/GetStartedStep.tsx +2 -10
- package/client/src/components/parameterPanel/InputSection.tsx +9 -7
- package/client/src/components/parameterPanel/MasterSkillEditor.tsx +84 -198
- package/client/src/components/parameterPanel/MiddleSection.tsx +57 -80
- package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +31 -25
- package/client/src/components/parameterPanel/__tests__/InputSection.test.tsx +7 -2
- package/client/src/components/ui/AIResultModal.tsx +1 -1
- package/client/src/components/ui/CollapsibleSection.tsx +9 -5
- package/client/src/components/ui/CommandPalette.tsx +147 -0
- package/client/src/components/ui/CommandPaletteHost.tsx +189 -0
- package/client/src/components/ui/ComponentItem.tsx +13 -7
- package/client/src/components/ui/ComponentPalette.tsx +24 -13
- package/client/src/components/ui/ConsolePanel.tsx +19 -11
- package/client/src/components/ui/DropCap.tsx +28 -0
- package/client/src/components/ui/EditableNodeLabel.tsx +10 -2
- package/client/src/components/ui/InputNodesPanel.tsx +1 -1
- package/client/src/components/ui/Modal.tsx +38 -6
- package/client/src/components/ui/OutputDisplayPanel.tsx +1 -1
- package/client/src/components/ui/SettingsPanel.tsx +42 -13
- package/client/src/components/ui/StatusBar.tsx +108 -0
- package/client/src/components/ui/ThemeSwitcher.tsx +109 -0
- package/client/src/components/ui/TopToolbar.tsx +42 -25
- package/client/src/components/ui/WorkflowSidebar.tsx +32 -16
- package/client/src/components/ui/action-button.tsx +40 -15
- package/client/src/components/ui/button.tsx +24 -1
- package/client/src/components/ui/dropdown-menu.tsx +24 -2
- package/client/src/components/ui/input.tsx +19 -2
- package/client/src/components/ui/select.tsx +15 -0
- package/client/src/components/ui/textarea.tsx +15 -2
- package/client/src/contexts/AuthContext.tsx +148 -109
- package/client/src/contexts/ThemeContext.tsx +93 -17
- package/client/src/contexts/WebSocketContext.tsx +373 -206
- package/client/src/contexts/__tests__/AuthContext.test.tsx +221 -0
- package/client/src/hooks/__tests__/useDragVariable.test.ts +7 -1
- package/client/src/hooks/__tests__/useWorkflowOpsListener.test.ts +142 -0
- package/client/src/hooks/useAppTheme.ts +209 -7
- package/client/src/hooks/useAutoSkillEdges.ts +7 -2
- package/client/src/hooks/useCatalogueQuery.ts +67 -1
- package/client/src/hooks/useDragVariable.ts +1 -1
- package/client/src/hooks/useNodeAllowlist.ts +115 -8
- package/client/src/hooks/useOnboarding.ts +20 -8
- package/client/src/hooks/useParameterPanel.ts +2 -1
- package/client/src/hooks/useReactFlowNodes.ts +2 -1
- package/client/src/hooks/useSound.ts +185 -0
- package/client/src/hooks/useWorkflowManagement.ts +6 -8
- package/client/src/hooks/useWorkflowOpsListener.ts +90 -0
- package/client/src/index.css +65 -3
- package/client/src/lib/__tests__/connectionConfig.test.ts +91 -0
- package/client/src/lib/aiModelProviders.ts +8 -0
- package/client/src/lib/connectionConfig.ts +107 -0
- package/client/src/lib/queryPersist.ts +13 -5
- package/client/src/lib/sound.ts +393 -0
- package/client/src/main.tsx +20 -0
- package/client/src/store/useAppStore.ts +26 -0
- package/client/src/styles/canvasAnimations.ts +37 -36
- package/client/src/styles/theme.ts +36 -20
- package/client/src/test/setup.ts +1 -0
- package/client/src/themes/atomic.css +253 -0
- package/client/src/themes/base.css +373 -0
- package/client/src/themes/cyber.css +890 -0
- package/client/src/themes/dark.css +70 -0
- package/client/src/themes/edo.css +246 -0
- package/client/src/themes/greek.css +293 -0
- package/client/src/themes/light.css +78 -0
- package/client/src/themes/plague.css +253 -0
- package/client/src/themes/renaissance.css +727 -0
- package/client/src/themes/rot.css +249 -0
- package/client/src/themes/steampunk.css +272 -0
- package/client/src/themes/surveillance.css +289 -0
- package/client/src/themes/wasteland.css +250 -0
- package/client/src/types/INodeProperties.ts +5 -0
- package/client/src/types/NodeTypes.ts +11 -1
- package/client/src/types/__tests__/cloudEvents.test.ts +99 -0
- package/client/src/types/cloudEvents.ts +78 -0
- package/client/src/vite-env.d.ts +7 -0
- package/client/tsconfig.json +1 -1
- package/client/vite.config.js +62 -2
- package/install.ps1 +1 -1
- package/install.sh +1 -1
- package/machina/commands/build.py +51 -7
- package/machina/pyproject.toml +4 -0
- package/machina/supervisor.py +12 -2
- package/machina/tree.py +71 -21
- package/package.json +4 -4
- package/scripts/install.js +16 -1
- package/server/config/ai_cli_providers.json +54 -0
- package/server/config/credential_providers.json +109 -2
- package/server/config/llm_defaults.json +24 -0
- package/server/config/model_registry.json +338 -499
- package/server/config/node_allowlist.json +16 -1
- package/server/config/pricing.json +8 -0
- package/server/constants.py +38 -15
- package/server/core/container.py +2 -2
- package/server/core/credentials_database.py +35 -2
- package/server/core/logging.py +4 -3
- package/server/main.py +99 -13
- package/server/models/node_metadata.py +1 -0
- package/server/nodejs/package.json +8 -6
- package/server/nodejs/src/index.ts +22 -5
- package/server/nodes/README.md +31 -4
- package/server/nodes/agent/_inline.py +2 -0
- package/server/nodes/agent/_specialized.py +6 -3
- package/server/nodes/agent/ai_agent.py +13 -3
- package/server/nodes/agent/chat_agent.py +6 -3
- package/server/nodes/agent/claude_code_agent.py +287 -75
- package/server/nodes/agent/codex_agent.py +239 -0
- package/server/nodes/agent/deep_agent.py +3 -3
- package/server/nodes/agent/rlm_agent.py +3 -3
- package/server/nodes/android/__init__.py +31 -1
- package/server/nodes/android/_base.py +9 -5
- package/server/{services/android_service.py → nodes/android/_dispatcher.py} +2 -2
- package/server/nodes/android/_handlers.py +154 -0
- package/server/nodes/android/_option_loaders.py +44 -0
- package/server/nodes/android/_refresh.py +127 -0
- package/server/{services/android → nodes/android/_relay}/client.py +4 -4
- package/server/{routers/android.py → nodes/android/_router.py} +27 -8
- package/server/nodes/browser/browser.py +2 -2
- package/server/nodes/code/_base.py +6 -2
- package/server/nodes/code/_claude_code.py +134 -0
- package/server/nodes/document/embedding_generator.py +3 -3
- package/server/nodes/document/http_scraper.py +3 -3
- package/server/nodes/document/vector_store.py +5 -5
- package/server/nodes/email/__init__.py +11 -1
- package/server/nodes/email/_filters.py +21 -0
- package/server/{services/himalaya_service.py → nodes/email/_himalaya.py} +6 -10
- package/server/{services/email_service.py → nodes/email/_service.py} +9 -13
- package/server/nodes/email/email_read.py +1 -1
- package/server/nodes/email/email_receive.py +54 -5
- package/server/nodes/email/email_send.py +1 -1
- package/server/nodes/filesystem/shell.py +24 -1
- package/server/nodes/google/__init__.py +55 -1
- package/server/{services/handlers/google_auth.py → nodes/google/_auth_helper.py} +8 -5
- package/server/nodes/google/_base.py +2 -2
- package/server/nodes/google/_credentials.py +5 -5
- package/server/nodes/google/_filters.py +25 -0
- package/server/nodes/google/_handlers.py +57 -0
- package/server/{services/google_oauth.py → nodes/google/_oauth.py} +195 -162
- package/server/nodes/google/_option_loaders.py +107 -0
- package/server/nodes/google/_refresh.py +66 -0
- package/server/nodes/google/_router.py +131 -0
- package/server/nodes/google/gmail_receive.py +41 -4
- package/server/nodes/groups.py +1 -0
- package/server/nodes/location/_credentials.py +45 -1
- package/server/{services/maps.py → nodes/location/_service.py} +18 -3
- package/server/nodes/location/gmaps_create.py +4 -4
- package/server/nodes/location/gmaps_locations.py +4 -4
- package/server/nodes/location/gmaps_nearby_places.py +4 -4
- package/server/nodes/model/_base.py +8 -3
- package/server/nodes/model/_credentials.py +96 -8
- package/server/nodes/model/_local_validator.py +345 -0
- package/server/nodes/model/lmstudio_chat_model.py +23 -0
- package/server/nodes/model/ollama_chat_model.py +25 -0
- package/server/nodes/proxy/_usage.py +2 -2
- package/server/nodes/proxy/proxy_config.py +14 -14
- package/server/nodes/proxy/proxy_request.py +4 -4
- package/server/nodes/scraper/_credentials.py +29 -1
- package/server/nodes/scraper/apify_actor.py +9 -9
- package/server/nodes/scraper/crawlee_scraper.py +5 -5
- package/server/nodes/search/brave_search.py +4 -0
- package/server/nodes/search/perplexity_search.py +9 -0
- package/server/nodes/search/serper_search.py +3 -0
- package/server/nodes/skill/simple_memory.py +12 -0
- package/server/nodes/social/_base.py +2 -2
- package/server/nodes/stripe/__init__.py +46 -0
- package/server/nodes/stripe/_credentials.py +33 -0
- package/server/nodes/stripe/_handlers.py +270 -0
- package/server/nodes/stripe/_install.py +127 -0
- package/server/nodes/stripe/_source.py +174 -0
- package/server/nodes/stripe/stripe_action.py +81 -0
- package/server/nodes/stripe/stripe_receive.py +92 -0
- package/server/nodes/telegram/_credentials.py +52 -1
- package/server/nodes/telegram/_handlers.py +19 -18
- package/server/nodes/telegram/_service.py +134 -32
- package/server/nodes/telegram/telegram_send.py +5 -6
- package/server/nodes/text/file_handler.py +2 -2
- package/server/nodes/text/text_generator.py +2 -2
- package/server/nodes/tool/agent_builder.py +630 -0
- package/server/nodes/tool/task_manager.py +144 -2
- package/server/nodes/twitter/__init__.py +38 -1
- package/server/nodes/twitter/_base.py +7 -7
- package/server/nodes/twitter/_credentials.py +1 -1
- package/server/nodes/twitter/_filters.py +37 -0
- package/server/nodes/twitter/_handlers.py +77 -0
- package/server/nodes/twitter/_oauth.py +124 -0
- package/server/nodes/twitter/_refresh.py +78 -0
- package/server/nodes/twitter/_router.py +29 -0
- package/server/nodes/twitter/twitter_receive.py +4 -0
- package/server/nodes/visuals.json +64 -19
- package/server/nodes/whatsapp/__init__.py +45 -5
- package/server/nodes/whatsapp/_base.py +3 -3
- package/server/nodes/whatsapp/_filters.py +137 -0
- package/server/nodes/whatsapp/_handlers.py +167 -0
- package/server/nodes/whatsapp/_option_loaders.py +68 -0
- package/server/nodes/whatsapp/_refresh.py +62 -0
- package/server/nodes/whatsapp/_runtime.py +1 -1
- package/server/pyproject.toml +29 -7
- package/server/routers/schemas.py +2 -2
- package/server/routers/webhook.py +26 -9
- package/server/routers/websocket.py +149 -810
- package/server/services/ai.py +89 -8
- package/server/services/auth.py +220 -43
- package/server/services/claude_oauth.py +126 -100
- package/server/services/cli_agent/__init__.py +78 -0
- package/server/services/cli_agent/_handlers.py +237 -0
- package/server/services/cli_agent/config.py +112 -0
- package/server/services/cli_agent/factory.py +48 -0
- package/server/services/cli_agent/lockfile.py +141 -0
- package/server/services/cli_agent/mcp_server.py +482 -0
- package/server/services/cli_agent/protocol.py +173 -0
- package/server/services/cli_agent/providers/__init__.py +9 -0
- package/server/services/cli_agent/providers/anthropic_claude.py +419 -0
- package/server/services/cli_agent/providers/google_gemini.py +80 -0
- package/server/services/cli_agent/providers/openai_codex.py +310 -0
- package/server/services/cli_agent/service.py +607 -0
- package/server/services/cli_agent/session.py +618 -0
- package/server/services/cli_agent/types.py +227 -0
- package/server/services/cli_agent/workflow_tools.py +233 -0
- package/server/services/credential_registry.py +26 -1
- package/server/services/deployment/manager.py +26 -145
- package/server/services/deployment/poll_registry.py +59 -0
- package/server/services/event_waiter.py +76 -246
- package/server/services/events/__init__.py +54 -0
- package/server/services/events/cli.py +78 -0
- package/server/services/events/daemon.py +163 -0
- package/server/services/events/envelope.py +281 -0
- package/server/services/events/lifecycle.py +99 -0
- package/server/services/events/oauth_lifecycle.py +534 -0
- package/server/services/events/polling.py +60 -0
- package/server/services/events/push.py +36 -0
- package/server/services/events/source.py +63 -0
- package/server/services/events/triggers.py +118 -0
- package/server/services/events/verifiers/__init__.py +25 -0
- package/server/services/events/verifiers/base.py +28 -0
- package/server/services/events/verifiers/github.py +25 -0
- package/server/services/events/verifiers/hmac_basic.py +32 -0
- package/server/services/events/verifiers/standard_webhooks.py +47 -0
- package/server/services/events/verifiers/stripe.py +42 -0
- package/server/services/events/webhook.py +105 -0
- package/server/services/handlers/tools.py +28 -186
- package/server/services/llm/config.py +7 -0
- package/server/services/llm/factory.py +8 -2
- package/server/services/memory/__init__.py +52 -0
- package/server/services/memory/jsonl.py +80 -0
- package/server/services/memory/markdown.py +65 -0
- package/server/services/memory/state.py +112 -0
- package/server/services/memory/vector_store.py +40 -0
- package/server/services/model_registry.py +76 -0
- package/server/services/node_allowlist.py +71 -15
- package/server/services/node_executor.py +2 -2
- package/server/services/node_output_schemas.py +21 -10
- package/server/services/node_spec.py +1 -1
- package/server/services/oauth_utils.py +1 -1
- package/server/services/plugin/__init__.py +2 -0
- package/server/services/plugin/base.py +44 -2
- package/server/services/plugin/credential.py +288 -1
- package/server/services/plugin/deps.py +105 -0
- package/server/services/plugin/edge_walker.py +12 -4
- package/server/services/plugin/oauth.py +381 -0
- package/server/services/plugin/polling.py +247 -0
- package/server/services/plugin/registry.py +145 -0
- package/server/services/plugin/singleton.py +65 -0
- package/server/services/plugin/ws.py +81 -0
- package/server/services/process_service.py +31 -2
- package/server/services/status_broadcaster.py +155 -238
- package/server/services/temporal/workflow.py +7 -7
- package/server/services/workflow.py +21 -3
- package/server/services/ws_handler_registry.py +111 -28
- package/server/skills/GUIDE.md +16 -1
- package/server/skills/assistant/agent-builder-skill/SKILL.md +166 -0
- package/server/skills/payments_agent/stripe-skill/SKILL.md +306 -0
- package/server/tests/credentials/test_auth_service.py +16 -9
- package/server/tests/credentials/test_credential_broadcasts.py +219 -0
- package/server/tests/credentials/test_google_oauth.py +6 -6
- package/server/tests/credentials/test_oauth_utils.py +1 -1
- package/server/tests/credentials/test_twitter_oauth.py +2 -2
- package/server/tests/credentials/test_websocket_handlers.py +44 -20
- package/server/tests/llm/test_factory.py +1 -0
- package/server/tests/llm/test_wiring.py +5 -1
- package/server/tests/nodes/_compat.py +24 -24
- package/server/tests/nodes/test_agent_builder.py +439 -0
- package/server/tests/nodes/test_ai_tools.py +18 -14
- package/server/tests/nodes/test_code_fs_process.py +17 -8
- package/server/tests/nodes/test_email.py +10 -9
- package/server/tests/nodes/test_google_workspace.py +2 -2
- package/server/tests/nodes/test_specialized_agents.py +100 -53
- package/server/tests/nodes/test_stripe_plugin.py +293 -0
- package/server/tests/nodes/test_telegram_social.py +4 -4
- package/server/tests/nodes/test_twitter.py +1 -1
- package/server/tests/nodes/test_web_automation.py +2 -2
- package/server/tests/nodes/test_whatsapp.py +9 -9
- package/server/tests/services/cli_agent/__init__.py +0 -0
- package/server/tests/services/cli_agent/test_mcp_server.py +432 -0
- package/server/tests/services/cli_agent/test_providers.py +358 -0
- package/server/tests/services/cli_agent/test_service.py +298 -0
- package/server/tests/services/memory/__init__.py +0 -0
- package/server/tests/services/memory/test_jsonl.py +188 -0
- package/server/tests/services/test_events.py +333 -0
- package/server/tests/test_node_spec.py +56 -16
- package/server/tests/test_plugin_helpers.py +116 -0
- package/server/tests/test_plugin_self_containment.py +486 -0
- package/server/tests/test_status_broadcasts.py +425 -0
- package/workflows/{AI Assistant_workflow-1777421105154-0m4snkzjf.json → AI Assistant_workflow-1778504793388-ou1m1tz2x.json } +70 -266
- package/workflows/{AI Employee_workflow-1777720598005-u4cm858dv.json → AI Employee_example_workflow-1777720598005-u4cm858dv.json } +112 -112
- package/workflows/Claude Assistant_workflow-1778380124051-mdibn807c.json +709 -0
- package/client/dist/assets/ActionBar-vzPpSR77.js +0 -1
- package/client/dist/assets/ApiKeyInput-Ds7AKFe8.js +0 -1
- package/client/dist/assets/ApiKeyPanel-gfblELep.js +0 -1
- package/client/dist/assets/ApiUsageSection-BMNWTe2r.js +0 -1
- package/client/dist/assets/EmailPanel-B1Om64p5.js +0 -1
- package/client/dist/assets/OAuthPanel-CXyQYGBz.js +0 -1
- package/client/dist/assets/QrPairingPanel-BgNuI1we.js +0 -1
- package/client/dist/assets/RateLimitSection-YYK8sx1T.js +0 -1
- package/client/dist/assets/StatusCard-DuYA5hJR.js +0 -1
- package/client/dist/assets/index-D9tZfgvi.js +0 -363
- package/client/dist/assets/index-al7snTkG.css +0 -1
- package/client/src/components/credentials/providers.tsx +0 -177
- package/server/routers/google.py +0 -277
- package/server/routers/maps.py +0 -142
- package/server/routers/twitter.py +0 -365
- package/server/services/claude_code_service.py +0 -106
- package/server/services/memory.py +0 -159
- package/server/services/node_option_loaders/__init__.py +0 -77
- package/server/services/node_option_loaders/android_loaders.py +0 -55
- package/server/services/node_option_loaders/google_loaders.py +0 -97
- package/server/services/node_option_loaders/whatsapp_loaders.py +0 -69
- package/server/services/twitter_oauth.py +0 -411
- package/server/services/websocket_client.py +0 -29
- /package/server/{services/android → nodes/android/_relay}/__init__.py +0 -0
- /package/server/{services/android → nodes/android/_relay}/broadcaster.py +0 -0
- /package/server/{services/android → nodes/android/_relay}/manager.py +0 -0
- /package/server/{services/android → nodes/android/_relay}/protocol.py +0 -0
- /package/server/{services/browser_service.py → nodes/browser/_service.py} +0 -0
- /package/server/{services/whatsapp_service.py → nodes/whatsapp/_service.py} +0 -0
- /package/server/skills/{task_agent → assistant}/write-todos-skill/SKILL.md +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as u,w as d,x as p,y as f,z as m,F as g,j as a,B as x,L as b}from"./index-D9tZfgvi.js";function S(o){const t=u.c(7),i=d(),r=p(),s=f(),n=m(),l=g();if(!o)return null;let e;return t[0]!==r||t[1]!==n||t[2]!==o||t[3]!==s||t[4]!==l||t[5]!==i?(e={whatsapp:i,android:r,twitter:s,google:n,telegram:l}[o]??null,t[0]=r,t[1]=n,t[2]=o,t[3]=s,t[4]=l,t[5]=i,t[6]=e):e=t[6],e}const y=o=>{const t=u.c(7),{actions:i,loading:r}=o;let s;if(t[0]!==i||t[1]!==r){let l;t[3]!==r?(l=e=>{const c=r===e.key;return a.jsxs(x,{variant:"outline",onClick:e.onClick,disabled:e.disabled||c,style:{backgroundColor:`${e.color}25`,borderColor:`${e.color}60`,color:e.color},children:[c?a.jsx(b,{className:"h-4 w-4 animate-spin"}):e.icon,e.label]},e.key)},t[3]=r,t[4]=l):l=t[4],s=i.filter(j).map(l),t[0]=i,t[1]=r,t[2]=s}else s=t[2];let n;return t[5]!==s?(n=a.jsx("div",{className:"flex justify-center gap-2 border-t border-border pt-3",children:s}),t[5]=s,t[6]=n):n=t[6],n};function j(o){return!o.hidden}export{y as A,S as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as j,j as s,I as p,E as d,n as v,B as c,L as N,h as w,S as y,v as k}from"./index-D9tZfgvi.js";const g=({value:r,onChange:o,onSave:x,onDelete:i,placeholder:h="Enter API key...",loading:n=!1,isStored:e=!1,disabled:a=!1,saveLabel:m="Validate",savedLabel:u="Valid"})=>{const[t,f]=j.useState(!1);return s.jsxs("div",{className:"flex w-full items-stretch gap-1",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(p,{type:t?"text":"password",value:r,onChange:l=>o(l.target.value),placeholder:h,disabled:a,className:"font-mono pr-9"}),s.jsx("button",{type:"button",onClick:()=>f(l=>!l),className:"absolute top-1/2 right-2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":t?"Hide key":"Show key",children:t?s.jsx(d,{className:"h-4 w-4"}):s.jsx(v,{className:"h-4 w-4"})})]}),s.jsxs(c,{variant:"default",onClick:x,disabled:!r.trim()||a||n,children:[n?s.jsx(N,{className:"h-4 w-4 animate-spin"}):e?s.jsx(w,{className:"h-4 w-4"}):s.jsx(y,{className:"h-4 w-4"}),e?u:m]}),e&&i&&s.jsx(c,{variant:"destructive",size:"icon",onClick:i,disabled:a,children:s.jsx(k,{className:"h-4 w-4"})})]})};export{g as A};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as I,r as c,j as s,A as B,a as P,b as U,D as K,c as z,L as F,d as L,e as T,B as H,R as M,f as V,N as O,C as q,g as G,h as J,i as Q,k as W,l as X}from"./index-D9tZfgvi.js";import{A as Y}from"./ApiKeyInput-Ds7AKFe8.js";import{u as Z,P as ee}from"./RateLimitSection-YYK8sx1T.js";import{A as se}from"./ApiUsageSection-BMNWTe2r.js";const R=u=>{const e=V.c(8),{label:t,value:n,className:a}=u;let l;e[0]!==t?(l=s.jsx("span",{className:"text-xs text-muted-foreground",children:t}),e[0]=t,e[1]=l):l=e[1];const o=`text-lg font-semibold ${a??""}`;let r;e[2]!==o||e[3]!==n?(r=s.jsx("span",{className:o,children:n}),e[2]=o,e[3]=n,e[4]=r):r=e[4];let i;return e[5]!==l||e[6]!==r?(i=s.jsxs("div",{className:"flex flex-col",children:[l,r]}),e[5]=l,e[6]=r,e[7]=i):i=e[7],i},te=({providerId:u,providerName:e})=>{const{getProviderUsageSummary:t,isConnected:n}=I(),[a,l]=c.useState(null),[o,r]=c.useState(!1),[i,f]=c.useState(!1),x=c.useCallback(async()=>{if(n){r(!0);try{const d=await t();l(d.find(h=>h.provider===u)??null)}finally{r(!1)}}},[n,u,t]);return c.useEffect(()=>{i&&x()},[i,x]),s.jsx(B,{type:"single",collapsible:!0,onValueChange:d=>f(d==="usage"),children:s.jsxs(P,{value:"usage",children:[s.jsx(U,{children:s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx(K,{className:"h-4 w-4"})," Usage & Costs"]})}),s.jsx(z,{children:o?s.jsx("div",{className:"flex justify-center p-4",children:s.jsx(F,{className:"h-4 w-4 animate-spin text-muted-foreground"})}):!a||a.execution_count===0?s.jsx(L,{variant:"info",children:s.jsxs(T,{children:["No usage data yet for ",e]})}):s.jsxs("div",{className:"flex w-full flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap gap-4",children:[s.jsx(R,{label:"Total Tokens",value:a.total_tokens.toLocaleString(),className:"text-dracula-cyan"}),s.jsx(R,{label:"Total Cost",value:`$${a.total_cost.toFixed(4)}`,className:"text-dracula-green"}),s.jsx(R,{label:"Executions",value:a.execution_count,className:"text-dracula-purple"})]}),s.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[s.jsxs("div",{className:"grid grid-cols-2 divide-x divide-border border-b border-border",children:[s.jsxs("div",{className:"px-3 py-2 text-sm",children:[s.jsx("div",{className:"text-xs text-muted-foreground",children:"Input Tokens"}),s.jsxs("div",{children:[a.total_input_tokens.toLocaleString()," ",s.jsxs("span",{className:"ml-1 text-dracula-green",children:["($",a.total_input_cost.toFixed(4),")"]})]})]}),s.jsxs("div",{className:"px-3 py-2 text-sm",children:[s.jsx("div",{className:"text-xs text-muted-foreground",children:"Output Tokens"}),s.jsxs("div",{children:[a.total_output_tokens.toLocaleString()," ",s.jsxs("span",{className:"ml-1 text-dracula-green",children:["($",a.total_output_cost.toFixed(4),")"]})]})]})]}),a.total_cache_cost>0&&s.jsxs("div",{className:"px-3 py-2 text-sm",children:[s.jsx("span",{className:"text-xs text-muted-foreground",children:"Cache Cost: "}),s.jsxs("span",{className:"text-dracula-green",children:["$",a.total_cache_cost.toFixed(4)]})]})]}),a.models.length>1&&s.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[s.jsx("div",{className:"border-b border-border bg-muted px-3 py-1.5 text-xs font-semibold",children:"By Model"}),s.jsx("div",{className:"divide-y divide-border",children:a.models.map(d=>s.jsxs("div",{className:"grid grid-cols-[1fr_auto] items-center gap-3 px-3 py-2 text-sm",children:[s.jsx("code",{className:"text-xs",children:d.model}),s.jsxs("span",{className:"text-dracula-green",children:["$",d.total_cost.toFixed(4)]})]},d.model))})]}),s.jsxs(H,{size:"sm",variant:"outline",onClick:x,disabled:o,children:[o?s.jsx(F,{className:"h-3 w-3 animate-spin"}):s.jsx(M,{className:"h-3 w-3"}),"Refresh"]})]})})]})})},oe=u=>{const e=V.c(56),{config:t,visible:n}=u,a=Z(t,n),l=t.fields?.[0],[o,r]=c.useState(""),[i,f]=c.useState(a.stored);let x,d;e[0]!==l||e[1]!==a.form||e[2]!==a.stored?(x=()=>{if(a.stored&&l){const m=a.form.getFieldValue(l.key);m&&(r(m),f(!0))}},d=[a.stored,l,a.form],e[0]=l,e[1]=a.form,e[2]=a.stored,e[3]=x,e[4]=d):(x=e[3],d=e[4]),c.useEffect(x,d);let h;e[5]===Symbol.for("react.memo_cache_sentinel")?(h=()=>{r("")},e[5]=h):h=e[5];let $;e[6]!==t.id?($=[t.id],e[6]=t.id,e[7]=$):$=e[7],c.useEffect(h,$);let p;e[8]!==t.color?(p={color:t.color},e[8]=t.color,e[9]=p):p=e[9];let g;e[10]!==t.iconRef?(g=s.jsx(O,{icon:t.iconRef,className:"h-12 w-12 text-2xl"}),e[10]=t.iconRef,e[11]=g):g=e[11];let j;e[12]!==p||e[13]!==g?(j=s.jsx("div",{className:"rounded-lg bg-tint-soft",style:p,children:g}),e[12]=p,e[13]=g,e[14]=j):j=e[14];let v;e[15]!==t.name?(v=s.jsx(q,{className:"text-lg",children:t.name}),e[15]=t.name,e[16]=v):v=e[16];let N;e[17]!==j||e[18]!==v?(N=s.jsxs("div",{className:"flex items-center gap-3",children:[j,v]}),e[17]=j,e[18]=v,e[19]=N):N=e[19];let b;e[20]!==i?(b=i&&s.jsxs(G,{variant:"success",className:"gap-1",children:[s.jsx(J,{className:"h-3 w-3"}),"Connected"]}),e[20]=i,e[21]=b):b=e[21];let y;e[22]!==b||e[23]!==N?(y=s.jsxs(Q,{className:"flex flex-row items-center justify-between gap-3 space-y-0 pb-3",children:[N,b]}),e[22]=b,e[23]=N,e[24]=y):y=e[24];let C;e[25]!==t.id||e[26]!==l||e[27]!==o||e[28]!==a.actions||e[29]!==a.form||e[30]!==a.loading||e[31]!==i?(C=l&&s.jsx(Y,{value:o,onChange:m=>{r(m),a.form.setFieldValue(l.key,m),f(!1)},onSave:()=>a.actions.validate(t.id,o.trim()).then(m=>{m?.isValid&&f(!0)}),onDelete:i?()=>{a.actions.remove(t.id),r(""),f(!1)}:void 0,placeholder:l.placeholder,loading:a.loading==="validate",isStored:i}),e[25]=t.id,e[26]=l,e[27]=o,e[28]=a.actions,e[29]=a.form,e[30]=a.loading,e[31]=i,e[32]=C):C=e[32];let S;e[33]!==C?(S=s.jsx(W,{children:C}),e[33]=C,e[34]=S):S=e[34];let _;e[35]!==y||e[36]!==S?(_=s.jsxs(X,{children:[y,S]}),e[35]=y,e[36]=S,e[37]=_):_=e[37];let w;e[38]!==a.error?(w=a.error&&s.jsx(L,{variant:"destructive",children:s.jsx(T,{children:a.error})}),e[38]=a.error,e[39]=w):w=e[39];let A;e[40]!==t.hasDefaults||e[41]!==t.id?(A=t.hasDefaults&&s.jsx(ee,{providerId:t.id}),e[40]=t.hasDefaults,e[41]=t.id,e[42]=A):A=e[42];let k;e[43]!==t.hasDefaults||e[44]!==t.id||e[45]!==t.name?(k=t.hasDefaults&&s.jsx(te,{providerId:t.id,providerName:t.name}),e[43]=t.hasDefaults,e[44]=t.id,e[45]=t.name,e[46]=k):k=e[46];let D;e[47]!==t.name||e[48]!==t.usageService?(D=t.usageService&&s.jsx(se,{service:t.usageService,serviceName:t.name}),e[47]=t.name,e[48]=t.usageService,e[49]=D):D=e[49];let E;return e[50]!==_||e[51]!==w||e[52]!==A||e[53]!==k||e[54]!==D?(E=s.jsxs("div",{className:"flex flex-col gap-5 p-5",children:[_,w,A,k,D]}),e[50]=_,e[51]=w,e[52]=A,e[53]=k,e[54]=D,e[55]=E):E=e[55],E};export{oe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as h,r as x,j as e,g as u,A as g,a as v,b as N,D as b,c as y,L as f,d as w,e as A,B as C,R as _,f as R}from"./index-D9tZfgvi.js";const $=({service:d,serviceName:s})=>{const{getAPIUsageSummary:o,isConnected:n}=h(),[a,l]=x.useState(null),[c,t]=x.useState(!1),r=x.useCallback(async()=>{if(n){t(!0);try{const i=await o(d);l(i.find(p=>p.service===d)??null)}finally{t(!1)}}},[n,d,o]);x.useEffect(()=>{r()},[r]);const j=a?e.jsxs(u,{variant:"success",children:["$",a.total_cost.toFixed(4)]}):null;return e.jsx(g,{type:"single",collapsible:!0,children:e.jsxs(v,{value:"usage",children:[e.jsx(N,{children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(b,{className:"h-4 w-4 text-dracula-yellow"}),"API Usage & Costs ",j]})}),e.jsx(y,{children:c?e.jsx("div",{className:"flex justify-center p-4",children:e.jsx(f,{className:"h-4 w-4 animate-spin text-muted-foreground"})}):a?e.jsxs("div",{className:"flex w-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsx(m,{label:"Total Cost",value:`$${a.total_cost.toFixed(4)}`,className:"text-dracula-green"}),e.jsx(m,{label:"API Calls",value:a.execution_count,className:"text-dracula-cyan"}),e.jsx(m,{label:"Resources",value:a.total_resources,className:"text-dracula-purple"})]}),a.operations?.length>0&&e.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[e.jsx("div",{className:"border-b border-border bg-muted px-3 py-1.5 text-xs font-semibold",children:"Operations Breakdown"}),e.jsx("div",{className:"divide-y divide-border",children:a.operations.map(i=>e.jsxs("div",{className:"grid grid-cols-[1fr_auto] items-center gap-3 px-3 py-2 text-sm",children:[e.jsx("code",{className:"text-xs text-muted-foreground",children:i.operation}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs(u,{variant:"outline",children:[i.resource_count," resources"]}),e.jsxs(u,{variant:"success",children:["$",i.total_cost.toFixed(4)]})]})]},i.operation))})]}),e.jsxs(C,{size:"sm",variant:"outline",onClick:r,disabled:c,children:[c?e.jsx(f,{className:"h-3 w-3 animate-spin"}):e.jsx(_,{className:"h-3 w-3"}),"Refresh"]})]}):e.jsx(w,{variant:"info",children:e.jsxs(A,{children:["No usage data yet. Use ",s," nodes in your workflows to track costs."]})})})]})})},m=d=>{const s=R.c(8),{label:o,value:n,className:a}=d;let l;s[0]!==o?(l=e.jsx("span",{className:"text-xs text-muted-foreground",children:o}),s[0]=o,s[1]=l):l=s[1];const c=`text-lg font-semibold ${a??""}`;let t;s[2]!==c||s[3]!==n?(t=e.jsx("span",{className:c,children:n}),s[2]=c,s[3]=n,s[4]=t):t=s[4];let r;return s[5]!==l||s[6]!==t?(r=e.jsxs("div",{className:"flex flex-col",children:[l,t]}),s[5]=l,s[6]=t,s[7]=r):r=s[7],r};export{$ as A};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as B,a7 as M,a9 as v,a6 as Y,aa as G,o as W,u as X,r as n,M as Z,O as z,j as e,N as J,V as Q,W as m,X as d,Y as c,Z as ee,_ as p,$ as se,a0 as ae,a1 as re,a2 as oe,a4 as u,I as j,E as te,n as le,a3 as ie,d as ne,e as me,B as T,L as k}from"./index-D9tZfgvi.js";import{S as de}from"./StatusCard-DuYA5hJR.js";const R=[{label:"Gmail",value:"gmail"},{label:"Outlook / Office 365",value:"outlook"},{label:"Yahoo Mail",value:"yahoo"},{label:"iCloud Mail",value:"icloud"},{label:"ProtonMail (Bridge)",value:"protonmail"},{label:"Fastmail",value:"fastmail"},{label:"Custom / Self-hosted",value:"custom"}],ce={gmail:"Use an App Password from Google Account > Security > 2-Step Verification.",outlook:"Use your account password or an App Password.",yahoo:"Use an App Password from Yahoo Account Security.",icloud:"Use an App-Specific Password from your Apple ID.",protonmail:"Requires ProtonMail Bridge running locally (127.0.0.1).",fastmail:"Use an App Password from Settings > Privacy & Security.",custom:"Enter credentials for your self-hosted IMAP/SMTP server below."},pe=R.map(x=>x.value);function ue(x){return B({provider:Y(pe),address:v().min(1,"Email address is required").pipe(G("Enter a valid email address")),password:x?v().min(1,"Password is required"):v().optional(),imapHost:v().optional(),imapPort:M().int().min(1).max(65535).optional(),smtpHost:v().optional(),smtpPort:M().int().min(1).max(65535).optional()}).superRefine((h,o)=>{h.provider==="custom"&&(h.imapHost?.trim()||o.addIssue({code:"custom",path:["imapHost"],message:"IMAP host is required for custom provider"}),h.smtpHost?.trim()||o.addIssue({code:"custom",path:["smtpHost"],message:"SMTP host is required for custom provider"}))})}const F={provider:"gmail",address:"",password:"",imapHost:"",imapPort:993,smtpHost:"",smtpPort:465},fe=({config:x,visible:h})=>{const o=W(),{saveApiKey:t,getStoredApiKey:f,hasStoredKey:V,removeApiKey:l,isConnected:N}=X(),[i,g]=n.useState(!1),[S,y]=n.useState(""),[P,w]=n.useState(null),[A,b]=n.useState(null),[_,O]=n.useState(!1),U=n.useMemo(()=>ue(!i),[i]),r=Z({resolver:z(U),defaultValues:F,mode:"onSubmit"}),C=r.watch("provider");n.useEffect(()=>{if(!h||!N)return;let s=!1;return(async()=>{try{const[a,H,K,q,E,$,I]=await Promise.all([f("email_provider"),f("email_address"),V("email_password"),f("email_imap_host"),f("email_imap_port"),f("email_smtp_host"),f("email_smtp_port")]);if(s)return;r.reset({provider:a||"gmail",address:H||"",password:"",imapHost:q||"",imapPort:E?parseInt(E,10):993,smtpHost:$||"",smtpPort:I?parseInt(I,10):465}),y(H||""),g(K)}catch{s||g(!1)}})(),()=>{s=!0}},[h,N]);const L=async s=>{w("save"),b(null);try{await t("email_provider",s.provider),await t("email_address",s.address.trim()),s.password?.trim()&&await t("email_password",s.password.trim()),s.provider==="custom"&&(s.imapHost&&await t("email_imap_host",s.imapHost.trim()),s.imapPort!=null&&await t("email_imap_port",String(s.imapPort)),s.smtpHost&&await t("email_smtp_host",s.smtpHost.trim()),s.smtpPort!=null&&await t("email_smtp_port",String(s.smtpPort))),g(!0),y(s.address.trim()),r.setValue("password","")}catch(a){b(a.message||"Failed to save email credentials")}finally{w(null)}},D=async()=>{w("remove"),b(null);try{await Promise.all([l("email_password"),l("email_address"),l("email_provider"),l("email_imap_host"),l("email_imap_port"),l("email_smtp_host"),l("email_smtp_port")]),g(!1),y(""),r.reset(F)}catch(s){b(s.message||"Failed to remove credentials")}finally{w(null)}};return e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4 p-5",children:[e.jsx(de,{icon:e.jsx(J,{icon:x.iconRef,className:"h-6 w-6 text-2xl"}),title:x.name,status:{stored:i,address:S},rows:[{label:"Status",ok:s=>s.stored,trueText:"Configured",falseText:"Not configured"},...i&&S?[{label:"Account",ok:()=>!0,trueText:S,falseText:""}]:[]]}),e.jsx(Q,{...r,children:e.jsxs("form",{id:"email-form",onSubmit:r.handleSubmit(L),className:"flex flex-col gap-4",children:[e.jsx(m,{control:r.control,name:"provider",render:({field:s})=>e.jsxs(d,{children:[e.jsx(c,{children:"Provider"}),e.jsxs(ee,{value:s.value,onValueChange:s.onChange,children:[e.jsx(p,{children:e.jsx(se,{children:e.jsx(ae,{placeholder:"Choose a provider"})})}),e.jsx(re,{children:R.map(a=>e.jsx(oe,{value:a.value,children:a.label},a.value))})]}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"address",render:({field:s})=>e.jsxs(d,{children:[e.jsx(c,{children:"Email Address"}),e.jsx(p,{children:e.jsx(j,{placeholder:"you@example.com",...s})}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"password",render:({field:s})=>e.jsxs(d,{children:[e.jsxs(c,{className:"flex items-center gap-2",children:["Password",i&&e.jsx("span",{className:"text-xs font-normal text-muted-foreground",children:"(leave blank to keep existing)"})]}),e.jsx(p,{children:e.jsxs("div",{className:"relative",children:[e.jsx(j,{type:_?"text":"password",placeholder:i?"••••••••":"App password or account password",className:"font-mono pr-9",...s}),e.jsx("button",{type:"button",onClick:()=>O(a=>!a),className:"absolute top-1/2 right-2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":_?"Hide password":"Show password",children:_?e.jsx(te,{className:"h-4 w-4"}):e.jsx(le,{className:"h-4 w-4"})})]})}),e.jsx(ie,{children:ce[C]}),e.jsx(u,{})]})}),C==="custom"&&e.jsxs("div",{className:"rounded-md border border-border bg-muted p-3",children:[e.jsx("div",{className:"mb-3 text-sm font-medium",children:"Custom IMAP / SMTP"}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(m,{control:r.control,name:"imapHost",render:({field:s})=>e.jsxs(d,{className:"flex-[2]",children:[e.jsx(c,{children:"IMAP Host"}),e.jsx(p,{children:e.jsx(j,{placeholder:"imap.example.com",...s})}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"imapPort",render:({field:s})=>e.jsxs(d,{className:"flex-1",children:[e.jsx(c,{children:"IMAP Port"}),e.jsx(p,{children:e.jsx(j,{type:"number",min:1,max:65535,...s,value:s.value??"",onChange:a=>s.onChange(a.target.value===""?void 0:Number(a.target.value))})}),e.jsx(u,{})]})})]}),e.jsxs("div",{className:"mt-3 flex gap-3",children:[e.jsx(m,{control:r.control,name:"smtpHost",render:({field:s})=>e.jsxs(d,{className:"flex-[2]",children:[e.jsx(c,{children:"SMTP Host"}),e.jsx(p,{children:e.jsx(j,{placeholder:"smtp.example.com",...s})}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"smtpPort",render:({field:s})=>e.jsxs(d,{className:"flex-1",children:[e.jsx(c,{children:"SMTP Port"}),e.jsx(p,{children:e.jsx(j,{type:"number",min:1,max:65535,...s,value:s.value??"",onChange:a=>s.onChange(a.target.value===""?void 0:Number(a.target.value))})}),e.jsx(u,{})]})})]})]})]})}),A&&e.jsx(ne,{variant:"destructive",children:e.jsx(me,{children:A})}),e.jsx("div",{className:"flex-1"}),e.jsxs("div",{className:"flex justify-center gap-2 border-t border-border pt-3",children:[e.jsxs(T,{type:"submit",form:"email-form",variant:"outline",disabled:P==="save",style:{backgroundColor:`${o.dracula.green}25`,borderColor:`${o.dracula.green}60`,color:o.dracula.green},children:[P==="save"&&e.jsx(k,{className:"h-4 w-4 animate-spin"}),"Save"]}),i&&e.jsxs(T,{type:"button",variant:"outline",onClick:D,disabled:P==="remove",style:{backgroundColor:`${o.dracula.pink}25`,borderColor:`${o.dracula.pink}60`,color:o.dracula.pink},children:[P==="remove"&&e.jsx(k,{className:"h-4 w-4 animate-spin"}),"Remove"]})]})]})};export{fe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as H,j as l,r as D,m as z,I as Y,E as G,n as J,o as K,B as M,L as Q,p as W,d as X,e as Z,N as ee}from"./index-D9tZfgvi.js";import{u as te}from"./RateLimitSection-YYK8sx1T.js";import{A as se,u as le}from"./ActionBar-vzPpSR77.js";import{S as ae}from"./StatusCard-DuYA5hJR.js";import{A as oe}from"./ApiUsageSection-BMNWTe2r.js";const re=n=>{const e=H.c(7),{fields:s,form:d}=n;let t;if(e[0]!==s||e[1]!==d){let r;e[3]!==d?(r=o=>l.jsx(ne,{field:o,form:d},o.key),e[3]=d,e[4]=r):r=e[4],t=s.map(r),e[0]=s,e[1]=d,e[2]=t}else t=e[2];let c;return e[5]!==t?(c=l.jsx("div",{className:"flex w-full flex-col gap-3",children:t}),e[5]=t,e[6]=c):c=e[6],c},ne=({field:n,form:e})=>{const[s,d]=D.useState(!1),t=e.getFieldValue(n.key)??"",[c,r]=D.useState(t),o=!!n.secret;return D.useEffect(()=>{!c&&t&&r(t)},[t]),l.jsxs("div",{className:"grid gap-1.5",children:[l.jsxs(z,{htmlFor:`field-${n.key}`,className:"text-xs",children:[n.label,n.required&&l.jsx("span",{className:"ml-1 text-destructive",children:"*"})]}),l.jsxs("div",{className:"relative",children:[l.jsx(Y,{id:`field-${n.key}`,type:o&&!s?"password":"text",value:c,onChange:i=>{const u=i.target.value;r(u),e.setFieldValue(n.key,u)},placeholder:n.placeholder,className:o?"font-mono pr-9":"font-mono"}),o&&l.jsx("button",{type:"button",onClick:()=>d(i=>!i),className:"absolute top-1/2 right-2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":s?"Hide value":"Show value",children:s?l.jsx(G,{className:"h-4 w-4"}):l.jsx(J,{className:"h-4 w-4"})})]})]})},ce=n=>{const e=H.c(59),{config:s,form:d,connected:t,stored:c,loading:r,error:o,icon:i,onSaveCredentials:u,onLogin:m,onLogout:x,onRefresh:g,extraSection:h}=n,a=K();let p;e[0]!==t?(p={label:"Status",ok:()=>t,trueText:"Connected",falseText:"Not Connected"},e[0]=t,e[1]=p):p=e[1];let f;e[2]!==c?(f={label:"Credentials",ok:()=>c,trueText:"Configured",falseText:"Not configured"},e[2]=c,e[3]=f):f=e[3];let v;e[4]!==p||e[5]!==f?(v=[p,f],e[4]=p,e[5]=f,e[6]=v):v=e[6];const T=v,V=`Login with ${s.name}`,_=!c;let j;e[7]!==t||e[8]!==m||e[9]!==V||e[10]!==_||e[11]!==a.dracula.green?(j={key:"login",label:V,color:a.dracula.green,onClick:m,disabled:_,hidden:t},e[7]=t,e[8]=m,e[9]=V,e[10]=_,e[11]=a.dracula.green,e[12]=j):j=e[12];const q=!t;let k;e[13]!==x||e[14]!==q||e[15]!==a.dracula.pink?(k={key:"logout",label:"Disconnect",color:a.dracula.pink,onClick:x,hidden:q},e[13]=x,e[14]=q,e[15]=a.dracula.pink,e[16]=k):k=e[16];let $;e[17]===Symbol.for("react.memo_cache_sentinel")?($=l.jsx(W,{className:"h-4 w-4"}),e[17]=$):$=e[17];let b;e[18]!==g||e[19]!==a.dracula.cyan?(b={key:"refresh",label:"Refresh",color:a.dracula.cyan,onClick:g,icon:$},e[18]=g,e[19]=a.dracula.cyan,e[20]=b):b=e[20];let A;e[21]!==b||e[22]!==j||e[23]!==k?(A=[j,k,b],e[21]=b,e[22]=j,e[23]=k,e[24]=A):A=e[24];const B=A,E=r==="save";let y;e[25]!==s.name||e[26]!==i||e[27]!==T?(y=l.jsx(ae,{icon:i,title:s.name,rows:T,status:null}),e[25]=s.name,e[26]=i,e[27]=T,e[28]=y):y=e[28];let N;e[29]!==s.callbackUrl||e[30]!==s.fields||e[31]!==s.instructions||e[32]!==t||e[33]!==d||e[34]!==E||e[35]!==u||e[36]!==a.dracula.purple?(N=!t&&s.fields&&l.jsxs("div",{className:"flex w-full flex-col gap-3",children:[l.jsx(re,{fields:s.fields,form:d}),l.jsxs(M,{variant:"outline",onClick:u,disabled:E,style:{backgroundColor:`${a.dracula.purple}25`,borderColor:`${a.dracula.purple}60`,color:a.dracula.purple},children:[E&&l.jsx(Q,{className:"h-4 w-4 animate-spin"}),"Save Credentials"]}),s.instructions&&l.jsxs("div",{className:"text-xs leading-relaxed text-muted-foreground",children:[s.instructions,s.callbackUrl&&l.jsxs(l.Fragment,{children:[l.jsx("br",{}),"Callback URL:"," ",l.jsx("code",{className:"text-dracula-cyan",children:s.callbackUrl})]})]})]}),e[29]=s.callbackUrl,e[30]=s.fields,e[31]=s.instructions,e[32]=t,e[33]=d,e[34]=E,e[35]=u,e[36]=a.dracula.purple,e[37]=N):N=e[37];let C;e[38]!==o?(C=o&&l.jsx(X,{variant:"destructive",children:l.jsx(Z,{children:o})}),e[38]=o,e[39]=C):C=e[39];const I=`${a.dracula.cyan}10`,O=`${a.dracula.cyan}30`;let S;e[40]!==I||e[41]!==O?(S={backgroundColor:I,borderColor:O},e[40]=I,e[41]=O,e[42]=S):S=e[42];const P=t?`Your ${s.name} account is connected.`:c?"Click Login to authorize.":"Enter your credentials above to get started.";let w;e[43]!==P?(w=l.jsx("div",{className:"text-sm leading-relaxed text-muted-foreground",children:P}),e[43]=P,e[44]=w):w=e[44];let R;e[45]!==S||e[46]!==w?(R=l.jsx("div",{className:"rounded-md border p-3",style:S,children:w}),e[45]=S,e[46]=w,e[47]=R):R=e[47];let F;e[48]===Symbol.for("react.memo_cache_sentinel")?(F=l.jsx("div",{className:"flex-1"}),e[48]=F):F=e[48];let L;e[49]!==B||e[50]!==r?(L=l.jsx(se,{actions:B,loading:r}),e[49]=B,e[50]=r,e[51]=L):L=e[51];let U;return e[52]!==h||e[53]!==y||e[54]!==N||e[55]!==C||e[56]!==R||e[57]!==L?(U=l.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[y,N,C,R,h,F,L]}),e[52]=h,e[53]=y,e[54]=N,e[55]=C,e[56]=R,e[57]=L,e[58]=U):U=e[58],U},xe=n=>{const e=H.c(25),{config:s,visible:d}=n,t=te(s,d),r=!!le(s.statusHook)?.connected;let o;e[0]!==s.iconRef?(o=l.jsx(ee,{icon:s.iconRef,className:"h-6 w-6 text-2xl"}),e[0]=s.iconRef,e[1]=o):o=e[1];let i;e[2]!==s.fields||e[3]!==t?(i=()=>{const a=s.fields?.find(f=>f.required&&!t.form.getFieldValue(f.key)?.trim());if(a){t.setError(`${a.label} is required`);return}const p=t.form.getFieldsValue();t.execute("save",async()=>{for(const f of s.fields){const v=p[f.key]?.trim();v&&await t.actions.save(f.key,v)}return t.setStored(!0),{success:!0}})},e[2]=s.fields,e[3]=t,e[4]=i):i=e[4];let u,m,x;e[5]!==t.actions?(u=()=>t.actions.oauthLogin(),m=()=>t.actions.oauthLogout(),x=()=>t.actions.oauthRefresh(),e[5]=t.actions,e[6]=u,e[7]=m,e[8]=x):(u=e[6],m=e[7],x=e[8]);let g;e[9]!==s.name||e[10]!==s.usageService?(g=s.usageService&&l.jsx(oe,{service:s.usageService,serviceName:s.name}),e[9]=s.name,e[10]=s.usageService,e[11]=g):g=e[11];let h;return e[12]!==s||e[13]!==r||e[14]!==t.error||e[15]!==t.form||e[16]!==t.loading||e[17]!==t.stored||e[18]!==o||e[19]!==i||e[20]!==u||e[21]!==m||e[22]!==x||e[23]!==g?(h=l.jsx("div",{className:"flex min-h-0 flex-1 flex-col p-5",children:l.jsx(ce,{config:s,form:t.form,connected:r,stored:t.stored,loading:t.loading,error:t.error,icon:o,onSaveCredentials:i,onLogin:u,onLogout:m,onRefresh:x,extraSection:g})}),e[12]=s,e[13]=r,e[14]=t.error,e[15]=t.form,e[16]=t.loading,e[17]=t.stored,e[18]=o,e[19]=i,e[20]=u,e[21]=m,e[22]=x,e[23]=g,e[24]=h):h=e[24],h};export{xe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{q as N,j as w,h as ge,L as Ce,Q as Ee,r as v,d as k,T as X,s as K,e as z,t as q,o as pe,N as we}from"./index-D9tZfgvi.js";import{A as Re}from"./ApiKeyInput-Ds7AKFe8.js";import{u as Me,R as ye}from"./RateLimitSection-YYK8sx1T.js";import{u as Ae,A as Ne}from"./ActionBar-vzPpSR77.js";import{S as xe}from"./StatusCard-DuYA5hJR.js";var Se=Object.defineProperty,T=Object.getOwnPropertySymbols,Z=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,Y=(a,l,o)=>l in a?Se(a,l,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[l]=o,j=(a,l)=>{for(var o in l||(l={}))Z.call(l,o)&&Y(a,o,l[o]);if(T)for(var o of T(l))J.call(l,o)&&Y(a,o,l[o]);return a},B=(a,l)=>{var o={};for(var i in a)Z.call(a,i)&&l.indexOf(i)<0&&(o[i]=a[i]);if(a!=null&&T)for(var i of T(a))l.indexOf(i)<0&&J.call(a,i)&&(o[i]=a[i]);return o};var b;(a=>{const l=class p{constructor(e,t,s,r){if(this.version=e,this.errorCorrectionLevel=t,this.modules=[],this.isFunction=[],e<p.MIN_VERSION||e>p.MAX_VERSION)throw new RangeError("Version value out of range");if(r<-1||r>7)throw new RangeError("Mask value out of range");this.size=e*4+17;let n=[];for(let c=0;c<this.size;c++)n.push(!1);for(let c=0;c<this.size;c++)this.modules.push(n.slice()),this.isFunction.push(n.slice());this.drawFunctionPatterns();const u=this.addEccAndInterleave(s);if(this.drawCodewords(u),r==-1){let c=1e9;for(let C=0;C<8;C++){this.applyMask(C),this.drawFormatBits(C);const d=this.getPenaltyScore();d<c&&(r=C,c=d),this.applyMask(C)}}h(0<=r&&r<=7),this.mask=r,this.applyMask(r),this.drawFormatBits(r),this.isFunction=[]}static encodeText(e,t){const s=a.QrSegment.makeSegments(e);return p.encodeSegments(s,t)}static encodeBinary(e,t){const s=a.QrSegment.makeBytes(e);return p.encodeSegments([s],t)}static encodeSegments(e,t,s=1,r=40,n=-1,u=!0){if(!(p.MIN_VERSION<=s&&s<=r&&r<=p.MAX_VERSION)||n<-1||n>7)throw new RangeError("Invalid value");let c,C;for(c=s;;c++){const m=p.getNumDataCodewords(c,t)*8,y=M.getTotalBits(e,c);if(y<=m){C=y;break}if(c>=r)throw new RangeError("Data too long")}for(const m of[p.Ecc.MEDIUM,p.Ecc.QUARTILE,p.Ecc.HIGH])u&&C<=p.getNumDataCodewords(c,m)*8&&(t=m);let d=[];for(const m of e){o(m.mode.modeBits,4,d),o(m.numChars,m.mode.numCharCountBits(c),d);for(const y of m.getData())d.push(y)}h(d.length==C);const g=p.getNumDataCodewords(c,t)*8;h(d.length<=g),o(0,Math.min(4,g-d.length),d),o(0,(8-d.length%8)%8,d),h(d.length%8==0);for(let m=236;d.length<g;m^=253)o(m,8,d);let R=[];for(;R.length*8<d.length;)R.push(0);return d.forEach((m,y)=>R[y>>>3]|=m<<7-(y&7)),new p(c,t,R,n)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let s=0;s<this.size;s++)this.setFunctionModule(6,s,s%2==0),this.setFunctionModule(s,6,s%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),t=e.length;for(let s=0;s<t;s++)for(let r=0;r<t;r++)s==0&&r==0||s==0&&r==t-1||s==t-1&&r==0||this.drawAlignmentPattern(e[s],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const t=this.errorCorrectionLevel.formatBits<<3|e;let s=t;for(let n=0;n<10;n++)s=s<<1^(s>>>9)*1335;const r=(t<<10|s)^21522;h(r>>>15==0);for(let n=0;n<=5;n++)this.setFunctionModule(8,n,i(r,n));this.setFunctionModule(8,7,i(r,6)),this.setFunctionModule(8,8,i(r,7)),this.setFunctionModule(7,8,i(r,8));for(let n=9;n<15;n++)this.setFunctionModule(14-n,8,i(r,n));for(let n=0;n<8;n++)this.setFunctionModule(this.size-1-n,8,i(r,n));for(let n=8;n<15;n++)this.setFunctionModule(8,this.size-15+n,i(r,n));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let s=0;s<12;s++)e=e<<1^(e>>>11)*7973;const t=this.version<<12|e;h(t>>>18==0);for(let s=0;s<18;s++){const r=i(t,s),n=this.size-11+s%3,u=Math.floor(s/3);this.setFunctionModule(n,u,r),this.setFunctionModule(u,n,r)}}drawFinderPattern(e,t){for(let s=-4;s<=4;s++)for(let r=-4;r<=4;r++){const n=Math.max(Math.abs(r),Math.abs(s)),u=e+r,c=t+s;0<=u&&u<this.size&&0<=c&&c<this.size&&this.setFunctionModule(u,c,n!=2&&n!=4)}}drawAlignmentPattern(e,t){for(let s=-2;s<=2;s++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+s,Math.max(Math.abs(r),Math.abs(s))!=1)}setFunctionModule(e,t,s){this.modules[t][e]=s,this.isFunction[t][e]=!0}addEccAndInterleave(e){const t=this.version,s=this.errorCorrectionLevel;if(e.length!=p.getNumDataCodewords(t,s))throw new RangeError("Invalid argument");const r=p.NUM_ERROR_CORRECTION_BLOCKS[s.ordinal][t],n=p.ECC_CODEWORDS_PER_BLOCK[s.ordinal][t],u=Math.floor(p.getNumRawDataModules(t)/8),c=r-u%r,C=Math.floor(u/r);let d=[];const g=p.reedSolomonComputeDivisor(n);for(let m=0,y=0;m<r;m++){let x=e.slice(y,y+C-n+(m<c?0:1));y+=x.length;const _=p.reedSolomonComputeRemainder(x,g);m<c&&x.push(0),d.push(x.concat(_))}let R=[];for(let m=0;m<d[0].length;m++)d.forEach((y,x)=>{(m!=C-n||x>=c)&&R.push(y[m])});return h(R.length==u),R}drawCodewords(e){if(e.length!=Math.floor(p.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let t=0;for(let s=this.size-1;s>=1;s-=2){s==6&&(s=5);for(let r=0;r<this.size;r++)for(let n=0;n<2;n++){const u=s-n,C=(s+1&2)==0?this.size-1-r:r;!this.isFunction[C][u]&&t<e.length*8&&(this.modules[C][u]=i(e[t>>>3],7-(t&7)),t++)}}h(t==e.length*8)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let t=0;t<this.size;t++)for(let s=0;s<this.size;s++){let r;switch(e){case 0:r=(s+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=s%3==0;break;case 3:r=(s+t)%3==0;break;case 4:r=(Math.floor(s/3)+Math.floor(t/2))%2==0;break;case 5:r=s*t%2+s*t%3==0;break;case 6:r=(s*t%2+s*t%3)%2==0;break;case 7:r=((s+t)%2+s*t%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[t][s]&&r&&(this.modules[t][s]=!this.modules[t][s])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let u=!1,c=0,C=[0,0,0,0,0,0,0];for(let d=0;d<this.size;d++)this.modules[n][d]==u?(c++,c==5?e+=p.PENALTY_N1:c>5&&e++):(this.finderPenaltyAddHistory(c,C),u||(e+=this.finderPenaltyCountPatterns(C)*p.PENALTY_N3),u=this.modules[n][d],c=1);e+=this.finderPenaltyTerminateAndCount(u,c,C)*p.PENALTY_N3}for(let n=0;n<this.size;n++){let u=!1,c=0,C=[0,0,0,0,0,0,0];for(let d=0;d<this.size;d++)this.modules[d][n]==u?(c++,c==5?e+=p.PENALTY_N1:c>5&&e++):(this.finderPenaltyAddHistory(c,C),u||(e+=this.finderPenaltyCountPatterns(C)*p.PENALTY_N3),u=this.modules[d][n],c=1);e+=this.finderPenaltyTerminateAndCount(u,c,C)*p.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let u=0;u<this.size-1;u++){const c=this.modules[n][u];c==this.modules[n][u+1]&&c==this.modules[n+1][u]&&c==this.modules[n+1][u+1]&&(e+=p.PENALTY_N2)}let t=0;for(const n of this.modules)t=n.reduce((u,c)=>u+(c?1:0),t);const s=this.size*this.size,r=Math.ceil(Math.abs(t*20-s*10)/s)-1;return h(0<=r&&r<=9),e+=r*p.PENALTY_N4,h(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{const e=Math.floor(this.version/7)+2,t=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2;let s=[6];for(let r=this.size-7;s.length<e;r-=t)s.splice(1,0,r);return s}}static getNumRawDataModules(e){if(e<p.MIN_VERSION||e>p.MAX_VERSION)throw new RangeError("Version number out of range");let t=(16*e+128)*e+64;if(e>=2){const s=Math.floor(e/7)+2;t-=(25*s-10)*s-55,e>=7&&(t-=36)}return h(208<=t&&t<=29648),t}static getNumDataCodewords(e,t){return Math.floor(p.getNumRawDataModules(e)/8)-p.ECC_CODEWORDS_PER_BLOCK[t.ordinal][e]*p.NUM_ERROR_CORRECTION_BLOCKS[t.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let t=[];for(let r=0;r<e-1;r++)t.push(0);t.push(1);let s=1;for(let r=0;r<e;r++){for(let n=0;n<t.length;n++)t[n]=p.reedSolomonMultiply(t[n],s),n+1<t.length&&(t[n]^=t[n+1]);s=p.reedSolomonMultiply(s,2)}return t}static reedSolomonComputeRemainder(e,t){let s=t.map(r=>0);for(const r of e){const n=r^s.shift();s.push(0),t.forEach((u,c)=>s[c]^=p.reedSolomonMultiply(u,n))}return s}static reedSolomonMultiply(e,t){if(e>>>8||t>>>8)throw new RangeError("Byte out of range");let s=0;for(let r=7;r>=0;r--)s=s<<1^(s>>>7)*285,s^=(t>>>r&1)*e;return h(s>>>8==0),s}finderPenaltyCountPatterns(e){const t=e[1];h(t<=this.size*3);const s=t>0&&e[2]==t&&e[3]==t*3&&e[4]==t&&e[5]==t;return(s&&e[0]>=t*4&&e[6]>=t?1:0)+(s&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,s){return e&&(this.finderPenaltyAddHistory(t,s),t=0),t+=this.size,this.finderPenaltyAddHistory(t,s),this.finderPenaltyCountPatterns(s)}finderPenaltyAddHistory(e,t){t[0]==0&&(e+=this.size),t.pop(),t.unshift(e)}};l.MIN_VERSION=1,l.MAX_VERSION=40,l.PENALTY_N1=3,l.PENALTY_N2=3,l.PENALTY_N3=40,l.PENALTY_N4=10,l.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],l.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],a.QrCode=l;function o(E,e,t){if(e<0||e>31||E>>>e)throw new RangeError("Value out of range");for(let s=e-1;s>=0;s--)t.push(E>>>s&1)}function i(E,e){return(E>>>e&1)!=0}function h(E){if(!E)throw new Error("Assertion error")}const f=class A{constructor(e,t,s){if(this.mode=e,this.numChars=t,this.bitData=s,t<0)throw new RangeError("Invalid argument");this.bitData=s.slice()}static makeBytes(e){let t=[];for(const s of e)o(s,8,t);return new A(A.Mode.BYTE,e.length,t)}static makeNumeric(e){if(!A.isNumeric(e))throw new RangeError("String contains non-numeric characters");let t=[];for(let s=0;s<e.length;){const r=Math.min(e.length-s,3);o(parseInt(e.substring(s,s+r),10),r*3+1,t),s+=r}return new A(A.Mode.NUMERIC,e.length,t)}static makeAlphanumeric(e){if(!A.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");let t=[],s;for(s=0;s+2<=e.length;s+=2){let r=A.ALPHANUMERIC_CHARSET.indexOf(e.charAt(s))*45;r+=A.ALPHANUMERIC_CHARSET.indexOf(e.charAt(s+1)),o(r,11,t)}return s<e.length&&o(A.ALPHANUMERIC_CHARSET.indexOf(e.charAt(s)),6,t),new A(A.Mode.ALPHANUMERIC,e.length,t)}static makeSegments(e){return e==""?[]:A.isNumeric(e)?[A.makeNumeric(e)]:A.isAlphanumeric(e)?[A.makeAlphanumeric(e)]:[A.makeBytes(A.toUtf8ByteArray(e))]}static makeEci(e){let t=[];if(e<0)throw new RangeError("ECI assignment value out of range");if(e<128)o(e,8,t);else if(e<16384)o(2,2,t),o(e,14,t);else if(e<1e6)o(6,3,t),o(e,21,t);else throw new RangeError("ECI assignment value out of range");return new A(A.Mode.ECI,0,t)}static isNumeric(e){return A.NUMERIC_REGEX.test(e)}static isAlphanumeric(e){return A.ALPHANUMERIC_REGEX.test(e)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let s=0;for(const r of e){const n=r.mode.numCharCountBits(t);if(r.numChars>=1<<n)return 1/0;s+=4+n+r.bitData.length}return s}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let s=0;s<e.length;s++)e.charAt(s)!="%"?t.push(e.charCodeAt(s)):(t.push(parseInt(e.substring(s+1,s+3),16)),s+=2);return t}};f.NUMERIC_REGEX=/^[0-9]*$/,f.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,f.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let M=f;a.QrSegment=f})(b||(b={}));(a=>{(l=>{const o=class{constructor(h,f){this.ordinal=h,this.formatBits=f}};o.LOW=new o(0,1),o.MEDIUM=new o(1,0),o.QUARTILE=new o(2,3),o.HIGH=new o(3,2),l.Ecc=o})(a.QrCode||(a.QrCode={}))})(b||(b={}));(a=>{(l=>{const o=class{constructor(h,f){this.modeBits=h,this.numBitsCharCount=f}numCharCountBits(h){return this.numBitsCharCount[Math.floor((h+7)/17)]}};o.NUMERIC=new o(1,[10,12,14]),o.ALPHANUMERIC=new o(2,[9,11,13]),o.BYTE=new o(4,[8,16,16]),o.KANJI=new o(8,[8,10,12]),o.ECI=new o(7,[0,0,0]),l.Mode=o})(a.QrSegment||(a.QrSegment={}))})(b||(b={}));var L=b;var ve={L:L.QrCode.Ecc.LOW,M:L.QrCode.Ecc.MEDIUM,Q:L.QrCode.Ecc.QUARTILE,H:L.QrCode.Ecc.HIGH},ee=128,te="L",se="#FFFFFF",re="#000000",ne=!1,oe=1,Pe=4,Ie=0,be=.1;function ie(a,l=0){const o=[];return a.forEach(function(i,h){let f=null;i.forEach(function(M,E){if(!M&&f!==null){o.push(`M${f+l} ${h+l}h${E-f}v1H${f+l}z`),f=null;return}if(E===i.length-1){if(!M)return;f===null?o.push(`M${E+l},${h+l} h1v1H${E+l}z`):o.push(`M${f+l},${h+l} h${E+1-f}v1H${f+l}z`);return}M&&f===null&&(f=E)})}),o.join("")}function ae(a,l){return a.slice().map((o,i)=>i<l.y||i>=l.y+l.h?o:o.map((h,f)=>f<l.x||f>=l.x+l.w?h:!1))}function Le(a,l,o,i){if(i==null)return null;const h=a.length+o*2,f=Math.floor(l*be),M=h/l,E=(i.width||f)*M,e=(i.height||f)*M,t=i.x==null?a.length/2-E/2:i.x*M,s=i.y==null?a.length/2-e/2:i.y*M,r=i.opacity==null?1:i.opacity;let n=null;if(i.excavate){let c=Math.floor(t),C=Math.floor(s),d=Math.ceil(E+t-c),g=Math.ceil(e+s-C);n={x:c,y:C,w:d,h:g}}const u=i.crossOrigin;return{x:t,y:s,h:e,w:E,excavation:n,opacity:r,crossOrigin:u}}function Fe(a,l){return l!=null?Math.max(Math.floor(l),0):a?Pe:Ie}function le({value:a,level:l,minVersion:o,includeMargin:i,marginSize:h,imageSettings:f,size:M,boostLevel:E}){let e=N.useMemo(()=>{const c=(Array.isArray(a)?a:[a]).reduce((C,d)=>(C.push(...L.QrSegment.makeSegments(d)),C),[]);return L.QrCode.encodeSegments(c,ve[l],o,void 0,void 0,E)},[a,l,o,E]);const{cells:t,margin:s,numCells:r,calculatedImageSettings:n}=N.useMemo(()=>{let u=e.getModules();const c=Fe(i,h),C=u.length+c*2,d=Le(u,M,c,f);return{cells:u,margin:c,numCells:C,calculatedImageSettings:d}},[e,M,f,i,h]);return{qrcode:e,margin:s,cells:t,numCells:r,calculatedImageSettings:n}}var Oe=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),_e=N.forwardRef(function(l,o){const i=l,{value:h,size:f=ee,level:M=te,bgColor:E=se,fgColor:e=re,includeMargin:t=ne,minVersion:s=oe,boostLevel:r,marginSize:n,imageSettings:u}=i,C=B(i,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:d}=C,g=B(C,["style"]),R=u?.src,m=N.useRef(null),y=N.useRef(null),x=N.useCallback(I=>{m.current=I,typeof o=="function"?o(I):o&&(o.current=I)},[o]),[_,U]=N.useState(!1),{margin:F,cells:D,numCells:Q,calculatedImageSettings:S}=le({value:h,level:M,minVersion:s,boostLevel:r,includeMargin:t,marginSize:n,imageSettings:u,size:f});N.useEffect(()=>{if(m.current!=null){const I=m.current,P=I.getContext("2d");if(!P)return;let W=D;const O=y.current,$=S!=null&&O!==null&&O.complete&&O.naturalHeight!==0&&O.naturalWidth!==0;$&&S.excavation!=null&&(W=ae(D,S.excavation));const G=window.devicePixelRatio||1;I.height=I.width=f*G;const V=f/Q*G;P.scale(V,V),P.fillStyle=E,P.fillRect(0,0,Q,Q),P.fillStyle=e,Oe?P.fill(new Path2D(ie(W,F))):D.forEach(function(de,he){de.forEach(function(fe,me){fe&&P.fillRect(me+F,he+F,1,1)})}),S&&(P.globalAlpha=S.opacity),$&&P.drawImage(O,S.x+F,S.y+F,S.w,S.h)}}),N.useEffect(()=>{U(!1)},[R]);const ue=j({height:f,width:f},d);let H=null;return R!=null&&(H=N.createElement("img",{src:R,key:R,style:{display:"none"},onLoad:()=>{U(!0)},ref:y,crossOrigin:S?.crossOrigin})),N.createElement(N.Fragment,null,N.createElement("canvas",j({style:ue,height:f,width:f,ref:x,role:"img"},g)),H)});_e.displayName="QRCodeCanvas";var ce=N.forwardRef(function(l,o){const i=l,{value:h,size:f=ee,level:M=te,bgColor:E=se,fgColor:e=re,includeMargin:t=ne,minVersion:s=oe,boostLevel:r,title:n,marginSize:u,imageSettings:c}=i,C=B(i,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:d,cells:g,numCells:R,calculatedImageSettings:m}=le({value:h,level:M,minVersion:s,boostLevel:r,includeMargin:t,marginSize:u,imageSettings:c,size:f});let y=g,x=null;c!=null&&m!=null&&(m.excavation!=null&&(y=ae(g,m.excavation)),x=N.createElement("image",{href:c.src,height:m.h,width:m.w,x:m.x+d,y:m.y+d,preserveAspectRatio:"none",opacity:m.opacity,crossOrigin:m.crossOrigin}));const _=ie(y,d);return N.createElement("svg",j({height:f,width:f,viewBox:`0 0 ${R} ${R}`,ref:o,role:"img"},C),!!n&&N.createElement("title",null,n),N.createElement("path",{fill:E,d:`M0,0 h${R}v${R}H0z`,shapeRendering:"crispEdges"}),N.createElement("path",{fill:e,d:_,shapeRendering:"crispEdges"}),x)});ce.displayName="QRCodeSVG";const Te=a=>a.length<100?!1:a.startsWith("data:image/")||a.startsWith("iVBOR")||a.startsWith("/9j/")?!0:a.length>5e3?/^[A-Za-z0-9+/=]+$/.test(a):!1,De=({value:a,isConnected:l=!1,size:o=280,loading:i=!1,connectedTitle:h="Connected",connectedSubtitle:f="No QR code needed",emptyText:M="QR code not available"})=>{if(l)return w.jsxs("div",{className:"flex flex-col items-center gap-3 p-8 text-center",children:[w.jsx(ge,{className:"h-10 w-10 text-success"}),w.jsx("div",{className:"text-base font-semibold",children:h}),w.jsx("div",{className:"text-sm text-muted-foreground",children:f})]});if(i)return w.jsxs("div",{className:"p-10 text-center",children:[w.jsx(Ce,{className:"mx-auto h-8 w-8 animate-spin text-muted-foreground"}),w.jsx("div",{className:"mt-4 text-sm text-muted-foreground",children:"Waiting for QR code..."})]});if(!a)return w.jsxs("div",{className:"p-10 text-center text-muted-foreground",children:[w.jsx(Ee,{className:"mx-auto h-12 w-12 opacity-30"}),w.jsx("div",{className:"mt-4",children:M})]});if(Te(a)){const E=a.startsWith("data:")?a:`data:image/png;base64,${a}`;return w.jsx("div",{className:"p-4 text-center",children:w.jsx("img",{src:E,alt:"QR Code",style:{width:o,height:o,imageRendering:"pixelated"}})})}return w.jsx(Qe,{value:a,size:o})},Qe=({value:a,size:l})=>{const[o,i]=v.useState(null);return v.useEffect(()=>{i(null)},[a]),o?w.jsx("div",{className:"p-6 text-center",children:w.jsxs(k,{variant:"warning",children:[w.jsx(X,{className:"h-4 w-4"}),w.jsx(K,{children:"QR Code Error"}),w.jsx(z,{children:"The QR code data is too large to display. Please try refreshing or reconnecting."})]})}):w.jsx(je,{onError:h=>i(h),children:w.jsx("div",{className:"p-4 text-center",children:w.jsx(ce,{value:a,size:l,level:"L"})})})};class je extends N.Component{constructor(l){super(l),this.state={hasError:!1}}static getDerivedStateFromError(l){return{hasError:!0}}componentDidCatch(l){console.error("[QRCodeDisplay] QR code rendering error:",l.message),this.props.onError(l.message)}render(){return this.state.hasError?w.jsx("div",{className:"p-6 text-center",children:w.jsxs(k,{variant:"warning",children:[w.jsx(X,{className:"h-4 w-4"}),w.jsx(K,{children:"QR Code Error"}),w.jsx(z,{children:"The QR code data is too large to display. Please try refreshing or reconnecting."})]})}):this.props.children}}const Be=()=>{const{getWhatsAppStatus:a,getWhatsAppQR:l,sendWhatsAppMessage:o,startWhatsAppConnection:i,restartWhatsAppConnection:h,isConnected:f}=q(),[M,E]=v.useState(!1),[e,t]=v.useState(null),[s,r]=v.useState(null),n=v.useCallback(async()=>{E(!0),t(null);try{const g=await a();return r(g),g}catch(g){const R=g.message||"Failed to get status";return t(R),{connected:!1}}finally{E(!1)}},[a]),u=v.useCallback(async()=>{E(!0),t(null);try{const g=await l();return g.connected&&r({connected:!0}),g}catch(g){const R=g.message||"Failed to get QR code";return t(R),{connected:!1,message:R}}finally{E(!1)}},[l]),c=v.useCallback(async(g,R)=>{E(!0),t(null);try{const m=await o(g,R);return!m.success&&m.error&&t(m.error),m}catch(m){const y=m.message||"Failed to send message";return t(y),{success:!1,error:y}}finally{E(!1)}},[o]),C=v.useCallback(async()=>{E(!0),t(null);try{const g=await i();return!g.success&&g.message&&t(g.message),g}catch(g){const R=g.message||"Failed to start connection";return t(R),{success:!1,message:R}}finally{E(!1)}},[i]),d=v.useCallback(async()=>{E(!0),t(null);try{const g=await h();return!g.success&&g.message&&t(g.message),g}catch(g){const R=g.message||"Failed to restart connection";return t(R),{success:!1,message:R}}finally{E(!1)}},[h]);return{getStatus:n,getQRCode:u,sendMessage:c,startConnection:C,restartConnection:d,isLoading:M,lastError:e,connectionStatus:s,isConnected:f}},Ve=({config:a,visible:l})=>{const o=pe(),i=Me(a,l),h=Ae(a.statusHook),{startConnection:f,restartConnection:M,getStatus:E}=Be(),{sendRequest:e,setAndroidStatus:t}=q(),s=a.qr,r=s.isConnected(h),n=h?.[s.qrField],u=a.fields?.[0],c=v.useMemo(()=>({start:()=>i.execute("start",f),restart:()=>i.execute("restart",M),refresh:()=>i.execute("refresh",E),connect:()=>i.execute("connect",async()=>{const d=i.form.getFieldValue("android_remote")?.trim();if(!d){i.setError("No API key configured");return}const g=await e("android_relay_connect",{url:"",api_key:d});return g.qr_data&&t(R=>({...R,connected:!0,paired:!1,qr_data:g.qr_data,session_token:g.session_token||R.session_token})),g}),disconnect:()=>i.execute("disconnect",()=>e("android_relay_disconnect",{}))}),[i,f,M,E,e,t]),C=(a.actions??[]).map(d=>({key:d.key,label:d.label,color:o.dracula[d.themeColor]??d.themeColor,onClick:c[d.key]??(()=>{}),hidden:d.hidden?.(h,i.stored),disabled:d.disabled?.(h,i.stored)}));return w.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4 p-5",children:[u&&w.jsx(Re,{value:i.form.getFieldValue(u.key)||"",onChange:d=>i.form.setFieldValue(u.key,d),onSave:()=>i.actions.save(u.key,(i.form.getFieldValue(u.key)??"").trim()).then(()=>i.setStored(!0)),onDelete:()=>i.actions.remove(u.key),placeholder:u.placeholder,loading:i.loading==="save",isStored:i.stored}),a.statusRows&&w.jsx(xe,{icon:w.jsx(we,{icon:a.iconRef,className:"h-6 w-6 text-2xl"}),title:a.name,rows:a.statusRows,status:h}),w.jsxs("div",{className:"flex min-h-[300px] flex-1 flex-col items-center justify-center rounded-lg bg-muted p-5",children:[w.jsx(De,{value:n,isConnected:r,size:280,connectedTitle:s.connectedTitle,connectedSubtitle:s.connectedSubtitle(h),loading:s.isLoading(h),emptyText:s.emptyText(h,i.stored)}),!r&&n&&w.jsx("div",{className:"mt-3 text-sm text-muted-foreground",children:s.scanText})]}),a.hasRateLimits&&r&&w.jsx(ye,{}),i.error&&w.jsx(k,{variant:"destructive",children:w.jsx(z,{children:i.error})}),w.jsx(Ne,{actions:C,loading:i.loading})]})};export{Ve as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{G as je,r as i,u as te,t as le,H as pe,J as H,K as ge,M as re,O as oe,P as ie,j as e,A as ce,a as de,b as ue,U as ye,c as me,V as xe,W as _,X as b,Y as w,Z as z,_ as C,$ as Y,a0 as G,a1 as I,a2 as K,a3 as P,a4 as q,g as $,I as U,a5 as J,B as X,L as he,a6 as ae,a7 as v,a8 as Q,a9 as _e,d as ve,e as be,f as we}from"./index-D9tZfgvi.js";const W={};function Re(n,l){const m=je(),[x,y]=i.useState(null),[p,c]=i.useState(null),[F,d]=i.useState(!1);i.useEffect(()=>{c(null),y(null),d(!1)},[n.id]);const{validateApiKey:h,saveApiKey:A,getStoredApiKey:N,hasStoredKey:o,removeApiKey:D,getProviderDefaults:T,saveProviderDefaults:a,getProviderUsageSummary:f,getAPIUsageSummary:j,getStoredModels:L,getModelConstraints:E,isConnected:M}=te(),{sendRequest:S}=le(),R=pe({queryKey:H.credentialValues.byProvider(n.id).queryKey,queryFn:async()=>{if(!n.fields)return W;const t=await Promise.all(n.fields.map(async r=>{const ee=r.key==="apiKey"?n.id:r.key;if(!await o(ee))return null;const se=await N(ee);return se?[r.key,se]:null})),g={};for(const r of t)r&&(g[r[0]]=r[1]);return g},enabled:l&&M&&!!n.fields,staleTime:ge.FOREVER}).data??W,s=i.useRef(R);s.current=R;const u=n.id,k=i.useCallback(t=>{m.setQueryData(H.credentialValues.byProvider(u).queryKey,g=>t(g??W))},[m,u]),fe=i.useMemo(()=>({getFieldValue:t=>s.current[t],getFieldsValue:()=>({...s.current}),setFieldValue:(t,g)=>{k(r=>({...r,[t]:g}))},setFieldsValue:t=>{k(g=>({...g,...t}))},resetFields:()=>k(()=>W)}),[k]);Object.keys(R).length>0&&!F&&d(!0);const V=i.useCallback(async(t,g)=>{y(t),c(null);try{const r=await g();return r&&!r.success&&r.error&&c(r.error),r}catch(r){c(r.message||`Failed: ${t}`);return}finally{y(null)}},[]),B=i.useCallback(()=>m.invalidateQueries({queryKey:H.credentialValues.byProvider(u).queryKey}),[m,u]);return{form:fe,values:R,loading:x,error:p,stored:F,setStored:d,setError:c,execute:V,actions:{validate:(t,g)=>V("validate",async()=>{const r=await h(t,g);return r?.isValid&&(d(!0),await B()),r}),save:(t,g)=>V("save",async()=>{const r=await A(t,g);return r?.isValid&&(d(!0),await B()),r}),remove:t=>V("remove",async()=>{await D(t),d(!1),await B()}),oauthLogin:()=>V("login",async()=>{const t=await S(n.ws.login,{});return t.success&&t.url&&window.open(t.url,"_blank"),t}),oauthLogout:()=>V("logout",()=>S(n.ws.logout,{})),oauthRefresh:()=>V("refresh",()=>S(n.ws.status,{})),sendWs:(t,g)=>V(t,()=>S(t,g??{}))},isConnected:M,getProviderDefaults:T,saveProviderDefaults:a,getProviderUsageSummary:f,getAPIUsageSummary:j,getStoredModels:L,getModelConstraints:E}}const Ce=ie({default_model:_e().optional().default(""),temperature:v().optional(),max_tokens:v().int().min(1).optional(),thinking_enabled:Q().optional().default(!1),thinking_budget:v().int().min(1024).max(16e3).optional(),reasoning_effort:ae(["low","medium","high"]).optional(),reasoning_format:ae(["parsed","hidden"]).optional()}),Ve=({providerId:n})=>{const{getProviderDefaults:l,saveProviderDefaults:m,getStoredModels:x,getModelConstraints:y,isConnected:p}=te(),[c,F]=i.useState([]),[d,h]=i.useState(null),[A,N]=i.useState(!1),o=re({resolver:oe(Ce),defaultValues:{}}),D=o.watch("default_model"),T=o.watch("thinking_enabled"),{isDirty:a}=o.formState;i.useEffect(()=>{if(!p)return;let s=!1;return(async()=>{N(!0);try{const[u,k]=await Promise.all([l(n),x(n)]);s||(o.reset(u??{}),k?.length&&F(k))}finally{s||N(!1)}})(),()=>{s=!0}},[n,p]),i.useEffect(()=>{if(!p||!D)return;let s=!1;return y(D,n).then(u=>{s||(h(u),u?.max_output_tokens&&o.getValues("max_tokens")!==u.max_output_tokens&&o.setValue("max_tokens",u.max_output_tokens,{shouldDirty:!1}))}),()=>{s=!0}},[D,n,p]);const f=i.useCallback(async s=>{N(!0);try{await m(n,s)&&o.reset(s)}finally{N(!1)}},[n,m,o]),[j,L]=d?.temperature_range??[0,2],E=d?.max_output_tokens,M=d?.thinking_type,S=d?.supports_thinking,Z=d?.is_reasoning_model&&j===L,R=s=>u=>{const k=u.target.value;s.onChange(k===""?void 0:Number(k))};return e.jsx(ce,{type:"single",collapsible:!0,defaultValue:"defaults",children:e.jsxs(de,{value:"defaults",children:[e.jsx(ue,{children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ye,{className:"h-4 w-4"})," Default Parameters"]})}),e.jsx(me,{children:e.jsx("div",{className:A?"pointer-events-none opacity-60":"",children:e.jsx(xe,{...o,children:e.jsxs("form",{id:`provider-defaults-form-${n}`,onSubmit:o.handleSubmit(f),className:"flex flex-col gap-3",children:[e.jsx(_,{control:o.control,name:"default_model",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Default Model"}),e.jsxs(z,{value:s.value??"",onValueChange:s.onChange,children:[e.jsx(C,{children:e.jsx(Y,{children:e.jsx(G,{placeholder:c.length?"Select model":"Validate API key first"})})}),e.jsx(I,{children:c.map(u=>e.jsx(K,{value:u,children:u},u))})]}),e.jsx(P,{children:"Model used when none specified"}),e.jsx(q,{})]})}),d&&e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[E!=null&&e.jsxs($,{variant:"success",children:["Max Output: ",E.toLocaleString()]}),d.context_length!=null&&e.jsxs($,{variant:"info",children:["Context: ",d.context_length.toLocaleString()]}),e.jsxs($,{variant:"secondary",children:["Temp: ",j,"-",L]}),S&&e.jsxs($,{variant:"warning",children:["Thinking: ",M]}),d.is_reasoning_model&&e.jsx($,{variant:"outline",children:"Reasoning"})]}),!Z&&e.jsx(_,{control:o.control,name:"temperature",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Temperature"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:j,max:L,step:.1,className:"w-24",value:s.value??"",onChange:R(s)})}),e.jsxs(P,{children:["Controls randomness (",j,"-",L,")"]}),e.jsx(q,{})]})}),e.jsx(_,{control:o.control,name:"max_tokens",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Max Tokens"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:1,max:E||void 0,className:"w-32",value:s.value??"",onChange:R(s)})}),e.jsx(P,{children:E!=null?`Up to ${E.toLocaleString()}`:"Maximum response length"}),e.jsx(q,{})]})}),S&&e.jsx(_,{control:o.control,name:"thinking_enabled",render:({field:s})=>e.jsxs(b,{className:"flex flex-row items-center justify-between rounded-md border border-border p-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(w,{children:"Thinking / Reasoning"}),e.jsxs(P,{children:["Extended thinking (",M,")"]})]}),e.jsx(C,{children:e.jsx(J,{checked:!!s.value,onCheckedChange:s.onChange})})]})}),S&&M==="budget"&&T&&e.jsx(_,{control:o.control,name:"thinking_budget",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Thinking Budget"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:1024,max:16e3,className:"w-28",value:s.value??"",onChange:R(s)})}),e.jsx(P,{children:"Token budget (1024-16000)"}),e.jsx(q,{})]})}),S&&M==="effort"&&T&&e.jsx(_,{control:o.control,name:"reasoning_effort",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Reasoning Effort"}),e.jsxs(z,{value:s.value??"",onValueChange:s.onChange,children:[e.jsx(C,{children:e.jsx(Y,{className:"w-32",children:e.jsx(G,{placeholder:"Select"})})}),e.jsxs(I,{children:[e.jsx(K,{value:"low",children:"Low"}),e.jsx(K,{value:"medium",children:"Medium"}),e.jsx(K,{value:"high",children:"High"})]})]}),e.jsx(P,{children:"Low, medium, or high"}),e.jsx(q,{})]})}),S&&M==="format"&&T&&e.jsx(_,{control:o.control,name:"reasoning_format",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Reasoning Format"}),e.jsxs(z,{value:s.value??"",onValueChange:s.onChange,children:[e.jsx(C,{children:e.jsx(Y,{className:"w-32",children:e.jsx(G,{placeholder:"Select"})})}),e.jsxs(I,{children:[e.jsx(K,{value:"parsed",children:"Parsed"}),e.jsx(K,{value:"hidden",children:"Hidden"})]})]}),e.jsx(P,{children:"Parsed or hidden"}),e.jsx(q,{})]})}),e.jsxs(X,{type:"submit",disabled:!a||A,variant:a?"default":"outline",className:"w-full",children:[A&&e.jsx(he,{className:"h-4 w-4 animate-spin"}),"Save Defaults"]})]})})})})]})})},Se=ie({enabled:Q().default(!1),min_delay_ms:v().int().min(0).optional(),max_delay_ms:v().int().min(0).optional(),typing_delay_ms:v().int().min(0).optional(),link_extra_delay_ms:v().int().min(0).optional(),max_messages_per_minute:v().int().min(0).optional(),max_messages_per_hour:v().int().min(0).optional(),max_new_contacts_per_day:v().int().min(0).optional(),simulate_typing:Q().optional(),randomize_delays:Q().optional(),pause_on_low_response:Q().optional(),response_rate_threshold:v().min(0).max(1).optional()}),O=n=>{const l=we.c(7),{label:m,value:x}=n;let y;l[0]!==m?(y=e.jsx("span",{className:"text-xs text-muted-foreground",children:m}),l[0]=m,l[1]=y):y=l[1];let p;l[2]!==x?(p=e.jsx("span",{className:"text-lg font-semibold",children:x}),l[2]=x,l[3]=p):p=l[3];let c;return l[4]!==y||l[5]!==p?(c=e.jsxs("div",{className:"flex flex-col",children:[y,p]}),l[4]=y,l[5]=p,l[6]=c):c=l[6],c},ne=n=>l=>{const m=l.target.value;n.onChange(m===""?void 0:Number(m))},Pe=()=>{const{getWhatsAppRateLimitConfig:n,setWhatsAppRateLimitConfig:l,unpauseWhatsAppRateLimit:m}=le(),[x,y]=i.useState(null),[p,c]=i.useState(!1),[F,d]=i.useState(!1),h=re({resolver:oe(Se),defaultValues:{enabled:!1}}),A=h.watch("pause_on_low_response"),{isDirty:N}=h.formState,o=i.useCallback(async()=>{c(!0);try{const a=await n();a.success&&a.config&&(h.reset(a.config),y(a.stats??null),d(!0))}finally{c(!1)}},[h,n]);i.useEffect(()=>{o()},[o]);const D=i.useCallback(async a=>{c(!0);try{const f=await l(a);f.success&&f.config&&h.reset(f.config)}finally{c(!1)}},[h,l]),T=i.useCallback(async()=>{c(!0);try{const a=await m();a.success&&a.stats&&y(a.stats)}finally{c(!1)}},[m]);return e.jsx(ce,{type:"single",collapsible:!0,children:e.jsxs(de,{value:"ratelimits",children:[e.jsx(ue,{children:e.jsxs("div",{className:"flex w-full items-center justify-between gap-2",children:[e.jsx("span",{children:"Rate Limits"}),e.jsx(_,{control:h.control,name:"enabled",render:({field:a})=>e.jsx("span",{onClick:f=>f.stopPropagation(),children:e.jsx(J,{checked:!!a.value,onCheckedChange:a.onChange})})})]})}),e.jsx(me,{children:F?e.jsx(xe,{...h,children:e.jsxs("form",{onSubmit:h.handleSubmit(D),className:"flex flex-col gap-3",children:[x&&e.jsxs("div",{className:"mb-3 flex flex-wrap gap-4",children:[e.jsx(O,{label:"Last Minute",value:x.messages_sent_last_minute}),e.jsx(O,{label:"Last Hour",value:x.messages_sent_last_hour}),e.jsx(O,{label:"Today",value:x.messages_sent_today}),e.jsx(O,{label:"New Contacts",value:x.new_contacts_today}),e.jsx(O,{label:"Responses",value:x.responses_received}),e.jsx(O,{label:"Response Rate",value:`${Math.round((x.response_rate||0)*100)}%`})]}),x?.is_paused&&e.jsx(ve,{variant:"warning",children:e.jsxs(be,{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{children:x.pause_reason||"Paused"}),e.jsx(X,{size:"sm",variant:"outline",type:"button",onClick:T,children:"Unpause"})]})}),e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Message Delays (milliseconds)"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:[["min_delay_ms","Min Delay"],["max_delay_ms","Max Delay"],["typing_delay_ms","Typing Duration"],["link_extra_delay_ms","Link Extra Delay"]].map(([a,f])=>e.jsx(_,{control:h.control,name:a,render:({field:j})=>e.jsxs(b,{children:[e.jsx(w,{className:"text-xs",children:f}),e.jsx(C,{children:e.jsx(U,{type:"number",min:0,className:"w-28",value:j.value??"",onChange:ne(j)})})]})},a))}),e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Message Limits"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:[["max_messages_per_minute","Per Minute"],["max_messages_per_hour","Per Hour"],["max_new_contacts_per_day","New Contacts/Day"]].map(([a,f])=>e.jsx(_,{control:h.control,name:a,render:({field:j})=>e.jsxs(b,{children:[e.jsx(w,{className:"text-xs",children:f}),e.jsx(C,{children:e.jsx(U,{type:"number",min:0,className:"w-32",value:j.value??"",onChange:ne(j)})})]})},a))}),e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Behavior"}),e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[[["simulate_typing","Simulate Typing","Show typing indicator before sending"],["randomize_delays","Randomize Delays","Add variance between min/max delay"],["pause_on_low_response","Pause on Low Response","Auto-pause if response rate drops below threshold"]].map(([a,f,j])=>e.jsx(_,{control:h.control,name:a,render:({field:L})=>e.jsxs(b,{className:"flex flex-row items-center justify-between rounded-md border border-border p-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(w,{children:f}),e.jsx(P,{children:j})]}),e.jsx(C,{children:e.jsx(J,{checked:!!L.value,onCheckedChange:L.onChange})})]})},a)),A&&e.jsx(_,{control:h.control,name:"response_rate_threshold",render:({field:a})=>e.jsxs(b,{children:[e.jsx(w,{children:"Response Rate Threshold (%)"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:0,max:100,value:Math.round((a.value??.3)*100),onChange:f=>{const j=f.target.value;a.onChange(j===""?void 0:Number(j)/100)}})})]})})]}),e.jsxs(X,{type:"submit",disabled:!N||p,variant:N?"default":"outline",className:"w-full",children:[p&&e.jsx(he,{className:"h-4 w-4 animate-spin"}),"Save Changes"]})]})}):e.jsx("div",{className:"flex justify-center p-4 text-sm text-muted-foreground",children:"Loading..."})})]})})};export{Ve as P,Pe as R,Re as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as b,j as s,g}from"./index-D9tZfgvi.js";const v=p=>{const e=b.c(15),{icon:c,title:m,rows:x,status:a}=p;let t;e[0]!==m?(t=s.jsx("span",{children:m}),e[0]=m,e[1]=t):t=e[1];let r;e[2]!==c||e[3]!==t?(r=s.jsxs("div",{className:"flex items-center gap-2 border-b border-border bg-muted px-3 py-2 text-sm font-semibold",children:[c,t]}),e[2]=c,e[3]=t,e[4]=r):r=e[4];let d;if(e[5]!==x||e[6]!==a){let n;e[8]!==a?(n=l=>{const f=l.ok(a),u=f?"success":l.warn?"warning":"destructive";return s.jsxs("div",{className:"grid grid-cols-[1fr_auto] items-center gap-3 px-3 py-2 text-sm",children:[s.jsx("span",{className:"text-muted-foreground",children:l.label}),s.jsx(g,{variant:u,children:f?l.trueText:l.falseText})]},l.label)},e[8]=a,e[9]=n):n=e[9],d=x.map(n),e[5]=x,e[6]=a,e[7]=d}else d=e[7];let i;e[10]!==d?(i=s.jsx("div",{className:"divide-y divide-border",children:d}),e[10]=d,e[11]=i):i=e[11];let o;return e[12]!==r||e[13]!==i?(o=s.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[r,i]}),e[12]=r,e[13]=i,e[14]=o):o=e[14],o};export{v as S};
|