@thangnm.nip/irouter 0.0.22 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -76
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +2 -2
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/employees/[keyId]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/employees/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/employees/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next/server/app/api/v1internal/route.js +1 -1
- package/app/.next/server/app/api/version/route.js +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +4 -4
- package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/employees.html +1 -1
- package/app/.next/server/app/dashboard/employees.rsc +6 -6
- package/app/.next/server/app/dashboard/employees.segments/!KGRhc2hib2FyZCk/dashboard/employees/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/employees.segments/!KGRhc2hib2FyZCk/dashboard/employees.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/employees.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/employees.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/employees.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/employees.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/employees.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/employees.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.html +1 -1
- package/app/.next/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.html +2 -2
- package/app/.next/server/app/dashboard/quota.rsc +5 -5
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.html +1 -1
- package/app/.next/server/app/dashboard/translator.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.html +1 -1
- package/app/.next/server/app/dashboard/usage.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.html +1 -1
- package/app/.next/server/app/dashboard.rsc +5 -5
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +4 -4
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +4 -4
- package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +5 -5
- package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +2 -2
- package/app/.next/server/chunks/3093.js +1 -1
- package/app/.next/server/chunks/3726.js +1 -1
- package/app/.next/server/chunks/412.js +2 -2
- package/app/.next/server/chunks/6811.js +1 -1
- package/app/.next/server/chunks/8895.js +1 -1
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/static/chunks/5497-2058343bfbea2c77.js +7 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/employees/{page-b81aecb1b36caa33.js → page-6033c610a36d1103.js} +2 -2
- package/app/.next/static/chunks/app/{layout-bba8f733b801a5dc.js → layout-568b2d1a3408feb3.js} +1 -1
- package/app/.next/static/css/{bcba695583d9b815.css → 5c8a75e7beea01bc.css} +1 -1
- package/app/open-sse/handlers/internalChatCore.js +3 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- package/app/.next/static/chunks/5497-ac2d87085c5c8ceb.js +0 -7
- /package/app/.next/static/{n9oA9O-fUr5IBOOOO2Zy_ → aPsbdMQ-OPt-aBlDBxPbf}/_buildManifest.js +0 -0
- /package/app/.next/static/{n9oA9O-fUr5IBOOOO2Zy_ → aPsbdMQ-OPt-aBlDBxPbf}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7979],{22644:(e,t,s)=>{Promise.resolve().then(s.bind(s,53891))},53891:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>ea});var r=s(95155),a=s(12115),l=s(73321),o=s(35497),n=s(98500),i=s.n(n),c=s(33041),d=s(84588),x=s(56061),m=s(14051),u=s.n(m),p=s(81750),h=s(6793);s(53255);var f=s(52679);function g({data:e}){let{label:t,color:s,imageUrl:l,textIcon:o,active:n}=e,[i,c]=(0,a.useState)(!1);return(0,r.jsxs)("div",{className:"flex items-center gap-2.5 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:n?s:"var(--color-border)",boxShadow:n?`0 0 16px ${s}40`:"none",minWidth:"150px"},children:[(0,r.jsx)(p.h7,{type:"target",position:h.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("div",{className:"w-8 h-8 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${s}15`},children:i?(0,r.jsx)("span",{className:"text-sm font-bold",style:{color:s},children:o}):(0,r.jsx)("img",{src:l,alt:t,className:"w-6 h-6 rounded-sm object-contain",onError:()=>c(!0)})}),(0,r.jsx)("span",{className:"text-base font-medium truncate",style:{color:n?s:"var(--color-text)"},children:t}),n&&(0,r.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,r.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:s}}),(0,r.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:s}})]})]})}function b({data:e}){let{label:t,active:s,color:a="#f59e0b"}=e;return(0,r.jsxs)("div",{className:"flex items-center gap-2 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:s?a:"var(--color-border)",boxShadow:s?`0 0 12px ${a}40`:"none",minWidth:"120px"},children:[(0,r.jsx)("div",{className:"w-7 h-7 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${a}15`},children:(0,r.jsx)("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:s?a:"currentColor",style:{color:s?a:void 0},children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 5.25a3 3 0 013 3m3 0a6 6 0 01-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1121.75 8.25z"})})}),(0,r.jsx)("span",{className:"text-sm font-medium truncate",style:{color:s?a:"var(--color-text)"},children:t}),s&&(0,r.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,r.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:a}}),(0,r.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:a}})]}),(0,r.jsx)(p.h7,{type:"source",position:h.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"})]})}function y({data:e}){return(0,r.jsxs)("div",{className:"flex items-center justify-center px-5 py-3 rounded-xl border-2 border-primary bg-primary/5 shadow-md min-w-[130px]",children:[(0,r.jsx)(p.h7,{type:"target",position:h.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(p.h7,{type:"source",position:h.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("img",{src:"/favicon.svg",alt:"iRouter",className:"w-6 h-6 mr-2"}),(0,r.jsx)("span",{className:"text-sm font-bold text-primary",children:"iRouter"}),e.activeCount>0&&(0,r.jsx)("span",{className:"ml-2 px-1.5 py-0.5 rounded-full bg-primary text-white text-xs font-bold",children:e.activeCount})]})}g.propTypes={data:u().object.isRequired},b.propTypes={data:u().object.isRequired},y.propTypes={data:u().object.isRequired};let j={provider:g,router:y,apikey:b};function v({providers:e=[],apiKeys:t=[],activeRequests:s=[],recentRequests:l=[],lastProvider:o="",errorProvider:n="",activeKeyNames:i=[]}){let c=(0,a.useMemo)(()=>s.map(e=>e.provider?.toLowerCase()).filter(Boolean).sort().join(","),[s]),d=o?.toLowerCase()||"",x=n?.toLowerCase()||"",m=(0,a.useMemo)(()=>new Set(i),[i]),u=(0,a.useMemo)(()=>new Set(c?c.split(","):[]),[c]),h=(0,a.useMemo)(()=>new Set(d?[d]:[]),[d]),g=(0,a.useMemo)(()=>new Set(x?[x]:[]),[x]),b=(0,a.useMemo)(()=>l.map(e=>`${e.keyName||""}:${e.provider||""}`).join(","),[l]),{nodes:y,edges:k,minRequiredWidth:N}=(0,a.useMemo)(()=>(function(e,t,s,r,a,l,o){t=t.filter(e=>!1!==e.isActive);let n=e.length,i=t.length,c=Math.max(160,240-((Math.ceil(i/7)||1)-1)*20),d=[],x=[],m=Date.now()-36e5,u={},p={};for(let e of l){let t=e.keyName||"",s=e.provider?.toLowerCase()||"";t&&s&&(e.timestamp&&new Date(e.timestamp).getTime()<m||(u[t]||(u[t]=new Set),u[t].add(s),p[s]||(p[s]=new Set),p[s].add(t)))}let h=["#6366f1","#22c55e","#f59e0b","#ef4444","#ec4899","#06b6d4","#8b5cf6","#14b8a6"],g={};t.forEach((e,t)=>{g[e.name||e.key?.slice(0,12)]=h[t%h.length]}),d.push({id:"router",type:"router",position:{x:-90,y:-22},data:{activeCount:s.size},draggable:!1});let b=[];for(let e=0;e<i;e+=7)b.push(t.slice(e,e+7));b.reverse();let y=b.length;b.forEach((e,t)=>{let r=-25-c-(y-1-t)*160,a=0-(e.length-1)*80/2;e.forEach((e,t)=>{let l=`apikey-${e.id}`,n=e.name||e.key?.slice(0,12)+"...",i=u[n],c=!!i,m=g[n]||"#6b7280",p=o.size>0?o.has(n):c&&[...i||[]].some(e=>s.has(e));d.push({id:l,type:"apikey",position:{x:r-80,y:a+80*t-20},data:{label:n,active:p,color:m},draggable:!1}),x.push({id:`e-key-${l}`,source:l,sourceHandle:"right",target:"router",targetHandle:"left",animated:p,style:p?{stroke:m,strokeWidth:2.5,opacity:.9}:c?{stroke:m,strokeWidth:2,opacity:.7}:{stroke:"var(--color-border)",strokeWidth:1,opacity:.2}})})});let j=[];for(let t=0;t<n;t+=7)j.push(e.slice(t,t+7));j.forEach((e,t)=>{let l=-25+c+40+160*t,o=0-(e.length-1)*80/2;e.forEach((e,t)=>{var n,i;let c=(n=e.provider,f.Q2[n]||{color:"#6b7280",name:n}),m=s.has(e.provider?.toLowerCase()),u=!m&&r.has(e.provider?.toLowerCase()),h=!m&&a.has(e.provider?.toLowerCase()),b=`provider-${e.provider}`,y=p[e.provider?.toLowerCase()]||new Set,j=y.size>0,v="var(--color-border)",k=1,N=.2,w=!1;h?(v="#ef4444",k=2.5,N=.9):m?(v="#22c55e",k=2.5,N=.9,w=!0):j?(v=g[[...y][0]]||"#6366f1",k=2,N=.7):u&&(v="#f59e0b",k=2,N=.7),d.push({id:b,type:"provider",position:{x:l-90,y:o+80*t-20},data:{label:(c.name!==e.provider?c.name:null)||e.name||e.provider,color:c.color||"#6b7280",imageUrl:(i=e.provider,`/providers/${i}.png`),textIcon:c.textIcon||(e.provider||"?").slice(0,2).toUpperCase(),active:m},draggable:!1}),x.push({id:`e-prov-${b}`,source:"router",sourceHandle:"right",target:b,targetHandle:"left",animated:w,style:{stroke:v,strokeWidth:k,opacity:N}})})});let v=b.length>0?-25-c-(y-1)*160-80:-90;return{nodes:d,edges:x,minRequiredWidth:Math.max(800,(j.length>0?-25+c+40+(j.length-1)*160+90:40)-v+10)}})(e,t,u,h,g,l,m),[e,t,c,d,x,b,m]),w=(0,a.useMemo)(()=>e.map(e=>e.provider).sort().join(",")+"|"+t.map(e=>e.id).sort().join(","),[e,t]),S=(0,a.useRef)(null),C=(0,a.useCallback)(e=>{S.current=e,setTimeout(()=>e.fitView({padding:.03}),50)},[]);return(0,r.jsx)("div",{className:"w-full rounded-lg border border-border bg-bg-subtle/30 overflow-x-auto custom-scrollbar",style:{height:480},children:0===e.length&&0===t.length?(0,r.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-sm",children:"No providers or API keys configured"}):(0,r.jsx)("div",{style:{minWidth:N,height:"100%"},children:(0,r.jsx)(p.Gc,{nodes:y,edges:k,nodeTypes:j,fitView:!0,fitViewOptions:{padding:.03},onInit:C,minZoom:.3,proOptions:{hideAttribution:!0},panOnDrag:!1,zoomOnScroll:!1,zoomOnPinch:!1,zoomOnDoubleClick:!1,preventScrolling:!1,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1},w)})})}v.propTypes={providers:u().arrayOf(u().shape({id:u().string,provider:u().string,name:u().string})),apiKeys:u().arrayOf(u().shape({id:u().string,name:u().string,key:u().string})),activeRequests:u().arrayOf(u().shape({provider:u().string,model:u().string})),recentRequests:u().array,lastProvider:u().string,errorProvider:u().string,activeKeyNames:u().arrayOf(u().string)};var k=s(10124);function N({value:e,format:t=e=>e}){let s="number"==typeof e?e:Number(e)||0,[l,o]=(0,a.useState)(s),[n,i]=(0,a.useState)(s);(0,a.useEffect)(()=>{s!==n&&(o(n),i(s))},[s,n]);let c=l!==n;return(0,r.jsxs)("span",{className:"relative inline-flex flex-col overflow-hidden align-bottom min-w-[1.2em]",children:[(0,r.jsx)("style",{children:`
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7979],{22644:(e,t,s)=>{Promise.resolve().then(s.bind(s,53891))},53891:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>ea});var r=s(95155),a=s(12115),l=s(73321),o=s(35497),n=s(98500),i=s.n(n),c=s(33041),d=s(84588),x=s(56061),m=s(14051),u=s.n(m),p=s(81750),h=s(6793);s(53255);var f=s(52679);function g({data:e}){let{label:t,color:s,imageUrl:l,textIcon:o,active:n}=e,[i,c]=(0,a.useState)(!1);return(0,r.jsxs)("div",{className:"flex items-center gap-2.5 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:n?s:"var(--color-border)",boxShadow:n?`0 0 16px ${s}40`:"none",minWidth:"150px"},children:[(0,r.jsx)(p.h7,{type:"target",position:h.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("div",{className:"w-8 h-8 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${s}15`},children:i?(0,r.jsx)("span",{className:"text-sm font-bold",style:{color:s},children:o}):(0,r.jsx)("img",{src:l,alt:t,className:"w-6 h-6 rounded-sm object-contain",onError:()=>c(!0)})}),(0,r.jsx)("span",{className:"text-base font-medium truncate",style:{color:n?s:"var(--color-text)"},children:t}),n&&(0,r.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,r.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:s}}),(0,r.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:s}})]})]})}function b({data:e}){let{label:t,active:s,color:a="#f59e0b"}=e;return(0,r.jsxs)("div",{className:"flex items-center gap-2 px-4 py-2.5 rounded-lg border-2 transition-all duration-300 bg-bg",style:{borderColor:s?a:"var(--color-border)",boxShadow:s?`0 0 12px ${a}40`:"none",minWidth:"120px"},children:[(0,r.jsx)("div",{className:"w-7 h-7 rounded-md flex items-center justify-center shrink-0",style:{backgroundColor:`${a}15`},children:(0,r.jsx)("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:s?a:"currentColor",style:{color:s?a:void 0},children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 5.25a3 3 0 013 3m3 0a6 6 0 01-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1121.75 8.25z"})})}),(0,r.jsx)("span",{className:"text-sm font-medium truncate",style:{color:s?a:"var(--color-text)"},children:t}),s&&(0,r.jsxs)("span",{className:"relative flex h-2 w-2 shrink-0",children:[(0,r.jsx)("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:a}}),(0,r.jsx)("span",{className:"relative inline-flex rounded-full h-2 w-2",style:{backgroundColor:a}})]}),(0,r.jsx)(p.h7,{type:"source",position:h.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"})]})}function y({data:e}){return(0,r.jsxs)("div",{className:"flex items-center justify-center px-5 py-3 rounded-xl border-2 border-primary bg-primary/5 shadow-md min-w-[130px]",children:[(0,r.jsx)(p.h7,{type:"target",position:h.yX.Left,id:"left",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)(p.h7,{type:"source",position:h.yX.Right,id:"right",className:"!bg-transparent !border-0 !w-0 !h-0"}),(0,r.jsx)("img",{src:"/favicon.svg",alt:"iRouter",className:"w-6 h-6 mr-2"}),(0,r.jsx)("span",{className:"text-sm font-bold text-primary",children:"iRouter"}),e.activeCount>0&&(0,r.jsx)("span",{className:"ml-2 px-1.5 py-0.5 rounded-full bg-primary text-white text-xs font-bold",children:e.activeCount})]})}g.propTypes={data:u().object.isRequired},b.propTypes={data:u().object.isRequired},y.propTypes={data:u().object.isRequired};let j={provider:g,router:y,apikey:b};function v({providers:e=[],apiKeys:t=[],activeRequests:s=[],recentRequests:l=[],lastProvider:o="",errorProvider:n="",activeKeyNames:i=[]}){let c=(0,a.useMemo)(()=>s.map(e=>e.provider?.toLowerCase()).filter(Boolean).sort().join(","),[s]),d=o?.toLowerCase()||"",x=n?.toLowerCase()||"",m=(0,a.useMemo)(()=>new Set(i),[i]),u=(0,a.useMemo)(()=>new Set(c?c.split(","):[]),[c]),h=(0,a.useMemo)(()=>new Set(d?[d]:[]),[d]),g=(0,a.useMemo)(()=>new Set(x?[x]:[]),[x]),b=(0,a.useMemo)(()=>l.map(e=>`${e.keyName||""}:${e.provider||""}`).join(","),[l]),{nodes:y,edges:k,minRequiredWidth:N}=(0,a.useMemo)(()=>(function(e,t,s,r,a,l,o){t=t.filter(e=>!1!==e.isActive);let n=e.length,i=t.length,c=Math.max(160,240-((Math.ceil(i/7)||1)-1)*20),d=[],x=[],m=Date.now()-36e5,u={},p={};for(let e of l){let t=e.keyName||"",s=e.provider?.toLowerCase()||"";t&&s&&(e.timestamp&&new Date(e.timestamp).getTime()<m||(u[t]||(u[t]=new Set),u[t].add(s),p[s]||(p[s]=new Set),p[s].add(t)))}let h=["#6366f1","#22c55e","#f59e0b","#ef4444","#ec4899","#06b6d4","#8b5cf6","#14b8a6"],g={};t.forEach((e,t)=>{g[e.name||e.key?.slice(0,12)]=h[t%h.length]}),d.push({id:"router",type:"router",position:{x:-90,y:-22},data:{activeCount:s.size},draggable:!1});let b=[];for(let e=0;e<i;e+=7)b.push(t.slice(e,e+7));b.reverse();let y=b.length;b.forEach((e,t)=>{let r=-25-c-(y-1-t)*160,a=0-(e.length-1)*80/2;e.forEach((e,t)=>{let l=`apikey-${e.id}`,n=e.name||e.key?.slice(0,12)+"...",i=u[n],c=!!i,m=g[n]||"#6b7280",p=o.size>0?o.has(n):c&&[...i||[]].some(e=>s.has(e));d.push({id:l,type:"apikey",position:{x:r-80,y:a+80*t-20},data:{label:n,active:p,color:m},draggable:!1}),x.push({id:`e-key-${l}`,source:l,sourceHandle:"right",target:"router",targetHandle:"left",animated:p,style:p?{stroke:m,strokeWidth:2.5,opacity:.9}:c?{stroke:m,strokeWidth:2,opacity:.7}:{stroke:"var(--color-border)",strokeWidth:1,opacity:.2}})})});let j=[];for(let t=0;t<n;t+=7)j.push(e.slice(t,t+7));j.forEach((e,t)=>{let l=-25+c+40+160*t,o=0-(e.length-1)*80/2;e.forEach((e,t)=>{var n,i;let c=(n=e.provider,f.Q2[n]||{color:"#6b7280",name:n}),m=s.has(e.provider?.toLowerCase()),u=!m&&r.has(e.provider?.toLowerCase()),h=!m&&a.has(e.provider?.toLowerCase()),b=`provider-${e.provider}`,y=p[e.provider?.toLowerCase()]||new Set,j=y.size>0,v="var(--color-border)",k=1,N=.2,w=!1;h?(v="#ef4444",k=2.5,N=.9):m?(v="#22c55e",k=2.5,N=.9,w=!0):j?(v=g[[...y][0]]||"#6366f1",k=2,N=.7):u&&(v="#f59e0b",k=2,N=.7),d.push({id:b,type:"provider",position:{x:l-90,y:o+80*t-20},data:{label:(c.name!==e.provider?c.name:null)||e.name||e.provider,color:c.color||"#6b7280",imageUrl:(i=e.provider,`/providers/${i}.png`),textIcon:c.textIcon||(e.provider||"?").slice(0,2).toUpperCase(),active:m},draggable:!1}),x.push({id:`e-prov-${b}`,source:"router",sourceHandle:"right",target:b,targetHandle:"left",animated:w,style:{stroke:v,strokeWidth:k,opacity:N}})})});let v=b.length>0?-25-c-(y-1)*160-80:-90;return{nodes:d,edges:x,minRequiredWidth:Math.max(800,(j.length>0?-25+c+40+(j.length-1)*160+90:40)-v+10)}})(e,t,u,h,g,l,m),[e,t,c,d,x,b,m]),w=(0,a.useMemo)(()=>e.map(e=>e.provider).sort().join(",")+"|"+t.map(e=>e.id).sort().join(","),[e,t]),S=(0,a.useRef)(null),C=(0,a.useCallback)(e=>{S.current=e,setTimeout(()=>e.fitView({padding:.03}),50)},[]);return(0,r.jsx)("div",{className:"w-full min-w-0 rounded-lg border border-border bg-bg-subtle/30 overflow-x-auto custom-scrollbar",style:{height:480},children:0===e.length&&0===t.length?(0,r.jsx)("div",{className:"h-full flex items-center justify-center text-text-muted text-sm",children:"No providers or API keys configured"}):(0,r.jsx)("div",{style:{minWidth:N,height:"100%"},children:(0,r.jsx)(p.Gc,{nodes:y,edges:k,nodeTypes:j,fitView:!0,fitViewOptions:{padding:.03},onInit:C,minZoom:.3,proOptions:{hideAttribution:!0},panOnDrag:!1,zoomOnScroll:!1,zoomOnPinch:!1,zoomOnDoubleClick:!1,preventScrolling:!1,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1},w)})})}v.propTypes={providers:u().arrayOf(u().shape({id:u().string,provider:u().string,name:u().string})),apiKeys:u().arrayOf(u().shape({id:u().string,name:u().string,key:u().string})),activeRequests:u().arrayOf(u().shape({provider:u().string,model:u().string})),recentRequests:u().array,lastProvider:u().string,errorProvider:u().string,activeKeyNames:u().arrayOf(u().string)};var k=s(10124);function N({value:e,format:t=e=>e}){let s="number"==typeof e?e:Number(e)||0,[l,o]=(0,a.useState)(s),[n,i]=(0,a.useState)(s);(0,a.useEffect)(()=>{s!==n&&(o(n),i(s))},[s,n]);let c=l!==n;return(0,r.jsxs)("span",{className:"relative inline-flex flex-col overflow-hidden align-bottom min-w-[1.2em]",children:[(0,r.jsx)("style",{children:`
|
|
2
2
|
@keyframes slideUpFade {
|
|
3
3
|
0% { transform: translateY(0%); }
|
|
4
4
|
100% { transform: translateY(-50%); }
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
.animate-flip-board {
|
|
7
7
|
animation: slideUpFade 500ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
8
8
|
}
|
|
9
|
-
`}),(0,r.jsx)("span",{className:"invisible opacity-0","aria-hidden":"true",children:t(n)}),c?(0,r.jsxs)("span",{className:"absolute top-0 left-0 w-full h-[200%] flex flex-col animate-flip-board",children:[(0,r.jsx)("span",{className:"h-1/2 w-full flex items-center justify-center text-center leading-none",children:t(l)}),(0,r.jsx)("span",{className:"h-1/2 w-full flex items-center justify-center text-center leading-none",children:t(n)})]},n):(0,r.jsx)("span",{className:"absolute top-0 left-0 w-full h-full flex items-center justify-center text-center leading-none",children:t(n)})]})}var w=s(1728),S=s(48035),C=s(28408),$=s(32539),q=s(59656),F=s(65671),T=s(24696),E=s(67389);let D=["#079A8B","#F57C00","#3B82F6","#EF4444","#8B5CF6","#EC4899","#22C55E","#F59E0B"],R=e=>new Intl.NumberFormat().format(e||0),I=e=>e?e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e):"0",L=e=>`$${(e||0).toFixed(2)}`;function M(e){let t=Math.floor((Date.now()-new Date(e))/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function O({timestamp:e}){let[,t]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:M(e)})}function A({requests:e=[]}){return(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),e.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto custom-scrollbar",children:(0,r.jsxs)("table",{className:"w-full text-xs border-collapse",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-1.5 pl-3 text-left font-semibold text-text-muted",children:"API Key"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-error"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:e.model,children:e.model}),(0,r.jsx)("td",{className:"py-1.5 pl-3 truncate max-w-[100px] text-secondary",title:e.keyName,children:e.keyName||"—"}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[R(e.promptTokens),"↑"]})," ",(0,r.jsxs)("span",{className:"text-success",children:[R(e.completionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(O,{timestamp:e.timestamp})})]},t)})})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}function B({timestamp:e}){let[,t]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),1e3);return()=>clearInterval(e)},[]);let s=Math.floor((Date.now()-new Date(e))/1e3),l="var(--color-text-muted)";return s<120?l="#22c55e":s<=3600?l="var(--color-primary)":s<86400&&(l="#ef4444"),(0,r.jsx)("span",{style:{color:l},children:M(e)})}function z({employees:e=[],recentRequests:t=[]}){let s=(0,a.useMemo)(()=>{if(!e.length)return[];let s={};for(let e of t)e.keyName&&(!s[e.keyName]||new Date(e.timestamp)>new Date(s[e.keyName]))&&(s[e.keyName]=e.timestamp);return e.map(e=>{let t=s[e.name],r=e.lastActive;return t&&(!r||new Date(t)>new Date(r))&&(r=t),{...e,lastActive:r}}).sort((e,t)=>e.lastActive||t.lastActive?e.lastActive?t.lastActive?new Date(t.lastActive)-new Date(e.lastActive):-1:1:0)},[e,t]);return(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Employees"})}),s.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto custom-scrollbar",children:(0,r.jsxs)("table",{className:"w-full text-xs border-collapse",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Name"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"Last"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:s.map((e,t)=>(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${e.isActive?"bg-success":"bg-text-muted"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-medium truncate max-w-[140px]",title:e.name,children:(0,r.jsx)(i(),{href:`/dashboard/employees/${e.keyId}`,className:"text-secondary hover:text-primary transition-colors cursor-pointer",children:e.name})}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[I(e.totalPromptTokens),"↑"]})," ",(0,r.jsxs)("span",{style:{color:"#ef4444"},children:[I(e.totalCompletionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right whitespace-nowrap",children:e.lastActive?(0,r.jsx)(B,{timestamp:e.lastActive}):"—"})]},t))})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No employees yet."})]})}function P(){let[e,t]=(0,a.useState)(null),[s,l]=(0,a.useState)(!0),[o,n]=(0,a.useState)(null),[i,x]=(0,a.useState)("cost"),[m,u]=(0,a.useState)([]),[p,h]=(0,a.useState)([]),[f,g]=(0,a.useState)(!0),[b,y]=(0,a.useState)(20);(0,a.useEffect)(()=>{{let e=localStorage.getItem("9router-emp-chart-view");e&&x(e)}},[]);let j=e=>{x(e),localStorage.setItem("9router-emp-chart-view",e)},[I,M]=(0,a.useState)([]),[O,B]=(0,a.useState)([]),[P,K]=(0,a.useState)({activeRequests:[],recentRequests:[],errorProvider:"",activeKeyNames:[]}),U=(0,a.useCallback)(async(e=!1)=>{if(o){e||l(!0);try{let e=`from=${encodeURIComponent(o.from)}&to=${encodeURIComponent(o.to)}`,[s,r]=await Promise.all([fetch(`/api/employees/stats?${e}`),fetch(`/api/usage/stats?${e}`)]);if(s.ok){let e=await s.json();t(e)}if(r.ok){let e=await r.json(),t=e.byAccount||{},s={};for(let e of Object.values(t)){let t=e.accountName||"Unknown";s[t]||(s[t]={name:t,requests:0,cost:0,tokens:0}),s[t].requests+=e.requests||0,s[t].cost+=e.cost||0,s[t].tokens+=(e.promptTokens||0)+(e.completionTokens||0)}u(Object.values(s).sort((e,t)=>t.requests-e.requests));let a=e.byModel||{},l=Object.values(a).map(e=>({name:e.rawModel||"Unknown",provider:e.provider||"",requests:e.requests||0,cost:e.cost||0,tokens:(e.promptTokens||0)+(e.completionTokens||0)})),o={};for(let e of l)o[e.name]||(o[e.name]={name:e.name,requests:0,cost:0,tokens:0}),o[e.name].requests+=e.requests,o[e.name].cost+=e.cost,o[e.name].tokens+=e.tokens;h(Object.values(o).sort((e,t)=>t.requests-e.requests))}}catch(e){console.error("Failed to fetch stats:",e)}finally{e||l(!1)}}},[o]);(0,a.useEffect)(()=>{if(U(),y(20),!f)return;let e=setInterval(()=>{U(!0),y(20)},2e4);return()=>clearInterval(e)},[U,f]),(0,a.useEffect)(()=>{if(!f)return;let e=setInterval(()=>{y(e=>e<=1?20:e-1)},1e3);return()=>clearInterval(e)},[f]),(0,a.useEffect)(()=>{fetch("/api/providers").then(e=>e.ok?e.json():null).then(e=>{if(!e?.connections)return;let t=new Set;M(e.connections.filter(e=>!t.has(e.provider)&&(t.add(e.provider),!0)))}).catch(()=>{}),fetch("/api/keys").then(e=>e.ok?e.json():null).then(e=>{e?.keys&&B(e.keys)}).catch(()=>{}),fetch("/api/usage/stats?period=7d").then(e=>e.ok?e.json():null).then(e=>{e&&K({activeRequests:e.activeRequests||[],recentRequests:e.recentRequests||[],errorProvider:e.errorProvider||"",activeKeyNames:e.activeKeyNames||[]})}).catch(()=>{})},[]),(0,a.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);K({activeRequests:t.activeRequests||[],recentRequests:t.recentRequests||[],errorProvider:t.errorProvider||"",activeKeyNames:t.activeKeyNames||[]})}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>{},()=>e.close()},[]);let W=(0,a.useMemo)(()=>e?.employees?[...e.employees].filter(e=>"cost"===i?e.totalCost>0:e.totalTokens>0).sort((e,t)=>"cost"===i?t.totalCost-e.totalCost:t.totalTokens-e.totalTokens).slice(0,10).map(e=>({name:e.name?.length>12?e.name.slice(0,12)+"…":e.name,fullName:e.name,value:"cost"===i?e.totalCost:e.totalTokens})):[],[e,i]),{summary:_}=e||{};return(0,r.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,r.jsxs)("div",{className:"flex items-center gap-4 self-end flex-wrap",children:[(0,r.jsxs)("button",{onClick:()=>g(e=>!e),className:"flex items-center gap-2 px-3 py-[7px] rounded-lg border border-black/10 dark:border-white/10 hover:bg-black/5 dark:hover:bg-white/5 transition-colors",title:f?"Disable auto-refresh":"Enable auto-refresh",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] ${f?"text-primary":"text-text-muted"}`,children:f?"toggle_on":"toggle_off"}),(0,r.jsx)("span",{className:"text-sm text-text-primary",children:"Auto-refresh"}),f&&(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["(",b,"s)"]})]}),(0,r.jsx)(c.default,{defaultPreset:"last7",onChange:n})]}),s?(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})}):e?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-4",children:[(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Employees"}),(0,r.jsx)("span",{className:"text-2xl font-bold",children:(0,r.jsx)(N,{value:_.totalEmployees,format:R})}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[(0,r.jsx)(N,{value:_.activeEmployees,format:R})," active"]})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Requests"}),(0,r.jsx)("span",{className:"text-2xl font-bold text-primary",children:(0,r.jsx)(N,{value:_.totalRequests,format:R})})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Input Tokens"}),(0,r.jsx)("span",{className:"text-2xl font-bold text-primary",children:(0,r.jsx)(N,{value:_.totalPromptTokens,format:R})})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Output Tokens"}),(0,r.jsx)("span",{className:"text-2xl font-bold text-red-500",children:(0,r.jsx)(N,{value:_.totalCompletionTokens,format:R})})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Cost"}),(0,r.jsxs)("span",{className:"text-2xl font-bold text-green-500",children:["~",(0,r.jsx)(N,{value:_.totalCost,format:L})]})]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-[4fr_1fr] gap-4 items-stretch",children:[(0,r.jsx)(v,{providers:I,apiKeys:O,activeRequests:P.activeRequests,recentRequests:P.recentRequests,lastProvider:P.recentRequests?.[0]?.provider||"",errorProvider:P.errorProvider,activeKeyNames:P.activeKeyNames}),(0,r.jsx)(z,{employees:e?.employees||[],recentRequests:P.recentRequests})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4 items-stretch",children:[(0,r.jsx)(A,{requests:P.recentRequests}),(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"By Model"})}),p.length>0?(0,r.jsx)("div",{className:"flex-1 min-h-0 w-full",children:(0,r.jsx)(w.u,{width:"100%",height:"100%",children:(0,r.jsxs)(S.E,{data:p.slice(0,8).map(e=>({name:e.name?.length>14?e.name.slice(0,14)+"…":e.name,fullName:e.name,requests:e.requests})),layout:"vertical",margin:{top:5,right:10,left:0,bottom:5},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1,horizontal:!1}),(0,r.jsx)($.W,{type:"number",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:e=>e>=1e3?`${(e/1e3).toFixed(0)}K`:e}),(0,r.jsx)(q.h,{type:"category",dataKey:"name",tick:{fontSize:9,fill:"currentColor",fillOpacity:.6},tickLine:!1,axisLine:!1,width:90}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>[R(e),"Requests"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:"requests",radius:[0,4,4,0],maxBarSize:32,children:p.slice(0,8).map((e,t)=>(0,r.jsx)(E.f,{fill:D[t%D.length]},t))})]})})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No data"})]}),(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"By Provider"})}),m.length>0?(0,r.jsx)("div",{className:"flex-1 min-h-0 w-full",children:(0,r.jsx)(w.u,{width:"100%",height:"100%",children:(0,r.jsxs)(S.E,{data:m.slice(0,8).map(e=>({name:e.name?.length>12?e.name.slice(0,12)+"…":e.name,fullName:e.name,requests:e.requests})),layout:"vertical",margin:{top:5,right:10,left:0,bottom:5},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1,horizontal:!1}),(0,r.jsx)($.W,{type:"number",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:e=>e>=1e3?`${(e/1e3).toFixed(0)}K`:e}),(0,r.jsx)(q.h,{type:"category",dataKey:"name",tick:{fontSize:9,fill:"currentColor",fillOpacity:.6},tickLine:!1,axisLine:!1,width:80}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>[R(e),"Requests"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:"requests",radius:[0,4,4,0],maxBarSize:32,children:m.slice(0,8).map((e,t)=>(0,r.jsx)(E.f,{fill:D[t%D.length]},t))})]})})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No data"})]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[W.length>0?(0,r.jsxs)(d.default,{className:"p-4 flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Employee Comparison"}),(0,r.jsxs)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[(0,r.jsx)("button",{onClick:()=>j("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Cost"}),(0,r.jsx)("button",{onClick:()=>j("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"})]})]}),(0,r.jsx)(w.u,{width:"100%",height:250,children:(0,r.jsxs)(S.E,{data:W,margin:{top:4,right:8,left:0,bottom:0},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)($.W,{dataKey:"name",tick:{fontSize:11,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1}),(0,r.jsx)(q.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"cost"===i?e=>`$${e.toFixed(2)}`:e=>e>=1e3?`${(e/1e3).toFixed(0)}K`:e,width:55}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>["cost"===i?`$${e.toFixed(4)}`:R(e),"cost"===i?"Cost":"Tokens"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:"value",radius:[4,4,0,0],maxBarSize:40,children:W.map((e,t)=>(0,r.jsx)(E.f,{fill:D[t%D.length]},t))})]})})]}):(0,r.jsx)(d.default,{className:"p-4 flex items-center justify-center text-text-muted text-sm h-full",children:"No employee data"}),(0,r.jsx)(k.A,{from:o?.from,to:o?.to})]})]}):(0,r.jsx)("div",{className:"text-text-muted text-center py-12",children:"Failed to load employee data."})]})}var K=s(96647);let U=["#079A8B","#F57C00","#3B82F6","#EF4444","#8B5CF6","#EC4899","#22C55E","#F59E0B","#06B6D4","#6366F1","#14B8A6","#E11D48","#84CC16","#A855F7","#0EA5E9","#D946EF","#f43f5e","#be123c","#9333ea","#7c3aed","#4f46e5","#2563eb","#0284c7","#0891b2","#0d9488","#059669","#16a34a","#65a30d","#ca8a04","#d97706","#ea580c","#dc2626","#b91c1c","#9f1239","#6d28d9","#4338ca","#1d4ed8","#0369a1","#0e7490","#047857","#15803d","#4d7c0f"],W=e=>new Intl.NumberFormat().format(e||0),_=e=>e?e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)):"0";function H({active:e,payload:t,label:s,viewMode:a}){if(!e||!t?.length)return null;let l="cost"===a?"":"tokens"===a?" tokens":" reqs",o="cost"===a?e=>`$${(e||0).toFixed(4)}`:W,n=t.reduce((e,t)=>e+(t.value||0),0);return(0,r.jsxs)("div",{style:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",padding:"10px 14px",fontSize:"12px",color:"var(--color-text)",maxHeight:300,overflowY:"auto"},children:[(0,r.jsx)("p",{style:{fontWeight:600,marginBottom:6,color:"var(--color-text-muted)"},children:s}),t.filter(e=>e.value>0).sort((e,t)=>t.value-e.value).map((e,t)=>(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[(0,r.jsx)("span",{style:{width:8,height:8,borderRadius:2,backgroundColor:e.color,flexShrink:0}}),(0,r.jsx)("span",{style:{flex:1,opacity:.8},children:e.dataKey}),(0,r.jsxs)("span",{style:{fontWeight:600},children:[o(e.value),l]})]},t)),(0,r.jsxs)("div",{style:{borderTop:"1px solid var(--color-border)",marginTop:6,paddingTop:4,fontWeight:700},children:["Total: ",o(n),l]})]})}let Q=[{key:"name",label:"Employee",align:"left"},{key:"isActive",label:"Status",align:"center"},{key:"totalRequests",label:"Requests",align:"right"},{key:"totalPromptTokens",label:"Input ↑",align:"right"},{key:"totalCompletionTokens",label:"Output ↓",align:"right"},{key:"totalTokens",label:"Total Tokens",align:"right"},{key:"totalCost",label:"Cost",align:"right"},{key:"modelsUsed",label:"Models",align:"right"},{key:"lastActive",label:"Last Active",align:"right"},{key:"apiKey",label:"API Key",align:"center",sortable:!1}];function X(){let e=(0,l.useRouter)(),[t,s]=(0,a.useState)(null),[o,n]=(0,a.useState)(null),[i,m]=(0,a.useState)(!0),[u,p]=(0,a.useState)(""),[h,f]=(0,a.useState)("lastActive"),[g,b]=(0,a.useState)("desc"),[y,j]=(0,a.useState)("tokens"),[v,k]=(0,a.useState)({buckets:[],keys:[]}),[N,D]=(0,a.useState)(!0),[R,I]=(0,a.useState)("hour"),[L,M]=(0,a.useState)("");(0,a.useEffect)(()=>{{let e=localStorage.getItem("9router-emp-sort-key"),t=localStorage.getItem("9router-emp-sort-dir"),s=localStorage.getItem("9router-emp-filter"),r=localStorage.getItem("9router-emp-detail-view");e&&f(e),t&&b(t),null!==s&&p(s),r&&j(r)}},[]);let O=(0,a.useCallback)(async()=>{if(t){m(!0);try{let e=`from=${encodeURIComponent(t.from)}&to=${encodeURIComponent(t.to)}`,s=await fetch(`/api/employees/stats?${e}`);if(s.ok){let e=await s.json();n(e)}}catch(e){console.error("Failed to fetch:",e)}finally{m(!1)}}},[t]),A=(0,a.useCallback)(async()=>{if(t){D(!0);try{let e=`startDate=${encodeURIComponent(t.from)}&endDate=${encodeURIComponent(t.to)}&groupBy=account&interval=${R}`,s=await fetch(`/api/usage/request-details/aggregate?${e}`);s.ok&&k(await s.json())}catch(e){console.error("Failed to fetch aggregate:",e)}finally{D(!1)}}},[t,R]);(0,a.useEffect)(()=>{O()},[O]),(0,a.useEffect)(()=>{A()},[A]);let B=o?.employees||[],z=(0,a.useMemo)(()=>{let e=[...B];if(L){let t=L.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(t))}return u&&(e=e.filter(e=>e.name?.toLowerCase().includes(u.toLowerCase()))),e.sort((e,t)=>{let s=e[h],r=t[h];return("name"===h?(s=(s||"").toLowerCase(),r=(r||"").toLowerCase()):"isActive"===h?(s=+!!s,r=+!!r):"lastActive"===h?(s=s?new Date(s).getTime():0,r=r?new Date(r).getTime():0):(s=s||0,r=r||0),s<r)?"asc"===g?-1:1:s>r?"asc"===g?1:-1:0})},[B,u,L,h,g]),{barData:P,topAccounts:X}=(0,a.useMemo)(()=>{let{buckets:e}=v;if(!e?.length)return{barData:[],topAccounts:[]};let t={},s=L.toLowerCase();for(let r of e)for(let[e,a]of Object.entries(r.groups||{}))(!s||e.toLowerCase().includes(s))&&(t[e]||(t[e]=0),t[e]+="cost"===y?a.cost:"tokens"===y?a.tokens:a.requests);let r=Object.entries(t).sort(([,e],[,t])=>t-e).slice(0,15).map(([e])=>e);return{barData:e.map(e=>{let t=new Date(e.hour),s={hour:"day"===R?`${String(t.getMonth()+1).padStart(2,"0")}/${String(t.getDate()).padStart(2,"0")}`:`${String(t.getHours()).padStart(2,"0")}:00
|
|
9
|
+
`}),(0,r.jsx)("span",{className:"invisible opacity-0","aria-hidden":"true",children:t(n)}),c?(0,r.jsxs)("span",{className:"absolute top-0 left-0 w-full h-[200%] flex flex-col animate-flip-board",children:[(0,r.jsx)("span",{className:"h-1/2 w-full flex items-center justify-center text-center leading-none",children:t(l)}),(0,r.jsx)("span",{className:"h-1/2 w-full flex items-center justify-center text-center leading-none",children:t(n)})]},n):(0,r.jsx)("span",{className:"absolute top-0 left-0 w-full h-full flex items-center justify-center text-center leading-none",children:t(n)})]})}var w=s(1728),S=s(48035),C=s(28408),$=s(32539),q=s(59656),F=s(65671),T=s(24696),E=s(67389);let D=["#079A8B","#F57C00","#3B82F6","#EF4444","#8B5CF6","#EC4899","#22C55E","#F59E0B"],R=e=>new Intl.NumberFormat().format(e||0),I=e=>e?e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e):"0",L=e=>`$${(e||0).toFixed(2)}`;function M(e){let t=Math.floor((Date.now()-new Date(e))/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function O({timestamp:e}){let[,t]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:M(e)})}function A({requests:e=[]}){return(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Recent Requests"})}),e.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto custom-scrollbar",children:(0,r.jsxs)("table",{className:"w-full text-xs border-collapse",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-1.5 pl-3 text-left font-semibold text-text-muted",children:"API Key"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-error"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-mono truncate max-w-[120px]",title:e.model,children:e.model}),(0,r.jsx)("td",{className:"py-1.5 pl-3 truncate max-w-[100px] text-secondary",title:e.keyName,children:e.keyName||"—"}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[R(e.promptTokens),"↑"]})," ",(0,r.jsxs)("span",{className:"text-success",children:[R(e.completionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(O,{timestamp:e.timestamp})})]},t)})})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No requests yet."})]})}function B({timestamp:e}){let[,t]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),1e3);return()=>clearInterval(e)},[]);let s=Math.floor((Date.now()-new Date(e))/1e3),l="var(--color-text-muted)";return s<120?l="#22c55e":s<=3600?l="var(--color-primary)":s<86400&&(l="#ef4444"),(0,r.jsx)("span",{style:{color:l},children:M(e)})}function z({employees:e=[],recentRequests:t=[]}){let s=(0,a.useMemo)(()=>{if(!e.length)return[];let s={};for(let e of t)e.keyName&&(!s[e.keyName]||new Date(e.timestamp)>new Date(s[e.keyName]))&&(s[e.keyName]=e.timestamp);return e.map(e=>{let t=s[e.name],r=e.lastActive;return t&&(!r||new Date(t)>new Date(r))&&(r=t),{...e,lastActive:r}}).sort((e,t)=>e.lastActive||t.lastActive?e.lastActive?t.lastActive?new Date(t.lastActive)-new Date(e.lastActive):-1:1:0)},[e,t]);return(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Employees"})}),s.length?(0,r.jsx)("div",{className:"flex-1 overflow-y-auto custom-scrollbar",children:(0,r.jsxs)("table",{className:"w-full text-xs border-collapse",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-1.5 text-left font-semibold text-text-muted",children:"Name"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted whitespace-nowrap",children:"In / Out"}),(0,r.jsx)("th",{className:"py-1.5 text-right font-semibold text-text-muted",children:"Last"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:s.map((e,t)=>(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-1.5",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${e.isActive?"bg-success":"bg-text-muted"}`})}),(0,r.jsx)("td",{className:"py-1.5 font-medium truncate max-w-[140px]",title:e.name,children:(0,r.jsx)(i(),{href:`/dashboard/employees/${e.keyId}`,className:"text-secondary hover:text-primary transition-colors cursor-pointer",children:e.name})}),(0,r.jsxs)("td",{className:"py-1.5 text-right whitespace-nowrap",children:[(0,r.jsxs)("span",{className:"text-primary",children:[I(e.totalPromptTokens),"↑"]})," ",(0,r.jsxs)("span",{style:{color:"#ef4444"},children:[I(e.totalCompletionTokens),"↓"]})]}),(0,r.jsx)("td",{className:"py-1.5 text-right whitespace-nowrap",children:e.lastActive?(0,r.jsx)(B,{timestamp:e.lastActive}):"—"})]},t))})]})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No employees yet."})]})}function P(){let[e,t]=(0,a.useState)(null),[s,l]=(0,a.useState)(!0),[o,n]=(0,a.useState)(null),[i,x]=(0,a.useState)("cost"),[m,u]=(0,a.useState)([]),[p,h]=(0,a.useState)([]),[f,g]=(0,a.useState)(!0),[b,y]=(0,a.useState)(20);(0,a.useEffect)(()=>{{let e=localStorage.getItem("9router-emp-chart-view");e&&x(e)}},[]);let j=e=>{x(e),localStorage.setItem("9router-emp-chart-view",e)},[I,M]=(0,a.useState)([]),[O,B]=(0,a.useState)([]),[P,K]=(0,a.useState)({activeRequests:[],recentRequests:[],errorProvider:"",activeKeyNames:[]}),U=(0,a.useCallback)(async(e=!1)=>{if(o){e||l(!0);try{let e=`from=${encodeURIComponent(o.from)}&to=${encodeURIComponent(o.to)}`,[s,r]=await Promise.all([fetch(`/api/employees/stats?${e}`),fetch(`/api/usage/stats?${e}`)]);if(s.ok){let e=await s.json();t(e)}if(r.ok){let e=await r.json(),t=e.byAccount||{},s={};for(let e of Object.values(t)){let t=e.accountName||"Unknown";s[t]||(s[t]={name:t,requests:0,cost:0,tokens:0}),s[t].requests+=e.requests||0,s[t].cost+=e.cost||0,s[t].tokens+=(e.promptTokens||0)+(e.completionTokens||0)}u(Object.values(s).sort((e,t)=>t.requests-e.requests));let a=e.byModel||{},l=Object.values(a).map(e=>({name:e.rawModel||"Unknown",provider:e.provider||"",requests:e.requests||0,cost:e.cost||0,tokens:(e.promptTokens||0)+(e.completionTokens||0)})),o={};for(let e of l)o[e.name]||(o[e.name]={name:e.name,requests:0,cost:0,tokens:0}),o[e.name].requests+=e.requests,o[e.name].cost+=e.cost,o[e.name].tokens+=e.tokens;h(Object.values(o).sort((e,t)=>t.requests-e.requests))}}catch(e){console.error("Failed to fetch stats:",e)}finally{e||l(!1)}}},[o]);(0,a.useEffect)(()=>{if(U(),y(20),!f)return;let e=setInterval(()=>{U(!0),y(20)},2e4);return()=>clearInterval(e)},[U,f]),(0,a.useEffect)(()=>{if(!f)return;let e=setInterval(()=>{y(e=>e<=1?20:e-1)},1e3);return()=>clearInterval(e)},[f]),(0,a.useEffect)(()=>{fetch("/api/providers").then(e=>e.ok?e.json():null).then(e=>{if(!e?.connections)return;let t=new Set;M(e.connections.filter(e=>!t.has(e.provider)&&(t.add(e.provider),!0)))}).catch(()=>{}),fetch("/api/keys").then(e=>e.ok?e.json():null).then(e=>{e?.keys&&B(e.keys)}).catch(()=>{}),fetch("/api/usage/stats?period=7d").then(e=>e.ok?e.json():null).then(e=>{e&&K({activeRequests:e.activeRequests||[],recentRequests:e.recentRequests||[],errorProvider:e.errorProvider||"",activeKeyNames:e.activeKeyNames||[]})}).catch(()=>{})},[]),(0,a.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);K({activeRequests:t.activeRequests||[],recentRequests:t.recentRequests||[],errorProvider:t.errorProvider||"",activeKeyNames:t.activeKeyNames||[]})}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>{},()=>e.close()},[]);let W=(0,a.useMemo)(()=>e?.employees?[...e.employees].filter(e=>"cost"===i?e.totalCost>0:e.totalTokens>0).sort((e,t)=>"cost"===i?t.totalCost-e.totalCost:t.totalTokens-e.totalTokens).slice(0,10).map(e=>({name:e.name?.length>12?e.name.slice(0,12)+"…":e.name,fullName:e.name,value:"cost"===i?e.totalCost:e.totalTokens})):[],[e,i]),{summary:_}=e||{};return(0,r.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,r.jsxs)("div",{className:"flex items-center gap-4 self-end flex-wrap",children:[(0,r.jsxs)("button",{onClick:()=>g(e=>!e),className:"flex items-center gap-2 px-3 py-[7px] rounded-lg border border-black/10 dark:border-white/10 hover:bg-black/5 dark:hover:bg-white/5 transition-colors",title:f?"Disable auto-refresh":"Enable auto-refresh",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] ${f?"text-primary":"text-text-muted"}`,children:f?"toggle_on":"toggle_off"}),(0,r.jsx)("span",{className:"text-sm text-text-primary",children:"Auto-refresh"}),f&&(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["(",b,"s)"]})]}),(0,r.jsx)(c.default,{defaultPreset:"last7",onChange:n})]}),s?(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})}):e?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-4",children:[(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Employees"}),(0,r.jsx)("span",{className:"text-2xl font-bold",children:(0,r.jsx)(N,{value:_.totalEmployees,format:R})}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[(0,r.jsx)(N,{value:_.activeEmployees,format:R})," active"]})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Requests"}),(0,r.jsx)("span",{className:"text-2xl font-bold text-primary",children:(0,r.jsx)(N,{value:_.totalRequests,format:R})})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Input Tokens"}),(0,r.jsx)("span",{className:"text-2xl font-bold text-primary",children:(0,r.jsx)(N,{value:_.totalPromptTokens,format:R})})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Output Tokens"}),(0,r.jsx)("span",{className:"text-2xl font-bold text-red-500",children:(0,r.jsx)(N,{value:_.totalCompletionTokens,format:R})})]}),(0,r.jsxs)(d.default,{className:"px-4 py-3 flex flex-col gap-1",children:[(0,r.jsx)("span",{className:"text-text-muted text-sm uppercase font-semibold",children:"Total Cost"}),(0,r.jsxs)("span",{className:"text-2xl font-bold text-green-500",children:["~",(0,r.jsx)(N,{value:_.totalCost,format:L})]})]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-[minmax(0,4fr)_minmax(0,1fr)] gap-4 items-stretch min-w-0",children:[(0,r.jsx)(v,{providers:I,apiKeys:O,activeRequests:P.activeRequests,recentRequests:P.recentRequests,lastProvider:P.recentRequests?.[0]?.provider||"",errorProvider:P.errorProvider,activeKeyNames:P.activeKeyNames}),(0,r.jsx)(z,{employees:e?.employees||[],recentRequests:P.recentRequests})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4 items-stretch min-w-0",children:[(0,r.jsx)(A,{requests:P.recentRequests}),(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"By Model"})}),p.length>0?(0,r.jsx)("div",{className:"flex-1 min-h-0 w-full",children:(0,r.jsx)(w.u,{width:"100%",height:"100%",children:(0,r.jsxs)(S.E,{data:p.slice(0,8).map(e=>({name:e.name?.length>14?e.name.slice(0,14)+"…":e.name,fullName:e.name,requests:e.requests})),layout:"vertical",margin:{top:5,right:10,left:0,bottom:5},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1,horizontal:!1}),(0,r.jsx)($.W,{type:"number",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:e=>e>=1e3?`${(e/1e3).toFixed(0)}K`:e}),(0,r.jsx)(q.h,{type:"category",dataKey:"name",tick:{fontSize:9,fill:"currentColor",fillOpacity:.6},tickLine:!1,axisLine:!1,width:90}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>[R(e),"Requests"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:"requests",radius:[0,4,4,0],maxBarSize:32,children:p.slice(0,8).map((e,t)=>(0,r.jsx)(E.f,{fill:D[t%D.length]},t))})]})})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No data"})]}),(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",style:{height:480},children:[(0,r.jsx)("div",{className:"px-1 py-2 border-b border-border shrink-0",children:(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"By Provider"})}),m.length>0?(0,r.jsx)("div",{className:"flex-1 min-h-0 w-full",children:(0,r.jsx)(w.u,{width:"100%",height:"100%",children:(0,r.jsxs)(S.E,{data:m.slice(0,8).map(e=>({name:e.name?.length>12?e.name.slice(0,12)+"…":e.name,fullName:e.name,requests:e.requests})),layout:"vertical",margin:{top:5,right:10,left:0,bottom:5},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1,horizontal:!1}),(0,r.jsx)($.W,{type:"number",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:e=>e>=1e3?`${(e/1e3).toFixed(0)}K`:e}),(0,r.jsx)(q.h,{type:"category",dataKey:"name",tick:{fontSize:9,fill:"currentColor",fillOpacity:.6},tickLine:!1,axisLine:!1,width:80}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>[R(e),"Requests"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:"requests",radius:[0,4,4,0],maxBarSize:32,children:m.slice(0,8).map((e,t)=>(0,r.jsx)(E.f,{fill:D[t%D.length]},t))})]})})}):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center text-text-muted text-sm",children:"No data"})]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4 min-w-0",children:[W.length>0?(0,r.jsxs)(d.default,{className:"p-4 flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Employee Comparison"}),(0,r.jsxs)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[(0,r.jsx)("button",{onClick:()=>j("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Cost"}),(0,r.jsx)("button",{onClick:()=>j("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===i?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:"Tokens"})]})]}),(0,r.jsx)(w.u,{width:"100%",height:250,children:(0,r.jsxs)(S.E,{data:W,margin:{top:4,right:8,left:0,bottom:0},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)($.W,{dataKey:"name",tick:{fontSize:11,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1}),(0,r.jsx)(q.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"cost"===i?e=>`$${e.toFixed(2)}`:e=>e>=1e3?`${(e/1e3).toFixed(0)}K`:e,width:55}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>["cost"===i?`$${e.toFixed(4)}`:R(e),"cost"===i?"Cost":"Tokens"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:"value",radius:[4,4,0,0],maxBarSize:40,children:W.map((e,t)=>(0,r.jsx)(E.f,{fill:D[t%D.length]},t))})]})})]}):(0,r.jsx)(d.default,{className:"p-4 flex items-center justify-center text-text-muted text-sm h-full",children:"No employee data"}),(0,r.jsx)(k.A,{from:o?.from,to:o?.to})]})]}):(0,r.jsx)("div",{className:"text-text-muted text-center py-12",children:"Failed to load employee data."})]})}var K=s(96647);let U=["#079A8B","#F57C00","#3B82F6","#EF4444","#8B5CF6","#EC4899","#22C55E","#F59E0B","#06B6D4","#6366F1","#14B8A6","#E11D48","#84CC16","#A855F7","#0EA5E9","#D946EF","#f43f5e","#be123c","#9333ea","#7c3aed","#4f46e5","#2563eb","#0284c7","#0891b2","#0d9488","#059669","#16a34a","#65a30d","#ca8a04","#d97706","#ea580c","#dc2626","#b91c1c","#9f1239","#6d28d9","#4338ca","#1d4ed8","#0369a1","#0e7490","#047857","#15803d","#4d7c0f"],W=e=>new Intl.NumberFormat().format(e||0),_=e=>e?e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)):"0";function H({active:e,payload:t,label:s,viewMode:a}){if(!e||!t?.length)return null;let l="cost"===a?"":"tokens"===a?" tokens":" reqs",o="cost"===a?e=>`$${(e||0).toFixed(4)}`:W,n=t.reduce((e,t)=>e+(t.value||0),0);return(0,r.jsxs)("div",{style:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",padding:"10px 14px",fontSize:"12px",color:"var(--color-text)",maxHeight:300,overflowY:"auto"},children:[(0,r.jsx)("p",{style:{fontWeight:600,marginBottom:6,color:"var(--color-text-muted)"},children:s}),t.filter(e=>e.value>0).sort((e,t)=>t.value-e.value).map((e,t)=>(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[(0,r.jsx)("span",{style:{width:8,height:8,borderRadius:2,backgroundColor:e.color,flexShrink:0}}),(0,r.jsx)("span",{style:{flex:1,opacity:.8},children:e.dataKey}),(0,r.jsxs)("span",{style:{fontWeight:600},children:[o(e.value),l]})]},t)),(0,r.jsxs)("div",{style:{borderTop:"1px solid var(--color-border)",marginTop:6,paddingTop:4,fontWeight:700},children:["Total: ",o(n),l]})]})}let Q=[{key:"name",label:"Employee",align:"left"},{key:"isActive",label:"Status",align:"center"},{key:"totalRequests",label:"Requests",align:"right"},{key:"totalPromptTokens",label:"Input ↑",align:"right"},{key:"totalCompletionTokens",label:"Output ↓",align:"right"},{key:"totalTokens",label:"Total Tokens",align:"right"},{key:"totalCost",label:"Cost",align:"right"},{key:"modelsUsed",label:"Models",align:"right"},{key:"lastActive",label:"Last Active",align:"right"},{key:"apiKey",label:"API Key",align:"center",sortable:!1}];function X(){let e=(0,l.useRouter)(),[t,s]=(0,a.useState)(null),[o,n]=(0,a.useState)(null),[i,m]=(0,a.useState)(!0),[u,p]=(0,a.useState)(""),[h,f]=(0,a.useState)("lastActive"),[g,b]=(0,a.useState)("desc"),[y,j]=(0,a.useState)("tokens"),[v,k]=(0,a.useState)({buckets:[],keys:[]}),[N,D]=(0,a.useState)(!0),[R,I]=(0,a.useState)("hour"),[L,M]=(0,a.useState)("");(0,a.useEffect)(()=>{{let e=localStorage.getItem("9router-emp-sort-key"),t=localStorage.getItem("9router-emp-sort-dir"),s=localStorage.getItem("9router-emp-filter"),r=localStorage.getItem("9router-emp-detail-view");e&&f(e),t&&b(t),null!==s&&p(s),r&&j(r)}},[]);let O=(0,a.useCallback)(async()=>{if(t){m(!0);try{let e=`from=${encodeURIComponent(t.from)}&to=${encodeURIComponent(t.to)}`,s=await fetch(`/api/employees/stats?${e}`);if(s.ok){let e=await s.json();n(e)}}catch(e){console.error("Failed to fetch:",e)}finally{m(!1)}}},[t]),A=(0,a.useCallback)(async()=>{if(t){D(!0);try{let e=`startDate=${encodeURIComponent(t.from)}&endDate=${encodeURIComponent(t.to)}&groupBy=account&interval=${R}`,s=await fetch(`/api/usage/request-details/aggregate?${e}`);s.ok&&k(await s.json())}catch(e){console.error("Failed to fetch aggregate:",e)}finally{D(!1)}}},[t,R]);(0,a.useEffect)(()=>{O()},[O]),(0,a.useEffect)(()=>{A()},[A]);let B=o?.employees||[],z=(0,a.useMemo)(()=>{let e=[...B];if(L){let t=L.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(t))}return u&&(e=e.filter(e=>e.name?.toLowerCase().includes(u.toLowerCase()))),e.sort((e,t)=>{let s=e[h],r=t[h];return("name"===h?(s=(s||"").toLowerCase(),r=(r||"").toLowerCase()):"isActive"===h?(s=+!!s,r=+!!r):"lastActive"===h?(s=s?new Date(s).getTime():0,r=r?new Date(r).getTime():0):(s=s||0,r=r||0),s<r)?"asc"===g?-1:1:s>r?"asc"===g?1:-1:0})},[B,u,L,h,g]),{barData:P,topAccounts:X}=(0,a.useMemo)(()=>{let{buckets:e}=v;if(!e?.length)return{barData:[],topAccounts:[]};let t={},s=L.toLowerCase();for(let r of e)for(let[e,a]of Object.entries(r.groups||{}))(!s||e.toLowerCase().includes(s))&&(t[e]||(t[e]=0),t[e]+="cost"===y?a.cost:"tokens"===y?a.tokens:a.requests);let r=Object.entries(t).sort(([,e],[,t])=>t-e).slice(0,15).map(([e])=>e);return{barData:e.map(e=>{let t=new Date(e.hour),s={hour:"day"===R?`${String(t.getMonth()+1).padStart(2,"0")}/${String(t.getDate()).padStart(2,"0")}`:`${String(t.getHours()).padStart(2,"0")}:00
|
|
10
10
|
${String(t.getMonth()+1).padStart(2,"0")}/${String(t.getDate()).padStart(2,"0")}`,_ts:e.hour};for(let t of r){let r=e.groups?.[t];"cost"===y?s[t]=r?.cost||0:"tokens"===y?s[t]=r?.tokens||0:s[t]=r?.requests||0}return s}),topAccounts:r}},[v,y,R,L]),Y=(0,a.useMemo)(()=>{if(!B.length)return[];let e=[...B];if(L){let t=L.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(t))}return e.map(e=>({name:e.name||"Unnamed",tokens:(e.totalPromptTokens||0)+(e.totalCompletionTokens||0),cost:e.totalCost||0,requests:e.totalRequests||0})).sort((e,t)=>t[y]-e[y])},[B,L,y]);return(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between flex-wrap gap-3",children:[(0,r.jsx)("input",{type:"text",placeholder:"Filter by account...",value:L,onChange:e=>M(e.target.value),className:"px-3 py-1.5 rounded-lg border border-border bg-bg text-sm text-text focus:outline-none focus:ring-2 focus:ring-primary/50 w-48"}),(0,r.jsxs)("div",{className:"flex items-center gap-4 flex-wrap",children:[(0,r.jsx)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[{value:"hour",label:"By Hour"},{value:"day",label:"By Day"}].map(e=>(0,r.jsx)("button",{onClick:()=>I(e.value),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${R===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:e.label},e.value))}),(0,r.jsx)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[{value:"tokens",label:"Tokens"},{value:"cost",label:"Cost"},{value:"requests",label:"Requests"}].map(e=>(0,r.jsx)("button",{onClick:()=>{var t;j(t=e.value),localStorage.setItem("9router-emp-detail-view",t)},className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${y===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:e.label},e.value))}),(0,r.jsx)(c.default,{defaultPreset:"last7",onChange:s})]})]}),!i&&Y.length>0&&(0,r.jsxs)(d.default,{className:"p-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Total by Account"}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[Y.length," account",Y.length>1?"s":""]})]}),(0,r.jsx)("div",{style:{width:"100%",height:400},children:(0,r.jsx)(w.u,{width:"100%",height:"100%",children:(0,r.jsxs)(S.E,{data:Y,margin:{top:4,right:8,left:0,bottom:60},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1,vertical:!1}),(0,r.jsx)($.W,{dataKey:"name",tick:{fontSize:10,fill:"currentColor",fillOpacity:.6},tickLine:!1,axisLine:!1,angle:-45,textAnchor:"end",height:70,interval:0}),(0,r.jsx)(q.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,width:60,tickFormatter:"cost"===y?e=>`$${e.toFixed(2)}`:_}),(0,r.jsx)(F.m,{content:(0,r.jsx)(H,{viewMode:y}),cursor:{fill:"var(--color-bg-hover)",opacity:.5}}),(0,r.jsx)(T.yP,{dataKey:y,radius:[4,4,0,0],maxBarSize:40,animationDuration:400,children:Y.map((e,t)=>(0,r.jsx)(E.f,{fill:U[t%U.length],fillOpacity:.85},t))})]})})})]}),(0,r.jsxs)(d.default,{className:"p-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Hourly Usage by Account"}),!N&&X.length>0&&(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[X.length," account",X.length>1?"s":""]})]}),N?(0,r.jsx)("div",{className:"flex items-center justify-center py-16 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})}):0===P.length?(0,r.jsx)("div",{className:"flex items-center justify-center py-16 text-text-muted text-sm",children:"No data for selected range"}):(0,r.jsx)(w.u,{width:"100%",height:400,children:(0,r.jsxs)(S.E,{data:P,margin:{top:4,right:8,left:0,bottom:50},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)($.W,{dataKey:"hour",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd",angle:-45,textAnchor:"end",height:60}),(0,r.jsx)(q.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,width:60,tickFormatter:"cost"===y?e=>`$${e.toFixed(2)}`:_}),(0,r.jsx)(F.m,{content:(0,r.jsx)(H,{viewMode:y})}),(0,r.jsx)(K.s,{wrapperStyle:{fontSize:11,paddingTop:8},iconType:"square",iconSize:10}),X.map((e,t)=>(0,r.jsx)(T.yP,{dataKey:e,stackId:"a",fill:U[t%U.length],radius:t===X.length-1?[2,2,0,0]:[0,0,0,0],maxBarSize:40},e))]})})]}),i?(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})}):(0,r.jsx)(d.default,{className:"overflow-hidden",children:(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,r.jsx)("thead",{className:"bg-bg-subtle/30 text-text-muted uppercase text-xs",children:(0,r.jsx)("tr",{children:Q.map(e=>{let t=!1!==e.sortable,s=h===e.key,a="center"===e.align?"text-center":"right"===e.align?"text-right":"text-left";return(0,r.jsx)("th",{className:`px-6 py-3 ${a} ${t?"cursor-pointer select-none hover:text-text transition-colors":""}`,onClick:()=>{var s;let r;return t&&(s=e.key,r="desc",void(s===h&&(r="asc"===g?"desc":"asc"),f(s),b(r),localStorage.setItem("9router-emp-sort-key",s),localStorage.setItem("9router-emp-sort-dir",r)))},children:(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",children:[e.label,t&&s&&(0,r.jsx)("span",{className:"text-[10px]",children:"asc"===g?"↑":"↓"}),t&&!s&&(0,r.jsx)("span",{className:"opacity-20 text-[10px]",children:"↕"})]})},e.key)})})}),(0,r.jsxs)("tbody",{className:"divide-y divide-border",children:[z.map(t=>{let s;return(0,r.jsxs)("tr",{onClick:()=>e.push(`/dashboard/employees/${t.keyId}`),className:"hover:bg-bg-subtle/50 transition-colors cursor-pointer",children:[(0,r.jsx)("td",{className:"px-6 py-3 font-medium",children:t.name||"Unnamed"}),(0,r.jsx)("td",{className:"px-6 py-3 text-center",children:(0,r.jsx)(x.default,{variant:t.isActive?"success":"error",size:"sm",children:t.isActive?"Active":"Inactive"})}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",style:{color:"#8B5CF6"},children:W(t.totalRequests)}),(0,r.jsxs)("td",{className:"px-6 py-3 text-right text-primary",children:[W(t.totalPromptTokens),"↑"]}),(0,r.jsxs)("td",{className:"px-6 py-3 text-right text-red-500",children:[W(t.totalCompletionTokens),"↓"]}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium",children:W(t.totalTokens)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right font-medium text-green-500",children:(s=t.totalCost,`$${(s||0).toFixed(2)}`)}),(0,r.jsx)("td",{className:"px-6 py-3 text-right",children:t.modelsUsed}),(0,r.jsx)("td",{className:"px-6 py-3 text-right whitespace-nowrap",children:(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",children:[t.lastActive&&(0,r.jsx)("span",{className:`inline-block size-1.5 rounded-full ${function(e){if(!e)return"";let t=(Date.now()-new Date(e))/6e4;return t<1?"bg-green-500":t<=60?"bg-blue-400":"bg-red-500"}(t.lastActive)} ${(Date.now()-new Date(t.lastActive))/6e4<=60?"animate-pulse":""}`}),(0,r.jsx)("span",{className:`font-semibold ${function(e){if(!e)return"text-text-muted";let t=(Date.now()-new Date(e))/6e4;return t<1?"text-green-500":t<=60?"text-blue-400":"text-red-400"}(t.lastActive)}`,children:function(e){if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"JUST NOW":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()}(t.lastActive)})]})}),(0,r.jsx)("td",{className:"px-6 py-3 text-center",children:(0,r.jsx)("code",{className:"text-xs bg-bg-subtle px-2 py-0.5 rounded",children:t.apiKey})})]},t.keyId)}),0===z.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:10,className:"px-6 py-8 text-center text-text-muted",children:"No employees found."})})]})]})})})]})}let Y=["#3B82F6","#EF4444","#22C55E","#F59E0B","#8B5CF6","#EC4899","#06B6D4","#F97316","#6366F1","#14B8A6","#E11D48","#84CC16","#A855F7","#0EA5E9","#D946EF","#FB923C"],V=["#079A8B","#F57C00","#3B82F6","#EF4444","#8B5CF6","#EC4899","#22C55E","#F59E0B","#06B6D4","#6366F1","#14B8A6","#E11D48","#84CC16","#A855F7","#0EA5E9","#D946EF"],J=e=>new Intl.NumberFormat().format(e||0),G=e=>e?e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)):"0",Z=e=>`$${(e||0).toFixed(4)}`;function ee({timestamp:e}){let t,[,s]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=setInterval(()=>s(e=>e+1),5e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:(t=Math.floor((Date.now()-new Date(e))/1e3))<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`})}function et({active:e,payload:t,label:s,viewMode:a}){if(!e||!t?.length)return null;let l="cost"===a?"":"tokens"===a?" tokens":" reqs",o="cost"===a?Z:J,n=t.reduce((e,t)=>e+(t.value||0),0);return(0,r.jsxs)("div",{style:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",padding:"10px 14px",fontSize:"12px",color:"var(--color-text)",maxHeight:300,overflowY:"auto"},children:[(0,r.jsx)("p",{style:{fontWeight:600,marginBottom:6,color:"var(--color-text-muted)"},children:s}),t.filter(e=>e.value>0).sort((e,t)=>t.value-e.value).map((e,t)=>(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[(0,r.jsx)("span",{style:{width:8,height:8,borderRadius:2,backgroundColor:e.color,flexShrink:0}}),(0,r.jsx)("span",{style:{flex:1,opacity:.8},children:e.dataKey}),(0,r.jsxs)("span",{style:{fontWeight:600},children:[o(e.value),l]})]},t)),(0,r.jsxs)("div",{style:{borderTop:"1px solid var(--color-border)",marginTop:6,paddingTop:4,fontWeight:700},children:["Total: ",o(n),l]})]})}function es(){let[e,t]=(0,a.useState)(null),[s,l]=(0,a.useState)("tokens"),[o,n]=(0,a.useState)({buckets:[],keys:[]}),[i,x]=(0,a.useState)({details:[],pagination:{}}),[m,u]=(0,a.useState)(!0),[p,h]=(0,a.useState)(!0),[f,g]=(0,a.useState)(1),[b,y]=(0,a.useState)([]),[j,v]=(0,a.useState)("hour"),[k,N]=(0,a.useState)(""),[D,R]=(0,a.useState)({buckets:[],keys:[]}),[I,L]=(0,a.useState)(!0);(0,a.useEffect)(()=>{fetch("/api/keys").then(e=>e.ok?e.json():null).then(e=>{e?.keys&&y(e.keys)}).catch(()=>{})},[]);let M=(0,a.useMemo)(()=>{let e={};for(let t of b)t.key&&(e[t.key]=t.name||t.label||t.key);return e},[b]);(0,a.useEffect)(()=>{{let e=localStorage.getItem("9router-model-report-view");e&&l(e)}},[]);let O=(0,a.useCallback)(async()=>{if(e){u(!0);try{let t=`startDate=${encodeURIComponent(e.from)}&endDate=${encodeURIComponent(e.to)}&interval=${j}`,s=await fetch(`/api/usage/request-details/aggregate?${t}`);s.ok&&n(await s.json())}catch(e){console.error("Failed to fetch aggregate:",e)}finally{u(!1)}}},[e,j]),A=(0,a.useCallback)(async()=>{if(e){h(!0);try{let t=`startDate=${encodeURIComponent(e.from)}&endDate=${encodeURIComponent(e.to)}&page=${f}&pageSize=50`,s=await fetch(`/api/usage/request-details?${t}`);s.ok&&x(await s.json())}catch(e){console.error("Failed to fetch details:",e)}finally{h(!1)}}},[e,f]);(0,a.useEffect)(()=>{O()},[O]),(0,a.useEffect)(()=>{A()},[A]);let B=(0,a.useCallback)(async()=>{if(e){L(!0);try{let t=`startDate=${encodeURIComponent(e.from)}&endDate=${encodeURIComponent(e.to)}&groupBy=connection&interval=${j}`,s=await fetch(`/api/usage/request-details/aggregate?${t}`);s.ok&&R(await s.json())}catch(e){console.error("Failed to fetch provider aggregate:",e)}finally{L(!1)}}},[e,j]);(0,a.useEffect)(()=>{B()},[B]),(0,a.useEffect)(()=>{g(1)},[e]);let{barData:z,topModels:P}=(0,a.useMemo)(()=>{let{buckets:e,keys:t}=o;if(!e?.length)return{barData:[],topModels:[]};let r={},a=k.toLowerCase();for(let t of e)for(let[e,l]of Object.entries(t.groups||{}))(!a||e.toLowerCase().includes(a))&&(r[e]||(r[e]=0),r[e]+="cost"===s?l.cost:"tokens"===s?l.tokens:l.requests);let l=Object.entries(r).sort(([,e],[,t])=>t-e).slice(0,15).map(([e])=>e);return{barData:e.map(e=>{let t=new Date(e.hour),r={hour:"day"===j?`${String(t.getMonth()+1).padStart(2,"0")}/${String(t.getDate()).padStart(2,"0")}`:`${String(t.getHours()).padStart(2,"0")}:00
|
|
11
11
|
${String(t.getMonth()+1).padStart(2,"0")}/${String(t.getDate()).padStart(2,"0")}`,_ts:e.hour};for(let t of l){let a=e.groups?.[t];"cost"===s?r[t]=a?.cost||0:"tokens"===s?r[t]=a?.tokens||0:r[t]=a?.requests||0}return r}),topModels:l}},[o,s,j,k]),U=(0,a.useMemo)(()=>{let{buckets:e}=o;if(!e?.length)return[];let t={},r=k.toLowerCase();for(let s of e)for(let[e,a]of Object.entries(s.groups||{}))(!r||e.toLowerCase().includes(r))&&(t[e]||(t[e]={model:e,requests:0,cost:0,promptTokens:0,completionTokens:0,tokens:0}),t[e].requests+=a.requests||0,t[e].cost+=a.cost||0,t[e].promptTokens+=a.promptTokens||0,t[e].completionTokens+=a.completionTokens||0,t[e].tokens+=a.tokens||0);return Object.values(t).sort((e,t)=>"cost"===s?t.cost-e.cost:"requests"===s?t.requests-e.requests:t.tokens-e.tokens)},[o,s,k]),W=(0,a.useMemo)(()=>U.reduce((e,t)=>({requests:e.requests+t.requests,cost:e.cost+t.cost,promptTokens:e.promptTokens+t.promptTokens,completionTokens:e.completionTokens+t.completionTokens,tokens:e.tokens+t.tokens}),{requests:0,cost:0,promptTokens:0,completionTokens:0,tokens:0}),[U]),_=(0,a.useMemo)(()=>{let{buckets:e}=D;if(!e?.length)return[];let t={};for(let s of e)for(let[e,r]of Object.entries(s.groups||{}))t[e]||(t[e]={name:e,requests:0,cost:0,tokens:0}),t[e].requests+=r.requests||0,t[e].cost+=r.cost||0,t[e].tokens+=r.tokens||0;return Object.values(t).sort((e,t)=>t.requests-e.requests)},[D]),{details:H,pagination:Q}=i;return(0,r.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between flex-wrap gap-3",children:[(0,r.jsx)("input",{type:"text",placeholder:"Filter by model...",value:k,onChange:e=>N(e.target.value),className:"px-3 py-1.5 rounded-lg border border-border bg-bg text-sm text-text focus:outline-none focus:ring-2 focus:ring-primary/50 w-48"}),(0,r.jsxs)("div",{className:"flex items-center gap-4 flex-wrap",children:[(0,r.jsx)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[{value:"hour",label:"By Hour"},{value:"day",label:"By Day"}].map(e=>(0,r.jsx)("button",{onClick:()=>v(e.value),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${j===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:e.label},e.value))}),(0,r.jsx)("div",{className:"flex items-center gap-1 bg-bg-subtle rounded-lg p-1 border border-border",children:[{value:"tokens",label:"Tokens"},{value:"cost",label:"Cost"},{value:"requests",label:"Requests"}].map(e=>(0,r.jsx)("button",{onClick:()=>{var t;l(t=e.value),localStorage.setItem("9router-model-report-view",t)},className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${s===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:text-text hover:bg-bg-hover"}`,children:e.label},e.value))}),(0,r.jsx)(c.default,{defaultPreset:"last7",onChange:t})]})]}),!I&&_.length>0&&(0,r.jsxs)(d.default,{className:"p-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"By Account"}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[_.length," account",_.length>1?"s":""]})]}),(0,r.jsx)("div",{style:{width:"100%",height:Math.max(200,40*_.length+40)},children:(0,r.jsx)(w.u,{width:"100%",height:"100%",children:(0,r.jsxs)(S.E,{data:_.map(e=>({name:e.name?.length>14?e.name.slice(0,14)+"…":e.name,fullName:e.name,tokens:e.tokens,cost:e.cost,requests:e.requests})),layout:"vertical",margin:{top:5,right:10,left:0,bottom:5},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1,horizontal:!1}),(0,r.jsx)($.W,{type:"number",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"cost"===s?e=>`$${e.toFixed(2)}`:G}),(0,r.jsx)(q.h,{type:"category",dataKey:"name",tick:{fontSize:9,fill:"currentColor",fillOpacity:.6},tickLine:!1,axisLine:!1,width:90}),(0,r.jsx)(F.m,{cursor:!1,contentStyle:{backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",fontSize:"12px",color:"var(--color-text)"},itemStyle:{color:"var(--color-text)"},formatter:e=>["cost"===s?Z(e):J(e),"tokens"===s?"Tokens":"cost"===s?"Cost":"Requests"],labelFormatter:(e,t)=>t?.[0]?.payload?.fullName||e}),(0,r.jsx)(T.yP,{dataKey:s,radius:[0,4,4,0],maxBarSize:32,children:_.map((e,t)=>(0,r.jsx)(E.f,{fill:V[t%V.length]},t))})]})})})]}),(0,r.jsxs)(d.default,{className:"p-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Hourly Usage by Model"}),!m&&P.length>0&&(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[P.length," model",P.length>1?"s":""]})]}),m?(0,r.jsx)("div",{className:"flex items-center justify-center py-16 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})}):0===z.length?(0,r.jsx)("div",{className:"flex items-center justify-center py-16 text-text-muted text-sm",children:"No data for selected range"}):(0,r.jsx)(w.u,{width:"100%",height:400,children:(0,r.jsxs)(S.E,{data:z,margin:{top:4,right:8,left:0,bottom:50},children:[(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)($.W,{dataKey:"hour",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd",angle:-45,textAnchor:"end",height:60}),(0,r.jsx)(q.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,width:60,tickFormatter:"cost"===s?e=>`$${e.toFixed(2)}`:G}),(0,r.jsx)(F.m,{content:(0,r.jsx)(et,{viewMode:s})}),(0,r.jsx)(K.s,{wrapperStyle:{fontSize:11,paddingTop:8},iconType:"square",iconSize:10}),P.map((e,t)=>(0,r.jsx)(T.yP,{dataKey:e,stackId:"a",fill:Y[t%Y.length],radius:t===P.length-1?[2,2,0,0]:[0,0,0,0],maxBarSize:40},e))]})})]}),!m&&U.length>0&&(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",children:[(0,r.jsxs)("div",{className:"px-1 py-2 border-b border-border shrink-0 flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Model Statistics"}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[U.length," model",U.length>1?"s":""]})]}),(0,r.jsx)("div",{className:"overflow-x-auto custom-scrollbar",children:(0,r.jsxs)("table",{className:"w-full text-xs border-collapse min-w-[500px]",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-2 px-3 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-2 px-3 text-right font-semibold",style:{color:"#8B5CF6"},children:"Requests"}),(0,r.jsx)("th",{className:"py-2 px-3 text-right font-semibold text-primary",children:"Input ↑"}),(0,r.jsx)("th",{className:"py-2 px-3 text-right font-semibold text-red-500",children:"Output ↓"}),(0,r.jsx)("th",{className:"py-2 px-3 text-right font-semibold text-text-muted",children:"Total Tokens"}),(0,r.jsx)("th",{className:"py-2 px-3 text-right font-semibold text-green-500",children:"Cost"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:U.map((e,t)=>(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsxs)("td",{className:"py-2 px-3 font-mono font-medium flex items-center gap-2",children:[(0,r.jsx)("span",{className:"inline-block w-2.5 h-2.5 rounded-sm shrink-0",style:{backgroundColor:Y[P.indexOf(e.model)%Y.length]||"#666"}}),(0,r.jsx)("span",{className:"truncate max-w-[200px]",title:e.model,children:e.model})]}),(0,r.jsx)("td",{className:"py-2 px-3 text-right whitespace-nowrap",style:{color:"#8B5CF6"},children:J(e.requests)}),(0,r.jsxs)("td",{className:"py-2 px-3 text-right text-primary whitespace-nowrap",children:[J(e.promptTokens),"↑"]}),(0,r.jsxs)("td",{className:"py-2 px-3 text-right text-red-500 whitespace-nowrap",children:[J(e.completionTokens),"↓"]}),(0,r.jsx)("td",{className:"py-2 px-3 text-right whitespace-nowrap font-medium",children:G(e.tokens)}),(0,r.jsx)("td",{className:"py-2 px-3 text-right text-green-500 whitespace-nowrap",children:Z(e.cost)})]},e.model))}),(0,r.jsx)("tfoot",{children:(0,r.jsxs)("tr",{className:"border-t-2 border-border bg-bg-subtle/50 font-semibold",children:[(0,r.jsx)("td",{className:"py-2 px-3",children:"Total"}),(0,r.jsx)("td",{className:"py-2 px-3 text-right",style:{color:"#8B5CF6"},children:J(W.requests)}),(0,r.jsxs)("td",{className:"py-2 px-3 text-right text-primary",children:[J(W.promptTokens),"↑"]}),(0,r.jsxs)("td",{className:"py-2 px-3 text-right text-red-500",children:[J(W.completionTokens),"↓"]}),(0,r.jsx)("td",{className:"py-2 px-3 text-right font-medium",children:G(W.tokens)}),(0,r.jsx)("td",{className:"py-2 px-3 text-right text-green-500",children:Z(W.cost)})]})})]})})]}),(0,r.jsxs)(d.default,{className:"flex flex-col overflow-hidden",padding:"sm",children:[(0,r.jsxs)("div",{className:"px-1 py-2 border-b border-border shrink-0 flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide",children:"Request Details"}),Q?.totalItems>0&&(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[J(Q.totalItems)," total"]})]}),p?(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px] animate-spin",children:"progress_activity"})}):H?.length?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"flex-1 overflow-x-auto custom-scrollbar",children:(0,r.jsxs)("table",{className:"w-full text-xs border-collapse min-w-[640px]",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-bg z-10",children:(0,r.jsxs)("tr",{className:"border-b border-border",children:[(0,r.jsx)("th",{className:"py-2 px-2 text-left font-semibold text-text-muted w-2"}),(0,r.jsx)("th",{className:"py-2 px-2 text-left font-semibold text-text-muted",children:"Model"}),(0,r.jsx)("th",{className:"py-2 px-2 text-left font-semibold text-text-muted",children:"API Key"}),(0,r.jsx)("th",{className:"py-2 px-2 text-right font-semibold text-text-muted",children:"Input"}),(0,r.jsx)("th",{className:"py-2 px-2 text-right font-semibold text-text-muted",children:"Output"}),(0,r.jsx)("th",{className:"py-2 px-2 text-right font-semibold text-text-muted",children:"Cost"}),(0,r.jsx)("th",{className:"py-2 px-2 text-right font-semibold text-text-muted",children:"When"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:H.map((e,t)=>{let s="success"===e.status||"ok"===e.status,a=e.tokens?.prompt_tokens||0,l=e.tokens?.completion_tokens||0,o=e.apiKey?M[e.apiKey]||e.apiKey.slice(0,8)+"…":"—";return(0,r.jsxs)("tr",{className:"hover:bg-bg-subtle transition-colors",children:[(0,r.jsx)("td",{className:"py-2 px-2",children:(0,r.jsx)("span",{className:`block w-1.5 h-1.5 rounded-full ${s?"bg-success":"bg-error"}`})}),(0,r.jsx)("td",{className:"py-2 px-2 font-mono truncate max-w-[180px]",title:e.model,children:e.model||"—"}),(0,r.jsx)("td",{className:"py-2 px-2 truncate max-w-[120px] text-secondary",title:o,children:o}),(0,r.jsxs)("td",{className:"py-2 px-2 text-right text-primary whitespace-nowrap",children:[J(a),"↑"]}),(0,r.jsxs)("td",{className:"py-2 px-2 text-right text-red-500 whitespace-nowrap",children:[J(l),"↓"]}),(0,r.jsx)("td",{className:"py-2 px-2 text-right text-green-500 whitespace-nowrap",children:e.cost?Z(e.cost):"—"}),(0,r.jsx)("td",{className:"py-2 px-2 text-right text-text-muted whitespace-nowrap",children:(0,r.jsx)(ee,{timestamp:e.timestamp})})]},e.id||t)})})]})}),Q?.totalPages>1&&(0,r.jsxs)("div",{className:"flex items-center justify-between px-2 py-2 border-t border-border",children:[(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["Page ",Q.page," of ",Q.totalPages]}),(0,r.jsxs)("div",{className:"flex gap-1",children:[(0,r.jsx)("button",{onClick:()=>g(e=>Math.max(1,e-1)),disabled:!Q.hasPrev,className:"px-2 py-1 rounded text-xs font-medium border border-border hover:bg-bg-hover disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:"← Prev"}),(0,r.jsx)("button",{onClick:()=>g(e=>e+1),disabled:!Q.hasNext,className:"px-2 py-1 rounded text-xs font-medium border border-border hover:bg-bg-hover disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:"Next →"})]})]})]}):(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-text-muted text-sm",children:"No requests for selected range"})]})]})}var er=s(43810);function ea(){return(0,r.jsx)(a.Suspense,{fallback:(0,r.jsx)(o.Qv,{}),children:(0,r.jsx)(el,{})})}function el(){let e=(0,l.useSearchParams)(),t=(0,l.useRouter)(),[s,n]=(0,a.useState)(!1),[i,c]=(0,a.useState)("overview"),[d,x]=(0,a.useState)(!1);return((0,a.useEffect)(()=>{x(!0);let s=e.get("tab");if(s&&["overview","details","models","quota"].includes(s))c(s),localStorage.setItem("9router-emp-tab",s);else{let s=localStorage.getItem("9router-emp-tab");if(s&&["overview","details","models","quota"].includes(s)){c(s);let r=new URLSearchParams(e);r.set("tab",s),t.replace(`/dashboard/employees?${r.toString()}`,{scroll:!1})}else c("overview")}},[e,t]),d)?(0,r.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,r.jsx)(o.Iz,{options:[{value:"overview",label:"Overview"},{value:"details",label:"By Account"},{value:"models",label:"By Model"},{value:"quota",label:"Quota Checker"}],value:i,onChange:s=>{if(s===i)return;n(!0),c(s),localStorage.setItem("9router-emp-tab",s);let r=new URLSearchParams(e);r.set("tab",s),t.push(`/dashboard/employees?${r.toString()}`,{scroll:!1}),setTimeout(()=>n(!1),300)}}),s?(0,r.jsx)(o.Qv,{}):(0,r.jsxs)(r.Fragment,{children:["overview"===i&&(0,r.jsx)(a.Suspense,{fallback:(0,r.jsx)(o.Qv,{}),children:(0,r.jsx)(P,{})}),"details"===i&&(0,r.jsx)(X,{}),"models"===i&&(0,r.jsx)(a.Suspense,{fallback:(0,r.jsx)(o.Qv,{}),children:(0,r.jsx)(es,{})}),"quota"===i&&(0,r.jsx)(a.Suspense,{fallback:(0,r.jsx)(o.Qv,{}),children:(0,r.jsx)(er.default,{})})]})]}):(0,r.jsx)(o.Qv,{})}}},e=>{e.O(0,[2574,3862,548,8222,2652,5497,3810,8441,3794,7358],()=>e(e.s=22644)),_N_E=e.O()}]);
|
package/app/.next/static/chunks/app/{layout-bba8f733b801a5dc.js → layout-568b2d1a3408feb3.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>o});var n=r(12115);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,i={setState:n,getState:a,getInitialState:()=>o,subscribe:e=>(r.add(e),()=>r.delete(e))},o=t=e(n,a,i);return i},i=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},o=e=>e?i(e):i},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>o});var n=r(95155),a=r(12115),i=r(90085);function o({children:e}){let{initTheme:t}=(0,i.A)();return(0,a.useEffect)(()=>{t()},[t]),(0,n.jsx)(n.Fragment,{children:e})}},28777:(e,t,r)=>{"use strict";r.d(t,{KC:()=>n.KC,Xg:()=>n.Xg});var n=r(45564);Object.entries(r(52679).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})))},31692:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},a=(e,t)=>(r,a,i)=>{let o,s={storage:function(e){let t;try{t=e()}catch(e){return}return{getItem:e=>{var r;let n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(r=t.getItem(e))?r:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,r)=>t.setItem(e,JSON.stringify(r,void 0)),removeItem:e=>t.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},u=!1,l=0,c=new Set,d=new Set,m=s.storage;if(!m)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),r(...e)},a,i);let f=()=>{let e=s.partialize({...a()});return m.setItem(s.name,{state:e,version:s.version})},h=i.setState;i.setState=(e,t)=>(h(e,t),f());let p=e((...e)=>(r(...e),f()),a,i);i.getInitialState=()=>p;let v=()=>{var e,t;if(!m)return;let i=++l;u=!1,c.forEach(e=>{var t;return e(null!=(t=a())?t:p)});let h=(null==(t=s.onRehydrateStorage)?void 0:t.call(s,null!=(e=a())?e:p))||void 0;return n(m.getItem.bind(m))(s.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===s.version)return[!1,e.state];else{if(s.migrate){let t=s.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(i!==l)return;let[n,u]=e;if(r(o=s.merge(u,null!=(t=a())?t:p),!0),n)return f()}).then(()=>{i===l&&(null==h||h(a(),void 0),o=a(),u=!0,d.forEach(e=>e(o)))}).catch(e=>{i===l&&(null==h||h(void 0,e))})};return i.persist={setOptions:e=>{s={...s,...e},e.storage&&(m=e.storage)},clearStorage:()=>{null==m||m.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>v(),hasHydrated:()=>u,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},s.skipHydration||v(),o||p}},35154:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}},51743:()=>{},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>m,Tl:()=>l,wn:()=>f});var n=r(93308);let a={},i=n.Xn,o=[];function s(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function u(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function l(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==i&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let r=t;for(;r;){if(r.hasAttribute&&r.hasAttribute("data-i18n-skip"))return;r=r.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let n=l(e._originalText);n!==e.nodeValue&&(e.nodeValue=n)}function d(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(c)}async function m(){i=s(),await u(i),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function f(){i=s(),await u(i),o.forEach(e=>e()),d(document.body)}},73321:(e,t,r)=>{"use strict";var n=r(74645);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},80690:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,35154,23)),Promise.resolve().then(r.t.bind(r,51743,23)),Promise.resolve().then(r.bind(r,94635)),Promise.resolve().then(r.bind(r,21110))},90085:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(1934),a=r(31692),i=r(90620);function o(e){let t=document.documentElement,r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?r:e)?t.classList.add("dark"):t.classList.remove("dark")}let s=(0,n.v)((0,a.Zr)((e,t)=>({theme:i.B2.defaultTheme,setTheme:t=>{e({theme:t}),o(t)},toggleTheme:()=>{let r="dark"===t().theme?"light":"dark";e({theme:r}),o(r)},initTheme:()=>{o(t().theme)}}),{name:i.B2.storageKey}))},90620:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>n.Q2,fg:()=>n.fg,vQ:()=>a,MA:()=>n.MA,UY:()=>o,zN:()=>n.zN,B2:()=>i});var n=r(52679);r(28777);let a={name:"iRouter - Server",description:"Enterprise AI Infrastructure Management",version:"0.3.64-
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>o});var n=r(12115);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,i={setState:n,getState:a,getInitialState:()=>o,subscribe:e=>(r.add(e),()=>r.delete(e))},o=t=e(n,a,i);return i},i=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},o=e=>e?i(e):i},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>o});var n=r(95155),a=r(12115),i=r(90085);function o({children:e}){let{initTheme:t}=(0,i.A)();return(0,a.useEffect)(()=>{t()},[t]),(0,n.jsx)(n.Fragment,{children:e})}},28777:(e,t,r)=>{"use strict";r.d(t,{KC:()=>n.KC,Xg:()=>n.Xg});var n=r(45564);Object.entries(r(52679).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})))},31692:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},a=(e,t)=>(r,a,i)=>{let o,s={storage:function(e){let t;try{t=e()}catch(e){return}return{getItem:e=>{var r;let n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(r=t.getItem(e))?r:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,r)=>t.setItem(e,JSON.stringify(r,void 0)),removeItem:e=>t.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},u=!1,l=0,c=new Set,d=new Set,m=s.storage;if(!m)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),r(...e)},a,i);let f=()=>{let e=s.partialize({...a()});return m.setItem(s.name,{state:e,version:s.version})},h=i.setState;i.setState=(e,t)=>(h(e,t),f());let p=e((...e)=>(r(...e),f()),a,i);i.getInitialState=()=>p;let v=()=>{var e,t;if(!m)return;let i=++l;u=!1,c.forEach(e=>{var t;return e(null!=(t=a())?t:p)});let h=(null==(t=s.onRehydrateStorage)?void 0:t.call(s,null!=(e=a())?e:p))||void 0;return n(m.getItem.bind(m))(s.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===s.version)return[!1,e.state];else{if(s.migrate){let t=s.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(i!==l)return;let[n,u]=e;if(r(o=s.merge(u,null!=(t=a())?t:p),!0),n)return f()}).then(()=>{i===l&&(null==h||h(a(),void 0),o=a(),u=!0,d.forEach(e=>e(o)))}).catch(e=>{i===l&&(null==h||h(void 0,e))})};return i.persist={setOptions:e=>{s={...s,...e},e.storage&&(m=e.storage)},clearStorage:()=>{null==m||m.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>v(),hasHydrated:()=>u,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},s.skipHydration||v(),o||p}},35154:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}},51743:()=>{},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>m,Tl:()=>l,wn:()=>f});var n=r(93308);let a={},i=n.Xn,o=[];function s(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function u(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function l(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==i&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let r=t;for(;r;){if(r.hasAttribute&&r.hasAttribute("data-i18n-skip"))return;r=r.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let n=l(e._originalText);n!==e.nodeValue&&(e.nodeValue=n)}function d(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(c)}async function m(){i=s(),await u(i),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function f(){i=s(),await u(i),o.forEach(e=>e()),d(document.body)}},73321:(e,t,r)=>{"use strict";var n=r(74645);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},80690:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,35154,23)),Promise.resolve().then(r.t.bind(r,51743,23)),Promise.resolve().then(r.bind(r,94635)),Promise.resolve().then(r.bind(r,21110))},90085:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(1934),a=r(31692),i=r(90620);function o(e){let t=document.documentElement,r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?r:e)?t.classList.add("dark"):t.classList.remove("dark")}let s=(0,n.v)((0,a.Zr)((e,t)=>({theme:i.B2.defaultTheme,setTheme:t=>{e({theme:t}),o(t)},toggleTheme:()=>{let r="dark"===t().theme?"light":"dark";e({theme:r}),o(r)},initTheme:()=>{o(t().theme)}}),{name:i.B2.storageKey}))},90620:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>n.Q2,fg:()=>n.fg,vQ:()=>a,MA:()=>n.MA,UY:()=>o,zN:()=>n.zN,B2:()=>i});var n=r(52679);r(28777);let a={name:"iRouter - Server",description:"Enterprise AI Infrastructure Management",version:"0.3.64-i20"},i={storageKey:"theme",defaultTheme:"system"},o={maxLines:200,pollIntervalMs:1e3}},93308:(e,t,r)=>{"use strict";r.d(t,{CL:()=>i,QC:()=>o,Xn:()=>a,YZ:()=>n});let n=["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no"],a="en",i="locale";function o(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":a}},94635:(e,t,r)=>{"use strict";r.d(t,{RuntimeI18nProvider:()=>s});var n=r(95155),a=r(12115),i=r(73321),o=r(73006);function s({children:e}){let t=(0,i.usePathname)();return(0,a.useEffect)(()=>{(0,o.FE)()},[]),(0,a.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,o.wn)()})})},[t]),(0,n.jsx)(n.Fragment,{children:e})}}},e=>{e.O(0,[1405,3334,2652,8441,3794,7358],()=>e(e.s=80690)),_N_E=e.O()}]);
|