ktrouter 1.0.6 → 1.0.8

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 (282) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +2 -2
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/_global-error.html +1 -1
  28. package/app/.next/server/app/_global-error.rsc +1 -1
  29. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  30. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  31. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  32. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  33. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  34. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  35. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/_not-found.html +1 -1
  37. package/app/.next/server/app/_not-found.rsc +3 -3
  38. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  39. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  40. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  41. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  42. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  43. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  44. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  45. package/app/.next/server/app/api/models/route.js +1 -1
  46. package/app/.next/server/app/api/models/test/route.js +1 -1
  47. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  48. package/app/.next/server/app/api/providers/route.js +1 -1
  49. package/app/.next/server/app/api/settings/route.js +1 -1
  50. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  51. package/app/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
  52. package/app/.next/server/app/api/update/check/route.js +1 -1
  53. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  54. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  55. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/callback.html +1 -1
  57. package/app/.next/server/app/callback.rsc +3 -3
  58. package/app/.next/server/app/callback.segments/_full.segment.rsc +3 -3
  59. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  60. package/app/.next/server/app/callback.segments/_index.segment.rsc +3 -3
  61. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  62. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  63. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  64. package/app/.next/server/app/dashboard/basic-chat.html +1 -1
  65. package/app/.next/server/app/dashboard/basic-chat.rsc +5 -5
  66. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  67. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  68. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  69. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  70. package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  71. package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  72. package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  73. package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  74. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  75. package/app/.next/server/app/dashboard/cli-tools.rsc +5 -5
  76. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  77. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  78. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  79. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  80. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  81. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  82. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  83. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  84. package/app/.next/server/app/dashboard/combos.html +1 -1
  85. package/app/.next/server/app/dashboard/combos.rsc +5 -5
  86. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  87. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  88. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  89. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  90. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  91. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  92. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  93. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  94. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  95. package/app/.next/server/app/dashboard/endpoint.rsc +5 -5
  96. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  97. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  98. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  99. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  100. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  101. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  102. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  103. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  104. package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
  105. package/app/.next/server/app/dashboard/media-providers/web.rsc +5 -5
  106. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  107. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  108. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  109. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  110. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  111. package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  112. package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  113. package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  114. package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  115. package/app/.next/server/app/dashboard/mitm.html +1 -1
  116. package/app/.next/server/app/dashboard/mitm.rsc +5 -5
  117. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  118. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  119. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  120. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  121. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  122. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  123. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  124. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  125. package/app/.next/server/app/dashboard/profile.html +1 -1
  126. package/app/.next/server/app/dashboard/profile.rsc +5 -5
  127. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  128. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  129. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  130. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  131. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  132. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  133. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  134. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  135. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  136. package/app/.next/server/app/dashboard/providers/new.rsc +5 -5
  137. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  138. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  139. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  140. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  141. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  142. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  143. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  144. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  145. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  146. package/app/.next/server/app/dashboard/providers.html +1 -1
  147. package/app/.next/server/app/dashboard/providers.rsc +5 -5
  148. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  149. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  150. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  151. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  152. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  153. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  154. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  155. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  156. package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
  157. package/app/.next/server/app/dashboard/proxy-pools.rsc +5 -5
  158. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  159. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  160. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  161. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  162. package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  163. package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  164. package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  165. package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  166. package/app/.next/server/app/dashboard/quota.html +2 -2
  167. package/app/.next/server/app/dashboard/quota.rsc +6 -6
  168. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  169. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  170. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  171. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  172. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  173. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  174. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  175. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  176. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  178. package/app/.next/server/app/dashboard/settings/pricing.rsc +3 -3
  179. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  180. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  181. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  182. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  183. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  184. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  185. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  186. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  187. package/app/.next/server/app/dashboard/skills.html +1 -1
  188. package/app/.next/server/app/dashboard/skills.rsc +5 -5
  189. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  190. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  191. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  192. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  193. package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +5 -5
  194. package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  195. package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +3 -3
  196. package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  197. package/app/.next/server/app/dashboard/translator.html +1 -1
  198. package/app/.next/server/app/dashboard/translator.rsc +5 -5
  199. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  200. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  201. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  202. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  203. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  204. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  205. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  206. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  207. package/app/.next/server/app/dashboard/usage.html +1 -1
  208. package/app/.next/server/app/dashboard/usage.rsc +5 -5
  209. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  210. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  211. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  212. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  213. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  214. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  215. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  216. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  217. package/app/.next/server/app/dashboard.html +1 -1
  218. package/app/.next/server/app/dashboard.rsc +5 -5
  219. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  220. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  221. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  222. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
  223. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  224. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
  225. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  226. package/app/.next/server/app/index.html +1 -1
  227. package/app/.next/server/app/index.rsc +3 -3
  228. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  229. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  230. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  231. package/app/.next/server/app/index.segments/_index.segment.rsc +3 -3
  232. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  233. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  234. package/app/.next/server/app/landing.html +1 -1
  235. package/app/.next/server/app/landing.rsc +3 -3
  236. package/app/.next/server/app/landing.segments/_full.segment.rsc +3 -3
  237. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  238. package/app/.next/server/app/landing.segments/_index.segment.rsc +3 -3
  239. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  240. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  241. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  242. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  243. package/app/.next/server/app/login.html +1 -1
  244. package/app/.next/server/app/login.rsc +4 -4
  245. package/app/.next/server/app/login.segments/_full.segment.rsc +4 -4
  246. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  247. package/app/.next/server/app/login.segments/_index.segment.rsc +3 -3
  248. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  249. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  250. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  251. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  252. package/app/.next/server/app-paths-manifest.json +2 -2
  253. package/app/.next/server/chunks/2722.js +1 -1
  254. package/app/.next/server/chunks/3110.js +1 -1
  255. package/app/.next/server/chunks/4315.js +1 -1
  256. package/app/.next/server/chunks/4632.js +1 -1
  257. package/app/.next/server/chunks/4746.js +1 -1
  258. package/app/.next/server/chunks/5718.js +6 -4
  259. package/app/.next/server/chunks/7153.js +1 -1
  260. package/app/.next/server/chunks/8895.js +1 -1
  261. package/app/.next/server/chunks/9142.js +1 -1
  262. package/app/.next/server/chunks/9609.js +1 -1
  263. package/app/.next/server/middleware-build-manifest.js +1 -1
  264. package/app/.next/server/pages/404.html +1 -1
  265. package/app/.next/server/pages/500.html +1 -1
  266. package/app/.next/static/chunks/{1321-052f0a2e4288207e.js → 1321-41debb4229f6b035.js} +1 -1
  267. package/app/{.next-cli-build/static/chunks/6069-04005e2b3cb91558.js → .next/static/chunks/6069-0119c69cf786aea4.js} +1 -1
  268. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-fd3343e5e62687cc.js +1 -0
  269. package/app/.next-cli-build/static/chunks/{1321-052f0a2e4288207e.js → 1321-41debb4229f6b035.js} +1 -1
  270. package/app/{.next/static/chunks/6069-04005e2b3cb91558.js → .next-cli-build/static/chunks/6069-0119c69cf786aea4.js} +1 -1
  271. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-fd3343e5e62687cc.js +1 -0
  272. package/app/package.json +1 -1
  273. package/app/src/mitm/server.js +36 -24
  274. package/package.json +1 -1
  275. package/src/cli/tray/icon.ico +0 -0
  276. package/src/cli/tray/icon.png +0 -0
  277. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-7ef54d2cf4eee7d0.js +0 -1
  278. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-7ef54d2cf4eee7d0.js +0 -1
  279. /package/app/.next/static/{r-S_1hWow1yeDi0LvTwjb → QiiddB57oDLTRJaggCbYo}/_buildManifest.js +0 -0
  280. /package/app/.next/static/{r-S_1hWow1yeDi0LvTwjb → QiiddB57oDLTRJaggCbYo}/_ssgManifest.js +0 -0
  281. /package/app/.next-cli-build/static/{r-S_1hWow1yeDi0LvTwjb → QiiddB57oDLTRJaggCbYo}/_buildManifest.js +0 -0
  282. /package/app/.next-cli-build/static/{r-S_1hWow1yeDi0LvTwjb → QiiddB57oDLTRJaggCbYo}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ktrouter",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "KTRouter CLI - AI proxy router with web dashboard",
