@jheavenknows/bluerouter 5.5.25 → 5.5.26
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/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +18 -18
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/audit-proxy/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/console/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personal/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudcombo/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/embedding/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/embedding/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/image/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/image/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/image-to-text/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/image-to-text/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/stt/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/tts/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/web/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/ca/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/me/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/root-ca/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/audit-proxy/users/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/view-mode/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/model-catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/download/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/codex-catalog/upload/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-combos/[id]/api-key-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/combo-references/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/custom-embedding/manage/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/openai-compatible/manage/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/export/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/prompt-log-db/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/rate-limits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +9 -9
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/logs.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk/dashboard/personal/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk/dashboard/personal.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/personal.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/!KGRhc2hib2FyZCk/dashboard/providers/embedding/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/!KGRhc2hib2FyZCk/dashboard/providers/embedding.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/embedding.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/!KGRhc2hib2FyZCk/dashboard/providers/image-to-text/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/!KGRhc2hib2FyZCk/dashboard/providers/image-to-text.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/image-to-text.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/!KGRhc2hib2FyZCk/dashboard/providers/image/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/!KGRhc2hib2FyZCk/dashboard/providers/image.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/image.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard/providers/stt/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard/providers/stt.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/stt.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard/providers/tts/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard/providers/tts.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/tts.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/web.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/!KGRhc2hib2FyZCk/dashboard/providers/web/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/!KGRhc2hib2FyZCk/dashboard/providers/web.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers/web.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +6 -6
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +18 -18
- package/app/.next-cli-build/server/chunks/2428.js +1 -1
- package/app/.next-cli-build/server/chunks/318.js +1 -1
- package/app/.next-cli-build/server/chunks/3399.js +1 -1
- package/app/.next-cli-build/server/chunks/3738.js +1 -1
- package/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/app/.next-cli-build/server/chunks/5024.js +1 -1
- package/app/.next-cli-build/server/chunks/5210.js +1 -1
- package/app/.next-cli-build/server/chunks/6118.js +1 -1
- package/app/.next-cli-build/server/chunks/6811.js +1 -1
- package/app/.next-cli-build/server/chunks/6992.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/{5263-b7941fae776c4373.js → 5263-827de68ed8132a29.js} +1 -1
- package/app/.next-cli-build/static/chunks/{7413-87f4038b5317729f.js → 7413-2cc83a72bcf459e1.js} +1 -1
- package/app/.next-cli-build/static/chunks/8723-c429b062393b6348.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-fa6ae9cb4ba87b70.js → page-1bb88dd0ad65807c.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/audit-proxy/{page-8ddbfc576e6c54b4.js → page-30cd3f3e9f363bef.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-3b6fe31430b96954.js → page-70e158890ae4fc83.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-678b01b8b35e85fd.js → page-ce7ac6694fbbb678.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/model-profiles/{page-3c1dbf4a4cb14dcb.js → page-f521e8417f2e2f31.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-0498f663a08738f1.js → page-0ecc380c93debdab.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-c64166b1525750d0.js → page-5ade313a9167c99b.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-b027f589b9f76fa8.js → page-0e22441e0507f163.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/{page-b28c25f5c4b94189.js → page-11e60a551b0228c1.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/logs/console/{page-7e0fb3db5ded3275.js → page-0a6293eb31eab332.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-e5b6794cd8a6364f.js → page-a08c52db4e01d8e3.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-f408f6e27a9760bb.js → page-e870a4cb95e2a8bc.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-68040f2d7e3f076b.js → page-07644039f6bf80ee.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-71731eef239fdab0.js → page-6c63098dc771e280.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/{page-b28c25f5c4b94189.js → page-11e60a551b0228c1.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personal/{page-db1a1700eea425f9.js → page-9ef9615e95c6d98c.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalcloudprovider/{layout-4d30604723c64128.js → layout-478314699bce9b31.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalcloudprovider/{page-4c7c9a82cd4c06e4.js → page-9a5af94bcad73254.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalcloudprovidermonitor/{page-b729e99653688409.js → page-33d2948585dccd8c.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalquota/{page-0537a2fa161b82eb.js → page-d5a701cfcbeb0aaa.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/{page-bfe98cb1f3da9ddd.js → page-57581f6add7284d5.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-dfb9cb61a2e3114b.js → page-3567ff1ce2261dcf.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/embedding/[id]/{page-182a798f8ca008a1.js → page-c927b95886c5f0d6.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/embedding/{page-f408f6e27a9760bb.js → page-e870a4cb95e2a8bc.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/image/[id]/{page-182a798f8ca008a1.js → page-c927b95886c5f0d6.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/image/{page-f408f6e27a9760bb.js → page-e870a4cb95e2a8bc.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/image-to-text/[id]/{page-182a798f8ca008a1.js → page-c927b95886c5f0d6.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/image-to-text/{page-f408f6e27a9760bb.js → page-e870a4cb95e2a8bc.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-1710ccdfda2a7cbf.js → page-82eca1407d4266c2.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-f195d485859696b8.js → page-267a7602579ef6f4.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/stt/[id]/{page-182a798f8ca008a1.js → page-c927b95886c5f0d6.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/stt/page-e870a4cb95e2a8bc.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/tts/[id]/page-c927b95886c5f0d6.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/tts/page-e870a4cb95e2a8bc.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/web/[kind]/[id]/{page-e46c0847d86fc008.js → page-7dedb965c7920eb8.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/web/{page-71731eef239fdab0.js → page-6c63098dc771e280.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-2043197f3715fe4c.js → page-94f864cc2f20b76d.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/{page-3a4844e727cfec8f.js → page-a8165d10ab8301ef.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/{page-1b1ae93c3f398083.js → page-8ff70e1fe63630c5.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-bc64c0e184eef9d3.js → page-78d24f71ba0846fa.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-b6a76e695fa879b2.js → page-d08272fd14e6b4af.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-c33de7f43266076b.js → layout-8b4790ae13ade152.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/{layout-bf4de7a5f9e7315c.js → layout-9b0fc956496699bb.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/login/{page-071c3519fddc7b20.js → page-534a498e40d54531.js} +1 -1
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
- package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- package/app/.next-cli-build/static/chunks/2793-b3a4461f8347c3f1.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/stt/page-f408f6e27a9760bb.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/tts/[id]/page-182a798f8ca008a1.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/tts/page-f408f6e27a9760bb.js +0 -1
- /package/app/.next-cli-build/static/{8HLcfPZQbiQFkzvYyYlAK → 5AQ_UrmD1tq7tn1M3F6jS}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{8HLcfPZQbiQFkzvYyYlAK → 5AQ_UrmD1tq7tn1M3F6jS}/_ssgManifest.js +0 -0
- /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.5.18-to-5.5.19-5.5.19-20260918-094232 → upgrade-5.5.25-to-5.5.26-5.5.26-20260923-102955}/data.sqlite +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8334],{22662:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>b});var a=s(95155),l=s(73321),r=s(12115),i=s(98500),n=s.n(i),o=s(35497),c=s(57250),d=s(52679);let m=/^[a-zA-Z0-9_.\-]+$/,x={webSearch:"Web Search",webFetch:"Web Fetch",image:"Text to Image",tts:"Text To Speech"},h={webSearch:"/v1/search",webFetch:"/v1/web/fetch",image:"/v1/images/generations",tts:"/v1/audio/speech"},u={webSearch:e=>({model:e,query:"What is the latest news about AI?",search_type:"web",max_results:5}),webFetch:e=>({model:e,url:"https://example.com",format:"markdown"}),image:e=>({model:e,prompt:"A cute cat playing piano",n:1,size:"1024x1024"}),tts:e=>({model:e,input:"Hello, this is a test.",voice:"alloy"})};function p(e){return"webSearch"===e||"webFetch"===e?"/dashboard/media-providers/web":`/dashboard/media-providers/${e}`}function b(){let{id:e}=(0,l.useParams)(),t=(0,l.useRouter)(),[s,i]=(0,r.useState)(null),[b,f]=(0,r.useState)(!0),[j,g]=(0,r.useState)(""),[w,y]=(0,r.useState)(""),[v,N]=(0,r.useState)([]),[k,S]=(0,r.useState)(!1),[U,$]=(0,r.useState)(!1),[C,O]=(0,r.useState)([]),[_,T]=(0,r.useState)(!1),[R,A]=(0,r.useState)(null),[L,P]=(0,r.useState)(""),[E,z]=(0,r.useState)(""),[D,F]=(0,r.useState)([]),[M,I]=(0,r.useState)({}),J=async()=>{try{let[t,s,a,l,r,n]=await Promise.all([fetch(`/api/combos/${e}`,{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"}),fetch("/api/usage/logs",{cache:"no-store"}),fetch("/api/keys",{cache:"no-store"}),fetch("/api/providers",{cache:"no-store"}),fetch("/api/models/alias",{cache:"no-store"})]);if(n.ok&&I((await n.json()).aliases||{}),l.ok){let e=await l.json();z((e.keys||[]).find(e=>!1!==e.isActive)?.key||"")}if(r.ok&&F((await r.json()).connections||[]),!t.ok){i(null),f(!1);return}let o=await t.json();i(o),g(o.name),N(o.models||[]);let c=s.ok?await s.json():{};S(c.comboStrategies?.[o.name]?.fallbackStrategy==="round-robin");let d=a.ok?await a.json():[];O(d.filter(e=>"string"==typeof e&&e.includes(o.name)).slice(0,50))}catch{}f(!1)};(0,r.useEffect)(()=>{J()},[e]);let W=e=>e.trim()?m.test(e)?(y(""),!0):(y("Only letters, numbers, -, _ and ."),!1):(y("Name is required"),!1),H=async t=>{let s=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return!!s.ok||(alert((await s.json()).error||"Failed to save"),!1)},Z=async()=>{!W(j)||j===s.name||await H({name:j})&&await J()},q=async e=>{let t=e?.value||e;if(!t||v.includes(t))return;let s=[...v,t];N(s),await H({models:s})},B=async e=>{let t=e?.value||e;if(!t||!v.includes(t))return;let s=v.filter(e=>e!==t);N(s),await H({models:s})},Y=async e=>{let t=v.filter((t,s)=>s!==e);N(t),await H({models:t})},G=async(e,t)=>{let s=[...v],a=e+t;a<0||a>=s.length||([s[e],s[a]]=[s[a],s[e]],N(s),await H({models:s}))},K=async e=>{S(e);let t=await fetch("/api/settings",{cache:"no-store"}),a={...(t.ok?await t.json():{}).comboStrategies||{}};e?a[s.name]={fallbackStrategy:"round-robin"}:delete a[s.name],await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:a})})},Q=async()=>{!confirm(`Delete combo "${s.name}"?`)||(await fetch(`/api/combos/${e}`,{method:"DELETE"})).ok&&t.push(p(s.kind))},V=async()=>{if(T(!0),A(null),P(""),R?.audioUrl)try{URL.revokeObjectURL(R.audioUrl)}catch{}if(R?.imageUrl?.startsWith("blob:"))try{URL.revokeObjectURL(R.imageUrl)}catch{}let e=Date.now();try{let t=h[s.kind],a=u[s.kind](s.name),l={"Content-Type":"application/json"};E&&(l.Authorization=`Bearer ${E}`);let r=await fetch(`/api${t}`,{method:"POST",headers:l,body:JSON.stringify(a)}),i=Date.now()-e;if(!r.ok){let e=await r.json().catch(()=>({}));P(e?.error?.message||e?.error||`HTTP ${r.status}`),A({json:JSON.stringify(e,null,2),latencyMs:i});return}let n=r.headers.get("content-type")||"";if(n.startsWith("image/")){let e=await r.blob();A({imageUrl:URL.createObjectURL(e),latencyMs:i});return}if(n.startsWith("audio/")||"application/octet-stream"===n){let e=await r.blob();A({audioUrl:URL.createObjectURL(e),latencyMs:i});return}let o=await r.json(),c=o?.data?.[0],d=c?.b64_json?`data:image/png;base64,${c.b64_json}`:c?.url||"";A({json:JSON.stringify(function e(t){if(!t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(e);let s={};for(let[a,l]of Object.entries(t))s[a]="b64_json"===a&&"string"==typeof l&&l.length>100?`<${l.length} chars base64>`:e(l);return s}(o),null,2),imageUrl:d,latencyMs:i})}catch(e){P(e.message||"Network error")}T(!1)};if(b)return(0,a.jsx)("div",{className:"text-text-muted text-sm",children:"Loading..."});if(!s)return(0,l.notFound)();let X=x[s.kind]||d.rj.find(e=>e.id===s.kind)?.label||"Combo",ee=h[s.kind],et=s.kind&&u[s.kind]?u[s.kind](s.name):null,es=ee?`curl -X POST http://localhost:20128${ee} \\
|
|
2
2
|
-H "Content-Type: application/json" \\
|
|
3
3
|
-H "Authorization: Bearer ${E||"YOUR_KEY"}" \\
|
|
4
|
-
-d '${JSON.stringify(et)}'`:"",ea=p(s.kind);return(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,a.jsx)(n(),{href:ea,className:"text-text-muted hover:text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"arrow_back"})}),(0,a.jsx)("div",{className:"size-10 rounded-lg bg-primary/10 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-primary",children:"layers"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:[X," Combo"]}),(0,a.jsx)("code",{className:"text-lg font-semibold font-mono",children:s.name})]})]}),(0,a.jsx)(o.$n,{variant:"outline",icon:"delete",onClick:Q,className:"text-red-500 border-red-200 hover:bg-red-50",children:"Delete"})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold mb-3",children:"Settings"}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(o.pd,{label:"Combo Name",value:j,onChange:e=>{g(e.target.value),W(e.target.value)},onBlur:Z,error:w}),(0,a.jsx)("p",{className:"text-[10px] text-text-muted mt-0.5",children:"Only letters, numbers, -, _ and ."})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"Round Robin"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Rotate providers across requests instead of strict fallback order."})]}),(0,a.jsx)(o.lM,{checked:k,onChange:K})]})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Providers"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Tried in order (top-down) or rotated when round-robin is on."})]}),(0,a.jsx)(o.$n,{size:"sm",icon:"add",onClick:()=>$(!0),children:"Add Provider"})]}),0===v.length?(0,a.jsx)("div",{className:"text-center py-6 border border-dashed border-border rounded-lg text-text-muted text-sm",children:"No providers yet."}):(0,a.jsx)("div",{className:"flex flex-col gap-2",children:v.map((e,t)=>{let{providerId:s,model:l}=function(e){if("string"!=typeof e)return{providerId:"",model:""};let t=e.indexOf("/");return t<0?{providerId:e,model:""}:{providerId:e.slice(0,t),model:e.slice(t+1)}}(e),r=d.Q2[s];return(0,a.jsxs)("div",{className:"flex items-center gap-3 p-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02]",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted w-5 text-center",children:t+1}),(0,a.jsx)(c.A,{src:`/providers/${s}.png`,alt:r?.name||s,size:24,className:"object-contain rounded shrink-0",fallbackText:r?.textIcon||s.slice(0,2).toUpperCase(),fallbackColor:r?.color}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("div",{className:"text-sm font-medium truncate",children:r?.name||s}),l&&(0,a.jsx)("code",{className:"text-[10px] text-text-muted font-mono truncate block",children:l})]}),(0,a.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,a.jsx)("button",{onClick:()=>G(t,-1),disabled:0===t,className:`p-1 rounded ${0===t?"text-text-muted/20":"text-text-muted hover:text-primary hover:bg-black/5"}`,title:"Move up",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_upward"})}),(0,a.jsx)("button",{onClick:()=>G(t,1),disabled:t===v.length-1,className:`p-1 rounded ${t===v.length-1?"text-text-muted/20":"text-text-muted hover:text-primary hover:bg-black/5"}`,title:"Move down",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_downward"})}),(0,a.jsx)("button",{onClick:()=>Y(t),className:"p-1 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10",title:"Remove",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})})]})]},`${e}-${t}`)})})]}),s.kind&&ee&&(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Test Example"}),(0,a.jsx)(o.$n,{size:"sm",icon:"play_arrow",onClick:V,disabled:_||0===v.length,children:_?"Running...":"Run"})]}),(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/[0.03] dark:bg-white/[0.03] p-3 rounded-lg overflow-x-auto whitespace-pre-wrap break-all",children:es}),L&&(0,a.jsx)("p",{className:"mt-3 text-xs text-red-500 break-words",children:L}),R&&(0,a.jsxs)("div",{className:"mt-3 flex flex-col gap-3",children:[null!=R.latencyMs&&(0,a.jsxs)("span",{className:"text-[11px] text-text-muted",children:["⚡ ",R.latencyMs,"ms"]}),R.imageUrl&&(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex items-center justify-end mb-1.5",children:(0,a.jsxs)("a",{href:R.imageUrl,download:"image.png",className:"inline-flex items-center gap-1 text-xs text-text-muted hover:text-primary transition-colors",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"download"}),"Download"]})}),(0,a.jsx)("img",{src:R.imageUrl,alt:"Generated",className:"max-w-full rounded-lg border border-border"})]}),R.audioUrl&&(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex items-center justify-end mb-1.5",children:(0,a.jsxs)("a",{href:R.audioUrl,download:"speech.mp3",className:"inline-flex items-center gap-1 text-xs text-text-muted hover:text-primary transition-colors",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"download"}),"Download"]})}),(0,a.jsx)("audio",{controls:!0,src:R.audioUrl,className:"w-full"})]}),R.json&&(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/[0.03] dark:bg-white/[0.03] p-3 rounded-lg overflow-auto max-h-[300px] whitespace-pre-wrap break-all",children:R.json})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold mb-3",children:"Usage Logs"}),0===C.length?(0,a.jsx)("p",{className:"text-xs text-text-muted italic",children:"No usage yet."}):(0,a.jsx)("pre",{className:"text-[11px] font-mono bg-black/[0.03] dark:bg-white/[0.03] p-3 rounded-lg overflow-auto max-h-[400px] whitespace-pre-wrap",children:C.join("\n")})]}),(0,a.jsx)(o.rq,{isOpen:U,onClose:()=>$(!1),onSelect:q,onDeselect:B,activeProviders:D,modelAliases:M,title:`Add ${X} Model`,kindFilter:s.kind,addedModelValues:v,closeOnSelect:!1})]})}},70878:(e,t,s)=>{Promise.resolve().then(s.bind(s,22662))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,
|
|
4
|
+
-d '${JSON.stringify(et)}'`:"",ea=p(s.kind);return(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,a.jsx)(n(),{href:ea,className:"text-text-muted hover:text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"arrow_back"})}),(0,a.jsx)("div",{className:"size-10 rounded-lg bg-primary/10 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-primary",children:"layers"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:[X," Combo"]}),(0,a.jsx)("code",{className:"text-lg font-semibold font-mono",children:s.name})]})]}),(0,a.jsx)(o.$n,{variant:"outline",icon:"delete",onClick:Q,className:"text-red-500 border-red-200 hover:bg-red-50",children:"Delete"})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold mb-3",children:"Settings"}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(o.pd,{label:"Combo Name",value:j,onChange:e=>{g(e.target.value),W(e.target.value)},onBlur:Z,error:w}),(0,a.jsx)("p",{className:"text-[10px] text-text-muted mt-0.5",children:"Only letters, numbers, -, _ and ."})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"Round Robin"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Rotate providers across requests instead of strict fallback order."})]}),(0,a.jsx)(o.lM,{checked:k,onChange:K})]})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Providers"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Tried in order (top-down) or rotated when round-robin is on."})]}),(0,a.jsx)(o.$n,{size:"sm",icon:"add",onClick:()=>$(!0),children:"Add Provider"})]}),0===v.length?(0,a.jsx)("div",{className:"text-center py-6 border border-dashed border-border rounded-lg text-text-muted text-sm",children:"No providers yet."}):(0,a.jsx)("div",{className:"flex flex-col gap-2",children:v.map((e,t)=>{let{providerId:s,model:l}=function(e){if("string"!=typeof e)return{providerId:"",model:""};let t=e.indexOf("/");return t<0?{providerId:e,model:""}:{providerId:e.slice(0,t),model:e.slice(t+1)}}(e),r=d.Q2[s];return(0,a.jsxs)("div",{className:"flex items-center gap-3 p-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02]",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted w-5 text-center",children:t+1}),(0,a.jsx)(c.A,{src:`/providers/${s}.png`,alt:r?.name||s,size:24,className:"object-contain rounded shrink-0",fallbackText:r?.textIcon||s.slice(0,2).toUpperCase(),fallbackColor:r?.color}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("div",{className:"text-sm font-medium truncate",children:r?.name||s}),l&&(0,a.jsx)("code",{className:"text-[10px] text-text-muted font-mono truncate block",children:l})]}),(0,a.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,a.jsx)("button",{onClick:()=>G(t,-1),disabled:0===t,className:`p-1 rounded ${0===t?"text-text-muted/20":"text-text-muted hover:text-primary hover:bg-black/5"}`,title:"Move up",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_upward"})}),(0,a.jsx)("button",{onClick:()=>G(t,1),disabled:t===v.length-1,className:`p-1 rounded ${t===v.length-1?"text-text-muted/20":"text-text-muted hover:text-primary hover:bg-black/5"}`,title:"Move down",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_downward"})}),(0,a.jsx)("button",{onClick:()=>Y(t),className:"p-1 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10",title:"Remove",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})})]})]},`${e}-${t}`)})})]}),s.kind&&ee&&(0,a.jsxs)(o.Zp,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Test Example"}),(0,a.jsx)(o.$n,{size:"sm",icon:"play_arrow",onClick:V,disabled:_||0===v.length,children:_?"Running...":"Run"})]}),(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/[0.03] dark:bg-white/[0.03] p-3 rounded-lg overflow-x-auto whitespace-pre-wrap break-all",children:es}),L&&(0,a.jsx)("p",{className:"mt-3 text-xs text-red-500 break-words",children:L}),R&&(0,a.jsxs)("div",{className:"mt-3 flex flex-col gap-3",children:[null!=R.latencyMs&&(0,a.jsxs)("span",{className:"text-[11px] text-text-muted",children:["⚡ ",R.latencyMs,"ms"]}),R.imageUrl&&(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex items-center justify-end mb-1.5",children:(0,a.jsxs)("a",{href:R.imageUrl,download:"image.png",className:"inline-flex items-center gap-1 text-xs text-text-muted hover:text-primary transition-colors",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"download"}),"Download"]})}),(0,a.jsx)("img",{src:R.imageUrl,alt:"Generated",className:"max-w-full rounded-lg border border-border"})]}),R.audioUrl&&(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex items-center justify-end mb-1.5",children:(0,a.jsxs)("a",{href:R.audioUrl,download:"speech.mp3",className:"inline-flex items-center gap-1 text-xs text-text-muted hover:text-primary transition-colors",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"download"}),"Download"]})}),(0,a.jsx)("audio",{controls:!0,src:R.audioUrl,className:"w-full"})]}),R.json&&(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/[0.03] dark:bg-white/[0.03] p-3 rounded-lg overflow-auto max-h-[300px] whitespace-pre-wrap break-all",children:R.json})]})]}),(0,a.jsxs)(o.Zp,{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold mb-3",children:"Usage Logs"}),0===C.length?(0,a.jsx)("p",{className:"text-xs text-text-muted italic",children:"No usage yet."}):(0,a.jsx)("pre",{className:"text-[11px] font-mono bg-black/[0.03] dark:bg-white/[0.03] p-3 rounded-lg overflow-auto max-h-[400px] whitespace-pre-wrap",children:C.join("\n")})]}),(0,a.jsx)(o.rq,{isOpen:U,onClose:()=>$(!1),onSelect:q,onDeselect:B,activeProviders:D,modelAliases:M,title:`Add ${X} Model`,kindFilter:s.kind,addedModelValues:v,closeOnSelect:!1})]})}},70878:(e,t,s)=>{Promise.resolve().then(s.bind(s,22662))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,8441,3794,7358],()=>e(e.s=70878)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8241,9260],{39548:(e,s,t)=>{Promise.resolve().then(t.bind(t,60530))},60530:(e,s,t)=>{"use strict";t.d(s,{default:()=>b});var r=t(95155),a=t(98500),i=t.n(a),l=t(12115),o=t(73321),c=t(35497),n=t(57250),d=t(52679);function m(e){let s=Object.entries(e).some(([e,s])=>e.startsWith("modelLock_")&&s&&new Date(s).getTime()>Date.now());return"unavailable"!==e.testStatus||s?e.testStatus:"active"}function x({provider:e,kind:s,connections:t}){let a=d.Q2[e.id],l=!!a?.noAuth,o=t.filter(s=>s.provider===e.id),h=o.filter(e=>{let s=m(e);return"active"===s||"success"===s}).length,p=o.filter(e=>{let s=m(e);return"error"===s||"expired"===s||"unavailable"===s}).length,b=o.length,u=b>0&&o.every(e=>!1===e.isActive);return(0,r.jsx)(i(),{href:`/dashboard/providers/web/${s}/${e.id}`,className:"group",children:(0,r.jsx)(c.Zp,{padding:"xs",className:`h-full hover:bg-black/[0.01] dark:hover:bg-white/[0.01] transition-colors cursor-pointer ${u?"opacity-50":""}`,children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${e.color?.length>7?e.color:(e.color??"#888")+"15"}`},children:(0,r.jsx)(n.A,{src:`/providers/${e.id}.png`,alt:e.name,size:30,className:"object-contain rounded-lg max-w-[30px] max-h-[30px]",fallbackText:e.textIcon||e.id.slice(0,2).toUpperCase(),fallbackColor:e.color})}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"font-semibold text-sm",children:e.name}),(0,r.jsx)("div",{className:"flex items-center gap-2 mt-0.5 flex-wrap",children:l?(0,r.jsx)(c.Ex,{variant:"success",size:"sm",children:"Ready"}):u?(0,r.jsx)(c.Ex,{variant:"default",size:"sm",children:"Disabled"}):0===b?(0,r.jsx)("span",{className:"text-xs text-text-muted",children:"No connections"}):(0,r.jsxs)(r.Fragment,{children:[h>0&&(0,r.jsxs)(c.Ex,{variant:"success",size:"sm",dot:!0,children:[h," Connected"]}),p>0&&(0,r.jsxs)(c.Ex,{variant:"error",size:"sm",dot:!0,children:[p," Error"]}),0===h&&0===p&&(0,r.jsxs)(c.Ex,{variant:"default",size:"sm",children:[b," Added"]})]})})]})]})})})}function h({combos:e}){return 0===e.length?(0,r.jsx)("p",{className:"text-xs text-text-muted italic",children:"No combos yet."}):(0,r.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>(0,r.jsx)(i(),{href:`/dashboard/media-providers/combo/${e.id}`,children:(0,r.jsx)(c.Zp,{padding:"xs",className:"hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors cursor-pointer",children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"layers"}),(0,r.jsx)("code",{className:"text-sm font-mono font-medium flex-1 truncate",children:e.name}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 sm:shrink-0",children:[e.models.slice(0,6).map((e,s)=>{let t="string"==typeof e?e.split("/")[0]:"",a=d.Q2[t];return(0,r.jsx)("div",{title:a?.name||e,className:"size-5 rounded flex items-center justify-center",style:{backgroundColor:`${a?.color??"#888"}15`},children:(0,r.jsx)(n.A,{src:`/providers/${t}.png`,alt:a?.name||t,size:18,className:"object-contain rounded max-w-[18px] max-h-[18px]",fallbackText:a?.textIcon||t.slice(0,2).toUpperCase(),fallbackColor:a?.color})},`${e}-${s}`)}),e.models.length>6&&(0,r.jsxs)("span",{className:"text-[10px] text-text-muted ml-1",children:["+",e.models.length-6]})]}),(0,r.jsx)("span",{className:"text-[11px] text-text-muted shrink-0",children:e.models.length}),(0,r.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[16px]",children:"chevron_right"})]})})},e.id))})}function p({title:e,icon:s,kind:t,providers:a,connections:i,combos:l,onCreateCombo:o}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary",children:s}),(0,r.jsx)("h2",{className:"text-base font-semibold",children:e}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["(",a.length," providers \xb7 ",l.length," combos)"]})]}),(0,r.jsx)(c.$n,{size:"sm",icon:"add",onClick:o,children:"Create Combo"})]}),l.length>0&&(0,r.jsx)("div",{className:"mb-4",children:(0,r.jsx)(h,{combos:l})}),0===a.length?(0,r.jsx)("div",{className:"text-center py-8 border border-dashed border-border rounded-xl text-text-muted text-sm",children:"No providers."}):(0,r.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:a.map(e=>(0,r.jsx)(x,{provider:e,kind:t,connections:i},e.id))})]})}function b(){let e=(0,o.useRouter)(),[s,t]=(0,l.useState)([]),[a,i]=(0,l.useState)([]),c=async()=>{try{let[e,s]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/combos",{cache:"no-store"})]);e.ok&&t((await e.json()).connections||[]),s.ok&&i((await s.json()).combos||[])}catch{}};(0,l.useEffect)(()=>{c()},[]);let n=(0,d.o5)("webSearch"),m=(0,d.o5)("webFetch"),x=a.filter(e=>"webSearch"===e.kind),h=a.filter(e=>"webFetch"===e.kind),b=async s=>{let t="webSearch"===s?"search-combo":"fetch-combo",r=t,i=1,l=new Set(a.map(e=>e.name));for(;l.has(r);)r=`${t}-${i++}`;let o=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:r,models:[],kind:s})});if(o.ok){let s=await o.json();e.push(`/dashboard/media-providers/combo/${s.id}`)}else alert((await o.json()).error||"Failed to create combo")};return(0,r.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,r.jsx)(p,{title:"Web Search",icon:"search",kind:"webSearch",providers:n,connections:s,combos:x,onCreateCombo:()=>b("webSearch")}),(0,r.jsx)("div",{className:"border-t border-border"}),(0,r.jsx)(p,{title:"Web Fetch",icon:"travel_explore",kind:"webFetch",providers:m,connections:s,combos:h,onCreateCombo:()=>b("webFetch")})]})}}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8241,9260],{39548:(e,s,t)=>{Promise.resolve().then(t.bind(t,60530))},60530:(e,s,t)=>{"use strict";t.d(s,{default:()=>b});var r=t(95155),a=t(98500),i=t.n(a),l=t(12115),o=t(73321),c=t(35497),n=t(57250),d=t(52679);function m(e){let s=Object.entries(e).some(([e,s])=>e.startsWith("modelLock_")&&s&&new Date(s).getTime()>Date.now());return"unavailable"!==e.testStatus||s?e.testStatus:"active"}function x({provider:e,kind:s,connections:t}){let a=d.Q2[e.id],l=!!a?.noAuth,o=t.filter(s=>s.provider===e.id),h=o.filter(e=>{let s=m(e);return"active"===s||"success"===s}).length,p=o.filter(e=>{let s=m(e);return"error"===s||"expired"===s||"unavailable"===s}).length,b=o.length,u=b>0&&o.every(e=>!1===e.isActive);return(0,r.jsx)(i(),{href:`/dashboard/providers/web/${s}/${e.id}`,className:"group",children:(0,r.jsx)(c.Zp,{padding:"xs",className:`h-full hover:bg-black/[0.01] dark:hover:bg-white/[0.01] transition-colors cursor-pointer ${u?"opacity-50":""}`,children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${e.color?.length>7?e.color:(e.color??"#888")+"15"}`},children:(0,r.jsx)(n.A,{src:`/providers/${e.id}.png`,alt:e.name,size:30,className:"object-contain rounded-lg max-w-[30px] max-h-[30px]",fallbackText:e.textIcon||e.id.slice(0,2).toUpperCase(),fallbackColor:e.color})}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"font-semibold text-sm",children:e.name}),(0,r.jsx)("div",{className:"flex items-center gap-2 mt-0.5 flex-wrap",children:l?(0,r.jsx)(c.Ex,{variant:"success",size:"sm",children:"Ready"}):u?(0,r.jsx)(c.Ex,{variant:"default",size:"sm",children:"Disabled"}):0===b?(0,r.jsx)("span",{className:"text-xs text-text-muted",children:"No connections"}):(0,r.jsxs)(r.Fragment,{children:[h>0&&(0,r.jsxs)(c.Ex,{variant:"success",size:"sm",dot:!0,children:[h," Connected"]}),p>0&&(0,r.jsxs)(c.Ex,{variant:"error",size:"sm",dot:!0,children:[p," Error"]}),0===h&&0===p&&(0,r.jsxs)(c.Ex,{variant:"default",size:"sm",children:[b," Added"]})]})})]})]})})})}function h({combos:e}){return 0===e.length?(0,r.jsx)("p",{className:"text-xs text-text-muted italic",children:"No combos yet."}):(0,r.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>(0,r.jsx)(i(),{href:`/dashboard/media-providers/combo/${e.id}`,children:(0,r.jsx)(c.Zp,{padding:"xs",className:"hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors cursor-pointer",children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"layers"}),(0,r.jsx)("code",{className:"text-sm font-mono font-medium flex-1 truncate",children:e.name}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 sm:shrink-0",children:[e.models.slice(0,6).map((e,s)=>{let t="string"==typeof e?e.split("/")[0]:"",a=d.Q2[t];return(0,r.jsx)("div",{title:a?.name||e,className:"size-5 rounded flex items-center justify-center",style:{backgroundColor:`${a?.color??"#888"}15`},children:(0,r.jsx)(n.A,{src:`/providers/${t}.png`,alt:a?.name||t,size:18,className:"object-contain rounded max-w-[18px] max-h-[18px]",fallbackText:a?.textIcon||t.slice(0,2).toUpperCase(),fallbackColor:a?.color})},`${e}-${s}`)}),e.models.length>6&&(0,r.jsxs)("span",{className:"text-[10px] text-text-muted ml-1",children:["+",e.models.length-6]})]}),(0,r.jsx)("span",{className:"text-[11px] text-text-muted shrink-0",children:e.models.length}),(0,r.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[16px]",children:"chevron_right"})]})})},e.id))})}function p({title:e,icon:s,kind:t,providers:a,connections:i,combos:l,onCreateCombo:o}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-3",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary",children:s}),(0,r.jsx)("h2",{className:"text-base font-semibold",children:e}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["(",a.length," providers \xb7 ",l.length," combos)"]})]}),(0,r.jsx)(c.$n,{size:"sm",icon:"add",onClick:o,children:"Create Combo"})]}),l.length>0&&(0,r.jsx)("div",{className:"mb-4",children:(0,r.jsx)(h,{combos:l})}),0===a.length?(0,r.jsx)("div",{className:"text-center py-8 border border-dashed border-border rounded-xl text-text-muted text-sm",children:"No providers."}):(0,r.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:a.map(e=>(0,r.jsx)(x,{provider:e,kind:t,connections:i},e.id))})]})}function b(){let e=(0,o.useRouter)(),[s,t]=(0,l.useState)([]),[a,i]=(0,l.useState)([]),c=async()=>{try{let[e,s]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/combos",{cache:"no-store"})]);e.ok&&t((await e.json()).connections||[]),s.ok&&i((await s.json()).combos||[])}catch{}};(0,l.useEffect)(()=>{c()},[]);let n=(0,d.o5)("webSearch"),m=(0,d.o5)("webFetch"),x=a.filter(e=>"webSearch"===e.kind),h=a.filter(e=>"webFetch"===e.kind),b=async s=>{let t="webSearch"===s?"search-combo":"fetch-combo",r=t,i=1,l=new Set(a.map(e=>e.name));for(;l.has(r);)r=`${t}-${i++}`;let o=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:r,models:[],kind:s})});if(o.ok){let s=await o.json();e.push(`/dashboard/media-providers/combo/${s.id}`)}else alert((await o.json()).error||"Failed to create combo")};return(0,r.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,r.jsx)(p,{title:"Web Search",icon:"search",kind:"webSearch",providers:n,connections:s,combos:x,onCreateCombo:()=>b("webSearch")}),(0,r.jsx)("div",{className:"border-t border-border"}),(0,r.jsx)(p,{title:"Web Fetch",icon:"travel_explore",kind:"webFetch",providers:m,connections:s,combos:h,onCreateCombo:()=>b("webFetch")})]})}}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,8441,3794,7358],()=>e(e.s=39548)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099,6337],{18032:(e,t,s)=>{Promise.resolve().then(s.bind(s,95907))},95907:(e,t,s)=>{"use strict";s.d(t,{default:()=>m});var a=s(95155),l=s(12115),n=s(14051),i=s.n(n),r=s(35497),d=s(11059);let o=[{id:"lite",label:"Lite",desc:"N\xe9n nhẹ, vẫn giữ ngữ ph\xe1p dễ đọc."},{id:"full",label:"Full",desc:"N\xe9n c\xe2n bằng, giảm token r\xf5 hơn."},{id:"ultra",label:"Ultra",desc:"N\xe9n tối đa, c\xe2u cực ngắn."}];function c({label:e,value:t,copiedKey:s,copied:l,copy:n}){return(0,a.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-semibold uppercase tracking-wide text-text-muted",children:e}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"min-w-0 flex-1 truncate rounded-lg bg-surface px-3 py-2 font-mono text-xs text-text-main",children:t}),(0,a.jsx)("button",{type:"button",onClick:()=>n(t,s),className:"rounded-lg border border-border px-2 py-2 text-text-muted transition hover:border-primary hover:text-primary",title:"Copy",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:l===s?"check":"content_copy"})})]})]})}function m({machineId:e}){let[t,s]=(0,l.useState)(!0),[n,i]=(0,l.useState)(""),[x,p]=(0,l.useState)(""),[h,u]=(0,l.useState)({hasPassword:!0,rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",apiKeyDefaultModel:""}),{copied:b,copy:v}=(0,d.C)(),j=(0,l.useMemo)(()=>(function(e=""){let t=e?`${e.replace(/\/$/,"")}/v1`:"/v1";return{base:t,chat:`${t}/chat/completions`,models:`${t}/models`,health:e?`${e.replace(/\/$/,"")}/api/health`:"/api/health"}})(x),[x]);(0,l.useEffect)(()=>{p(window.location.origin),y()},[]);let y=async()=>{s(!0);try{let e=await fetch("/api/dashboard/endpoint",{cache:"no-store"}),t=await e.json();e.ok&&u(e=>({...e,...t}))}catch(e){console.log("Error loading endpoint settings:",e)}finally{s(!1)}},g=async(e,t="")=>{i(t);try{let t=await fetch("/api/dashboard/endpoint",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok?u(e=>({...e,...s})):alert(s.error||"Cập nhật thiết lập thất bại")}catch(e){console.log("Error updating endpoint settings:",e),alert("Cập nhật thiết lập thất bại")}finally{i("")}};return t?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Endpoint nội bộ để tool gọi BlueRouter theo chuẩn OpenAI-compatible."})]}),(0,a.jsxs)(r.$n,{onClick:y,variant:"ghost",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"L\xe0m mới"]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"hub"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Th\xf4ng tin API endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"D\xf9ng c\xe1c URL dưới đ\xe2y cho LibreChat, VSCode, Copilot proxy, Antigravity hoặc tool OpenAI-compatible kh\xe1c."})]})]}),(0,a.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,a.jsx)(c,{label:"Base URL",value:j.base,copiedKey:"base",copied:b,copy:v}),(0,a.jsx)(c,{label:"Chat Completions",value:j.chat,copiedKey:"chat",copied:b,copy:v}),(0,a.jsx)(c,{label:"Models",value:j.models,copiedKey:"models",copied:b,copy:v}),(0,a.jsx)(c,{label:"Health",value:j.health,copiedKey:"health",copied:b,copy:v})]}),(0,a.jsxs)("p",{className:"mt-4 text-xs text-text-muted",children:["Machine ID: ",(0,a.jsx)("code",{className:"rounded bg-surface px-1.5 py-0.5",children:e||"unknown"})]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"bolt"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Token Saver"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Giảm token cho output từ tool v\xe0 phản hồi model. Bật/tắt tại đ\xe2y kh\xf4ng cần load API keys hoặc provider status."})]})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"RTK tool output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"N\xe9n output của git/grep/ls/tree/logs trước khi gửi v\xe0o model."})]}),(0,a.jsx)(r.lM,{checked:!1!==h.rtkEnabled,onChange:e=>g({rtkEnabled:e},"rtkEnabled"),disabled:"rtkEnabled"===n})]}),(0,a.jsxs)("div",{className:"rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Caveman output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Th\xeam style prompt để model trả lời ngắn hơn, giảm output token."})]}),(0,a.jsx)(r.lM,{checked:!!h.cavemanEnabled,onChange:e=>g({cavemanEnabled:e},"cavemanEnabled"),disabled:"cavemanEnabled"===n})]}),h.cavemanEnabled&&(0,a.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:o.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>g({cavemanLevel:e.id},"cavemanLevel"),title:e.desc,className:`rounded-lg border px-3 py-1.5 text-xs font-medium transition ${h.cavemanLevel===e.id?"border-primary bg-primary text-white":"border-border text-text-muted hover:border-primary hover:text-primary"}`,children:e.label},e.id))})]})]})]})]})}c.propTypes={label:i().string.isRequired,value:i().string.isRequired,copiedKey:i().string.isRequired,copied:i().string,copy:i().func.isRequired},m.propTypes={machineId:i().string}}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099,6337],{18032:(e,t,s)=>{Promise.resolve().then(s.bind(s,95907))},95907:(e,t,s)=>{"use strict";s.d(t,{default:()=>m});var a=s(95155),l=s(12115),n=s(14051),i=s.n(n),r=s(35497),d=s(11059);let o=[{id:"lite",label:"Lite",desc:"N\xe9n nhẹ, vẫn giữ ngữ ph\xe1p dễ đọc."},{id:"full",label:"Full",desc:"N\xe9n c\xe2n bằng, giảm token r\xf5 hơn."},{id:"ultra",label:"Ultra",desc:"N\xe9n tối đa, c\xe2u cực ngắn."}];function c({label:e,value:t,copiedKey:s,copied:l,copy:n}){return(0,a.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-semibold uppercase tracking-wide text-text-muted",children:e}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"min-w-0 flex-1 truncate rounded-lg bg-surface px-3 py-2 font-mono text-xs text-text-main",children:t}),(0,a.jsx)("button",{type:"button",onClick:()=>n(t,s),className:"rounded-lg border border-border px-2 py-2 text-text-muted transition hover:border-primary hover:text-primary",title:"Copy",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:l===s?"check":"content_copy"})})]})]})}function m({machineId:e}){let[t,s]=(0,l.useState)(!0),[n,i]=(0,l.useState)(""),[x,p]=(0,l.useState)(""),[h,u]=(0,l.useState)({hasPassword:!0,rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",apiKeyDefaultModel:""}),{copied:b,copy:v}=(0,d.C)(),j=(0,l.useMemo)(()=>(function(e=""){let t=e?`${e.replace(/\/$/,"")}/v1`:"/v1";return{base:t,chat:`${t}/chat/completions`,models:`${t}/models`,health:e?`${e.replace(/\/$/,"")}/api/health`:"/api/health"}})(x),[x]);(0,l.useEffect)(()=>{p(window.location.origin),y()},[]);let y=async()=>{s(!0);try{let e=await fetch("/api/dashboard/endpoint",{cache:"no-store"}),t=await e.json();e.ok&&u(e=>({...e,...t}))}catch(e){console.log("Error loading endpoint settings:",e)}finally{s(!1)}},g=async(e,t="")=>{i(t);try{let t=await fetch("/api/dashboard/endpoint",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok?u(e=>({...e,...s})):alert(s.error||"Cập nhật thiết lập thất bại")}catch(e){console.log("Error updating endpoint settings:",e),alert("Cập nhật thiết lập thất bại")}finally{i("")}};return t?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Endpoint nội bộ để tool gọi BlueRouter theo chuẩn OpenAI-compatible."})]}),(0,a.jsxs)(r.$n,{onClick:y,variant:"ghost",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"L\xe0m mới"]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"hub"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Th\xf4ng tin API endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"D\xf9ng c\xe1c URL dưới đ\xe2y cho LibreChat, VSCode, Copilot proxy, Antigravity hoặc tool OpenAI-compatible kh\xe1c."})]})]}),(0,a.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,a.jsx)(c,{label:"Base URL",value:j.base,copiedKey:"base",copied:b,copy:v}),(0,a.jsx)(c,{label:"Chat Completions",value:j.chat,copiedKey:"chat",copied:b,copy:v}),(0,a.jsx)(c,{label:"Models",value:j.models,copiedKey:"models",copied:b,copy:v}),(0,a.jsx)(c,{label:"Health",value:j.health,copiedKey:"health",copied:b,copy:v})]}),(0,a.jsxs)("p",{className:"mt-4 text-xs text-text-muted",children:["Machine ID: ",(0,a.jsx)("code",{className:"rounded bg-surface px-1.5 py-0.5",children:e||"unknown"})]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"bolt"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Token Saver"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Giảm token cho output từ tool v\xe0 phản hồi model. Bật/tắt tại đ\xe2y kh\xf4ng cần load API keys hoặc provider status."})]})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"RTK tool output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"N\xe9n output của git/grep/ls/tree/logs trước khi gửi v\xe0o model."})]}),(0,a.jsx)(r.lM,{checked:!1!==h.rtkEnabled,onChange:e=>g({rtkEnabled:e},"rtkEnabled"),disabled:"rtkEnabled"===n})]}),(0,a.jsxs)("div",{className:"rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Caveman output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Th\xeam style prompt để model trả lời ngắn hơn, giảm output token."})]}),(0,a.jsx)(r.lM,{checked:!!h.cavemanEnabled,onChange:e=>g({cavemanEnabled:e},"cavemanEnabled"),disabled:"cavemanEnabled"===n})]}),h.cavemanEnabled&&(0,a.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:o.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>g({cavemanLevel:e.id},"cavemanLevel"),title:e.desc,className:`rounded-lg border px-3 py-1.5 text-xs font-medium transition ${h.cavemanLevel===e.id?"border-primary bg-primary text-white":"border-border text-text-muted hover:border-primary hover:text-primary"}`,children:e.label},e.id))})]})]})]})]})}c.propTypes={label:i().string.isRequired,value:i().string.isRequired,copiedKey:i().string.isRequired,copied:i().string,copy:i().func.isRequired},m.propTypes={machineId:i().string}}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,8441,3794,7358],()=>e(e.s=18032)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3674],{17:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var s=r(95155),n=r(98500),i=r.n(n),a=r(14051),d=r.n(a),l=r(31474);function o({tabs:e,activeId:t,onChange:r,className:n=""}){return(0,s.jsx)("div",{className:(0,l.cn)("mb-5 overflow-x-auto border-b border-border",n),children:(0,s.jsx)("div",{className:"flex min-w-max items-center gap-1",children:e.map(e=>{let n=e.id===t,a=(0,l.cn)("inline-flex items-center gap-2 border-b-2 px-4 py-3 text-sm font-semibold transition-colors",n?"border-primary text-primary":"border-transparent text-text-muted hover:border-border-strong hover:text-text-main"),d=(0,s.jsxs)(s.Fragment,{children:[e.icon?(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:e.icon}):null,(0,s.jsx)("span",{children:e.label})]});return e.href?(0,s.jsx)(i(),{href:e.href,className:a,"aria-current":n?"page":void 0,children:d},e.id):(0,s.jsx)("button",{type:"button",onClick:()=>r?.(e.id),className:a,"aria-pressed":n,children:d},e.id)})})})}o.propTypes={tabs:d().arrayOf(d().shape({id:d().string.isRequired,label:d().string.isRequired,icon:d().string,href:d().string})).isRequired,activeId:d().string.isRequired,onChange:d().func,className:d().string}},15100:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>y});var s=r(95155),n=r(12115),i=r(25086),a=r(94027),d=r(17),l=r(17173),o=r(6945),c=r(35497),m=r(57250),x=r(31458);function u(e){return String(e||"").trim().toLowerCase()}function h(){let{isAdmin:e}=(0,a.s)(),[t,r]=(0,n.useState)([]),[i,d]=(0,n.useState)({}),[l,o]=(0,n.useState)({}),[h,p]=(0,n.useState)(""),[b,g]=(0,n.useState)({}),[v,f]=(0,n.useState)(""),[j,y]=(0,n.useState)({}),[N,k]=(0,n.useState)(3),[C,w]=(0,n.useState)("3"),[A,S]=(0,n.useState)(!0),[P,O]=(0,n.useState)(!1),[q,$]=(0,n.useState)(!1),[I,E]=(0,n.useState)(""),[T,K]=(0,n.useState)(""),[U,z]=(0,n.useState)(""),[L,R]=(0,n.useState)(""),[_,F]=(0,n.useState)(null),[H,B]=(0,n.useState)(!1),[M,G]=(0,n.useState)(!1),[D,J]=(0,n.useState)(!1),Q=(0,n.useCallback)(e=>{d(e.permissions||{}),o(e.connectionsByUser||{}),"number"==typeof e.globalConnectionsPerProviderLimit&&e.globalConnectionsPerProviderLimit>0&&(k(e.globalConnectionsPerProviderLimit),w(String(e.globalConnectionsPerProviderLimit))),e.connectionsPerProviderLimitOverrides&&"object"==typeof e.connectionsPerProviderLimitOverrides&&y(e.connectionsPerProviderLimitOverrides)},[]),Z=(0,n.useCallback)(async()=>{if(e){S(!0),K("");try{let[e,t]=await Promise.all([fetch("/api/personal-cloud-providers",{cache:"no-store"}),fetch("/api/personal-cloud-providers/permissions",{cache:"no-store"})]),s=await e.json().catch(()=>({})),n=await t.json().catch(()=>({}));if(!e.ok)throw Error(s.error||"Kh\xf4ng tải được personal OAuth providers");if(!t.ok)throw Error(n.error||"Kh\xf4ng tải được quyền OAuth");r(Array.isArray(s.providers)?s.providers:[]),Q(n)}catch(e){K(e?.message||"Kh\xf4ng tải được cấu h\xecnh OAuth access")}finally{S(!1)}}},[Q,e]);(0,n.useEffect)(()=>{Z()},[Z]);let V=(0,n.useRef)(0),W=(0,n.useCallback)(async e=>{let t=e.trim();if(!t)return;let r=++V.current;B(!0);try{let e=await fetch(`/api/personal-cloud-providers/permissions?search=${encodeURIComponent(t)}`,{cache:"no-store"}),s=await e.json().catch(()=>({}));if(r!==V.current)return;if(!e.ok)throw Error(s.error||"Kh\xf4ng t\xecm được t\xe0i khoản");F(Array.isArray(s.accounts)?s.accounts:[]),G(!!s.accountsTruncated)}catch(e){if(r!==V.current)return;F([]),K(e?.message||"Kh\xf4ng t\xecm được t\xe0i khoản")}finally{r===V.current&&B(!1)}},[]);(0,n.useEffect)(()=>{if(!e)return;if(!L.trim()){F(null),G(!1),B(!1);return}let t=setTimeout(()=>W(L),300);return()=>clearTimeout(t)},[L,e,W]),(0,n.useEffect)(()=>{let e=u(h),r=i[e]||{},s={};for(let e of t)s[e.id]=!0===r[e.id];g(s);let n=j[e];f(n>0?String(n):"")},[h,i,t,j]);let X=(0,n.useMemo)(()=>Array.from(new Set([...Object.keys(i||{}),...Object.keys(l||{})])).map(e=>{let r=i[e]||{},s=l[e]||{},n=t.filter(e=>r?.[e.id]===!0),a=t.some(e=>Number(s[e.id]||0)>0);return{userId:e,providerState:r,connectionsByProvider:s,enabledProviders:n,hasAnyConnection:a}}).filter(e=>e.enabledProviders.length>0||e.hasAnyConnection).sort((e,t)=>e.userId.localeCompare(t.userId)),[l,i,t]),Y=null!==_,ee=(0,n.useMemo)(()=>Y?_.map(e=>{let r=e.providerState||{},s=e.connectionsByProvider||{},n=t.filter(e=>r?.[e.id]===!0),i=t.some(e=>Number(s[e.id]||0)>0);return{userId:e.userId,displayName:e.displayName,email:e.email,providerState:r,connectionsByProvider:s,enabledProviders:n,hasAnyConnection:i}}).sort((e,t)=>e.userId.localeCompare(t.userId)):X,[Y,_,X,t]),et=(0,n.useMemo)(()=>{let e=0,r=0,s=0,n=new Map(t.map(e=>[e.id,{grantedUsers:0,connections:0}]));for(let i of X){for(let r of t){let t=Number(i.connectionsByProvider?.[r.id]||0);e+=t;let s=n.get(r.id);i.providerState?.[r.id]===!0?(s.grantedUsers+=1,s.connections+=t):t>0&&(s.connections+=t)}i.enabledProviders.length>0&&!i.hasAnyConnection&&(r+=1),0===i.enabledProviders.length&&i.hasAnyConnection&&(s+=1)}return{totalUsers:X.length,totalConnections:e,grantedNoConnection:r,connectionNoGrant:s,perProvider:t.map(e=>({provider:e,...n.get(e.id)}))}},[X,t]),er=async()=>{let e,t=u(h);if(!t)return void K("Nhập username/email cần cấp quyền.");let r=String(v||"").trim();if(""===r)e=null;else{let t=Number.parseInt(r,10);if(!Number.isFinite(t)||t<=0)return void K("Per-user override phải l\xe0 số nguy\xean dương hoặc bỏ trống.");e=t}O(!0),K(""),z("");try{let r=await fetch("/api/personal-cloud-providers/permissions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:t,providers:b,connectionsPerProviderLimit:e})}),s=await r.json().catch(()=>({}));if(!r.ok)throw Error(s.error||"Kh\xf4ng lưu được quyền OAuth");Q(s);let n=s.user?.id||t;p(n),z(`Đ\xe3 lưu quyền OAuth cho ${n}.`),J(!1),L.trim()&&W(L)}catch(e){K(e?.message||"Kh\xf4ng lưu được quyền OAuth")}finally{O(!1)}},es=async()=>{let e=Number.parseInt(C,10);if(!Number.isFinite(e)||e<=0)return void K("Global limit phải l\xe0 số nguy\xean dương.");$(!0),K(""),z("");try{let t=await fetch("/api/personal-cloud-providers/permissions",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({globalConnectionsPerProviderLimit:e})}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||"Kh\xf4ng lưu được global limit");Q(r),z(`Đ\xe3 đặt global limit = ${e} account / provider / user.`)}catch(e){K(e?.message||"Kh\xf4ng lưu được global limit")}finally{$(!1)}},en=async e=>{let t=u(e);if(t){O(!0),K(""),z("");try{let e=await fetch(`/api/personal-cloud-providers/permissions?userId=${encodeURIComponent(t)}`,{method:"DELETE"}),r=await e.json().catch(()=>({}));if(!e.ok)throw Error(r.error||"Kh\xf4ng thu hồi được quyền OAuth");Q(r),u(h)===t&&p("");let s=r.disconnectSummary||{},n=Number(s.manualActionRequired)||0;z(`Đ\xe3 x\xf3a ${s.deletedCount||0} OAuth connection của ${t}; ${s.upstreamRevokedCount||0} token đ\xe3 revoke upstream.${n>0?` ${n} connection cần thu hồi thủ c\xf4ng tại provider.`:""}`),E(""),L.trim()&&W(L)}catch(e){K(e?.message||"Kh\xf4ng thu hồi được quyền OAuth")}finally{O(!1)}}};if(!e)return null;let ei=X.find(e=>e.userId===u(I)),ea=t.reduce((e,t)=>e+Number(ei?.connectionsByProvider?.[t.id]||0),0);return(0,s.jsxs)("div",{className:"space-y-5",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/50 p-4",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold text-text-main",children:"Admin: OAuth provider access"}),(0,s.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Quản l\xfd provider n\xe0o user được ph\xe9p d\xf9ng, giới hạn số account OAuth c\xe1 nh\xe2n v\xe0 thu hồi to\xe0n bộ quyền/token khi cần. C\xe1c thao t\xe1c trong tab n\xe0y chỉ d\xe0nh cho admin."})]}),(0,s.jsx)(x.default,{}),T?(0,s.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-700 dark:text-red-300",children:T}):null,U?(0,s.jsx)("div",{className:"rounded-xl border border-green-500/30 bg-green-500/10 px-4 py-3 text-sm text-green-700 dark:text-green-300",children:U}):null,(0,s.jsxs)(c.Zp,{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Access policy"}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Default l\xe0 kh\xf4ng c\xf3 quyền. Tắt provider giữ nguy\xean connection/token để c\xf3 thể bật lại; Revoke all sẽ thử revoke upstream rồi x\xf3a connection/token local."})]}),(0,s.jsx)(c.$n,{variant:"outline",size:"sm",onClick:Z,loading:A,icon:"refresh",children:"Refresh"})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:"Global limit — số account OAuth c\xe1 nh\xe2n / provider / user thường"}),(0,s.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"\xc1p dụng cho user kh\xf4ng c\xf3 per-user override. Admin kh\xf4ng bị chặn bởi limit n\xe0y."}),(0,s.jsxs)("div",{className:"mt-3 flex flex-col gap-2 sm:flex-row sm:items-end",children:[(0,s.jsx)(c.pd,{type:"number",min:1,value:C,onChange:e=>w(e.target.value),className:"sm:w-48"}),(0,s.jsx)(c.$n,{onClick:es,loading:q,disabled:q||Number.parseInt(C,10)===N,children:"Lưu global"}),(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["Đang lưu: ",N]})]})]}),(0,s.jsxs)("div",{className:"border-t border-border pt-4",children:[(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("h3",{className:"font-semibold text-text-main",children:"Granted OAuth Access"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"T\xecm một t\xe0i khoản (username/email) để xem v\xe0 chỉnh quyền — kể cả t\xe0i khoản chưa được cấp quyền g\xec. Kh\xf4ng t\xecm kiếm th\xec hiển thị c\xe1c t\xe0i khoản đang c\xf3 quyền hoặc c\xf2n OAuth connection."})]}),A?(0,s.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Đang tải quyền..."}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-4",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"Tổng user"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.totalUsers})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"Tổng OAuth connection"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.totalConnections})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"Cấp quyền, chưa connect"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.grantedNoConnection})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"C\xf2n connection, đ\xe3 thu hồi quyền"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.connectionNoGrant})]})]}),et.perProvider.some(e=>e.grantedUsers>0||e.connections>0)?(0,s.jsxs)("div",{className:"mb-4 rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium text-text-main",children:"Breakdown theo provider"}),(0,s.jsx)("div",{className:"mt-3 space-y-2",children:et.perProvider.map(({provider:e,grantedUsers:t,connections:r})=>(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 text-sm",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(m.A,{src:`/providers/${e.id}.png`,alt:e.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"}),(0,s.jsx)("span",{className:"text-text-main",children:e.name})]}),(0,s.jsxs)("div",{className:"flex items-center gap-3 text-xs text-text-muted",children:[(0,s.jsxs)("span",{children:[t," user được cấp quyền"]}),(0,s.jsxs)("span",{children:[r," connection"]})]})]},e.id))})]}):null,(0,s.jsx)("div",{className:"mb-4",children:(0,s.jsx)(c.pd,{label:"T\xecm t\xe0i khoản",value:L,onChange:e=>R(e.target.value),placeholder:"Nhập username hoặc email, vd: anh-tct hoặc anh-tct@fujinet.net",hint:H?"Đang t\xecm…":void 0})}),Y&&H&&0===ee.length?(0,s.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Đang t\xecm t\xe0i khoản..."}):Y&&0===ee.length?(0,s.jsxs)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:['Kh\xf4ng t\xecm thấy t\xe0i khoản n\xe0o khớp với "',L.trim(),'".']}):Y||0!==X.length?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",children:(0,s.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,s.jsx)("thead",{className:"bg-surface/80 text-left text-xs uppercase tracking-wide text-text-muted",children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{className:"px-4 py-3 font-medium",children:"User"}),t.map(e=>(0,s.jsx)("th",{className:"px-4 py-3 font-medium",children:e.name},e.id)),(0,s.jsx)("th",{className:"px-4 py-3 font-medium",children:"Limit / provider"}),(0,s.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,s.jsx)("tbody",{className:"divide-y divide-border bg-background",children:ee.map(e=>(0,s.jsxs)("tr",{className:"hover:bg-surface/50",children:[(0,s.jsxs)("td",{className:"px-4 py-4",children:[(0,s.jsx)("div",{className:"break-all font-mono text-text-main",children:e.userId}),e.displayName||e.email?(0,s.jsx)("div",{className:"mt-0.5 text-xs text-text-muted",children:[e.displayName,e.email].filter(Boolean).join(" \xb7 ")}):null]}),t.map(t=>{let r=!0===e.providerState[t.id],n=Number(e.connectionsByProvider?.[t.id]||0);return(0,s.jsx)("td",{className:"px-4 py-4",children:(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)(c.Ex,{variant:r?"success":"default",size:"sm",children:r?"ON":"OFF"}),n>0?(0,s.jsxs)("span",{className:"inline-flex items-center gap-0.5",title:`User đ\xe3 add ${n} ${t.name} account`,children:[(0,s.jsx)(m.A,{src:`/providers/${t.id}.png`,alt:t.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:t.id.slice(0,2).toUpperCase(),fallbackColor:t.color||"#64748b"}),n>1?(0,s.jsxs)("span",{className:"text-[10px] font-semibold text-text-muted",children:["\xd7",n]}):null]}):null]})},t.id)}),(0,s.jsx)("td",{className:"px-4 py-4 text-xs",children:j[e.userId]>0?(0,s.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,s.jsx)(c.Ex,{variant:"warning",size:"sm",children:"Override"}),(0,s.jsx)("span",{className:"font-mono",children:j[e.userId]})]}):(0,s.jsxs)("span",{className:"text-text-muted",children:["Global \xb7 ",N]})}),(0,s.jsx)("td",{className:"px-4 py-4",children:(0,s.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,s.jsx)(c.$n,{variant:"outline",size:"sm",onClick:()=>(e=>{let r=u(e);p(r);let s=i[r]||{},n={};for(let e of t)n[e.id]=!0===s[e.id];g(n),K(""),z(""),J(!0)})(e.userId),children:"Edit"}),e.enabledProviders.length>0||e.hasAnyConnection?(0,s.jsx)(c.$n,{variant:"danger",size:"sm",loading:P&&I===e.userId,onClick:()=>E(e.userId),children:"Revoke all & delete"}):null]})})]},e.userId))})]})}),Y&&M?(0,s.jsxs)("p",{className:"mt-2 text-xs text-text-muted",children:["Chỉ hiển thị ",ee.length," kết quả đầu, thu hẹp từ kh\xf3a t\xecm kiếm để ch\xednh x\xe1c hơn."]}):null]}):(0,s.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Chưa c\xf3 user n\xe0o được cấp quyền OAuth provider. D\xf9ng \xf4 t\xecm kiếm ở tr\xean để cấp quyền cho một t\xe0i khoản."})]})]})]}),I?(0,s.jsx)(c.aF,{isOpen:!0,onClose:()=>E(""),title:"Thu hồi to\xe0n bộ quyền OAuth",size:"lg",busy:P,closeOnOverlay:!P,footer:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{variant:"ghost",onClick:()=>E(""),disabled:P,children:"Hủy"}),(0,s.jsx)(c.$n,{variant:"danger",icon:"delete_forever",loading:P,onClick:()=>en(I),children:"Thu hồi v\xe0 x\xf3a to\xe0n bộ"})]}),children:(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium text-red-700 dark:text-red-300",children:"H\xe0nh động nguy hiểm, kh\xf4ng thể ho\xe0n t\xe1c"}),(0,s.jsx)("div",{className:"mt-1 break-all text-lg font-semibold text-text-main",children:I}),(0,s.jsx)("p",{className:"mt-2 text-sm text-text-muted",children:"To\xe0n bộ quyền OAuth provider v\xe0 connection/token local của user n\xe0y sẽ bị x\xf3a; gateway sẽ thử revoke upstream trước."})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-surface p-3 text-sm",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Connection t\xecm thấy"}),(0,s.jsx)(c.Ex,{variant:ea>0?"warning":"default",size:"sm",children:ea})]}),ei?(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:t.map(e=>{let t=Number(ei.connectionsByProvider?.[e.id]||0);return t>0?(0,s.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-border bg-background px-2.5 py-1 text-xs text-text-muted",children:[(0,s.jsx)(m.A,{src:`/providers/${e.id}.png`,alt:e.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase()}),e.name," \xd7",t]},e.id):null})}):null]})}):null,D?(0,s.jsx)(c.aF,{isOpen:!0,onClose:()=>J(!1),title:"Chỉnh quyền OAuth provider",size:"lg",busy:P,closeOnOverlay:!P,footer:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{variant:"ghost",onClick:()=>J(!1),disabled:P,children:"Hủy"}),(0,s.jsx)(c.$n,{onClick:er,loading:P,icon:"save",children:"Save permissions"})]}),children:(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)(c.pd,{label:"User ID / Email",value:h,disabled:!0}),(0,s.jsx)("div",{className:"grid gap-3 sm:grid-cols-2",children:t.map(e=>(0,s.jsx)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:(0,s.jsx)(c.lM,{checked:!0===b[e.id],onChange:t=>g(r=>({...r,[e.id]:t})),label:e.name,description:b[e.id]?"User được ph\xe9p add account":"User chưa được cấp quyền"})},e.id))}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:"Per-user override — account / provider"}),(0,s.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:["Ghi đ\xe8 global cho ",(0,s.jsx)("span",{className:"font-mono",children:u(h)||"user đang chọn"}),". Để trống để d\xf9ng global (",N,")."]}),(0,s.jsx)("div",{className:"mt-3 max-w-xs",children:(0,s.jsx)(c.pd,{type:"number",min:1,value:v,onChange:e=>f(e.target.value),placeholder:`Để trống = d\xf9ng global (${N})`})})]})]})}):null]})}var p=r(43503),b=r(78867),g=r(67673),v=r(14796),f=r.n(v);function j(){let e=(0,n.useRef)(null);return(0,n.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let r=null,s=()=>{let e=Array.from(t.querySelectorAll("h2")).find(e=>e.textContent?.trim()==="Admin: OAuth provider access"),s=e?.closest(".bg-surface.border.border-border");s&&s!==r&&(r&&r.style.removeProperty("display"),(r=s).style.setProperty("display","none"))};s();let n=new MutationObserver(s);return n.observe(t,{childList:!0,subtree:!0}),()=>{n.disconnect(),r&&r.style.removeProperty("display")}},[]),(0,s.jsxs)("div",{ref:e,className:f().page,children:[(0,s.jsx)(p.default,{}),(0,s.jsx)(g.default,{}),(0,s.jsx)(b.default,{})]})}function y(){let{isAdmin:e}=(0,a.s)(),[t,r]=(0,n.useState)("oauth"),c=(0,n.useMemo)(()=>[{id:"oauth",label:"Personal OAuth",icon:"cloud_sync"},...e?[{id:"monitor",label:"OAuth Monitor",icon:"manage_accounts"}]:[],{id:"quota",label:"Personal Quota",icon:"data_usage"},...e?[{id:"admin-access",label:"Admin: OAuth Access",icon:"admin_panel_settings"}]:[]],[e]),m=c.some(e=>e.id===t)?t:"oauth";return(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)(d.A,{tabs:c,activeId:m,onChange:r}),"oauth"===m?(0,s.jsx)(j,{}):null,"monitor"===m&&e?(0,s.jsx)(l.default,{}):null,"quota"===m?(0,s.jsx)(n.Suspense,{fallback:(0,s.jsx)(i.CardSkeleton,{}),children:(0,s.jsx)(o.default,{})}):null,"admin-access"===m&&e?(0,s.jsx)(h,{}):null]})}},31458:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var s=r(95155),n=r(12115),i=r(35497),a=r(57250),d=r(94027);function l(){let{isAdmin:e}=(0,d.s)(),[t,r]=(0,n.useState)([]),[l,o]=(0,n.useState)(!1),[c,m]=(0,n.useState)(""),[x,u]=(0,n.useState)(""),[h,p]=(0,n.useState)(""),b=(0,n.useCallback)(async()=>{if(e){o(!0),u("");try{let e=await fetch("/api/personal-cloud-providers/visibility",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider");r(Array.isArray(t.providers)?t.providers:[])}catch(e){u(e?.message||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider")}finally{o(!1)}}},[e]);if((0,n.useEffect)(()=>{b()},[b]),!e)return null;let g=async(e,t)=>{m(e.id),u(""),p("");try{let s=await fetch("/api/personal-cloud-providers/visibility",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerId:e.id,visible:t})}),n=await s.json().catch(()=>({}));if(!s.ok)throw Error(n.error||"Kh\xf4ng cập nhật được visibility provider");r(Array.isArray(n.providers)?n.providers:[]),p(`${e.name}: ${t?"đ\xe3 Show cho user":"đ\xe3 Hide khỏi user"}.`)}catch(e){u(e?.message||"Kh\xf4ng cập nhật được visibility provider")}finally{m("")}};return(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/50 p-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"font-semibold text-text-main",children:"Admin: Show / Hide Personal Cloud Providers"}),(0,s.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Chỉ điều khiển provider c\xf3 xuất hiện tr\xean giao diện của user hay kh\xf4ng. Kh\xf4ng đổi quyền OAuth, kh\xf4ng deactivate connection, kh\xf4ng x\xf3a token, kh\xf4ng đổi API key/routing v\xe0 kh\xf4ng ảnh hưởng sử dụng thực tế."})]}),(0,s.jsx)(i.$n,{size:"sm",variant:"outline",onClick:b,loading:l,icon:"refresh",children:"Refresh"})]}),x?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-700 dark:text-red-300",children:x}):null,h?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-700 dark:text-green-300",children:h}):null,(0,s.jsx)("div",{className:"mt-4 grid gap-3 md:grid-cols-2 xl:grid-cols-4",children:t.map(e=>{let t=!1!==e.visible,r=c===e.id;return(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background p-3",children:[(0,s.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,s.jsx)(a.A,{src:`/providers/${e.id}.png`,alt:e.name,size:30,className:"max-h-[30px] max-w-[30px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"truncate text-sm font-medium text-text-main",children:e.name}),(0,s.jsx)(i.Ex,{variant:t?"success":"default",size:"sm",children:t?"Shown":"Hidden"})]})]}),(0,s.jsx)(i.$n,{size:"sm",variant:t?"outline":"secondary",disabled:r,loading:r,icon:t?"visibility_off":"visibility",onClick:()=>g(e,!t),children:t?"Hide":"Show"})]},e.id)})})]})}},96928:(e,t,r)=>{Promise.resolve().then(r.bind(r,15100))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,2793,5263,7033,5497,7413,912,6945,7173,8441,3794,7358],()=>e(e.s=96928)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3674],{17:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var s=r(95155),n=r(98500),i=r.n(n),a=r(14051),d=r.n(a),l=r(31474);function o({tabs:e,activeId:t,onChange:r,className:n=""}){return(0,s.jsx)("div",{className:(0,l.cn)("mb-5 overflow-x-auto border-b border-border",n),children:(0,s.jsx)("div",{className:"flex min-w-max items-center gap-1",children:e.map(e=>{let n=e.id===t,a=(0,l.cn)("inline-flex items-center gap-2 border-b-2 px-4 py-3 text-sm font-semibold transition-colors",n?"border-primary text-primary":"border-transparent text-text-muted hover:border-border-strong hover:text-text-main"),d=(0,s.jsxs)(s.Fragment,{children:[e.icon?(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:e.icon}):null,(0,s.jsx)("span",{children:e.label})]});return e.href?(0,s.jsx)(i(),{href:e.href,className:a,"aria-current":n?"page":void 0,children:d},e.id):(0,s.jsx)("button",{type:"button",onClick:()=>r?.(e.id),className:a,"aria-pressed":n,children:d},e.id)})})})}o.propTypes={tabs:d().arrayOf(d().shape({id:d().string.isRequired,label:d().string.isRequired,icon:d().string,href:d().string})).isRequired,activeId:d().string.isRequired,onChange:d().func,className:d().string}},15100:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>y});var s=r(95155),n=r(12115),i=r(25086),a=r(94027),d=r(17),l=r(17173),o=r(6945),c=r(35497),m=r(57250),x=r(31458);function u(e){return String(e||"").trim().toLowerCase()}function h(){let{isAdmin:e}=(0,a.s)(),[t,r]=(0,n.useState)([]),[i,d]=(0,n.useState)({}),[l,o]=(0,n.useState)({}),[h,p]=(0,n.useState)(""),[b,g]=(0,n.useState)({}),[v,f]=(0,n.useState)(""),[j,y]=(0,n.useState)({}),[N,k]=(0,n.useState)(3),[C,w]=(0,n.useState)("3"),[A,S]=(0,n.useState)(!0),[P,O]=(0,n.useState)(!1),[q,$]=(0,n.useState)(!1),[I,E]=(0,n.useState)(""),[T,K]=(0,n.useState)(""),[U,z]=(0,n.useState)(""),[L,R]=(0,n.useState)(""),[_,F]=(0,n.useState)(null),[H,B]=(0,n.useState)(!1),[M,G]=(0,n.useState)(!1),[D,J]=(0,n.useState)(!1),Q=(0,n.useCallback)(e=>{d(e.permissions||{}),o(e.connectionsByUser||{}),"number"==typeof e.globalConnectionsPerProviderLimit&&e.globalConnectionsPerProviderLimit>0&&(k(e.globalConnectionsPerProviderLimit),w(String(e.globalConnectionsPerProviderLimit))),e.connectionsPerProviderLimitOverrides&&"object"==typeof e.connectionsPerProviderLimitOverrides&&y(e.connectionsPerProviderLimitOverrides)},[]),Z=(0,n.useCallback)(async()=>{if(e){S(!0),K("");try{let[e,t]=await Promise.all([fetch("/api/personal-cloud-providers",{cache:"no-store"}),fetch("/api/personal-cloud-providers/permissions",{cache:"no-store"})]),s=await e.json().catch(()=>({})),n=await t.json().catch(()=>({}));if(!e.ok)throw Error(s.error||"Kh\xf4ng tải được personal OAuth providers");if(!t.ok)throw Error(n.error||"Kh\xf4ng tải được quyền OAuth");r(Array.isArray(s.providers)?s.providers:[]),Q(n)}catch(e){K(e?.message||"Kh\xf4ng tải được cấu h\xecnh OAuth access")}finally{S(!1)}}},[Q,e]);(0,n.useEffect)(()=>{Z()},[Z]);let V=(0,n.useRef)(0),W=(0,n.useCallback)(async e=>{let t=e.trim();if(!t)return;let r=++V.current;B(!0);try{let e=await fetch(`/api/personal-cloud-providers/permissions?search=${encodeURIComponent(t)}`,{cache:"no-store"}),s=await e.json().catch(()=>({}));if(r!==V.current)return;if(!e.ok)throw Error(s.error||"Kh\xf4ng t\xecm được t\xe0i khoản");F(Array.isArray(s.accounts)?s.accounts:[]),G(!!s.accountsTruncated)}catch(e){if(r!==V.current)return;F([]),K(e?.message||"Kh\xf4ng t\xecm được t\xe0i khoản")}finally{r===V.current&&B(!1)}},[]);(0,n.useEffect)(()=>{if(!e)return;if(!L.trim()){F(null),G(!1),B(!1);return}let t=setTimeout(()=>W(L),300);return()=>clearTimeout(t)},[L,e,W]),(0,n.useEffect)(()=>{let e=u(h),r=i[e]||{},s={};for(let e of t)s[e.id]=!0===r[e.id];g(s);let n=j[e];f(n>0?String(n):"")},[h,i,t,j]);let X=(0,n.useMemo)(()=>Array.from(new Set([...Object.keys(i||{}),...Object.keys(l||{})])).map(e=>{let r=i[e]||{},s=l[e]||{},n=t.filter(e=>r?.[e.id]===!0),a=t.some(e=>Number(s[e.id]||0)>0);return{userId:e,providerState:r,connectionsByProvider:s,enabledProviders:n,hasAnyConnection:a}}).filter(e=>e.enabledProviders.length>0||e.hasAnyConnection).sort((e,t)=>e.userId.localeCompare(t.userId)),[l,i,t]),Y=null!==_,ee=(0,n.useMemo)(()=>Y?_.map(e=>{let r=e.providerState||{},s=e.connectionsByProvider||{},n=t.filter(e=>r?.[e.id]===!0),i=t.some(e=>Number(s[e.id]||0)>0);return{userId:e.userId,displayName:e.displayName,email:e.email,providerState:r,connectionsByProvider:s,enabledProviders:n,hasAnyConnection:i}}).sort((e,t)=>e.userId.localeCompare(t.userId)):X,[Y,_,X,t]),et=(0,n.useMemo)(()=>{let e=0,r=0,s=0,n=new Map(t.map(e=>[e.id,{grantedUsers:0,connections:0}]));for(let i of X){for(let r of t){let t=Number(i.connectionsByProvider?.[r.id]||0);e+=t;let s=n.get(r.id);i.providerState?.[r.id]===!0?(s.grantedUsers+=1,s.connections+=t):t>0&&(s.connections+=t)}i.enabledProviders.length>0&&!i.hasAnyConnection&&(r+=1),0===i.enabledProviders.length&&i.hasAnyConnection&&(s+=1)}return{totalUsers:X.length,totalConnections:e,grantedNoConnection:r,connectionNoGrant:s,perProvider:t.map(e=>({provider:e,...n.get(e.id)}))}},[X,t]),er=async()=>{let e,t=u(h);if(!t)return void K("Nhập username/email cần cấp quyền.");let r=String(v||"").trim();if(""===r)e=null;else{let t=Number.parseInt(r,10);if(!Number.isFinite(t)||t<=0)return void K("Per-user override phải l\xe0 số nguy\xean dương hoặc bỏ trống.");e=t}O(!0),K(""),z("");try{let r=await fetch("/api/personal-cloud-providers/permissions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:t,providers:b,connectionsPerProviderLimit:e})}),s=await r.json().catch(()=>({}));if(!r.ok)throw Error(s.error||"Kh\xf4ng lưu được quyền OAuth");Q(s);let n=s.user?.id||t;p(n),z(`Đ\xe3 lưu quyền OAuth cho ${n}.`),J(!1),L.trim()&&W(L)}catch(e){K(e?.message||"Kh\xf4ng lưu được quyền OAuth")}finally{O(!1)}},es=async()=>{let e=Number.parseInt(C,10);if(!Number.isFinite(e)||e<=0)return void K("Global limit phải l\xe0 số nguy\xean dương.");$(!0),K(""),z("");try{let t=await fetch("/api/personal-cloud-providers/permissions",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({globalConnectionsPerProviderLimit:e})}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||"Kh\xf4ng lưu được global limit");Q(r),z(`Đ\xe3 đặt global limit = ${e} account / provider / user.`)}catch(e){K(e?.message||"Kh\xf4ng lưu được global limit")}finally{$(!1)}},en=async e=>{let t=u(e);if(t){O(!0),K(""),z("");try{let e=await fetch(`/api/personal-cloud-providers/permissions?userId=${encodeURIComponent(t)}`,{method:"DELETE"}),r=await e.json().catch(()=>({}));if(!e.ok)throw Error(r.error||"Kh\xf4ng thu hồi được quyền OAuth");Q(r),u(h)===t&&p("");let s=r.disconnectSummary||{},n=Number(s.manualActionRequired)||0;z(`Đ\xe3 x\xf3a ${s.deletedCount||0} OAuth connection của ${t}; ${s.upstreamRevokedCount||0} token đ\xe3 revoke upstream.${n>0?` ${n} connection cần thu hồi thủ c\xf4ng tại provider.`:""}`),E(""),L.trim()&&W(L)}catch(e){K(e?.message||"Kh\xf4ng thu hồi được quyền OAuth")}finally{O(!1)}}};if(!e)return null;let ei=X.find(e=>e.userId===u(I)),ea=t.reduce((e,t)=>e+Number(ei?.connectionsByProvider?.[t.id]||0),0);return(0,s.jsxs)("div",{className:"space-y-5",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/50 p-4",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold text-text-main",children:"Admin: OAuth provider access"}),(0,s.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Quản l\xfd provider n\xe0o user được ph\xe9p d\xf9ng, giới hạn số account OAuth c\xe1 nh\xe2n v\xe0 thu hồi to\xe0n bộ quyền/token khi cần. C\xe1c thao t\xe1c trong tab n\xe0y chỉ d\xe0nh cho admin."})]}),(0,s.jsx)(x.default,{}),T?(0,s.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-700 dark:text-red-300",children:T}):null,U?(0,s.jsx)("div",{className:"rounded-xl border border-green-500/30 bg-green-500/10 px-4 py-3 text-sm text-green-700 dark:text-green-300",children:U}):null,(0,s.jsxs)(c.Zp,{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Access policy"}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"Default l\xe0 kh\xf4ng c\xf3 quyền. Tắt provider giữ nguy\xean connection/token để c\xf3 thể bật lại; Revoke all sẽ thử revoke upstream rồi x\xf3a connection/token local."})]}),(0,s.jsx)(c.$n,{variant:"outline",size:"sm",onClick:Z,loading:A,icon:"refresh",children:"Refresh"})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:"Global limit — số account OAuth c\xe1 nh\xe2n / provider / user thường"}),(0,s.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"\xc1p dụng cho user kh\xf4ng c\xf3 per-user override. Admin kh\xf4ng bị chặn bởi limit n\xe0y."}),(0,s.jsxs)("div",{className:"mt-3 flex flex-col gap-2 sm:flex-row sm:items-end",children:[(0,s.jsx)(c.pd,{type:"number",min:1,value:C,onChange:e=>w(e.target.value),className:"sm:w-48"}),(0,s.jsx)(c.$n,{onClick:es,loading:q,disabled:q||Number.parseInt(C,10)===N,children:"Lưu global"}),(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["Đang lưu: ",N]})]})]}),(0,s.jsxs)("div",{className:"border-t border-border pt-4",children:[(0,s.jsxs)("div",{className:"mb-3",children:[(0,s.jsx)("h3",{className:"font-semibold text-text-main",children:"Granted OAuth Access"}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"T\xecm một t\xe0i khoản (username/email) để xem v\xe0 chỉnh quyền — kể cả t\xe0i khoản chưa được cấp quyền g\xec. Kh\xf4ng t\xecm kiếm th\xec hiển thị c\xe1c t\xe0i khoản đang c\xf3 quyền hoặc c\xf2n OAuth connection."})]}),A?(0,s.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Đang tải quyền..."}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-4",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"Tổng user"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.totalUsers})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"Tổng OAuth connection"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.totalConnections})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"Cấp quyền, chưa connect"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.grantedNoConnection})]}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-xs font-semibold uppercase text-text-muted",children:"C\xf2n connection, đ\xe3 thu hồi quyền"}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-bold text-text-main",children:et.connectionNoGrant})]})]}),et.perProvider.some(e=>e.grantedUsers>0||e.connections>0)?(0,s.jsxs)("div",{className:"mb-4 rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium text-text-main",children:"Breakdown theo provider"}),(0,s.jsx)("div",{className:"mt-3 space-y-2",children:et.perProvider.map(({provider:e,grantedUsers:t,connections:r})=>(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 text-sm",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(m.A,{src:`/providers/${e.id}.png`,alt:e.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"}),(0,s.jsx)("span",{className:"text-text-main",children:e.name})]}),(0,s.jsxs)("div",{className:"flex items-center gap-3 text-xs text-text-muted",children:[(0,s.jsxs)("span",{children:[t," user được cấp quyền"]}),(0,s.jsxs)("span",{children:[r," connection"]})]})]},e.id))})]}):null,(0,s.jsx)("div",{className:"mb-4",children:(0,s.jsx)(c.pd,{label:"T\xecm t\xe0i khoản",value:L,onChange:e=>R(e.target.value),placeholder:"Nhập username hoặc email, vd: anh-tct hoặc anh-tct@fujinet.net",hint:H?"Đang t\xecm…":void 0})}),Y&&H&&0===ee.length?(0,s.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Đang t\xecm t\xe0i khoản..."}):Y&&0===ee.length?(0,s.jsxs)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:['Kh\xf4ng t\xecm thấy t\xe0i khoản n\xe0o khớp với "',L.trim(),'".']}):Y||0!==X.length?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",children:(0,s.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,s.jsx)("thead",{className:"bg-surface/80 text-left text-xs uppercase tracking-wide text-text-muted",children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{className:"px-4 py-3 font-medium",children:"User"}),t.map(e=>(0,s.jsx)("th",{className:"px-4 py-3 font-medium",children:e.name},e.id)),(0,s.jsx)("th",{className:"px-4 py-3 font-medium",children:"Limit / provider"}),(0,s.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,s.jsx)("tbody",{className:"divide-y divide-border bg-background",children:ee.map(e=>(0,s.jsxs)("tr",{className:"hover:bg-surface/50",children:[(0,s.jsxs)("td",{className:"px-4 py-4",children:[(0,s.jsx)("div",{className:"break-all font-mono text-text-main",children:e.userId}),e.displayName||e.email?(0,s.jsx)("div",{className:"mt-0.5 text-xs text-text-muted",children:[e.displayName,e.email].filter(Boolean).join(" \xb7 ")}):null]}),t.map(t=>{let r=!0===e.providerState[t.id],n=Number(e.connectionsByProvider?.[t.id]||0);return(0,s.jsx)("td",{className:"px-4 py-4",children:(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)(c.Ex,{variant:r?"success":"default",size:"sm",children:r?"ON":"OFF"}),n>0?(0,s.jsxs)("span",{className:"inline-flex items-center gap-0.5",title:`User đ\xe3 add ${n} ${t.name} account`,children:[(0,s.jsx)(m.A,{src:`/providers/${t.id}.png`,alt:t.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:t.id.slice(0,2).toUpperCase(),fallbackColor:t.color||"#64748b"}),n>1?(0,s.jsxs)("span",{className:"text-[10px] font-semibold text-text-muted",children:["\xd7",n]}):null]}):null]})},t.id)}),(0,s.jsx)("td",{className:"px-4 py-4 text-xs",children:j[e.userId]>0?(0,s.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,s.jsx)(c.Ex,{variant:"warning",size:"sm",children:"Override"}),(0,s.jsx)("span",{className:"font-mono",children:j[e.userId]})]}):(0,s.jsxs)("span",{className:"text-text-muted",children:["Global \xb7 ",N]})}),(0,s.jsx)("td",{className:"px-4 py-4",children:(0,s.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,s.jsx)(c.$n,{variant:"outline",size:"sm",onClick:()=>(e=>{let r=u(e);p(r);let s=i[r]||{},n={};for(let e of t)n[e.id]=!0===s[e.id];g(n),K(""),z(""),J(!0)})(e.userId),children:"Edit"}),e.enabledProviders.length>0||e.hasAnyConnection?(0,s.jsx)(c.$n,{variant:"danger",size:"sm",loading:P&&I===e.userId,onClick:()=>E(e.userId),children:"Revoke all & delete"}):null]})})]},e.userId))})]})}),Y&&M?(0,s.jsxs)("p",{className:"mt-2 text-xs text-text-muted",children:["Chỉ hiển thị ",ee.length," kết quả đầu, thu hẹp từ kh\xf3a t\xecm kiếm để ch\xednh x\xe1c hơn."]}):null]}):(0,s.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Chưa c\xf3 user n\xe0o được cấp quyền OAuth provider. D\xf9ng \xf4 t\xecm kiếm ở tr\xean để cấp quyền cho một t\xe0i khoản."})]})]})]}),I?(0,s.jsx)(c.aF,{isOpen:!0,onClose:()=>E(""),title:"Thu hồi to\xe0n bộ quyền OAuth",size:"lg",busy:P,closeOnOverlay:!P,footer:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{variant:"ghost",onClick:()=>E(""),disabled:P,children:"Hủy"}),(0,s.jsx)(c.$n,{variant:"danger",icon:"delete_forever",loading:P,onClick:()=>en(I),children:"Thu hồi v\xe0 x\xf3a to\xe0n bộ"})]}),children:(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium text-red-700 dark:text-red-300",children:"H\xe0nh động nguy hiểm, kh\xf4ng thể ho\xe0n t\xe1c"}),(0,s.jsx)("div",{className:"mt-1 break-all text-lg font-semibold text-text-main",children:I}),(0,s.jsx)("p",{className:"mt-2 text-sm text-text-muted",children:"To\xe0n bộ quyền OAuth provider v\xe0 connection/token local của user n\xe0y sẽ bị x\xf3a; gateway sẽ thử revoke upstream trước."})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-surface p-3 text-sm",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Connection t\xecm thấy"}),(0,s.jsx)(c.Ex,{variant:ea>0?"warning":"default",size:"sm",children:ea})]}),ei?(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:t.map(e=>{let t=Number(ei.connectionsByProvider?.[e.id]||0);return t>0?(0,s.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-border bg-background px-2.5 py-1 text-xs text-text-muted",children:[(0,s.jsx)(m.A,{src:`/providers/${e.id}.png`,alt:e.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase()}),e.name," \xd7",t]},e.id):null})}):null]})}):null,D?(0,s.jsx)(c.aF,{isOpen:!0,onClose:()=>J(!1),title:"Chỉnh quyền OAuth provider",size:"lg",busy:P,closeOnOverlay:!P,footer:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{variant:"ghost",onClick:()=>J(!1),disabled:P,children:"Hủy"}),(0,s.jsx)(c.$n,{onClick:er,loading:P,icon:"save",children:"Save permissions"})]}),children:(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)(c.pd,{label:"User ID / Email",value:h,disabled:!0}),(0,s.jsx)("div",{className:"grid gap-3 sm:grid-cols-2",children:t.map(e=>(0,s.jsx)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:(0,s.jsx)(c.lM,{checked:!0===b[e.id],onChange:t=>g(r=>({...r,[e.id]:t})),label:e.name,description:b[e.id]?"User được ph\xe9p add account":"User chưa được cấp quyền"})},e.id))}),(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:"Per-user override — account / provider"}),(0,s.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:["Ghi đ\xe8 global cho ",(0,s.jsx)("span",{className:"font-mono",children:u(h)||"user đang chọn"}),". Để trống để d\xf9ng global (",N,")."]}),(0,s.jsx)("div",{className:"mt-3 max-w-xs",children:(0,s.jsx)(c.pd,{type:"number",min:1,value:v,onChange:e=>f(e.target.value),placeholder:`Để trống = d\xf9ng global (${N})`})})]})]})}):null]})}var p=r(43503),b=r(78867),g=r(67673),v=r(14796),f=r.n(v);function j(){let e=(0,n.useRef)(null);return(0,n.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let r=null,s=()=>{let e=Array.from(t.querySelectorAll("h2")).find(e=>e.textContent?.trim()==="Admin: OAuth provider access"),s=e?.closest(".bg-surface.border.border-border");s&&s!==r&&(r&&r.style.removeProperty("display"),(r=s).style.setProperty("display","none"))};s();let n=new MutationObserver(s);return n.observe(t,{childList:!0,subtree:!0}),()=>{n.disconnect(),r&&r.style.removeProperty("display")}},[]),(0,s.jsxs)("div",{ref:e,className:f().page,children:[(0,s.jsx)(p.default,{}),(0,s.jsx)(g.default,{}),(0,s.jsx)(b.default,{})]})}function y(){let{isAdmin:e}=(0,a.s)(),[t,r]=(0,n.useState)("oauth"),c=(0,n.useMemo)(()=>[{id:"oauth",label:"Personal OAuth",icon:"cloud_sync"},...e?[{id:"monitor",label:"OAuth Monitor",icon:"manage_accounts"}]:[],{id:"quota",label:"Personal Quota",icon:"data_usage"},...e?[{id:"admin-access",label:"Admin: OAuth Access",icon:"admin_panel_settings"}]:[]],[e]),m=c.some(e=>e.id===t)?t:"oauth";return(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)(d.A,{tabs:c,activeId:m,onChange:r}),"oauth"===m?(0,s.jsx)(j,{}):null,"monitor"===m&&e?(0,s.jsx)(l.default,{}):null,"quota"===m?(0,s.jsx)(n.Suspense,{fallback:(0,s.jsx)(i.CardSkeleton,{}),children:(0,s.jsx)(o.default,{})}):null,"admin-access"===m&&e?(0,s.jsx)(h,{}):null]})}},31458:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var s=r(95155),n=r(12115),i=r(35497),a=r(57250),d=r(94027);function l(){let{isAdmin:e}=(0,d.s)(),[t,r]=(0,n.useState)([]),[l,o]=(0,n.useState)(!1),[c,m]=(0,n.useState)(""),[x,u]=(0,n.useState)(""),[h,p]=(0,n.useState)(""),b=(0,n.useCallback)(async()=>{if(e){o(!0),u("");try{let e=await fetch("/api/personal-cloud-providers/visibility",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider");r(Array.isArray(t.providers)?t.providers:[])}catch(e){u(e?.message||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider")}finally{o(!1)}}},[e]);if((0,n.useEffect)(()=>{b()},[b]),!e)return null;let g=async(e,t)=>{m(e.id),u(""),p("");try{let s=await fetch("/api/personal-cloud-providers/visibility",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerId:e.id,visible:t})}),n=await s.json().catch(()=>({}));if(!s.ok)throw Error(n.error||"Kh\xf4ng cập nhật được visibility provider");r(Array.isArray(n.providers)?n.providers:[]),p(`${e.name}: ${t?"đ\xe3 Show cho user":"đ\xe3 Hide khỏi user"}.`)}catch(e){u(e?.message||"Kh\xf4ng cập nhật được visibility provider")}finally{m("")}};return(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/50 p-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"font-semibold text-text-main",children:"Admin: Show / Hide Personal Cloud Providers"}),(0,s.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Chỉ điều khiển provider c\xf3 xuất hiện tr\xean giao diện của user hay kh\xf4ng. Kh\xf4ng đổi quyền OAuth, kh\xf4ng deactivate connection, kh\xf4ng x\xf3a token, kh\xf4ng đổi API key/routing v\xe0 kh\xf4ng ảnh hưởng sử dụng thực tế."})]}),(0,s.jsx)(i.$n,{size:"sm",variant:"outline",onClick:b,loading:l,icon:"refresh",children:"Refresh"})]}),x?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-700 dark:text-red-300",children:x}):null,h?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-700 dark:text-green-300",children:h}):null,(0,s.jsx)("div",{className:"mt-4 grid gap-3 md:grid-cols-2 xl:grid-cols-4",children:t.map(e=>{let t=!1!==e.visible,r=c===e.id;return(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background p-3",children:[(0,s.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,s.jsx)(a.A,{src:`/providers/${e.id}.png`,alt:e.name,size:30,className:"max-h-[30px] max-w-[30px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"truncate text-sm font-medium text-text-main",children:e.name}),(0,s.jsx)(i.Ex,{variant:t?"success":"default",size:"sm",children:t?"Shown":"Hidden"})]})]}),(0,s.jsx)(i.$n,{size:"sm",variant:t?"outline":"secondary",disabled:r,loading:r,icon:t?"visibility_off":"visibility",onClick:()=>g(e,!t),children:t?"Hide":"Show"})]},e.id)})})]})}},96928:(e,t,r)=>{Promise.resolve().then(r.bind(r,15100))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,7413,912,6945,7173,8441,3794,7358],()=>e(e.s=96928)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9645],{31458:(e,r,i)=>{"use strict";i.d(r,{default:()=>l});var s=i(95155),t=i(12115),n=i(35497),a=i(57250),d=i(94027);function l(){let{isAdmin:e}=(0,d.s)(),[r,i]=(0,t.useState)([]),[l,o]=(0,t.useState)(!1),[c,h]=(0,t.useState)(""),[x,m]=(0,t.useState)(""),[u,p]=(0,t.useState)(""),v=(0,t.useCallback)(async()=>{if(e){o(!0),m("");try{let e=await fetch("/api/personal-cloud-providers/visibility",{cache:"no-store"}),r=await e.json().catch(()=>({}));if(!e.ok)throw Error(r.error||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider");i(Array.isArray(r.providers)?r.providers:[])}catch(e){m(e?.message||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider")}finally{o(!1)}}},[e]);if((0,t.useEffect)(()=>{v()},[v]),!e)return null;let g=async(e,r)=>{h(e.id),m(""),p("");try{let s=await fetch("/api/personal-cloud-providers/visibility",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerId:e.id,visible:r})}),t=await s.json().catch(()=>({}));if(!s.ok)throw Error(t.error||"Kh\xf4ng cập nhật được visibility provider");i(Array.isArray(t.providers)?t.providers:[]),p(`${e.name}: ${r?"đ\xe3 Show cho user":"đ\xe3 Hide khỏi user"}.`)}catch(e){m(e?.message||"Kh\xf4ng cập nhật được visibility provider")}finally{h("")}};return(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/50 p-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"font-semibold text-text-main",children:"Admin: Show / Hide Personal Cloud Providers"}),(0,s.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Chỉ điều khiển provider c\xf3 xuất hiện tr\xean giao diện của user hay kh\xf4ng. Kh\xf4ng đổi quyền OAuth, kh\xf4ng deactivate connection, kh\xf4ng x\xf3a token, kh\xf4ng đổi API key/routing v\xe0 kh\xf4ng ảnh hưởng sử dụng thực tế."})]}),(0,s.jsx)(n.$n,{size:"sm",variant:"outline",onClick:v,loading:l,icon:"refresh",children:"Refresh"})]}),x?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-700 dark:text-red-300",children:x}):null,u?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-700 dark:text-green-300",children:u}):null,(0,s.jsx)("div",{className:"mt-4 grid gap-3 md:grid-cols-2 xl:grid-cols-4",children:r.map(e=>{let r=!1!==e.visible,i=c===e.id;return(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background p-3",children:[(0,s.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,s.jsx)(a.A,{src:`/providers/${e.id}.png`,alt:e.name,size:30,className:"max-h-[30px] max-w-[30px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"truncate text-sm font-medium text-text-main",children:e.name}),(0,s.jsx)(n.Ex,{variant:r?"success":"default",size:"sm",children:r?"Shown":"Hidden"})]})]}),(0,s.jsx)(n.$n,{size:"sm",variant:r?"outline":"secondary",disabled:i,loading:i,icon:r?"visibility_off":"visibility",onClick:()=>g(e,!r),children:r?"Hide":"Show"})]},e.id)})})]})}},76333:(e,r,i)=>{Promise.resolve().then(i.bind(i,31458))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9645],{31458:(e,r,i)=>{"use strict";i.d(r,{default:()=>l});var s=i(95155),t=i(12115),n=i(35497),a=i(57250),d=i(94027);function l(){let{isAdmin:e}=(0,d.s)(),[r,i]=(0,t.useState)([]),[l,o]=(0,t.useState)(!1),[c,h]=(0,t.useState)(""),[x,m]=(0,t.useState)(""),[u,p]=(0,t.useState)(""),v=(0,t.useCallback)(async()=>{if(e){o(!0),m("");try{let e=await fetch("/api/personal-cloud-providers/visibility",{cache:"no-store"}),r=await e.json().catch(()=>({}));if(!e.ok)throw Error(r.error||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider");i(Array.isArray(r.providers)?r.providers:[])}catch(e){m(e?.message||"Kh\xf4ng tải được trạng th\xe1i Show/Hide provider")}finally{o(!1)}}},[e]);if((0,t.useEffect)(()=>{v()},[v]),!e)return null;let g=async(e,r)=>{h(e.id),m(""),p("");try{let s=await fetch("/api/personal-cloud-providers/visibility",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerId:e.id,visible:r})}),t=await s.json().catch(()=>({}));if(!s.ok)throw Error(t.error||"Kh\xf4ng cập nhật được visibility provider");i(Array.isArray(t.providers)?t.providers:[]),p(`${e.name}: ${r?"đ\xe3 Show cho user":"đ\xe3 Hide khỏi user"}.`)}catch(e){m(e?.message||"Kh\xf4ng cập nhật được visibility provider")}finally{h("")}};return(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface/50 p-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"font-semibold text-text-main",children:"Admin: Show / Hide Personal Cloud Providers"}),(0,s.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Chỉ điều khiển provider c\xf3 xuất hiện tr\xean giao diện của user hay kh\xf4ng. Kh\xf4ng đổi quyền OAuth, kh\xf4ng deactivate connection, kh\xf4ng x\xf3a token, kh\xf4ng đổi API key/routing v\xe0 kh\xf4ng ảnh hưởng sử dụng thực tế."})]}),(0,s.jsx)(n.$n,{size:"sm",variant:"outline",onClick:v,loading:l,icon:"refresh",children:"Refresh"})]}),x?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-700 dark:text-red-300",children:x}):null,u?(0,s.jsx)("div",{className:"mt-3 rounded-xl border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-700 dark:text-green-300",children:u}):null,(0,s.jsx)("div",{className:"mt-4 grid gap-3 md:grid-cols-2 xl:grid-cols-4",children:r.map(e=>{let r=!1!==e.visible,i=c===e.id;return(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border bg-background p-3",children:[(0,s.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,s.jsx)(a.A,{src:`/providers/${e.id}.png`,alt:e.name,size:30,className:"max-h-[30px] max-w-[30px] rounded object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("div",{className:"truncate text-sm font-medium text-text-main",children:e.name}),(0,s.jsx)(n.Ex,{variant:r?"success":"default",size:"sm",children:r?"Shown":"Hidden"})]})]}),(0,s.jsx)(n.$n,{size:"sm",variant:r?"outline":"secondary",disabled:i,loading:i,icon:r?"visibility_off":"visibility",onClick:()=>g(e,!r),children:r?"Hide":"Show"})]},e.id)})})]})}},76333:(e,r,i)=>{Promise.resolve().then(i.bind(i,31458))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,8441,3794,7358],()=>e(e.s=76333)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3538],{2823:(e,s,n)=>{Promise.resolve().then(n.bind(n,67673)),Promise.resolve().then(n.t.bind(n,14796,23)),Promise.resolve().then(n.bind(n,43503)),Promise.resolve().then(n.bind(n,78867))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3538],{2823:(e,s,n)=>{Promise.resolve().then(n.bind(n,67673)),Promise.resolve().then(n.t.bind(n,14796,23)),Promise.resolve().then(n.bind(n,43503)),Promise.resolve().then(n.bind(n,78867))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,912,8441,3794,7358],()=>e(e.s=2823)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3864],{74064:(e,s,_)=>{Promise.resolve().then(_.bind(_,17173))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3864],{74064:(e,s,_)=>{Promise.resolve().then(_.bind(_,17173))}},e=>{e.O(0,[6373,3862,8500,506,9959,7050,8723,5263,7033,5497,7173,8441,3794,7358],()=>e(e.s=74064)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9730],{14051:(e,r,t)=>{e.exports=t(34701)()},25086:(e,r,t)=>{"use strict";t.d(r,{CardSkeleton:()=>c,PageLoading:()=>i,Skeleton:()=>o,Spinner:()=>a,default:()=>l});var n=t(95155),s=t(31474);function a({size:e="md",className:r}){return(0,n.jsx)("span",{className:(0,s.cn)("material-symbols-outlined animate-spin text-brand-500",{sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"}[e],r),children:"progress_activity"})}function i({message:e="Loading..."}){return(0,n.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg",children:[(0,n.jsx)(a,{size:"xl"}),(0,n.jsx)("p",{className:"mt-4 text-text-muted",children:e})]})}function o({className:e,...r}){return(0,n.jsx)("div",{className:(0,s.cn)("animate-pulse rounded-[10px] bg-surface-2",e),...r})}function c(){return(0,n.jsxs)("div",{className:"p-6 rounded-[14px] border border-border-subtle bg-surface shadow-[var(--shadow-soft)]",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,n.jsx)(o,{className:"h-4 w-24"}),(0,n.jsx)(o,{className:"size-10 rounded-[10px]"})]}),(0,n.jsx)(o,{className:"h-8 w-16 mb-2"}),(0,n.jsx)(o,{className:"h-3 w-20"})]})}function l({type:e="spinner",...r}){switch(e){case"page":return(0,n.jsx)(i,{...r});case"skeleton":return(0,n.jsx)(o,{...r});case"card":return(0,n.jsx)(c,{...r});default:return(0,n.jsx)(a,{...r})}}},31474:(e,r,t)=>{"use strict";function n(...e){return e.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}t.d(r,{cn:()=>n})},34701:(e,r,t)=>{"use strict";var n=t(82114);function s(){}function a(){}a.resetWarningCache=s,e.exports=function(){function e(e,r,t,s,a,i){if(i!==n){var o=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function r(){return e}e.isRequired=e;var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:r,element:e,elementType:e,instanceOf:r,node:e,objectOf:r,oneOf:r,oneOfType:r,shape:r,exact:r,checkPropTypes:a,resetWarningCache:s};return t.PropTypes=t,t}},54642:e=>{var r;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(r={}).endianness=function(){return"LE"},r.hostname=function(){return"u">typeof location?location.hostname:""},r.loadavg=function(){return[]},r.uptime=function(){return 0},r.freemem=function(){return Number.MAX_VALUE},r.totalmem=function(){return Number.MAX_VALUE},r.cpus=function(){return[]},r.type=function(){return"Browser"},r.release=function(){return"u">typeof navigator?navigator.appVersion:""},r.networkInterfaces=r.getNetworkInterfaces=function(){return{}},r.arch=function(){return"javascript"},r.platform=function(){return"browser"},r.tmpdir=r.tmpDir=function(){return"/tmp"},r.EOL="\n",r.homedir=function(){return"/"},e.exports=r},57250:(e,r,t)=>{"use strict";t.d(r,{A:()=>o});var n=t(95155),s=t(12115),a=t(14051),i=t.n(a);function o({src:e,alt:r,size:t=32,className:a="",fallbackText:i="?",fallbackColor:c}){let[l,u]=(0,s.useState)(!1);return!e||l?(0,n.jsx)("span",{className:`inline-flex items-center justify-center font-bold rounded-lg ${a}`.trim(),style:{width:t,height:t,color:c,fontSize:Math.max(10,Math.floor(.38*t))},children:i}):(0,n.jsx)("img",{src:e,alt:r,width:t,height:t,className:a,onError:()=>u(!0)})}o.propTypes={src:i().string,alt:i().string,size:i().number,className:i().string,fallbackText:i().string,fallbackColor:i().string}},66225:(e,r,t)=>{Promise.resolve().then(t.bind(t,6945)),Promise.resolve().then(t.bind(t,25086))},82114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},84588:(e,r,t)=>{"use strict";t.d(r,{default:()=>a});var n=t(95155),s=t(31474);function a({children:e,title:r,subtitle:t,icon:i,action:o,padding:c="md",hover:l=!1,elev:u=!1,className:d,...m}){return(0,n.jsxs)("div",{className:(0,s.cn)("bg-surface border border-border",u?"rounded-[14px] shadow-[var(--shadow-elev)]":"rounded-[14px] shadow-[0_1px_2px_rgba(15,23,42,0.045),0_12px_28px_-26px_rgba(37,99,235,0.38)]",l&&"hover:shadow-[var(--shadow-warm)] hover:border-brand-500/40 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-5",lg:"p-6"}[c],d),...m,children:[(r||o)&&(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,n.jsxs)("div",{className:"flex items-center gap-3",children:[i&&(0,n.jsx)("div",{className:"p-2 rounded-[10px] bg-bg-alt border border-border-subtle text-text-muted",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:i})}),(0,n.jsxs)("div",{children:[r&&(0,n.jsx)("h3",{className:"text-text-main font-semibold",children:r}),t&&(0,n.jsx)("p",{className:"text-sm text-text-muted",children:t})]})]}),o]}),e]})}a.Section=function({children:e,className:r,...t}){return(0,n.jsx)("div",{className:(0,s.cn)("p-4 rounded-[10px]","bg-bg-alt border border-border",r),...t,children:e})},a.Row=function({children:e,className:r,...t}){return(0,n.jsx)("div",{className:(0,s.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",r),...t,children:e})},a.ListItem=function({children:e,actions:r,className:t,...a}){return(0,n.jsxs)("div",{className:(0,s.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",t),...a,children:[(0,n.jsx)("div",{className:"flex-1 min-w-0",children:e}),r&&(0,n.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:r})]})}},98542:(e,r,t)=>{"use strict";t.d(r,{default:()=>a});var n=t(95155),s=t(31474);function a({checked:e=!1,onChange:r,label:t,description:i,disabled:o=!1,size:c="md",className:l}){let u={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,n.jsxs)("div",{className:(0,s.cn)("flex items-center gap-3",o&&"opacity-50 cursor-not-allowed",l),children:[(0,n.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:o,onClick:()=>{!o&&r&&r(!e)},className:(0,s.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-2 focus:ring-brand-500/30",e?"bg-brand-500":"bg-surface-3",u[c].track,o&&"cursor-not-allowed"),children:(0,n.jsx)("span",{className:(0,s.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?u[c].translate:"translate-x-0.5",u[c].thumb,"mt-0.5")})}),(t||i)&&(0,n.jsxs)("div",{className:"flex flex-col",children:[t&&(0,n.jsx)("span",{className:"text-sm font-medium text-text-main",children:t}),i&&(0,n.jsx)("span",{className:"text-xs text-text-muted",children:i})]})]})}}},e=>{e.O(0,[
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9730],{14051:(e,r,t)=>{e.exports=t(34701)()},25086:(e,r,t)=>{"use strict";t.d(r,{CardSkeleton:()=>c,PageLoading:()=>i,Skeleton:()=>o,Spinner:()=>a,default:()=>l});var n=t(95155),s=t(31474);function a({size:e="md",className:r}){return(0,n.jsx)("span",{className:(0,s.cn)("material-symbols-outlined animate-spin text-brand-500",{sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"}[e],r),children:"progress_activity"})}function i({message:e="Loading..."}){return(0,n.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg",children:[(0,n.jsx)(a,{size:"xl"}),(0,n.jsx)("p",{className:"mt-4 text-text-muted",children:e})]})}function o({className:e,...r}){return(0,n.jsx)("div",{className:(0,s.cn)("animate-pulse rounded-[10px] bg-surface-2",e),...r})}function c(){return(0,n.jsxs)("div",{className:"p-6 rounded-[14px] border border-border-subtle bg-surface shadow-[var(--shadow-soft)]",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,n.jsx)(o,{className:"h-4 w-24"}),(0,n.jsx)(o,{className:"size-10 rounded-[10px]"})]}),(0,n.jsx)(o,{className:"h-8 w-16 mb-2"}),(0,n.jsx)(o,{className:"h-3 w-20"})]})}function l({type:e="spinner",...r}){switch(e){case"page":return(0,n.jsx)(i,{...r});case"skeleton":return(0,n.jsx)(o,{...r});case"card":return(0,n.jsx)(c,{...r});default:return(0,n.jsx)(a,{...r})}}},31474:(e,r,t)=>{"use strict";function n(...e){return e.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}t.d(r,{cn:()=>n})},34701:(e,r,t)=>{"use strict";var n=t(82114);function s(){}function a(){}a.resetWarningCache=s,e.exports=function(){function e(e,r,t,s,a,i){if(i!==n){var o=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function r(){return e}e.isRequired=e;var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:r,element:e,elementType:e,instanceOf:r,node:e,objectOf:r,oneOf:r,oneOfType:r,shape:r,exact:r,checkPropTypes:a,resetWarningCache:s};return t.PropTypes=t,t}},54642:e=>{var r;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(r={}).endianness=function(){return"LE"},r.hostname=function(){return"u">typeof location?location.hostname:""},r.loadavg=function(){return[]},r.uptime=function(){return 0},r.freemem=function(){return Number.MAX_VALUE},r.totalmem=function(){return Number.MAX_VALUE},r.cpus=function(){return[]},r.type=function(){return"Browser"},r.release=function(){return"u">typeof navigator?navigator.appVersion:""},r.networkInterfaces=r.getNetworkInterfaces=function(){return{}},r.arch=function(){return"javascript"},r.platform=function(){return"browser"},r.tmpdir=r.tmpDir=function(){return"/tmp"},r.EOL="\n",r.homedir=function(){return"/"},e.exports=r},57250:(e,r,t)=>{"use strict";t.d(r,{A:()=>o});var n=t(95155),s=t(12115),a=t(14051),i=t.n(a);function o({src:e,alt:r,size:t=32,className:a="",fallbackText:i="?",fallbackColor:c}){let[l,u]=(0,s.useState)(!1);return!e||l?(0,n.jsx)("span",{className:`inline-flex items-center justify-center font-bold rounded-lg ${a}`.trim(),style:{width:t,height:t,color:c,fontSize:Math.max(10,Math.floor(.38*t))},children:i}):(0,n.jsx)("img",{src:e,alt:r,width:t,height:t,className:a,onError:()=>u(!0)})}o.propTypes={src:i().string,alt:i().string,size:i().number,className:i().string,fallbackText:i().string,fallbackColor:i().string}},66225:(e,r,t)=>{Promise.resolve().then(t.bind(t,6945)),Promise.resolve().then(t.bind(t,25086))},82114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},84588:(e,r,t)=>{"use strict";t.d(r,{default:()=>a});var n=t(95155),s=t(31474);function a({children:e,title:r,subtitle:t,icon:i,action:o,padding:c="md",hover:l=!1,elev:u=!1,className:d,...m}){return(0,n.jsxs)("div",{className:(0,s.cn)("bg-surface border border-border",u?"rounded-[14px] shadow-[var(--shadow-elev)]":"rounded-[14px] shadow-[0_1px_2px_rgba(15,23,42,0.045),0_12px_28px_-26px_rgba(37,99,235,0.38)]",l&&"hover:shadow-[var(--shadow-warm)] hover:border-brand-500/40 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-5",lg:"p-6"}[c],d),...m,children:[(r||o)&&(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,n.jsxs)("div",{className:"flex items-center gap-3",children:[i&&(0,n.jsx)("div",{className:"p-2 rounded-[10px] bg-bg-alt border border-border-subtle text-text-muted",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:i})}),(0,n.jsxs)("div",{children:[r&&(0,n.jsx)("h3",{className:"text-text-main font-semibold",children:r}),t&&(0,n.jsx)("p",{className:"text-sm text-text-muted",children:t})]})]}),o]}),e]})}a.Section=function({children:e,className:r,...t}){return(0,n.jsx)("div",{className:(0,s.cn)("p-4 rounded-[10px]","bg-bg-alt border border-border",r),...t,children:e})},a.Row=function({children:e,className:r,...t}){return(0,n.jsx)("div",{className:(0,s.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",r),...t,children:e})},a.ListItem=function({children:e,actions:r,className:t,...a}){return(0,n.jsxs)("div",{className:(0,s.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",t),...a,children:[(0,n.jsx)("div",{className:"flex-1 min-w-0",children:e}),r&&(0,n.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:r})]})}},98542:(e,r,t)=>{"use strict";t.d(r,{default:()=>a});var n=t(95155),s=t(31474);function a({checked:e=!1,onChange:r,label:t,description:i,disabled:o=!1,size:c="md",className:l}){let u={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,n.jsxs)("div",{className:(0,s.cn)("flex items-center gap-3",o&&"opacity-50 cursor-not-allowed",l),children:[(0,n.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:o,onClick:()=>{!o&&r&&r(!e)},className:(0,s.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-2 focus:ring-brand-500/30",e?"bg-brand-500":"bg-surface-3",u[c].track,o&&"cursor-not-allowed"),children:(0,n.jsx)("span",{className:(0,s.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?u[c].translate:"translate-x-0.5",u[c].thumb,"mt-0.5")})}),(t||i)&&(0,n.jsxs)("div",{className:"flex flex-col",children:[t&&(0,n.jsx)("span",{className:"text-sm font-medium text-text-main",children:t}),i&&(0,n.jsx)("span",{className:"text-xs text-text-muted",children:i})]})]})}}},e=>{e.O(0,[8723,7413,6945,8441,3794,7358],()=>e(e.s=66225)),_N_E=e.O()}]);
|