omniroute 3.0.0 → 3.0.1

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.
Files changed (116) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +2 -2
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/_global-error.html +2 -2
  40. package/app/.next/server/app/_global-error.rsc +1 -1
  41. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  42. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  46. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/chunks/[root-of-the-server]__051203a6._.js +2 -2
  60. package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
  61. package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
  62. package/app/.next/server/chunks/[root-of-the-server]__61d78f9d._.js +2 -2
  63. package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__afddb4ce._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__e27a89bd._.js +1 -1
  66. package/app/.next/server/chunks/[root-of-the-server]__fd2fbc93._.js +1 -1
  67. package/app/.next/server/chunks/_05c48915._.js +1 -1
  68. package/app/.next/server/chunks/_06515a8a._.js +1 -1
  69. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  70. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  71. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  72. package/app/.next/server/chunks/_68683848._.js +1 -1
  73. package/app/.next/server/chunks/_6f1b3c3f._.js +1 -1
  74. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  75. package/app/.next/server/chunks/_efd5ede2._.js +2 -2
  76. package/app/.next/server/chunks/_ffda39da._.js +1 -1
  77. package/app/.next/server/chunks/open-sse_translator_index_ts_f5fd0821._.js +1 -1
  78. package/app/.next/server/chunks/src_6320c728._.js +1 -1
  79. package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  80. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  81. package/app/.next/server/chunks/ssr/_f3674909._.js +1 -1
  82. package/app/.next/server/chunks/ssr/src_a82a42f9._.js +1 -1
  83. package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_936a9ee0._.js +1 -1
  84. package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_settings_9e20fb8d._.js +1 -1
  85. package/app/.next/server/pages/500.html +2 -2
  86. package/app/.next/server/server-reference-manifest.js +1 -1
  87. package/app/.next/server/server-reference-manifest.json +1 -1
  88. package/app/.next/static/chunks/26aeb12cf79339b1.js +1 -0
  89. package/app/.next/static/chunks/{80658e0c2b2c7004.js → 633a312ddcf9fa11.js} +1 -1
  90. package/app/.next/static/chunks/7df0b3c357097db5.js +1 -0
  91. package/app/.next/static/chunks/a051245b46459ad2.css +1 -0
  92. package/app/.next/static/chunks/d188e358e1ec0a7d.js +1 -0
  93. package/app/.next/static/chunks/{4e3fe685e3218d24.js → fa9e2a946d2cdbc7.js} +1 -1
  94. package/app/CHANGELOG.md +122 -68
  95. package/app/docs/i18n/ru/README.md +3 -3
  96. package/app/docs/openapi.yaml +1 -1
  97. package/app/open-sse/handlers/chatCore.ts +9 -2
  98. package/app/open-sse/handlers/responseTranslator.ts +13 -3
  99. package/app/open-sse/services/usage.ts +22 -9
  100. package/app/open-sse/translator/request/openai-to-claude.ts +10 -2
  101. package/app/package-lock.json +2 -2
  102. package/app/package.json +1 -1
  103. package/app/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +198 -63
  104. package/app/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx +123 -19
  105. package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx +22 -24
  106. package/app/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx +5 -0
  107. package/app/src/lib/providers/validation.ts +21 -0
  108. package/app/src/shared/components/ProxyConfigModal.tsx +42 -13
  109. package/package.json +1 -1
  110. package/app/.next/static/chunks/594bdf69c19b5310.js +0 -1
  111. package/app/.next/static/chunks/643428fcd3f9bb51.js +0 -1
  112. package/app/.next/static/chunks/8efe14530c87d9f6.css +0 -1
  113. package/app/.next/static/chunks/d0cff7a6c3a66c7d.js +0 -1
  114. /package/app/.next/static/{cQZnxkFFvb8O7T4x7OSsG → bF7pUIj1e9VsHgSW5x9WX}/_buildManifest.js +0 -0
  115. /package/app/.next/static/{cQZnxkFFvb8O7T4x7OSsG → bF7pUIj1e9VsHgSW5x9WX}/_clientMiddlewareManifest.json +0 -0
  116. /package/app/.next/static/{cQZnxkFFvb8O7T4x7OSsG → bF7pUIj1e9VsHgSW5x9WX}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[604593,a=>{"use strict";var b=a.i(911655),c=a.i(745718);function d(a,b){return b&&0!==b?!a||a<0?100:a>=b?0:Math.round((b-a)/b*100):0}function e(a,b={},d={}){let f=Number(b?.used||0),g=Number(b?.total||0),h=b?.resetAt||null,i=function(a){if(!a)return!1;let b="number"==typeof a?a:"string"==typeof a?Date.parse(a):NaN;return!!Number.isFinite(b)&&Date.now()>=b}(h),j=i?0:f,k=Number.isFinite(g)?g:0,l=(0,c.safePercentage)(b?.remainingPercentage),m=i&&k>0?100:void 0!==l?l:void 0;return{name:a,used:Number.isFinite(j)?j:0,total:k,resetAt:h,staleAfterReset:i,...void 0!==m?{remainingPercentage:m}:{},...d}}function f(a,c){if(!c||"object"!=typeof c)return[];let d=[];try{switch(a.toLowerCase()){case"github":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{(!b?.unlimited||b?.total&&!(b.total<=0))&&d.push(e(a,b))});break;case"antigravity":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(b.displayName||a,b,{modelKey:a}))});break;case"codex":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))});break;case"kiro":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))});break;case"claude":c.message?d.push({name:"error",used:0,total:0,resetAt:null,message:c.message}):c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))});break;default:c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))})}}catch(b){return console.error(`Error parsing quota data for ${a}:`,b),[]}let f=(0,b.getModelsByProviderId)(a);if(f.length>0){let a=new Map(f.map((a,b)=>[a.id,b]));d.sort((b,c)=>{let d=b.modelKey||b.name,e=c.modelKey||c.name;return(a.get(d)??999)-(a.get(e)??999)})}return d}function g(a){let b="string"==typeof a?a.trim():"";if(!b)return{key:"unknown",label:"Unknown",variant:"default",rank:0,raw:null};let c=b.toUpperCase();return c.includes("PRO+")||c.includes("PRO PLUS")||c.includes("PROPLUS")?{key:"plus",label:"Pro+",variant:"secondary",rank:4,raw:b}:c.includes("ENTERPRISE")||c.includes("CORP")||c.includes("ORG")?{key:"enterprise",label:"Enterprise",variant:"info",rank:7,raw:b}:c.includes("TEAM")||c.includes("CHATGPTTEAM")?{key:"team",label:"Team",variant:"info",rank:6,raw:b}:c.includes("BUSINESS")||c.includes("STANDARD")||c.includes("BIZ")?{key:"business",label:"Business",variant:"warning",rank:5,raw:b}:c.includes("STUDENT")?{key:"pro",label:"Student",variant:"primary",rank:3,raw:b}:c.includes("ULTRA")?{key:"ultra",label:"Ultra",variant:"success",rank:4,raw:b}:c.includes("PRO")||c.includes("PREMIUM")?{key:"pro",label:"Pro",variant:"primary",rank:3,raw:b}:c.includes("PLUS")||c.includes("PAID")?{key:"plus",label:"Plus",variant:"secondary",rank:2,raw:b}:c.includes("FREE")||c.includes("BASIC")||c.includes("TRIAL")||c.includes("LEGACY")?{key:"free",label:"Free",variant:"default",rank:1,raw:b}:{key:"unknown",label:b.toLowerCase().split(/[\s_-]+/).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||"Unknown",variant:"default",rank:0,raw:b}}a.s(["calculatePercentage",()=>d,"normalizePlanTier",()=>g,"parseQuotaData",()=>f])},280382,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(571987),h=a.i(604593),i=a.i(436595),j=a.i(497160),k=a.i(831097),l=a.i(662073),m=b([l]);[l]=m.then?(await m)():m;let o="omniroute:limits:expandedGroups",p={antigravity:{label:"Antigravity",color:"#F59E0B"},github:{label:"GitHub Copilot",color:"#333"},kiro:{label:"Kiro AI",color:"#FF6B35"},codex:{label:"OpenAI Codex",color:"#10A37F"},claude:{label:"Claude Code",color:"#D97757"},glm:{label:"GLM (Z.AI)",color:"#4A90D9"},"kimi-coding":{label:"Kimi Coding",color:"#1E3A8A"}},q=[{key:"all",labelKey:"tierAll"},{key:"enterprise",labelKey:"tierEnterprise"},{key:"team",labelKey:"tierTeam"},{key:"business",labelKey:"tierBusiness"},{key:"ultra",labelKey:"tierUltra"},{key:"pro",labelKey:"tierPro"},{key:"plus",labelKey:"tierPlus"},{key:"free",labelKey:"tierFree"},{key:"unknown",labelKey:"tierUnknown"}];function n(){let a,b=(0,e.useTranslations)("usage"),[c,m]=(0,f.useState)([]),[n,r]=(0,f.useState)({}),[s,t]=(0,f.useState)({}),[u,v]=(0,f.useState)({}),[w,x]=(0,f.useState)(()=>!1),[y,z]=(0,f.useState)(null),[A,B]=(0,f.useState)(!1),[C,D]=(0,f.useState)(120),[E,F]=(0,f.useState)(!0),[G,H]=(0,f.useState)("all"),[I,J]=(0,f.useState)(()=>"none"),[K,L]=(0,f.useState)(()=>new Set),M=(0,f.useRef)(null),N=(0,f.useRef)(null),O=(0,f.useRef)({}),P=(0,f.useRef)({}),Q=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/providers/client");if(!a.ok)throw Error("Failed");let b=(await a.json()).connections||[];return m(b),b}catch{return m([]),[]}},[]),R=(0,f.useCallback)(async(a,b,c={})=>{let d=c?.force===!0,e=Date.now(),f=O.current[a]||0;if(d||!(e-f<3e4)){O.current[a]=e,t(b=>({...b,[a]:!0})),v(b=>({...b,[a]:null}));try{let c=await fetch(`/api/usage/${a}`);if(!c.ok){let b=(await c.json().catch(()=>({}))).error||c.statusText;if(404===c.status)return;if(401===c.status)return void r(c=>({...c,[a]:{quotas:[],message:b}}));throw Error(`HTTP ${c.status}: ${b}`)}let d=await c.json(),e=(0,h.parseQuotaData)(b,d);if(e.some(a=>a?.staleAfterReset===!0)){let c=P.current[a]||0;Date.now()-c>=3e4&&(P.current[a]=Date.now(),setTimeout(()=>{R(a,b,{force:!0}).catch(()=>{})},5e3))}r(b=>({...b,[a]:{quotas:e,plan:d.plan||null,message:d.message||null,raw:d}}))}catch(b){v(c=>({...c,[a]:b.message||"Failed to fetch quota"}))}finally{t(b=>({...b,[a]:!1}))}}},[]),S=(0,f.useCallback)(async(a,b)=>{await R(a,b),z(new Date)},[R]),T=(0,f.useCallback)(async()=>{if(!A){B(!0),D(120);try{let a=(await Q()).filter(a=>l.USAGE_SUPPORTED_PROVIDERS.includes(a.provider)&&("oauth"===a.authType||"apikey"===a.authType));await Promise.all(a.map(a=>R(a.id,a.provider))),z(new Date)}catch(a){console.error("Error refreshing all:",a)}finally{B(!1)}}},[A,Q,R]);(0,f.useEffect)(()=>{(async()=>{F(!0),await T(),F(!1)})()},[]),(0,f.useEffect)(()=>{if(!w){M.current&&clearInterval(M.current),N.current&&clearInterval(N.current);return}return M.current=setInterval(T,12e4),N.current=setInterval(()=>{D(a=>a<=1?120:a-1)},1e3),()=>{M.current&&clearInterval(M.current),N.current&&clearInterval(N.current)}},[w,T]),(0,f.useEffect)(()=>{let a=()=>{document.hidden?(M.current&&clearInterval(M.current),N.current&&clearInterval(N.current)):w&&(M.current=setInterval(T,12e4),N.current=setInterval(()=>{D(a=>a<=1?120:a-1)},1e3))};return document.addEventListener("visibilitychange",a),()=>document.removeEventListener("visibilitychange",a)},[w,T]);let U=(0,f.useMemo)(()=>c.filter(a=>l.USAGE_SUPPORTED_PROVIDERS.includes(a.provider)&&("oauth"===a.authType||"apikey"===a.authType)),[c]),V=(0,f.useMemo)(()=>{let a={antigravity:1,github:2,codex:3,claude:4,kiro:5,glm:6,"kimi-coding":7};return[...U].sort((b,c)=>(a[b.provider]||9)-(a[c.provider]||9))},[U]),W=(0,f.useMemo)(()=>{let a={};for(let b of V)a[b.id]=(0,h.normalizePlanTier)(n[b.id]?.plan);return a},[V,n]),X=(0,f.useMemo)(()=>{let a={all:V.length,enterprise:0,team:0,business:0,ultra:0,pro:0,free:0,unknown:0};for(let b of V){let c=W[b.id]?.key||"unknown";a[c]=(a[c]||0)+1}return a},[V,W]),Y=(0,f.useMemo)(()=>"all"===G?V:V.filter(a=>(W[a.id]?.key||"unknown")===G),[V,W,G]),Z=(0,f.useMemo)(()=>{if("environment"!==I)return null;let a=new Map;for(let c of Y){let d=c.group||b("ungrouped");a.has(d)||a.set(d,[]),a.get(d).push(c)}return a},[I,Y,b]),$=a=>{J(a),localStorage.setItem("omniroute:limits:groupBy",a)};return((0,f.useEffect)(()=>{},[c]),(0,f.useEffect)(()=>{if("environment"===I&&Z&&0===K.size){let a=new Set([...Z.keys()]);L(a),localStorage.setItem(o,JSON.stringify([...a]))}},[I,Z]),E)?(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)(k.CardSkeleton,{}),(0,d.jsx)(k.CardSkeleton,{})]}):0===V.length?(0,d.jsx)(i.default,{padding:"lg",children:(0,d.jsxs)("div",{className:"text-center py-12",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[64px] opacity-15",children:"cloud_off"}),(0,d.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-main",children:b("noProviders")}),(0,d.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-[400px] mx-auto",children:b("connectProvidersForQuota")})]})}):(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between flex-wrap gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold text-text-main m-0",children:b("providerLimits")}),(0,d.jsxs)("span",{className:"text-[13px] text-text-muted",children:[b("accountsCount",{count:Y.length}),Y.length!==V.length&&` ${b("filteredFromCount",{count:V.length})}`]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex rounded-lg border border-white/[0.08] overflow-hidden",children:[(0,d.jsx)("button",{onClick:()=>$("none"),className:"px-2.5 py-1.5 text-[12px] font-medium cursor-pointer border-none",style:{background:"none"===I?"rgba(255,255,255,0.1)":"transparent",color:"none"===I?"var(--text-main)":"var(--text-muted)"},children:b("viewFlat")}),(0,d.jsx)("button",{onClick:()=>$("environment"),className:"px-2.5 py-1.5 text-[12px] font-medium cursor-pointer border-none border-l border-white/[0.08]",style:{background:"environment"===I?"rgba(255,255,255,0.1)":"transparent",color:"environment"===I?"var(--text-main)":"var(--text-muted)",borderLeft:"1px solid rgba(255,255,255,0.08)"},children:b("viewByEnvironment")})]}),(0,d.jsxs)("button",{onClick:()=>{let a=!w;x(a),localStorage.setItem("omniroute:limits:autoRefresh",String(a))},className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-white/[0.08] bg-transparent cursor-pointer text-text-main text-[13px]",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:w?"#22c55e":"var(--text-muted)"},children:w?"toggle_on":"toggle_off"}),b("autoRefresh"),w&&(0,d.jsxs)("span",{className:"text-xs text-text-muted",children:["(",C,"s)"]})]}),(0,d.jsxs)("button",{onClick:T,disabled:A,className:"flex items-center gap-1.5 px-3.5 py-1.5 rounded-lg bg-white/[0.06] border border-white/10 text-text-main text-[13px] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[16px] ${A?"animate-spin":""}`,children:"refresh"}),b("refreshAll")]})]})]}),(0,d.jsx)("div",{className:"flex items-center gap-2 flex-wrap",children:q.map(a=>{if("all"!==a.key&&!X[a.key])return null;let c=G===a.key;return(0,d.jsxs)("button",{onClick:()=>H(a.key),className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-semibold cursor-pointer",style:{border:c?"1px solid var(--primary, #E54D5E)":"1px solid rgba(255,255,255,0.12)",background:c?"rgba(249,120,21,0.14)":"transparent",color:c?"var(--primary, #E54D5E)":"var(--text-muted)"},children:[(0,d.jsx)("span",{children:b(a.labelKey)}),(0,d.jsx)("span",{className:"opacity-85",children:X[a.key]||0})]},a.key)})}),(0,d.jsxs)("div",{className:"rounded-xl border border-white/[0.06] overflow-hidden bg-black/15",children:[(0,d.jsxs)("div",{className:"items-center px-4 py-2.5 border-b border-white/[0.06] text-[11px] font-semibold uppercase tracking-wider text-text-muted",style:{display:"grid",gridTemplateColumns:"280px 1fr 100px 48px"},children:[(0,d.jsx)("div",{children:b("account")}),(0,d.jsx)("div",{children:b("modelQuotas")}),(0,d.jsx)("div",{className:"text-center",children:b("lastUsed")}),(0,d.jsx)("div",{className:"text-center",children:b("actions")})]}),(a=(a,c)=>{let e=n[a.id],f=s[a.id],i=u[a.id],k=p[a.provider]||{label:a.provider,color:"#666"},l=W[a.id]||(0,h.normalizePlanTier)(null);return(0,d.jsxs)("div",{className:"items-center px-4 py-3.5 transition-[background] duration-150 hover:bg-white/[0.02]",style:{display:"grid",gridTemplateColumns:"280px 1fr 100px 48px",borderBottom:c?"none":"1px solid rgba(255,255,255,0.04)"},children:[(0,d.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[(0,d.jsx)("div",{className:"w-8 h-8 rounded-lg flex items-center justify-center overflow-hidden shrink-0",children:(0,d.jsx)(g.default,{src:`/providers/${a.provider}.png`,alt:a.provider,width:32,height:32,className:"object-contain",sizes:"32px"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("div",{className:"text-[13px] font-semibold text-text-main truncate",children:a.name||k.label}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 mt-0.5",children:[(0,d.jsx)("span",{title:e?.plan?b("rawPlanWithValue",{plan:e.plan}):b("noPlanFromProvider"),children:(0,d.jsx)(j.default,{variant:l.variant,size:"sm",dot:!0,children:l.label})}),(0,d.jsx)("span",{className:"text-[11px] text-text-muted",children:k.label})]})]})]}),(0,d.jsx)("div",{className:"flex flex-wrap gap-x-3 gap-y-1.5 pr-3",children:f?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-text-muted text-xs",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[14px]",children:"progress_activity"}),b("loadingQuotas")]}):i?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-red-500",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{className:"overflow-hidden text-ellipsis whitespace-nowrap max-w-[300px]",children:i})]}):e?.message&&(!e.quotas||0===e.quotas.length)?(0,d.jsx)("div",{className:"text-xs text-text-muted italic",children:e.message}):e?.quotas?.length>0?e.quotas.map((a,b)=>{var c;let e=void 0!==a.remainingPercentage?Math.round(a.remainingPercentage):(0,h.calculatePercentage)(a.used,a.total),f=e>70?{bar:"#22c55e",text:"#22c55e",bg:"rgba(34,197,94,0.12)"}:e>=30?{bar:"#eab308",text:"#eab308",bg:"rgba(234,179,8,0.12)"}:{bar:"#ef4444",text:"#ef4444",bg:"rgba(239,68,68,0.12)"},g=function(a){if(!a)return null;try{let b=new Date(a)-new Date;if(b<=0)return null;let c=Math.floor(b/36e5),d=Math.floor(b%36e5/6e4);if(c>=24){let a=Math.floor(c/24);return`${a}d ${c%24}h`}return`${c}h ${d}m`}catch{return null}}(a.resetAt),i={"gemini-3-pro-high":"G3 Pro","gemini-3-pro-low":"G3 Pro Low","gemini-3-flash":"G3 Flash","gemini-2.5-flash":"G2.5 Flash","claude-opus-4-6-thinking":"Opus 4.6 Tk","claude-opus-4-5-thinking":"Opus 4.5 Tk","claude-opus-4-5":"Opus 4.5","claude-sonnet-4-5-thinking":"Sonnet 4.5 Tk","claude-sonnet-4-5":"Sonnet 4.5",chat:"Chat",completions:"Completions",premium_interactions:"Premium",session:"Session",weekly:"Weekly",agentic_request:"Agentic",agentic_request_freetrial:"Agentic (Trial)"}[c=a.name]||c,j=!0===a.staleAfterReset;return(0,d.jsxs)("div",{className:"flex items-center gap-1.5 min-w-[200px] shrink-0",children:[(0,d.jsx)("span",{className:"text-[11px] font-semibold py-0.5 px-2 rounded whitespace-nowrap min-w-[60px] text-center",style:{background:f.bg,color:f.text},children:i}),j?(0,d.jsx)("span",{className:"text-[10px] text-text-muted whitespace-nowrap",children:"⟳ Refreshing..."}):g?(0,d.jsxs)("span",{className:"text-[10px] text-text-muted whitespace-nowrap",children:["⏱ ",g]}):null,(0,d.jsx)("div",{className:"flex-1 h-1.5 rounded-sm bg-white/[0.06] min-w-[60px] overflow-hidden",children:(0,d.jsx)("div",{className:"h-full rounded-sm transition-[width] duration-300 ease-out",style:{width:`${Math.min(e,100)}%`,background:f.bar}})}),(0,d.jsxs)("span",{className:"text-[11px] font-semibold min-w-[32px] text-right",style:{color:f.text},children:[e,"%"]})]},b)}):(0,d.jsx)("div",{className:"text-xs text-text-muted italic",children:b("noQuotaData")})}),(0,d.jsx)("div",{className:"text-center text-[11px] text-text-muted",children:y?(0,d.jsx)("span",{children:y.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}):"-"}),(0,d.jsx)("div",{className:"flex justify-center gap-0.5",children:(0,d.jsx)("button",{onClick:()=>S(a.id,a.provider),disabled:f,title:b("refreshQuota"),className:"p-1 rounded-md border-none bg-transparent cursor-pointer disabled:cursor-not-allowed disabled:opacity-30 opacity-60 hover:opacity-100 flex items-center justify-center transition-opacity duration-150",children:(0,d.jsx)("span",{className:`material-symbols-outlined text-[16px] text-text-muted ${f?"animate-spin":""}`,children:"refresh"})})})]},a.id)},Z?[...Z.entries()].map(([b,c])=>(0,d.jsxs)("div",{className:"border border-white/[0.08] rounded-lg overflow-hidden mb-2",children:[(0,d.jsxs)("button",{onClick:()=>{L(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),localStorage.setItem(o,JSON.stringify([...c])),c})},className:"w-full flex items-center gap-2 px-4 py-2.5 bg-white/[0.03] hover:bg-white/[0.05] transition-colors text-left border-none cursor-pointer",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:K.has(b)?"expand_less":"expand_more"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:"folder"}),(0,d.jsx)("span",{className:"text-[12px] font-semibold text-text-main uppercase tracking-wider flex-1",children:b}),(0,d.jsx)("span",{className:"text-[11px] text-text-muted bg-white/[0.06] px-2 py-0.5 rounded-full",children:c.length})]}),K.has(b)&&(0,d.jsx)("div",{children:c.map((b,d)=>a(b,d===c.length-1))})]},b)):Y.map((b,c)=>a(b,c===Y.length-1))),0===Y.length&&(0,d.jsxs)("div",{className:"py-6 px-4 text-center text-text-muted text-[13px]",children:[b("noAccountsForTierFilter")," ",(0,d.jsx)("strong",{children:b(q.find(a=>a.key===G)?.labelKey||"tierUnknown")}),"."]})]})]})}a.s(["default",()=>n]),c()}catch(a){c(a)}},!1),250870,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(442308),h=a.i(292216),i=b([g]);function j(){let a=(0,e.useTranslations)("usage"),b=(0,e.useTranslations)("common"),[c,g]=(0,f.useState)({lockouts:[],cacheStats:null}),[i,j]=(0,f.useState)(!0),k=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/rate-limits");a.ok&&g(await a.json())}catch{}finally{j(!1)}},[]);return(0,f.useEffect)(()=>{k();let a=setInterval(k,1e4);return()=>clearInterval(a)},[k]),(0,d.jsx)("div",{className:"flex flex-col gap-4",children:(0,d.jsxs)(h.Card,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-orange-500/10 text-orange-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"lock_clock"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:a("modelLockouts")}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:a("lockoutsAutoRefreshHint")})]}),c.lockouts.length>0&&(0,d.jsx)("span",{className:"px-2.5 py-1 rounded-full text-xs font-semibold bg-orange-500/10 text-orange-400 border border-orange-500/20",children:a("lockedCount",{count:c.lockouts.length})})]}),0===c.lockouts.length?(0,d.jsxs)("div",{className:"text-center py-6 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[32px] mb-2 block opacity-40","aria-hidden":"true",children:"lock_open"}),(0,d.jsx)("p",{className:"text-sm",children:a("noLockouts")})]}):(0,d.jsx)("div",{className:"flex flex-col gap-2",children:c.lockouts.map((c,e)=>{var f;return(0,d.jsxs)("div",{className:"flex items-center justify-between px-3 py-2.5 rounded-lg bg-orange-500/5 border border-orange-500/15",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-orange-400","aria-hidden":"true",children:"lock"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:c.model}),(0,d.jsxs)("p",{className:"text-xs text-text-muted",children:[a("account"),":"," ",(0,d.jsx)("span",{className:"font-mono",children:c.accountId?.slice(0,12)||b("none")}),c.reason&&(0,d.jsxs)(d.Fragment,{children:[a("reasonSeparator"),c.reason]})]})]})]}),(0,d.jsx)("span",{className:"text-xs font-mono tabular-nums text-orange-400",children:a("timeLeft",{time:(f=c.remainingMs)<1e3?a("durationMillisecondsShort",{value:f}):f<6e4?a("durationSecondsShort",{value:Math.ceil(f/1e3)}):a("durationMinutesShort",{value:Math.ceil(f/6e4)})})})]},e)})})]})})}[g]=i.then?(await i)():i,a.s(["default",()=>j]),c()}catch(a){c(a)}},!1),265368,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(442308),h=a.i(292216),i=b([g]);function j(){let a=(0,e.useTranslations)("usage"),[b,c]=(0,f.useState)({count:0,sessions:[]}),[g,i]=(0,f.useState)(!0),j=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/sessions");a.ok&&c(await a.json())}catch{}finally{i(!1)}},[]);return(0,f.useEffect)(()=>{j();let a=setInterval(j,5e3);return()=>clearInterval(a)},[j]),(0,d.jsxs)(h.Card,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-5",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-cyan-500/10 text-cyan-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"fingerprint"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:a("activeSessions")}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:a("sessionsTrackedHint")})]}),(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("span",{className:"flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-cyan-500/10 border border-cyan-500/20",children:[(0,d.jsx)("span",{className:"w-2 h-2 rounded-full bg-cyan-500 animate-pulse"}),(0,d.jsx)("span",{className:"text-sm font-semibold tabular-nums text-cyan-400",children:b.count})]})})]}),0===b.sessions.length?(0,d.jsxs)("div",{className:"text-center py-8 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[40px] mb-2 block opacity-40","aria-hidden":"true",children:"fingerprint"}),(0,d.jsx)("p",{className:"text-sm",children:a("noSessions")}),(0,d.jsx)("p",{className:"text-xs mt-1",children:a("sessionsHint")})]}):(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border/30",children:[(0,d.jsx)("th",{className:"text-left py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("session")}),(0,d.jsx)("th",{className:"text-left py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("age")}),(0,d.jsx)("th",{className:"text-right py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("requests")}),(0,d.jsx)("th",{className:"text-left py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("connection")})]})}),(0,d.jsx)("tbody",{children:b.sessions.map(b=>{var c;return(0,d.jsxs)("tr",{className:"border-b border-border/10 hover:bg-surface/20 transition-colors",children:[(0,d.jsx)("td",{className:"py-2.5 px-3",children:(0,d.jsxs)("span",{className:"font-mono text-xs px-2 py-1 rounded bg-surface/40 text-text-muted",children:[b.sessionId.slice(0,12),"…"]})}),(0,d.jsx)("td",{className:"py-2.5 px-3 text-text-muted tabular-nums",children:(c=b.ageMs)<6e4?a("durationSecondsShort",{value:Math.floor(c/1e3)}):c<36e5?a("durationMinutesShort",{value:Math.floor(c/6e4)}):a("durationHoursShort",{value:Math.floor(c/36e5)})}),(0,d.jsx)("td",{className:"py-2.5 px-3 text-right",children:(0,d.jsx)("span",{className:"font-semibold tabular-nums",children:b.requestCount})}),(0,d.jsx)("td",{className:"py-2.5 px-3",children:b.connectionId?(0,d.jsx)("span",{className:"text-xs font-mono text-cyan-400",children:b.connectionId.slice(0,10)}):(0,d.jsx)("span",{className:"text-text-muted/40",children:a("notAvailableSymbol")})})]},b.sessionId)})})]})})]})}[g]=i.then?(await i)():i,a.s(["default",()=>j]),c()}catch(a){c(a)}},!1),876251,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(442308),g=a.i(831097),h=a.i(280382),i=a.i(250870),j=a.i(265368),k=b([f,h,i,j]);function l(){return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(e.Suspense,{fallback:(0,d.jsx)(g.CardSkeleton,{}),children:(0,d.jsx)(h.default,{})}),(0,d.jsx)(j.default,{}),(0,d.jsx)(i.default,{})]})}[f,h,i,j]=k.then?(await k)():k,a.s(["default",()=>l]),c()}catch(a){c(a)}},!1)];
1
+ module.exports=[604593,a=>{"use strict";var b=a.i(911655),c=a.i(745718);function d(a,b){return b&&0!==b?!a||a<0?100:a>=b?0:Math.round((b-a)/b*100):0}function e(a,b={},d={}){let f=Number(b?.used||0),g=Number(b?.total||0),h=b?.resetAt||null,i=function(a){if(!a)return!1;let b="number"==typeof a?a:"string"==typeof a?Date.parse(a):NaN;return!!Number.isFinite(b)&&Date.now()>=b}(h),j=i?0:f,k=Number.isFinite(g)?g:0,l=(0,c.safePercentage)(b?.remainingPercentage),m=i&&k>0?100:void 0!==l?l:void 0;return{name:a,used:Number.isFinite(j)?j:0,total:k,resetAt:h,staleAfterReset:i,...void 0!==m?{remainingPercentage:m}:{},...d}}function f(a,c){if(!c||"object"!=typeof c)return[];let d=[];try{switch(a.toLowerCase()){case"github":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{(!b?.unlimited||b?.total&&!(b.total<=0))&&d.push(e(a,b))});break;case"antigravity":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(b.displayName||a,b,{modelKey:a}))});break;case"codex":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))});break;case"kiro":c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))});break;case"claude":c.message?d.push({name:"error",used:0,total:0,resetAt:null,message:c.message}):c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))});break;default:c.quotas&&Object.entries(c.quotas).forEach(([a,b])=>{d.push(e(a,b))})}}catch(b){return console.error(`Error parsing quota data for ${a}:`,b),[]}let f=(0,b.getModelsByProviderId)(a);if(f.length>0){let a=new Map(f.map((a,b)=>[a.id,b]));d.sort((b,c)=>{let d=b.modelKey||b.name,e=c.modelKey||c.name;return(a.get(d)??999)-(a.get(e)??999)})}return d}function g(a){let b="string"==typeof a?a.trim():"";if(!b)return{key:"unknown",label:"Unknown",variant:"default",rank:0,raw:null};let c=b.toUpperCase();return"CLAUDE CODE"===c||"KIMI CODING"===c||"KIRO"===c?{key:"unknown",label:b,variant:"default",rank:0,raw:b}:c.includes("PRO+")||c.includes("PRO PLUS")||c.includes("PROPLUS")?{key:"plus",label:"Pro+",variant:"secondary",rank:4,raw:b}:c.includes("ENTERPRISE")||c.includes("CORP")||c.includes("ORG")?{key:"enterprise",label:"Enterprise",variant:"info",rank:7,raw:b}:c.includes("TEAM")||c.includes("CHATGPTTEAM")?{key:"team",label:"Team",variant:"info",rank:6,raw:b}:c.includes("BUSINESS")||c.includes("STANDARD")||c.includes("BIZ")?{key:"business",label:"Business",variant:"warning",rank:5,raw:b}:c.includes("STUDENT")?{key:"pro",label:"Student",variant:"primary",rank:3,raw:b}:c.includes("ULTRA")?{key:"ultra",label:"Ultra",variant:"success",rank:4,raw:b}:c.includes("PRO")||c.includes("PREMIUM")?{key:"pro",label:"Pro",variant:"primary",rank:3,raw:b}:c.includes("PLUS")||c.includes("PAID")?{key:"plus",label:"Plus",variant:"secondary",rank:2,raw:b}:c.includes("FREE")||c.includes("BASIC")||c.includes("TRIAL")||c.includes("LEGACY")?{key:"free",label:"Free",variant:"default",rank:1,raw:b}:{key:"unknown",label:b.toLowerCase().split(/[\s_-]+/).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||"Unknown",variant:"default",rank:0,raw:b}}a.s(["calculatePercentage",()=>d,"normalizePlanTier",()=>g,"parseQuotaData",()=>f])},280382,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(571987),h=a.i(604593),i=a.i(436595),j=a.i(497160),k=a.i(831097),l=a.i(662073),m=b([l]);[l]=m.then?(await m)():m;let o="omniroute:limits:expandedGroups",p={antigravity:{label:"Antigravity",color:"#F59E0B"},github:{label:"GitHub Copilot",color:"#333"},kiro:{label:"Kiro AI",color:"#FF6B35"},codex:{label:"OpenAI Codex",color:"#10A37F"},claude:{label:"Claude Code",color:"#D97757"},glm:{label:"GLM (Z.AI)",color:"#4A90D9"},"kimi-coding":{label:"Kimi Coding",color:"#1E3A8A"}},q=[{key:"all",labelKey:"tierAll"},{key:"enterprise",labelKey:"tierEnterprise"},{key:"team",labelKey:"tierTeam"},{key:"business",labelKey:"tierBusiness"},{key:"ultra",labelKey:"tierUltra"},{key:"pro",labelKey:"tierPro"},{key:"plus",labelKey:"tierPlus"},{key:"free",labelKey:"tierFree"},{key:"unknown",labelKey:"tierUnknown"}];function n(){let a,b=(0,e.useTranslations)("usage"),[c,m]=(0,f.useState)([]),[n,r]=(0,f.useState)({}),[s,t]=(0,f.useState)({}),[u,v]=(0,f.useState)({}),[w,x]=(0,f.useState)(()=>!1),[y,z]=(0,f.useState)(null),[A,B]=(0,f.useState)(!1),[C,D]=(0,f.useState)(120),[E,F]=(0,f.useState)(!0),[G,H]=(0,f.useState)("all"),[I,J]=(0,f.useState)(()=>"none"),[K,L]=(0,f.useState)(()=>new Set),M=(0,f.useRef)(null),N=(0,f.useRef)(null),O=(0,f.useRef)({}),P=(0,f.useRef)({}),Q=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/providers/client");if(!a.ok)throw Error("Failed");let b=(await a.json()).connections||[];return m(b),b}catch{return m([]),[]}},[]),R=(0,f.useCallback)(async(a,b,c={})=>{let d=c?.force===!0,e=Date.now(),f=O.current[a]||0;if(d||!(e-f<3e4)){O.current[a]=e,t(b=>({...b,[a]:!0})),v(b=>({...b,[a]:null}));try{let c=await fetch(`/api/usage/${a}`);if(!c.ok){let b=(await c.json().catch(()=>({}))).error||c.statusText;if(404===c.status)return;if(401===c.status)return void r(c=>({...c,[a]:{quotas:[],message:b}}));throw Error(`HTTP ${c.status}: ${b}`)}let d=await c.json(),e=(0,h.parseQuotaData)(b,d);if(e.some(a=>a?.staleAfterReset===!0)){let c=P.current[a]||0;Date.now()-c>=3e4&&(P.current[a]=Date.now(),setTimeout(()=>{R(a,b,{force:!0}).catch(()=>{})},5e3))}r(b=>({...b,[a]:{quotas:e,plan:d.plan||null,message:d.message||null,raw:d}}))}catch(b){v(c=>({...c,[a]:b.message||"Failed to fetch quota"}))}finally{t(b=>({...b,[a]:!1}))}}},[]),S=(0,f.useCallback)(async(a,b)=>{await R(a,b),z(new Date)},[R]),T=(0,f.useCallback)(async()=>{if(!A){B(!0),D(120);try{let a=(await Q()).filter(a=>l.USAGE_SUPPORTED_PROVIDERS.includes(a.provider)&&("oauth"===a.authType||"apikey"===a.authType));await Promise.all(a.map(a=>R(a.id,a.provider))),z(new Date)}catch(a){console.error("Error refreshing all:",a)}finally{B(!1)}}},[A,Q,R]);(0,f.useEffect)(()=>{(async()=>{F(!0),await T(),F(!1)})()},[]),(0,f.useEffect)(()=>{if(!w){M.current&&clearInterval(M.current),N.current&&clearInterval(N.current);return}return M.current=setInterval(T,12e4),N.current=setInterval(()=>{D(a=>a<=1?120:a-1)},1e3),()=>{M.current&&clearInterval(M.current),N.current&&clearInterval(N.current)}},[w,T]),(0,f.useEffect)(()=>{let a=()=>{document.hidden?(M.current&&clearInterval(M.current),N.current&&clearInterval(N.current)):w&&(M.current=setInterval(T,12e4),N.current=setInterval(()=>{D(a=>a<=1?120:a-1)},1e3))};return document.addEventListener("visibilitychange",a),()=>document.removeEventListener("visibilitychange",a)},[w,T]);let U=(0,f.useMemo)(()=>c.filter(a=>l.USAGE_SUPPORTED_PROVIDERS.includes(a.provider)&&("oauth"===a.authType||"apikey"===a.authType)),[c]),V=(0,f.useMemo)(()=>{let a={antigravity:1,github:2,codex:3,claude:4,kiro:5,glm:6,"kimi-coding":7};return[...U].sort((b,c)=>(a[b.provider]||9)-(a[c.provider]||9))},[U]),W=(0,f.useMemo)(()=>{let a={};for(let b of V)a[b.id]=(0,h.normalizePlanTier)(n[b.id]?.plan);return a},[V,n]),X=(0,f.useMemo)(()=>{let a={all:V.length,enterprise:0,team:0,business:0,ultra:0,pro:0,free:0,unknown:0};for(let b of V){let c=W[b.id]?.key||"unknown";a[c]=(a[c]||0)+1}return a},[V,W]),Y=(0,f.useMemo)(()=>"all"===G?V:V.filter(a=>(W[a.id]?.key||"unknown")===G),[V,W,G]),Z=(0,f.useMemo)(()=>{if("environment"!==I)return null;let a=new Map;for(let c of Y){let d=c.group||b("ungrouped");a.has(d)||a.set(d,[]),a.get(d).push(c)}return a},[I,Y,b]),$=a=>{J(a),localStorage.setItem("omniroute:limits:groupBy",a)};return((0,f.useEffect)(()=>{},[c]),(0,f.useEffect)(()=>{if("environment"===I&&Z&&0===K.size){let a=new Set([...Z.keys()]);L(a),localStorage.setItem(o,JSON.stringify([...a]))}},[I,Z]),E)?(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)(k.CardSkeleton,{}),(0,d.jsx)(k.CardSkeleton,{})]}):0===V.length?(0,d.jsx)(i.default,{padding:"lg",children:(0,d.jsxs)("div",{className:"text-center py-12",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[64px] opacity-15",children:"cloud_off"}),(0,d.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-main",children:b("noProviders")}),(0,d.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-[400px] mx-auto",children:b("connectProvidersForQuota")})]})}):(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between flex-wrap gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold text-text-main m-0",children:b("providerLimits")}),(0,d.jsxs)("span",{className:"text-[13px] text-text-muted",children:[b("accountsCount",{count:Y.length}),Y.length!==V.length&&` ${b("filteredFromCount",{count:V.length})}`]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex rounded-lg border border-border overflow-hidden",children:[(0,d.jsx)("button",{onClick:()=>$("none"),className:"px-2.5 py-1.5 text-[12px] font-medium cursor-pointer border-none",style:{background:"none"===I?"var(--color-bg-subtle)":"transparent",color:"none"===I?"var(--color-text-main)":"var(--color-text-muted)"},children:b("viewFlat")}),(0,d.jsx)("button",{onClick:()=>$("environment"),className:"px-2.5 py-1.5 text-[12px] font-medium cursor-pointer border-none",style:{background:"environment"===I?"var(--color-bg-subtle)":"transparent",color:"environment"===I?"var(--color-text-main)":"var(--color-text-muted)",borderLeft:"1px solid var(--color-border)"},children:b("viewByEnvironment")})]}),(0,d.jsxs)("button",{onClick:()=>{let a=!w;x(a),localStorage.setItem("omniroute:limits:autoRefresh",String(a))},className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-border bg-transparent cursor-pointer text-text-main text-[13px]",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",style:{color:w?"#22c55e":"var(--text-muted)"},children:w?"toggle_on":"toggle_off"}),b("autoRefresh"),w&&(0,d.jsxs)("span",{className:"text-xs text-text-muted",children:["(",C,"s)"]})]}),(0,d.jsxs)("button",{onClick:T,disabled:A,className:"flex items-center gap-1.5 px-3.5 py-1.5 rounded-lg bg-bg-subtle border border-border text-text-main text-[13px] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[16px] ${A?"animate-spin":""}`,children:"refresh"}),b("refreshAll")]})]})]}),(0,d.jsx)("div",{className:"flex items-center gap-2 flex-wrap",children:q.map(a=>{if("all"!==a.key&&!X[a.key])return null;let c=G===a.key;return(0,d.jsxs)("button",{onClick:()=>H(a.key),className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-semibold cursor-pointer",style:{border:c?"1px solid var(--color-primary, #E54D5E)":"1px solid var(--color-border)",background:c?"rgba(229,77,94,0.1)":"transparent",color:c?"var(--color-primary, #E54D5E)":"var(--color-text-muted)"},children:[(0,d.jsx)("span",{children:b(a.labelKey)}),(0,d.jsx)("span",{className:"opacity-85",children:X[a.key]||0})]},a.key)})}),(0,d.jsxs)("div",{className:"rounded-xl border border-border overflow-hidden bg-bg-subtle",children:[(0,d.jsxs)("div",{className:"items-center px-4 py-2.5 border-b border-border text-[11px] font-semibold uppercase tracking-wider text-text-muted",style:{display:"grid",gridTemplateColumns:"280px 1fr 100px 48px"},children:[(0,d.jsx)("div",{children:b("account")}),(0,d.jsx)("div",{children:b("modelQuotas")}),(0,d.jsx)("div",{className:"text-center",children:b("lastUsed")}),(0,d.jsx)("div",{className:"text-center",children:b("actions")})]}),(a=(a,c)=>{let e=n[a.id],f=s[a.id],i=u[a.id],k=p[a.provider]||{label:a.provider,color:"#666"},l=W[a.id]||(0,h.normalizePlanTier)(null);return(0,d.jsxs)("div",{className:"items-center px-4 py-3.5 transition-[background] duration-150 hover:bg-black/[0.03] dark:hover:bg-white/[0.02]",style:{display:"grid",gridTemplateColumns:"280px 1fr 100px 48px",borderBottom:c?"none":"1px solid var(--color-border)"},children:[(0,d.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[(0,d.jsx)("div",{className:"w-8 h-8 rounded-lg flex items-center justify-center overflow-hidden shrink-0",children:(0,d.jsx)(g.default,{src:`/providers/${a.provider}.png`,alt:a.provider,width:32,height:32,className:"object-contain",sizes:"32px"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("div",{className:"text-[13px] font-semibold text-text-main truncate",children:a.name||k.label}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 mt-0.5",children:[(0,d.jsx)("span",{title:e?.plan?b("rawPlanWithValue",{plan:e.plan}):b("noPlanFromProvider"),children:(0,d.jsx)(j.default,{variant:l.variant,size:"sm",dot:!0,children:l.label})}),(0,d.jsx)("span",{className:"text-[11px] text-text-muted",children:k.label})]})]})]}),(0,d.jsx)("div",{className:"flex flex-wrap gap-x-3 gap-y-1.5 pr-3",children:f?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-text-muted text-xs",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-[14px]",children:"progress_activity"}),b("loadingQuotas")]}):i?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-red-500",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{className:"overflow-hidden text-ellipsis whitespace-nowrap max-w-[300px]",children:i})]}):e?.message&&(!e.quotas||0===e.quotas.length)?(0,d.jsx)("div",{className:"text-xs text-text-muted italic",children:e.message}):e?.quotas?.length>0?e.quotas.map((a,b)=>{var c;let e=void 0!==a.remainingPercentage?Math.round(a.remainingPercentage):(0,h.calculatePercentage)(a.used,a.total),f=e>70?{bar:"#22c55e",text:"#22c55e",bg:"rgba(34,197,94,0.12)"}:e>=30?{bar:"#eab308",text:"#eab308",bg:"rgba(234,179,8,0.12)"}:{bar:"#ef4444",text:"#ef4444",bg:"rgba(239,68,68,0.12)"},g=function(a){if(!a)return null;try{let b=new Date(a)-new Date;if(b<=0)return null;let c=Math.floor(b/36e5),d=Math.floor(b%36e5/6e4);if(c>=24){let a=Math.floor(c/24);return`${a}d ${c%24}h`}return`${c}h ${d}m`}catch{return null}}(a.resetAt),i={"gemini-3-pro-high":"G3 Pro","gemini-3-pro-low":"G3 Pro Low","gemini-3-flash":"G3 Flash","gemini-2.5-flash":"G2.5 Flash","claude-opus-4-6-thinking":"Opus 4.6 Tk","claude-opus-4-5-thinking":"Opus 4.5 Tk","claude-opus-4-5":"Opus 4.5","claude-sonnet-4-5-thinking":"Sonnet 4.5 Tk","claude-sonnet-4-5":"Sonnet 4.5",chat:"Chat",completions:"Completions",premium_interactions:"Premium",session:"Session",weekly:"Weekly",agentic_request:"Agentic",agentic_request_freetrial:"Agentic (Trial)"}[c=a.name]||c,j=!0===a.staleAfterReset;return(0,d.jsxs)("div",{className:"flex items-center gap-1.5 min-w-[200px] shrink-0",children:[(0,d.jsx)("span",{className:"text-[11px] font-semibold py-0.5 px-2 rounded whitespace-nowrap min-w-[60px] text-center",style:{background:f.bg,color:f.text},children:i}),j?(0,d.jsx)("span",{className:"text-[10px] text-text-muted whitespace-nowrap",children:"⟳ Refreshing..."}):g?(0,d.jsxs)("span",{className:"text-[10px] text-text-muted whitespace-nowrap",children:["⏱ ",g]}):null,(0,d.jsx)("div",{className:"flex-1 h-1.5 rounded-sm bg-black/[0.06] dark:bg-white/[0.06] min-w-[60px] overflow-hidden",children:(0,d.jsx)("div",{className:"h-full rounded-sm transition-[width] duration-300 ease-out",style:{width:`${Math.min(e,100)}%`,background:f.bar}})}),(0,d.jsxs)("span",{className:"text-[11px] font-semibold min-w-[32px] text-right",style:{color:f.text},children:[e,"%"]})]},b)}):(0,d.jsx)("div",{className:"text-xs text-text-muted italic",children:b("noQuotaData")})}),(0,d.jsx)("div",{className:"text-center text-[11px] text-text-muted",children:y?(0,d.jsx)("span",{children:y.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}):"-"}),(0,d.jsx)("div",{className:"flex justify-center gap-0.5",children:(0,d.jsx)("button",{onClick:()=>S(a.id,a.provider),disabled:f,title:b("refreshQuota"),className:"p-1 rounded-md border-none bg-transparent cursor-pointer disabled:cursor-not-allowed disabled:opacity-30 opacity-60 hover:opacity-100 flex items-center justify-center transition-opacity duration-150",children:(0,d.jsx)("span",{className:`material-symbols-outlined text-[16px] text-text-muted ${f?"animate-spin":""}`,children:"refresh"})})})]},a.id)},Z?[...Z.entries()].map(([b,c])=>(0,d.jsxs)("div",{className:"border border-border rounded-lg overflow-hidden mb-2",children:[(0,d.jsxs)("button",{onClick:()=>{L(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),localStorage.setItem(o,JSON.stringify([...c])),c})},className:"w-full flex items-center gap-2 px-4 py-2.5 bg-bg-subtle hover:bg-black/[0.04] dark:hover:bg-white/[0.05] transition-colors text-left border-none cursor-pointer",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:K.has(b)?"expand_less":"expand_more"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted",children:"folder"}),(0,d.jsx)("span",{className:"text-[12px] font-semibold text-text-main uppercase tracking-wider flex-1",children:b}),(0,d.jsx)("span",{className:"text-[11px] text-text-muted bg-black/[0.04] dark:bg-white/[0.06] px-2 py-0.5 rounded-full",children:c.length})]}),K.has(b)&&(0,d.jsx)("div",{children:c.map((b,d)=>a(b,d===c.length-1))})]},b)):Y.map((b,c)=>a(b,c===Y.length-1))),0===Y.length&&(0,d.jsxs)("div",{className:"py-6 px-4 text-center text-text-muted text-[13px]",children:[b("noAccountsForTierFilter")," ",(0,d.jsx)("strong",{children:b(q.find(a=>a.key===G)?.labelKey||"tierUnknown")}),"."]})]})]})}a.s(["default",()=>n]),c()}catch(a){c(a)}},!1),250870,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(442308),h=a.i(292216),i=b([g]);function j(){let a=(0,e.useTranslations)("usage"),b=(0,e.useTranslations)("common"),[c,g]=(0,f.useState)({lockouts:[],cacheStats:null}),[i,j]=(0,f.useState)(!0),k=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/rate-limits");a.ok&&g(await a.json())}catch{}finally{j(!1)}},[]);return(0,f.useEffect)(()=>{k();let a=setInterval(k,1e4);return()=>clearInterval(a)},[k]),(0,d.jsx)("div",{className:"flex flex-col gap-4",children:(0,d.jsxs)(h.Card,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-orange-500/10 text-orange-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"lock_clock"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:a("modelLockouts")}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:a("lockoutsAutoRefreshHint")})]}),c.lockouts.length>0&&(0,d.jsx)("span",{className:"px-2.5 py-1 rounded-full text-xs font-semibold bg-orange-500/10 text-orange-400 border border-orange-500/20",children:a("lockedCount",{count:c.lockouts.length})})]}),0===c.lockouts.length?(0,d.jsxs)("div",{className:"text-center py-6 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[32px] mb-2 block opacity-40","aria-hidden":"true",children:"lock_open"}),(0,d.jsx)("p",{className:"text-sm",children:a("noLockouts")})]}):(0,d.jsx)("div",{className:"flex flex-col gap-2",children:c.lockouts.map((c,e)=>{var f;return(0,d.jsxs)("div",{className:"flex items-center justify-between px-3 py-2.5 rounded-lg bg-orange-500/5 border border-orange-500/15",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px] text-orange-400","aria-hidden":"true",children:"lock"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:c.model}),(0,d.jsxs)("p",{className:"text-xs text-text-muted",children:[a("account"),":"," ",(0,d.jsx)("span",{className:"font-mono",children:c.accountId?.slice(0,12)||b("none")}),c.reason&&(0,d.jsxs)(d.Fragment,{children:[a("reasonSeparator"),c.reason]})]})]})]}),(0,d.jsx)("span",{className:"text-xs font-mono tabular-nums text-orange-400",children:a("timeLeft",{time:(f=c.remainingMs)<1e3?a("durationMillisecondsShort",{value:f}):f<6e4?a("durationSecondsShort",{value:Math.ceil(f/1e3)}):a("durationMinutesShort",{value:Math.ceil(f/6e4)})})})]},e)})})]})})}[g]=i.then?(await i)():i,a.s(["default",()=>j]),c()}catch(a){c(a)}},!1),265368,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(415925),f=a.i(572131),g=a.i(442308),h=a.i(292216),i=b([g]);function j(){let a=(0,e.useTranslations)("usage"),[b,c]=(0,f.useState)({count:0,sessions:[]}),[g,i]=(0,f.useState)(!0),j=(0,f.useCallback)(async()=>{try{let a=await fetch("/api/sessions");a.ok&&c(await a.json())}catch{}finally{i(!1)}},[]);return(0,f.useEffect)(()=>{j();let a=setInterval(j,5e3);return()=>clearInterval(a)},[j]),(0,d.jsxs)(h.Card,{children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 mb-5",children:[(0,d.jsx)("div",{className:"p-2 rounded-lg bg-cyan-500/10 text-cyan-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"fingerprint"})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:a("activeSessions")}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:a("sessionsTrackedHint")})]}),(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("span",{className:"flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-cyan-500/10 border border-cyan-500/20",children:[(0,d.jsx)("span",{className:"w-2 h-2 rounded-full bg-cyan-500 animate-pulse"}),(0,d.jsx)("span",{className:"text-sm font-semibold tabular-nums text-cyan-400",children:b.count})]})})]}),0===b.sessions.length?(0,d.jsxs)("div",{className:"text-center py-8 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[40px] mb-2 block opacity-40","aria-hidden":"true",children:"fingerprint"}),(0,d.jsx)("p",{className:"text-sm",children:a("noSessions")}),(0,d.jsx)("p",{className:"text-xs mt-1",children:a("sessionsHint")})]}):(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border/30",children:[(0,d.jsx)("th",{className:"text-left py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("session")}),(0,d.jsx)("th",{className:"text-left py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("age")}),(0,d.jsx)("th",{className:"text-right py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("requests")}),(0,d.jsx)("th",{className:"text-left py-2 px-3 text-xs font-semibold text-text-muted uppercase tracking-wider",children:a("connection")})]})}),(0,d.jsx)("tbody",{children:b.sessions.map(b=>{var c;return(0,d.jsxs)("tr",{className:"border-b border-border/10 hover:bg-surface/20 transition-colors",children:[(0,d.jsx)("td",{className:"py-2.5 px-3",children:(0,d.jsxs)("span",{className:"font-mono text-xs px-2 py-1 rounded bg-surface/40 text-text-muted",children:[b.sessionId.slice(0,12),"…"]})}),(0,d.jsx)("td",{className:"py-2.5 px-3 text-text-muted tabular-nums",children:(c=b.ageMs)<6e4?a("durationSecondsShort",{value:Math.floor(c/1e3)}):c<36e5?a("durationMinutesShort",{value:Math.floor(c/6e4)}):a("durationHoursShort",{value:Math.floor(c/36e5)})}),(0,d.jsx)("td",{className:"py-2.5 px-3 text-right",children:(0,d.jsx)("span",{className:"font-semibold tabular-nums",children:b.requestCount})}),(0,d.jsx)("td",{className:"py-2.5 px-3",children:b.connectionId?(0,d.jsx)("span",{className:"text-xs font-mono text-cyan-400",children:b.connectionId.slice(0,10)}):(0,d.jsx)("span",{className:"text-text-muted/40",children:a("notAvailableSymbol")})})]},b.sessionId)})})]})})]})}[g]=i.then?(await i)():i,a.s(["default",()=>j]),c()}catch(a){c(a)}},!1),876251,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(442308),g=a.i(831097),h=a.i(280382),i=a.i(250870),j=a.i(265368),k=b([f,h,i,j]);function l(){return(0,d.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,d.jsx)(e.Suspense,{fallback:(0,d.jsx)(g.CardSkeleton,{}),children:(0,d.jsx)(h.default,{})}),(0,d.jsx)(j.default,{}),(0,d.jsx)(i.default,{})]})}[f,h,i,j]=k.then?(await k)():k,a.s(["default",()=>l]),c()}catch(a){c(a)}},!1)];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28dashboard%29_dashboard_936a9ee0._.js.map