5
5
  "bin": {
6
6
  "ktrouter": "./cli.js"
Binary file
Binary file
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{75095:(e,t,r)=>{"use strict";r.d(t,{default:()=>b});var s=r(95155),a=r(12115),i=r(57250),l=r(45564);let n=new Map([["gemini-default","gemini-3.5-flash-high"],["gemini-3-flash-agent","gemini-3.5-flash-high"],["gemini-3.5-flash","gemini-3.5-flash-high"],["gemini-3.5-flash-high","gemini-3.5-flash-high"],["gemini-3-flash","gemini-3.5-flash-medium"],["gemini-3.0-flash","gemini-3.5-flash-medium"],["gemini-3.5-flash-low","gemini-3.5-flash-medium"],["gemini-3.5-flash-medium","gemini-3.5-flash-medium"],["gemini-pro-agent","gemini-3.1-pro-high"],["gemini-3.1-pro","gemini-3.1-pro-high"],["gemini-3-pro","gemini-3.1-pro-high"],["gemini-3.1-pro-high","gemini-3.1-pro-high"],["gemini-3.1-pro-low","gemini-3.1-pro-low"],["claude-sonnet-4-6","claude-sonnet-4-6-thinking"],["claude-sonnet-4-6-thinking","claude-sonnet-4-6-thinking"],["claude-opus-4-6","claude-opus-4-6-thinking"],["claude-opus-4-6-thinking","claude-opus-4-6-thinking"],["gpt-oss-120b","gpt-oss-120b-medium"],["gpt-oss-120b-medium","gpt-oss-120b-medium"]]),o={"gemini-3.5-flash-high":"Gemini 3.5 Flash (High)","gemini-3.5-flash-medium":"Gemini 3.5 Flash (Medium)","gemini-3.1-pro-high":"Gemini 3.1 Pro (High)","gemini-3.1-pro-low":"Gemini 3.1 Pro (Low)","claude-sonnet-4-6-thinking":"Claude Sonnet 4.6 (Thinking)","claude-opus-4-6-thinking":"Claude Opus 4.6 (Thinking)","gpt-oss-120b-medium":"GPT-OSS 120B (Medium)"};function c(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function d({quotas:e=[],compact:t=!1}){if(!e||0===e.length)return null;let r=t?"py-1 px-1.5":"py-2 px-3",a=t?"text-[11px]":"text-sm",i=t?"text-[11px]":"text-sm",l=t?"text-[10px] leading-tight":"text-xs";return(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsx)("table",{className:"w-full table-fixed text-left",children:(0,s.jsx)("tbody",{children:e.map((e,n)=>{let o=void 0!==e.remainingPercentage?Math.round(e.remainingPercentage):c(e.used,e.total),d=o>70?{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"}:o>=30?{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"}:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"},m=function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,r=new Date,s=t-r;if(s<=0)return"-";let a=Math.ceil(s/6e4);if(a<60)return`${a}m`;let i=Math.floor(a/60),l=a%60;if(i<24)return`${i}h ${l}m`;let n=Math.floor(i/24);return`${n}d ${i%24}h ${l}m`}catch(e){return"-"}}(e.resetAt),u=function(e){if(!e)return null;try{let t=new Date(e),r=new Date,s=new Date(r.getFullYear(),r.getMonth(),r.getDate()),a=new Date(s);a.setDate(a.getDate()+1);let i="";i=t>=s&&t<a?"Today":t>=a&&t<new Date(a.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let l=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${i}, ${l}`}catch{return null}}(e.resetAt);return(0,s.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors",children:[(0,s.jsx)("td",{className:`${r} w-[30%]`,children:(0,s.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,s.jsx)("span",{className:"text-[10px] shrink-0",children:d.emoji}),(0,s.jsx)("span",{className:`${a} font-medium text-text-primary truncate`,children:e.name})]})}),(0,s.jsx)("td",{className:`${r} w-[45%]`,children:(0,s.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[(0,s.jsx)("div",{className:`${t?"h-1":"h-1.5"} rounded-full overflow-hidden border ${d.bgLight} ${0===o?"border-black/10 dark:border-white/10":"border-transparent"}`,children:(0,s.jsx)("div",{className:`h-full transition-all duration-300 ${d.bg}`,style:{width:`${Math.min(o,100)}%`}})}),(0,s.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,s.jsxs)("span",{className:"text-text-muted",children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]}),(0,s.jsxs)("span",{className:`font-medium ${d.text}`,children:[o,"%"]})]})]})}),(0,s.jsx)("td",{className:`${r} w-[25%]`,children:"-"!==m||u?t?(0,s.jsx)("div",{className:`${i} text-text-primary font-medium truncate`,title:u||"",children:"-"!==m?`in ${m}`:u}):(0,s.jsxs)("div",{className:"space-y-0.5",children:["-"!==m&&(0,s.jsxs)("div",{className:`${i} text-text-primary font-medium`,children:["in ",m]}),u&&(0,s.jsx)("div",{className:`${l} text-text-muted`,children:u})]}):(0,s.jsx)("div",{className:`${i} text-text-muted italic`,children:"N/A"})})]},n)})})})})}var m=r(98542),u=r(84588),h=r(35497),x=r(52679);let p=e=>x.wb.includes(e.provider)&&("oauth"===e.authType||x.jO.includes(e.provider)),g="quotaAutoRefresh";function b(){let[e,t]=(0,a.useState)([]),[r,b]=(0,a.useState)({}),[f,y]=(0,a.useState)({}),[v,j]=(0,a.useState)({}),[w,k]=(0,a.useState)(()=>{let e=window.localStorage.getItem(g);return null===e||"true"===e}),[N,$]=(0,a.useState)(null),[C,S]=(0,a.useState)(!1),[E,A]=(0,a.useState)(60),[q,P]=(0,a.useState)(!0),[T,D]=(0,a.useState)(null),[L,O]=(0,a.useState)(null),[M,I]=(0,a.useState)(!1),[_,z]=(0,a.useState)(null),[F,U]=(0,a.useState)([]),[G,K]=(0,a.useState)("all"),[R,H]=(0,a.useState)(!1),[J,B]=(0,a.useState)(!1),[Y,Q]=(0,a.useState)(!1),V=(0,a.useRef)(null),W=(0,a.useRef)(null),X=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/providers/client");if(!e.ok)throw Error("Failed to fetch connections");let r=(await e.json()).connections||[];return t(r),r}catch(e){return console.error("Error fetching connections:",e),t([]),[]}},[]),Z=(0,a.useCallback)(async(e,t)=>{y(t=>({...t,[e]:!0})),j(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let r=await fetch(`/api/usage/${e}`);if(!r.ok){let s=(await r.json().catch(()=>({}))).error||r.statusText;if(404===r.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===r.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,s),b(t=>({...t,[e]:{quotas:[],message:s}}));return}throw Error(`HTTP ${r.status}: ${s}`)}let s=await r.json();console.log(`[ProviderLimits] Got quota for ${t}:`,s);let a=function(e,t){if(!t||"object"!=typeof t)return[];let r=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":if(t.quotas){let e=new Map;Object.entries(t.quotas).forEach(([t,r])=>{let s=n.get(t)||t,a={name:o[s]||r.displayName||s,modelKey:s,sourceModelKey:r.sourceModelKey||t,used:r.used||0,total:r.total||0,resetAt:r.resetAt||null,remainingPercentage:r.remainingPercentage},i=e.get(s);if(!i)return void e.set(s,a);let l=i.remainingPercentage??c(i.used,i.total);(a.remainingPercentage??c(a.used,a.total))<l&&e.set(s,a)}),r.push(...e.values())}break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"claude":t.message?r.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}let s=(0,l.KC)(e);if(s.length>0){let e=new Map(s.map((e,t)=>[e.id,t]));r.sort((t,r)=>{let s=t.modelKey||t.name,a=r.modelKey||r.name;return(e.get(s)??999)-(e.get(a)??999)})}return r}(t,s);b(t=>({...t,[e]:{quotas:a,plan:s.plan||null,message:s.message||null,raw:s}}))}catch(r){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,r),j(t=>({...t,[e]:r.message||"Failed to fetch quota"}))}finally{y(t=>({...t,[e]:!1}))}},[]),ee=(0,a.useCallback)(async(e,t)=>{await Z(e,t),$(new Date)},[Z]),et=(0,a.useCallback)(async e=>{if(confirm("Delete this connection?")){D(e);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&(t(t=>t.filter(t=>t.id!==e)),b(t=>{let r={...t};return delete r[e],r}),y(t=>{let r={...t};return delete r[e],r}),j(t=>{let r={...t};return delete r[e],r}))}catch(e){console.error("Error deleting connection:",e)}finally{D(null)}}},[]),er=(0,a.useCallback)(async(e,r)=>{O(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:r})})).ok&&t(t=>t.map(t=>t.id===e?{...t,isActive:r}:t))}catch(e){console.error("Error updating connection status:",e)}finally{O(null)}},[]),es=(0,a.useCallback)(async e=>{if(!_?.id)return;let t=_.id,r=_.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await X(),I(!1),z(null),x.wb.includes(r)&&await Z(t,r))}catch(e){console.error("Error saving connection:",e)}},[_,X,Z]);(0,a.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.json()).then(t=>{!e&&t?.proxyPools&&U(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let ea=(0,a.useCallback)(async()=>{if(!C){S(!0),A(60);try{let e=(await X()).filter(p);await Promise.all(e.map(e=>Z(e.id,e.provider))),$(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{S(!1)}}},[C,X,Z]);(0,a.useEffect)(()=>{(async()=>{P(!0);let e=await X();P(!1);let t=e.filter(p),r={};t.forEach(e=>{r[e.id]=!0}),y(r),await Promise.all(t.map(e=>Z(e.id,e.provider))),$(new Date)})()},[]),(0,a.useEffect)(()=>{window.localStorage.setItem(g,String(w))},[w]),(0,a.useEffect)(()=>{if(!w){V.current&&(clearInterval(V.current),V.current=null),W.current&&(clearInterval(W.current),W.current=null);return}return V.current=setInterval(()=>{ea()},6e4),W.current=setInterval(()=>{A(e=>e<=1?60:e-1)},1e3),()=>{V.current&&clearInterval(V.current),W.current&&clearInterval(W.current)}},[w,ea]),(0,a.useEffect)(()=>{let e=()=>{document.hidden?(V.current&&(clearInterval(V.current),V.current=null),W.current&&(clearInterval(W.current),W.current=null)):w&&(V.current=setInterval(ea,6e4),W.current=setInterval(()=>{A(e=>e<=1?60:e-1)},1e3))};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[w,ea]);let ei=e.filter(p),el=ei.filter(e=>"all"===G||e.provider===G),en=e=>{let t=(r[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return t.length>0?Math.min(...t):1/0},eo=[...el].sort((e,t)=>{if(R){let r=en(e)-en(t);if(0!==r)return r}let r=x.wb.indexOf(e.provider),s=x.wb.indexOf(t.provider);return r!==s?r-s:e.provider.localeCompare(t.provider)}),ec=e=>{let t=r[e.id]?.quotas;return!!t?.length&&t.some(e=>!!e.total&&!(e.total<=0)&&5>=c(e.used,e.total))},ed=(0,a.useCallback)(async(e,r)=>{if(e.length&&!Y){Q(!0);try{await Promise.all(e.map(e=>fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:r})}))),t(t=>t.map(t=>e.includes(t.id)?{...t,isActive:r}:t))}catch(e){console.error("Error bulk toggling connections:",e)}finally{Q(!1)}}},[Y]),em=Array.from(new Set(ei.map(e=>e.provider))).sort(),eu="all"===G?"All providers":G;return(eo.length,Object.values(r).filter(e=>e?.quotas?.length>0).length,Object.values(r).reduce((e,t)=>t?.quotas?e+ +!!t.quotas.some(e=>30>c(e.used,e.total)&&e.total>0):e,0),q||0!==eo.length)?(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsx)("div",{className:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3",children:(0,s.jsx)("h2",{className:"text-xl font-semibold text-text-primary",children:"Provider Limits"})}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>B(e=>!e),className:"flex h-8 items-center justify-between gap-1 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-haspopup":"menu","aria-expanded":J,title:"Filter quota providers",children:[(0,s.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===G?(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,s.jsx)(i.A,{src:`/providers/${G}.png`,alt:G,size:18,className:"size-[18px] rounded object-contain",fallbackText:G.slice(0,2).toUpperCase()}),(0,s.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:eu})]}),(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),J&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>B(!1)}),(0,s.jsxs)("div",{className:"absolute left-0 z-40 mt-2 w-64 overflow-hidden rounded-2xl border border-black/10 bg-surface/95 p-1.5 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-72",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>{K("all"),B(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${"all"===G?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"apps"}),(0,s.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===G&&(0,s.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]}),(0,s.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,s.jsx)("div",{className:"max-h-72 overflow-y-auto pr-1",children:em.map(e=>(0,s.jsxs)("button",{type:"button",onClick:()=>{K(e),B(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${G===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,s.jsx)(i.A,{src:`/providers/${e}.png`,alt:e,size:24,className:"size-6 rounded-md object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,s.jsx)("span",{className:"font-medium capitalize",children:e}),G===e&&(0,s.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]},e))})]})]})]}),(0,s.jsxs)("button",{type:"button",onClick:()=>H(e=>!e),className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${R?"border-amber-500/40 bg-amber-500/10 text-amber-500":"border-black/10 text-text-primary hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5"}`,title:"Sort accounts by earliest quota reset time",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,s.jsxs)("button",{type:"button",onClick:()=>{ed(eo.filter(e=>(e.isActive??!0)&&ec(e)).map(e=>e.id),!1)},disabled:Y,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-red-500/30 px-2 text-xs text-red-500 transition-colors hover:bg-red-500/10 disabled:opacity-50",title:"Disable connections with depleted quota (within current filter)",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Turn off Empty"})]}),(0,s.jsxs)("button",{type:"button",onClick:()=>{ed(eo.filter(e=>!(e.isActive??!0)&&!ec(e)).map(e=>e.id),!0)},disabled:Y,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-emerald-500/30 px-2 text-xs text-emerald-500 transition-colors hover:bg-emerald-500/10 disabled:opacity-50",title:"Enable connections that still have quota (within current filter)",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Turn on Available"})]}),(0,s.jsxs)("button",{onClick:()=>k(e=>!e),className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5",title:w?"Disable auto-refresh":"Enable auto-refresh",children:[(0,s.jsx)("span",{className:`material-symbols-outlined text-[14px] ${w?"text-primary":"text-text-muted"}`,children:w?"toggle_on":"toggle_off"}),(0,s.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),w&&(0,s.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",E,"s)"]})]}),(0,s.jsx)("button",{type:"button",onClick:ea,disabled:C,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5 disabled:opacity-50",title:"Refresh all",children:(0,s.jsx)("span",{className:`material-symbols-outlined text-[14px] ${C?"animate-spin":""}`,children:"refresh"})})]})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:eo.map(e=>{let t,a,l=r[e.id],n=f[e.id],o=v[e.id],c=!1===e.isActive,h=T===e.id||L===e.id;return(0,s.jsxs)(u.default,{padding:"none",className:`min-w-0 ${c?"opacity-60":""}`,children:[(0,s.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,s.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,s.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,s.jsx)(i.A,{src:`/providers/${e.provider}.png`,alt:e.provider,size:32,className:"object-contain",fallbackText:e.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:e.provider}),(a=(t=e=>"string"==typeof e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e))(e.email)?e.email:(t(e.name),e.name))?(0,s.jsx)("p",{className:"text-xs text-text-muted truncate",children:a}):null]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(0,s.jsx)("button",{type:"button",onClick:()=>ee(e.id,e.provider),disabled:n||h,className:"p-1.5 rounded-lg hover:bg-black/5 dark:hover:bg-white/5 transition-colors disabled:opacity-50",title:"Refresh quota",children:(0,s.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${n?"animate-spin":""}`,children:"refresh"})}),(0,s.jsx)("button",{type:"button",onClick:()=>{z(e),I(!0)},disabled:h,className:"p-1.5 rounded-lg hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary transition-colors disabled:opacity-50",title:"Edit connection",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})}),(0,s.jsx)("button",{type:"button",onClick:()=>et(e.id),disabled:h,className:"p-1.5 rounded-lg hover:bg-red-500/10 text-red-500 transition-colors disabled:opacity-50",title:"Delete connection",children:(0,s.jsx)("span",{className:`material-symbols-outlined text-[18px] ${T===e.id?"animate-pulse":""}`,children:"delete"})}),(0,s.jsx)("div",{className:"inline-flex items-center pl-0.5",title:e.isActive??!0?"Disable connection":"Enable connection",children:(0,s.jsx)(m.default,{size:"sm",checked:e.isActive??!0,disabled:h,onChange:t=>er(e.id,t)})})]})]})}),(0,s.jsx)("div",{className:"px-2 py-1.5",children:n?(0,s.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):o?(0,s.jsxs)("div",{className:"text-center py-5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,s.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:o})]}):l?.message?(0,s.jsx)("div",{className:"text-center py-5",children:(0,s.jsx)("p",{className:"text-xs text-text-muted",children:l.message})}):(0,s.jsx)(d,{quotas:l?.quotas,compact:!0})})]},e.id)})}),(0,s.jsx)(h.wI,{isOpen:M,connection:_,proxyPools:F,onSave:es,onClose:()=>{I(!1),z(null)}})]}):(0,s.jsx)(u.default,{padding:"lg",children:(0,s.jsxs)("div",{className:"text-center py-12",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,s.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,s.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:"Connect to providers with OAuth to track your API quota limits and usage."})]})})}},83376:(e,t,r)=>{Promise.resolve().then(r.bind(r,75095)),Promise.resolve().then(r.bind(r,25086))}},e=>{e.O(0,[2574,3862,2194,698,1321,5497,8441,3794,7358],()=>e(e.s=83376)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{75095:(e,t,r)=>{"use strict";r.d(t,{default:()=>b});var s=r(95155),a=r(12115),i=r(57250),l=r(45564);let n=new Map([["gemini-default","gemini-3.5-flash-high"],["gemini-3-flash-agent","gemini-3.5-flash-high"],["gemini-3.5-flash","gemini-3.5-flash-high"],["gemini-3.5-flash-high","gemini-3.5-flash-high"],["gemini-3-flash","gemini-3.5-flash-medium"],["gemini-3.0-flash","gemini-3.5-flash-medium"],["gemini-3.5-flash-low","gemini-3.5-flash-medium"],["gemini-3.5-flash-medium","gemini-3.5-flash-medium"],["gemini-pro-agent","gemini-3.1-pro-high"],["gemini-3.1-pro","gemini-3.1-pro-high"],["gemini-3-pro","gemini-3.1-pro-high"],["gemini-3.1-pro-high","gemini-3.1-pro-high"],["gemini-3.1-pro-low","gemini-3.1-pro-low"],["claude-sonnet-4-6","claude-sonnet-4-6-thinking"],["claude-sonnet-4-6-thinking","claude-sonnet-4-6-thinking"],["claude-opus-4-6","claude-opus-4-6-thinking"],["claude-opus-4-6-thinking","claude-opus-4-6-thinking"],["gpt-oss-120b","gpt-oss-120b-medium"],["gpt-oss-120b-medium","gpt-oss-120b-medium"]]),o={"gemini-3.5-flash-high":"Gemini 3.5 Flash (High)","gemini-3.5-flash-medium":"Gemini 3.5 Flash (Medium)","gemini-3.1-pro-high":"Gemini 3.1 Pro (High)","gemini-3.1-pro-low":"Gemini 3.1 Pro (Low)","claude-sonnet-4-6-thinking":"Claude Sonnet 4.6 (Thinking)","claude-opus-4-6-thinking":"Claude Opus 4.6 (Thinking)","gpt-oss-120b-medium":"GPT-OSS 120B (Medium)"};function c(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function d({quotas:e=[],compact:t=!1}){if(!e||0===e.length)return null;let r=t?"py-1 px-1.5":"py-2 px-3",a=t?"text-[11px]":"text-sm",i=t?"text-[11px]":"text-sm",l=t?"text-[10px] leading-tight":"text-xs";return(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsx)("table",{className:"w-full table-fixed text-left",children:(0,s.jsx)("tbody",{children:e.map((e,n)=>{let o=void 0!==e.remainingPercentage?Math.round(e.remainingPercentage):c(e.used,e.total),d=o>70?{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"}:o>=30?{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"}:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"},m=function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,r=new Date,s=t-r;if(s<=0)return"-";let a=Math.ceil(s/6e4);if(a<60)return`${a}m`;let i=Math.floor(a/60),l=a%60;if(i<24)return`${i}h ${l}m`;let n=Math.floor(i/24);return`${n}d ${i%24}h ${l}m`}catch(e){return"-"}}(e.resetAt),u=function(e){if(!e)return null;try{let t=new Date(e),r=new Date,s=new Date(r.getFullYear(),r.getMonth(),r.getDate()),a=new Date(s);a.setDate(a.getDate()+1);let i="";i=t>=s&&t<a?"Today":t>=a&&t<new Date(a.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let l=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${i}, ${l}`}catch{return null}}(e.resetAt);return(0,s.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors",children:[(0,s.jsx)("td",{className:`${r} w-[30%]`,children:(0,s.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,s.jsx)("span",{className:"text-[10px] shrink-0",children:d.emoji}),(0,s.jsx)("span",{className:`${a} font-medium text-text-primary truncate`,children:e.name})]})}),(0,s.jsx)("td",{className:`${r} w-[45%]`,children:(0,s.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[(0,s.jsx)("div",{className:`${t?"h-1":"h-1.5"} rounded-full overflow-hidden border ${d.bgLight} ${0===o?"border-black/10 dark:border-white/10":"border-transparent"}`,children:(0,s.jsx)("div",{className:`h-full transition-all duration-300 ${d.bg}`,style:{width:`${Math.min(o,100)}%`}})}),(0,s.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,s.jsxs)("span",{className:"text-text-muted",children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]}),(0,s.jsxs)("span",{className:`font-medium ${d.text}`,children:[o,"%"]})]})]})}),(0,s.jsx)("td",{className:`${r} w-[25%]`,children:"-"!==m||u?t?(0,s.jsx)("div",{className:`${i} text-text-primary font-medium truncate`,title:u||"",children:"-"!==m?`in ${m}`:u}):(0,s.jsxs)("div",{className:"space-y-0.5",children:["-"!==m&&(0,s.jsxs)("div",{className:`${i} text-text-primary font-medium`,children:["in ",m]}),u&&(0,s.jsx)("div",{className:`${l} text-text-muted`,children:u})]}):(0,s.jsx)("div",{className:`${i} text-text-muted italic`,children:"N/A"})})]},n)})})})})}var m=r(98542),u=r(84588),h=r(35497),x=r(52679);let p=e=>x.wb.includes(e.provider)&&("oauth"===e.authType||x.jO.includes(e.provider)),g="quotaAutoRefresh";function b(){let[e,t]=(0,a.useState)([]),[r,b]=(0,a.useState)({}),[f,y]=(0,a.useState)({}),[v,j]=(0,a.useState)({}),[w,k]=(0,a.useState)(()=>{let e=window.localStorage.getItem(g);return null===e||"true"===e}),[N,$]=(0,a.useState)(null),[C,S]=(0,a.useState)(!1),[E,A]=(0,a.useState)(60),[q,P]=(0,a.useState)(!0),[T,D]=(0,a.useState)(null),[L,O]=(0,a.useState)(null),[M,I]=(0,a.useState)(!1),[_,z]=(0,a.useState)(null),[F,U]=(0,a.useState)([]),[G,K]=(0,a.useState)("all"),[R,H]=(0,a.useState)(!1),[J,B]=(0,a.useState)(!1),[Y,Q]=(0,a.useState)(!1),V=(0,a.useRef)(null),W=(0,a.useRef)(null),X=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/providers/client");if(!e.ok)throw Error("Failed to fetch connections");let r=(await e.json()).connections||[];return t(r),r}catch(e){return console.error("Error fetching connections:",e),t([]),[]}},[]),Z=(0,a.useCallback)(async(e,t)=>{y(t=>({...t,[e]:!0})),j(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let r=await fetch(`/api/usage/${e}`);if(!r.ok){let s=(await r.json().catch(()=>({}))).error||r.statusText;if(404===r.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===r.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,s),b(t=>({...t,[e]:{quotas:[],message:s}}));return}throw Error(`HTTP ${r.status}: ${s}`)}let s=await r.json();console.log(`[ProviderLimits] Got quota for ${t}:`,s);let a=function(e,t){if(!t||"object"!=typeof t)return[];let r=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":if(t.quotas){let e=new Map;Object.entries(t.quotas).forEach(([t,r])=>{let s=n.get(t)||t,a={name:o[s]||r.displayName||s,modelKey:s,sourceModelKey:r.sourceModelKey||t,used:r.used||0,total:r.total||0,resetAt:r.resetAt||null,remainingPercentage:r.remainingPercentage},i=e.get(s);if(!i)return void e.set(s,a);let l=i.remainingPercentage??c(i.used,i.total);(a.remainingPercentage??c(a.used,a.total))<l&&e.set(s,a)}),r.push(...e.values())}break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"claude":t.message?r.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}let s=(0,l.KC)(e);if(s.length>0){let e=new Map(s.map((e,t)=>[e.id,t]));r.sort((t,r)=>{let s=t.modelKey||t.name,a=r.modelKey||r.name;return(e.get(s)??999)-(e.get(a)??999)})}return r}(t,s);b(t=>({...t,[e]:{quotas:a,plan:s.plan||null,message:s.message||null,raw:s}}))}catch(r){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,r),j(t=>({...t,[e]:r.message||"Failed to fetch quota"}))}finally{y(t=>({...t,[e]:!1}))}},[]),ee=(0,a.useCallback)(async(e,t)=>{await Z(e,t),$(new Date)},[Z]),et=(0,a.useCallback)(async e=>{if(confirm("Delete this connection?")){D(e);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&(t(t=>t.filter(t=>t.id!==e)),b(t=>{let r={...t};return delete r[e],r}),y(t=>{let r={...t};return delete r[e],r}),j(t=>{let r={...t};return delete r[e],r}))}catch(e){console.error("Error deleting connection:",e)}finally{D(null)}}},[]),er=(0,a.useCallback)(async(e,r)=>{O(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:r})})).ok&&t(t=>t.map(t=>t.id===e?{...t,isActive:r}:t))}catch(e){console.error("Error updating connection status:",e)}finally{O(null)}},[]),es=(0,a.useCallback)(async e=>{if(!_?.id)return;let t=_.id,r=_.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await X(),I(!1),z(null),x.wb.includes(r)&&await Z(t,r))}catch(e){console.error("Error saving connection:",e)}},[_,X,Z]);(0,a.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.json()).then(t=>{!e&&t?.proxyPools&&U(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let ea=(0,a.useCallback)(async()=>{if(!C){S(!0),A(60);try{let e=(await X()).filter(p);await Promise.all(e.map(e=>Z(e.id,e.provider))),$(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{S(!1)}}},[C,X,Z]);(0,a.useEffect)(()=>{(async()=>{P(!0);let e=await X();P(!1);let t=e.filter(p),r={};t.forEach(e=>{r[e.id]=!0}),y(r),await Promise.all(t.map(e=>Z(e.id,e.provider))),$(new Date)})()},[]),(0,a.useEffect)(()=>{window.localStorage.setItem(g,String(w))},[w]),(0,a.useEffect)(()=>{if(!w){V.current&&(clearInterval(V.current),V.current=null),W.current&&(clearInterval(W.current),W.current=null);return}return V.current=setInterval(()=>{ea()},6e4),W.current=setInterval(()=>{A(e=>e<=1?60:e-1)},1e3),()=>{V.current&&clearInterval(V.current),W.current&&clearInterval(W.current)}},[w,ea]),(0,a.useEffect)(()=>{let e=()=>{document.hidden?(V.current&&(clearInterval(V.current),V.current=null),W.current&&(clearInterval(W.current),W.current=null)):w&&(V.current=setInterval(ea,6e4),W.current=setInterval(()=>{A(e=>e<=1?60:e-1)},1e3))};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[w,ea]);let ei=e.filter(p),el=ei.filter(e=>"all"===G||e.provider===G),en=e=>{let t=(r[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return t.length>0?Math.min(...t):1/0},eo=[...el].sort((e,t)=>{if(R){let r=en(e)-en(t);if(0!==r)return r}let r=x.wb.indexOf(e.provider),s=x.wb.indexOf(t.provider);return r!==s?r-s:e.provider.localeCompare(t.provider)}),ec=e=>{let t=r[e.id]?.quotas;return!!t?.length&&t.some(e=>!!e.total&&!(e.total<=0)&&5>=c(e.used,e.total))},ed=(0,a.useCallback)(async(e,r)=>{if(e.length&&!Y){Q(!0);try{await Promise.all(e.map(e=>fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:r})}))),t(t=>t.map(t=>e.includes(t.id)?{...t,isActive:r}:t))}catch(e){console.error("Error bulk toggling connections:",e)}finally{Q(!1)}}},[Y]),em=Array.from(new Set(ei.map(e=>e.provider))).sort(),eu="all"===G?"All providers":G;return(eo.length,Object.values(r).filter(e=>e?.quotas?.length>0).length,Object.values(r).reduce((e,t)=>t?.quotas?e+ +!!t.quotas.some(e=>30>c(e.used,e.total)&&e.total>0):e,0),q||0!==eo.length)?(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsx)("div",{className:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3",children:(0,s.jsx)("h2",{className:"text-xl font-semibold text-text-primary",children:"Provider Limits"})}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>B(e=>!e),className:"flex h-8 items-center justify-between gap-1 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-haspopup":"menu","aria-expanded":J,title:"Filter quota providers",children:[(0,s.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===G?(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,s.jsx)(i.A,{src:`/providers/${G}.png`,alt:G,size:18,className:"size-[18px] rounded object-contain",fallbackText:G.slice(0,2).toUpperCase()}),(0,s.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:eu})]}),(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),J&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>B(!1)}),(0,s.jsxs)("div",{className:"absolute left-0 z-40 mt-2 w-64 overflow-hidden rounded-2xl border border-black/10 bg-surface/95 p-1.5 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-72",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>{K("all"),B(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${"all"===G?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"apps"}),(0,s.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===G&&(0,s.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]}),(0,s.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,s.jsx)("div",{className:"max-h-72 overflow-y-auto pr-1",children:em.map(e=>(0,s.jsxs)("button",{type:"button",onClick:()=>{K(e),B(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${G===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,s.jsx)(i.A,{src:`/providers/${e}.png`,alt:e,size:24,className:"size-6 rounded-md object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,s.jsx)("span",{className:"font-medium capitalize",children:e}),G===e&&(0,s.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]},e))})]})]})]}),(0,s.jsxs)("button",{type:"button",onClick:()=>H(e=>!e),className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${R?"border-amber-500/40 bg-amber-500/10 text-amber-500":"border-black/10 text-text-primary hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5"}`,title:"Sort accounts by earliest quota reset time",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,s.jsxs)("button",{type:"button",onClick:()=>{ed(eo.filter(e=>(e.isActive??!0)&&ec(e)).map(e=>e.id),!1)},disabled:Y,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-red-500/30 px-2 text-xs text-red-500 transition-colors hover:bg-red-500/10 disabled:opacity-50",title:"Disable connections with depleted quota (within current filter)",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Turn off Empty"})]}),(0,s.jsxs)("button",{type:"button",onClick:()=>{ed(eo.filter(e=>!(e.isActive??!0)&&!ec(e)).map(e=>e.id),!0)},disabled:Y,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-emerald-500/30 px-2 text-xs text-emerald-500 transition-colors hover:bg-emerald-500/10 disabled:opacity-50",title:"Enable connections that still have quota (within current filter)",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Turn on Available"})]}),(0,s.jsxs)("button",{onClick:()=>k(e=>!e),className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5",title:w?"Disable auto-refresh":"Enable auto-refresh",children:[(0,s.jsx)("span",{className:`material-symbols-outlined text-[14px] ${w?"text-primary":"text-text-muted"}`,children:w?"toggle_on":"toggle_off"}),(0,s.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),w&&(0,s.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",E,"s)"]})]}),(0,s.jsx)("button",{type:"button",onClick:ea,disabled:C,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5 disabled:opacity-50",title:"Refresh all",children:(0,s.jsx)("span",{className:`material-symbols-outlined text-[14px] ${C?"animate-spin":""}`,children:"refresh"})})]})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:eo.map(e=>{let t,a,l=r[e.id],n=f[e.id],o=v[e.id],c=!1===e.isActive,h=T===e.id||L===e.id;return(0,s.jsxs)(u.default,{padding:"none",className:`min-w-0 ${c?"opacity-60":""}`,children:[(0,s.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,s.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,s.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,s.jsx)(i.A,{src:`/providers/${e.provider}.png`,alt:e.provider,size:32,className:"object-contain",fallbackText:e.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:e.provider}),(a=(t=e=>"string"==typeof e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e))(e.email)?e.email:(t(e.name),e.name))?(0,s.jsx)("p",{className:"text-xs text-text-muted truncate",children:a}):null]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(0,s.jsx)("button",{type:"button",onClick:()=>ee(e.id,e.provider),disabled:n||h,className:"p-1.5 rounded-lg hover:bg-black/5 dark:hover:bg-white/5 transition-colors disabled:opacity-50",title:"Refresh quota",children:(0,s.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${n?"animate-spin":""}`,children:"refresh"})}),(0,s.jsx)("button",{type:"button",onClick:()=>{z(e),I(!0)},disabled:h,className:"p-1.5 rounded-lg hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary transition-colors disabled:opacity-50",title:"Edit connection",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})}),(0,s.jsx)("button",{type:"button",onClick:()=>et(e.id),disabled:h,className:"p-1.5 rounded-lg hover:bg-red-500/10 text-red-500 transition-colors disabled:opacity-50",title:"Delete connection",children:(0,s.jsx)("span",{className:`material-symbols-outlined text-[18px] ${T===e.id?"animate-pulse":""}`,children:"delete"})}),(0,s.jsx)("div",{className:"inline-flex items-center pl-0.5",title:e.isActive??!0?"Disable connection":"Enable connection",children:(0,s.jsx)(m.default,{size:"sm",checked:e.isActive??!0,disabled:h,onChange:t=>er(e.id,t)})})]})]})}),(0,s.jsx)("div",{className:"px-2 py-1.5",children:n?(0,s.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):o?(0,s.jsxs)("div",{className:"text-center py-5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,s.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:o})]}):l?.message?(0,s.jsx)("div",{className:"text-center py-5",children:(0,s.jsx)("p",{className:"text-xs text-text-muted",children:l.message})}):(0,s.jsx)(d,{quotas:l?.quotas,compact:!0})})]},e.id)})}),(0,s.jsx)(h.wI,{isOpen:M,connection:_,proxyPools:F,onSave:es,onClose:()=>{I(!1),z(null)}})]}):(0,s.jsx)(u.default,{padding:"lg",children:(0,s.jsxs)("div",{className:"text-center py-12",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,s.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,s.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:"Connect to providers with OAuth to track your API quota limits and usage."})]})})}},83376:(e,t,r)=>{Promise.resolve().then(r.bind(r,75095)),Promise.resolve().then(r.bind(r,25086))}},e=>{e.O(0,[2574,3862,2194,698,1321,5497,8441,3794,7358],()=>e(e.s=83376)),_N_E=e.O()}]);