9router 0.3.34 → 0.3.35

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 (290) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +43 -43
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/_global-error.html +2 -2
  19. package/app/.next/server/app/_global-error.rsc +1 -1
  20. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  22. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  23. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  24. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  25. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  26. package/app/.next/server/app/_not-found/page.js +2 -2
  27. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/_not-found.html +1 -1
  29. package/app/.next/server/app/_not-found.rsc +3 -3
  30. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  31. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  32. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  33. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  34. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  35. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  36. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/locale/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/models/route.js +1 -1
  58. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/providers/route.js +1 -1
  78. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  88. package/app/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
  90. package/app/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/version/route.js +1 -1
  117. package/app/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/callback.html +1 -1
  120. package/app/.next/server/app/callback.rsc +3 -3
  121. package/app/.next/server/app/callback.segments/_full.segment.rsc +3 -3
  122. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  123. package/app/.next/server/app/callback.segments/_index.segment.rsc +3 -3
  124. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  125. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  126. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  127. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  128. package/app/.next/server/app/dashboard/cli-tools.rsc +5 -5
  129. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  130. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  131. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  132. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  133. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  134. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  135. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  136. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  137. package/app/.next/server/app/dashboard/combos.html +1 -1
  138. package/app/.next/server/app/dashboard/combos.rsc +5 -5
  139. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  140. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  141. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  142. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  143. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  144. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  145. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  146. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  147. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  148. package/app/.next/server/app/dashboard/endpoint.rsc +5 -5
  149. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  150. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  151. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  152. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  153. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  154. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  155. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  156. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  157. package/app/.next/server/app/dashboard/mitm.html +1 -1
  158. package/app/.next/server/app/dashboard/mitm.rsc +5 -5
  159. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  160. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  161. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  162. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  163. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  164. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  165. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  166. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  167. package/app/.next/server/app/dashboard/profile.html +1 -1
  168. package/app/.next/server/app/dashboard/profile.rsc +5 -5
  169. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  170. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  171. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  172. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  173. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  174. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  175. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  176. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  177. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  178. package/app/.next/server/app/dashboard/providers/new.rsc +5 -5
  179. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  180. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  181. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  182. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  183. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  184. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  185. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  186. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  187. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  188. package/app/.next/server/app/dashboard/providers.html +1 -1
  189. package/app/.next/server/app/dashboard/providers.rsc +5 -5
  190. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  191. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  192. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  193. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  194. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  195. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  196. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  197. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  198. package/app/.next/server/app/dashboard/quota.html +2 -2
  199. package/app/.next/server/app/dashboard/quota.rsc +4 -4
  200. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +1 -1
  201. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  202. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  203. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  204. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +4 -4
  205. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  206. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  207. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  208. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  209. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  210. package/app/.next/server/app/dashboard/settings/pricing.rsc +3 -3
  211. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  212. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  213. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  214. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  215. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  216. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  217. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  218. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  219. package/app/.next/server/app/dashboard/translator.html +1 -1
  220. package/app/.next/server/app/dashboard/translator.rsc +5 -5
  221. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  222. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  223. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  224. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  225. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  226. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  227. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  228. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  229. package/app/.next/server/app/dashboard/usage.html +1 -1
  230. package/app/.next/server/app/dashboard/usage.rsc +5 -5
  231. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  232. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  233. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  234. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  235. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  236. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  237. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  238. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  239. package/app/.next/server/app/dashboard.html +1 -1
  240. package/app/.next/server/app/dashboard.rsc +5 -5
  241. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  242. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  243. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  244. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
  245. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  246. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
  247. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  248. package/app/.next/server/app/index.html +1 -1
  249. package/app/.next/server/app/index.rsc +3 -3
  250. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  251. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  252. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  253. package/app/.next/server/app/index.segments/_index.segment.rsc +3 -3
  254. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  255. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  256. package/app/.next/server/app/landing.html +1 -1
  257. package/app/.next/server/app/landing.rsc +3 -3
  258. package/app/.next/server/app/landing.segments/_full.segment.rsc +3 -3
  259. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  260. package/app/.next/server/app/landing.segments/_index.segment.rsc +3 -3
  261. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  262. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  263. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  264. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  265. package/app/.next/server/app/login.html +1 -1
  266. package/app/.next/server/app/login.rsc +4 -4
  267. package/app/.next/server/app/login.segments/_full.segment.rsc +4 -4
  268. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  269. package/app/.next/server/app/login.segments/_index.segment.rsc +3 -3
  270. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  271. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  272. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  273. package/app/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  274. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  275. package/app/.next/server/app-paths-manifest.json +43 -43
  276. package/app/.next/server/chunks/1114.js +1 -1
  277. package/app/.next/server/chunks/2470.js +1 -1
  278. package/app/.next/server/chunks/6182.js +15 -17
  279. package/app/.next/server/pages/404.html +1 -1
  280. package/app/.next/server/pages/500.html +2 -2
  281. package/app/.next/server/server-reference-manifest.js +1 -1
  282. package/app/.next/server/server-reference-manifest.json +1 -1
  283. package/app/.next/static/chunks/{5497-a182d950887a90ed.js → 5497-50140f31fb49aa0a.js} +1 -1
  284. package/app/.next/static/chunks/app/{layout-e2ea1fe43c8d1853.js → layout-cfb3c2ddc92fc9ce.js} +1 -1
  285. package/app/package.json +1 -1
  286. package/app/src/mitm/dns/dnsConfig.js +99 -26
  287. package/app/src/mitm/manager.js +31 -84
  288. package/package.json +1 -1
  289. /package/app/.next/static/{sxWcLJ3M3jKWxLlhk7_mc → oViZf10bgRaRGczvIrkpl}/_buildManifest.js +0 -0
  290. /package/app/.next/static/{sxWcLJ3M3jKWxLlhk7_mc → oViZf10bgRaRGczvIrkpl}/_ssgManifest.js +0 -0
@@ -4,4 +4,4 @@
4
4
  `,children:e.name},e.id)})})]}),Object.entries(w).map(([e,t])=>(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 bg-surface py-0.5",children:[(0,r.jsx)("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:t.color}}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:t.name}),(0,r.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",t.models.length,")"]})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:t.models.map(e=>{let t=l===e.value,s=e.isPlaceholder;return(0,r.jsx)("button",{onClick:()=>C(e),title:s?"Select to pre-fill, then edit model ID in the input":void 0,className:`
5
5
  px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer
6
6
  ${s?"border-dashed border-border text-text-muted hover:border-primary/50 hover:text-primary bg-surface italic":t?"bg-primary text-white border-primary":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
7
- `,children:s?(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[11px]",children:"edit"}),e.name]}):e.name},e.id)})})]},e)),0===Object.keys(w).length&&0===k.length&&(0,r.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,r.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})}m.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onSelect:n().func.isRequired,selectedModel:n().string,activeProviders:n().arrayOf(n().shape({provider:n().string.isRequired})),title:n().string,modelAliases:n().object}},73006:(e,t,s)=>{s.d(t,{FE:()=>x,Tl:()=>d,wn:()=>u});var r=s(93308);let a={},l=r.Xn,n=[];function i(){if("u"<typeof document)return r.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${r.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):r.Xn;return(0,r.QC)(t)}async function o(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function d(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==l&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let s=t;for(;s;){if(s.hasAttribute&&s.hasAttribute("data-i18n-skip"))return;s=s.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let r=d(e._originalText);r!==e.nodeValue&&(e.nodeValue=r)}function m(e){let t;if(!e)return;let s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),r=[];for(;t=s.nextNode();)r.push(t);r.forEach(c)}async function x(){l=i(),await o(l),m(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?m(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function u(){l=i(),await o(l),n.forEach(e=>e()),m(document.body)}},74891:(e,t,s)=>{s.d(t,{default:()=>h});var r=s(95155),a=s(73321),l=s(12115),n=s(98500),i=s.n(n),o=s(5772),d=s(14051),c=s.n(d),m=s(35497),x=s(90620),u=s(73006);function h({onMenuClick:e,showMenuButton:t=!0}){let s=(0,a.usePathname)(),n=(0,a.useRouter)(),{title:d,description:c,breadcrumbs:h}=(0,l.useMemo)(()=>(e=>{if(!e)return{title:"",description:"",breadcrumbs:[]};let t=e.match(/\/providers\/([^/]+)$/);if(t){let e=t[1],s=x.zN[e]||x.fg[e];if(s)return{title:s.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:s.name,image:`/providers/${s.id}.png`}]}}return e.includes("/providers")?{title:"Providers",description:"Manage your AI provider connections",breadcrumbs:[]}:e.includes("/combos")?{title:"Combos",description:"Model combos with fallback",breadcrumbs:[]}:e.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",breadcrumbs:[]}:e.includes("/mitm")?{title:"MITM Proxy",description:"Intercept CLI tool traffic and route through 9Router",breadcrumbs:[]}:e.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",breadcrumbs:[]}:e.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:e.includes("/profile")?{title:"Settings",description:"Manage your preferences",breadcrumbs:[]}:e.includes("/translator")?{title:"Translator",description:"Debug translation flow between formats",breadcrumbs:[]}:e.includes("/console-log")?{title:"Console Log",description:"Live server console output",breadcrumbs:[]}:"/dashboard"===e?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(s),[s]),p=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&(n.push("/login"),n.refresh())}catch(e){console.error("Failed to logout:",e)}};return(0,r.jsxs)("header",{className:"flex items-center justify-between px-8 py-5 border-b border-black/5 dark:border-white/5 bg-bg/80 backdrop-blur-xl z-10 sticky top-0",children:[(0,r.jsx)("div",{className:"flex items-center gap-3 lg:hidden",children:t&&(0,r.jsx)("button",{onClick:e,className:"text-text-main hover:text-primary transition-colors",children:(0,r.jsx)("span",{className:"material-symbols-outlined",children:"menu"})})}),(0,r.jsx)("div",{className:"hidden lg:flex flex-col",children:h.length>0?(0,r.jsx)("div",{className:"flex items-center gap-2",children:h.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[t>0&&(0,r.jsx)("span",{className:"material-symbols-outlined text-text-muted text-base",children:"chevron_right"}),e.href?(0,r.jsx)(i(),{href:e.href,className:"text-text-muted hover:text-primary transition-colors",children:e.label}):(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[e.image&&(0,r.jsx)(o.default,{src:e.image,alt:e.label,width:28,height:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",sizes:"28px",onError:e=>{e.currentTarget.style.display="none"}}),(0,r.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:(0,u.Tl)(e.label)})]})]},`${e.label}-${e.href||"current"}`))}):d?(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:(0,u.Tl)(d)}),c&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:(0,u.Tl)(c)})]}):null}),(0,r.jsxs)("div",{className:"flex items-center gap-3 ml-auto",children:[(0,r.jsx)(m.c5,{}),(0,r.jsx)(m.UW,{}),(0,r.jsx)("button",{onClick:p,className:"flex items-center justify-center p-2 rounded-lg text-text-muted hover:text-red-500 hover:bg-red-500/10 transition-all",title:"Logout",children:(0,r.jsx)("span",{className:"material-symbols-outlined",children:"logout"})})]})]})}h.propTypes={onMenuClick:c().func,showMenuButton:c().bool}},81127:(e,t,s)=>{s.d(t,{ConfirmModal:()=>o,default:()=>i});var r=s(95155),a=s(12115),l=s(31474),n=s(92542);function i({isOpen:e,onClose:t,title:s,children:n,footer:i,size:o="md",closeOnOverlay:d=!0,showCloseButton:c=!0,className:m}){return((0,a.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,a.useEffect)(()=>{let s=s=>{"Escape"===s.key&&e&&t()};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[e,t]),e)?(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:d?t:void 0}),(0,r.jsxs)("div",{className:(0,l.cn)("relative w-full bg-surface","border border-black/10 dark:border-white/10","rounded-xl shadow-2xl","animate-in fade-in zoom-in-95 duration-200",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[o],m),children:[(s||c)&&(0,r.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-black/5 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mr-4",children:[(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),s&&(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:s})]}),c&&(0,r.jsx)("button",{onClick:t,className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,r.jsx)("div",{className:"p-6 max-h-[calc(80vh-140px)] overflow-y-auto",children:n}),i&&(0,r.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-black/5 dark:border-white/5",children:i})]})]}):null}function o({isOpen:e,onClose:t,onConfirm:s,title:a="Confirm",message:l,confirmText:o="Confirm",cancelText:d="Cancel",variant:c="danger",loading:m=!1}){return(0,r.jsx)(i,{isOpen:e,onClose:t,title:a,size:"sm",footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.default,{variant:"ghost",onClick:t,disabled:m,children:d}),(0,r.jsx)(n.default,{variant:c,onClick:s,loading:m,children:o})]}),children:(0,r.jsx)("p",{className:"text-text-muted",children:l})})}},84588:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(95155),a=s(31474);function l({children:e,title:t,subtitle:s,icon:l,action:n,padding:i="md",hover:o=!1,className:d,...c}){return(0,r.jsxs)("div",{className:(0,a.cn)("bg-surface","border border-black/5 dark:border-white/5","rounded-lg shadow-sm",o&&"hover:shadow-md hover:border-primary/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[i],d),...c,children:[(t||n)&&(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[l&&(0,r.jsx)("div",{className:"p-2 rounded-lg bg-bg text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:l})}),(0,r.jsxs)("div",{children:[t&&(0,r.jsx)("h3",{className:"text-text-main font-semibold",children:t}),s&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:s})]})]}),n]}),e]})}l.Section=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-4 rounded-lg","bg-black/[0.02] dark:bg-white/[0.02]","border border-black/5 dark:border-white/5",t),...s,children:e})},l.Row=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-black/5 dark:border-white/5 last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]",t),...s,children:e})},l.ListItem=function({children:e,actions:t,className:s,...l}){return(0,r.jsxs)("div",{className:(0,a.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]","transition-colors",s),...l,children:[(0,r.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,r.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}},90085:(e,t,s)=>{s.d(t,{A:()=>i});var r=s(1934),a=s(31692),l=s(90620);function n(e){let t=document.documentElement,s=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?s:e)?t.classList.add("dark"):t.classList.remove("dark")}let i=(0,r.v)((0,a.Zr)((e,t)=>({theme:l.B2.defaultTheme,setTheme:t=>{e({theme:t}),n(t)},toggleTheme:()=>{let s="dark"===t().theme?"light":"dark";e({theme:s}),n(s)},initTheme:()=>{n(t().theme)}}),{name:l.B2.storageKey}))},90620:(e,t,s)=>{s.d(t,{Q2:()=>r.Q2,fg:()=>r.fg,vQ:()=>a,MA:()=>r.MA,UY:()=>n,zN:()=>r.zN,B2:()=>l});var r=s(52679);s(28777);let a={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.34"},l={storageKey:"theme",defaultTheme:"system"},n={maxLines:200,pollIntervalMs:1e3}},90882:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(35497),o=s(11059);function d({isOpen:e,provider:t,providerInfo:s,onSuccess:l,onClose:n}){let[d,c]=(0,a.useState)("waiting"),[m,x]=(0,a.useState)(null),[u,h]=(0,a.useState)(""),[p,f]=(0,a.useState)(null),[b,g]=(0,a.useState)(!1),[j,y]=(0,a.useState)(null),[v,N]=(0,a.useState)(!1),k=(0,a.useRef)(null),w=(0,a.useRef)(!1),{copied:C,copy:S}=(0,o.C)(),[T,M]=(0,a.useState)(!1),[$,R]=(0,a.useState)("/callback?code=..."),E=(0,a.useRef)(!1);(0,a.useEffect)(()=>{M("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),R(`${window.location.origin}/callback?code=...`)},[]);let L=(0,a.useCallback)(async(e,s)=>{if(m)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:m.redirectUri,codeVerifier:m.codeVerifier,state:s})}),a=await r.json();if(!r.ok)throw Error(a.error);c("success"),l?.()}catch(e){f(e.message),c("error")}},[m,t,l]),O=(0,a.useCallback)(async(e,s,r,a)=>{w.current=!1,N(!0);for(let n=0;n<60;n++){if(w.current){console.log("[OAuthModal] Polling aborted"),N(!1);return}if(await new Promise(e=>setTimeout(e,1e3*r)),w.current){console.log("[OAuthModal] Polling aborted after sleep"),N(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:s,extraData:a})}),i=await n.json();if(i.success){w.current=!0,c("success"),N(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){f(e.message),c("error"),N(!1);return}}f("Authorization timeout"),c("error"),N(!1)},[t,l]),I=(0,a.useCallback)(async()=>{if(t)try{let e;if(f(null),["github","qwen","kiro","kimi-coding","kilocode"].includes(t)){g(!0),c("waiting");let e=await fetch(`/api/oauth/${t}/device-code`),s=await e.json();if(!e.ok)throw Error(s.error);y(s);let r=s.verification_uri_complete||s.verification_uri;r&&window.open(r,"_blank");let a="kiro"===t?{_clientId:s._clientId,_clientSecret:s._clientSecret}:null;O(s.device_code,s.codeVerifier,s.interval||5,a);return}if("codex"===t)e="http://localhost:1455/auth/callback";else{let t=window.location.port||("https:"===window.location.protocol?"443":"80");e=`http://localhost:${t}/callback`}let s=await fetch(`/api/oauth/${t}/authorize?redirect_uri=${encodeURIComponent(e)}`),r=await s.json();if(!s.ok)throw Error(r.error);x({...r,redirectUri:e}),"codex"!==t&&T?(c("waiting"),k.current=window.open(r.authUrl,"oauth_popup","width=600,height=700"),k.current||c("input")):(c("input"),window.open(r.authUrl,"_blank"))}catch(e){f(e.message),c("error")}},[t,T,O]);(0,a.useEffect)(()=>{e&&t?(x(null),h(""),f(null),g(!1),y(null),N(!1),w.current=!1,I()):e||(w.current=!0)},[e,t,I]),(0,a.useEffect)(()=>{let e;if(!m)return;E.current=!1;let t=async e=>{if(E.current)return;let{code:t,state:s,error:r,errorDescription:a}=e;if(r){E.current=!0,f(a||r),c("error");return}t&&(E.current=!0,await L(t,s))},s=e=>{let s=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),r=e.origin===window.location.origin;(s||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",s);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let s=JSON.parse(e.newValue);t(s),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let s=JSON.parse(e);s.timestamp&&Date.now()-s.timestamp<3e4&&t(s),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",s),window.removeEventListener("storage",r),e&&e.close()}},[m,L]);let z=async()=>{try{f(null);let e=new URL(u),t=e.searchParams.get("code"),s=e.searchParams.get("state"),r=e.searchParams.get("error");if(r)throw Error(e.searchParams.get("error_description")||r);if(!t)throw Error("No authorization code found in URL");await L(t,s)}catch(e){f(e.message),c("error")}},P=(0,a.useCallback)(()=>{n()},[n]);return t&&s?(0,r.jsx)(i.aF,{isOpen:e,title:`Connect ${s.name}`,onClose:P,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["waiting"===d&&!b&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Waiting for Authorization"}),(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Complete the authorization in the popup window."}),(0,r.jsx)(i.$n,{variant:"ghost",onClick:()=>c("input"),children:"Popup blocked? Enter URL manually"})]}),"waiting"===d&&b&&j&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the URL below and enter the code:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Verification URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:j.verification_uri}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"verify_url"===C?"check":"content_copy",onClick:()=>S(j.verification_uri,"verify_url")})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:j.user_code}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===C?"check":"content_copy",onClick:()=>S(j.user_code,"user_code")})]})]})]}),v&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"input"===d&&!b&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:m?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===C?"check":"content_copy",onClick:()=>S(m?.authUrl,"auth_url"),children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser."}),(0,r.jsx)(i.pd,{value:u,onChange:e=>h(e.target.value),placeholder:$,className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:z,fullWidth:!0,disabled:!u,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:P,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===d&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",s.name," account has been connected."]}),(0,r.jsx)(i.$n,{onClick:P,fullWidth:!0,children:"Done"})]}),"error"===d&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:p}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:I,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:P,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired}},91450:(e,t,s)=>{s.d(t,{default:()=>i});var r=s(95155),a=s(14051),l=s.n(a),n=s(38587);function i({children:e}){return(0,r.jsxs)("div",{className:"min-h-screen flex flex-col relative bg-bg transition-colors duration-500 overflow-x-hidden selection:bg-primary/20 selection:text-primary",children:[(0,r.jsx)("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-primary/5 dark:bg-primary/5 rounded-full blur-[100px] pointer-events-none z-0"}),(0,r.jsx)("div",{className:"fixed bottom-0 right-0 w-[600px] h-[600px] bg-orange-200/20 dark:bg-orange-900/10 rounded-full blur-[120px] pointer-events-none z-0 translate-y-1/3 translate-x-1/3"}),(0,r.jsx)("div",{className:"absolute top-6 right-6 z-20",children:(0,r.jsx)(n.default,{variant:"card"})}),(0,r.jsx)("main",{className:"flex-1 flex flex-col items-center justify-center p-4 sm:p-6 z-10 w-full h-full",children:e})]})}i.propTypes={children:l().node.isRequired}},92173:(e,t,s)=>{s.d(t,{default:()=>c});var r=s(95155),a=s(98500),l=s.n(a),n=s(90620);let i=[{label:"Features",href:"#features"},{label:"Pricing",href:"#pricing"},{label:"Changelog",href:"#"}],o=[{label:"Documentation",href:"#"},{label:"API Reference",href:"#"},{label:"Help Center",href:"#"}],d=[{label:"About",href:"#"},{label:"Blog",href:"#"},{label:"Contact",href:"#"}];function c(){return(0,r.jsx)("footer",{className:"bg-bg border-t border-border pt-16 pb-12",children:(0,r.jsxs)("div",{className:"container mx-auto px-4 sm:px-6 lg:px-8",children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-10 mb-12",children:[(0,r.jsxs)("div",{className:"col-span-2 lg:col-span-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,r.jsx)("div",{className:"size-6 text-primary",children:(0,r.jsx)("svg",{className:"w-full h-full",fill:"currentColor",viewBox:"0 0 48 48",children:(0,r.jsx)("path",{clipRule:"evenodd",d:"M12.0799 24L4 19.2479L9.95537 8.75216L18.04 13.4961L18.0446 4H29.9554L29.96 13.4961L38.0446 8.75216L44 19.2479L35.92 24L44 28.7521L38.0446 39.2479L29.96 34.5039L29.9554 44H18.0446L18.04 34.5039L9.95537 39.2479L4 28.7521L12.0799 24Z",fillRule:"evenodd"})})}),(0,r.jsx)("span",{className:"text-xl font-bold text-text-main",children:n.vQ.name})]}),(0,r.jsx)("p",{className:"text-text-muted mb-6 max-w-sm font-light",children:"The unified interface for modern AI infrastructure. Secure, observable, and scalable."}),(0,r.jsxs)("div",{className:"flex gap-4",children:[(0,r.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"Twitter",children:(0,r.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{d:"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"})})}),(0,r.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"GitHub",children:(0,r.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0 0 22 12.017C22 6.484 17.522 2 12 2z"})})})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Product"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:i.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Resources"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:o.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Company"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:d.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]})]}),(0,r.jsxs)("div",{className:"border-t border-border pt-8 flex flex-col md:flex-row justify-between items-center gap-4",children:[(0,r.jsxs)("p",{className:"text-sm text-text-muted",children:["\xa9 ",new Date().getFullYear()," ",n.vQ.name," Inc. All rights reserved."]}),(0,r.jsxs)("div",{className:"flex gap-6 text-sm text-text-muted",children:[(0,r.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Privacy Policy"}),(0,r.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Terms of Service"})]})]})]})})}},92542:(e,t,s)=>{s.d(t,{default:()=>i});var r=s(95155),a=s(31474);let l={primary:"bg-gradient-to-b from-primary to-primary-hover text-white shadow-sm",secondary:"bg-white dark:bg-white/10 border border-black/10 dark:border-white/10 text-text-main hover:bg-black/5 dark:hover:bg-white/5",outline:"border border-black/15 dark:border-white/15 text-text-main hover:bg-black/5",ghost:"text-text-muted hover:bg-black/5 dark:hover:bg-white/5 hover:text-text-main",danger:"bg-red-500 text-white hover:bg-red-600 shadow-sm"},n={sm:"h-7 px-3 text-xs rounded-md",md:"h-9 px-4 text-sm rounded-lg",lg:"h-11 px-6 text-sm rounded-lg"};function i({children:e,variant:t="primary",size:s="md",icon:i,iconRight:o,disabled:d=!1,loading:c=!1,fullWidth:m=!1,className:x,...u}){return(0,r.jsxs)("button",{className:(0,a.cn)("inline-flex items-center justify-center gap-2 font-medium transition-all duration-200 cursor-pointer","active:scale-[0.99] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100",l[t],n[s],m&&"w-full",x),disabled:d||c,...u,children:[c?(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}):i?(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:i}):null,e,o&&!c&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:o})]})}},92622:(e,t,s)=>{s.d(t,{default:()=>b});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(98500),o=s.n(i),d=s(73321),c=s(31474),m=s(90620),x=s(92542),u=s(81127);let h=[{href:"/dashboard/endpoint",label:"Endpoint",icon:"api"},{href:"/dashboard/providers",label:"Providers",icon:"dns"},{href:"/dashboard/combos",label:"Combos",icon:"layers"},{href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{href:"/dashboard/quota",label:"Quota Tracker",icon:"data_usage"},{href:"/dashboard/mitm",label:"MITM",icon:"security"},{href:"/dashboard/cli-tools",label:"CLI Tools",icon:"terminal"}],p=[{href:"/dashboard/console-log",label:"Console Log",icon:"terminal"}],f=[{href:"/dashboard/profile",label:"Settings",icon:"settings"}];function b({onClose:e}){let t=(0,d.usePathname)(),[s,l]=(0,a.useState)(!1),[n,i]=(0,a.useState)(!1),[b,g]=(0,a.useState)(!1),[j,y]=(0,a.useState)(null),[v,N]=(0,a.useState)(!1);(0,a.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{e.enableTranslator&&N(!0)}).catch(()=>{})},[]),(0,a.useEffect)(()=>{fetch("/api/version").then(e=>e.json()).then(e=>{e.hasUpdate&&y(e)}).catch(()=>{})},[]);let k=e=>"/dashboard/endpoint"===e?"/dashboard"===t||t.startsWith("/dashboard/endpoint"):t.startsWith(e),w=async()=>{i(!0);try{await fetch("/api/shutdown",{method:"POST"})}catch(e){}i(!1),l(!1),g(!0)};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("aside",{className:"flex w-72 flex-col border-r border-black/5 dark:border-white/5 bg-vibrancy backdrop-blur-xl transition-colors duration-300",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-6 pt-5 pb-2",children:[(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),(0,r.jsxs)("div",{className:"px-6 py-4 flex flex-col gap-2",children:[(0,r.jsxs)(o(),{href:"/dashboard",className:"flex items-center gap-3",children:[(0,r.jsx)("div",{className:"flex items-center justify-center size-9 rounded bg-linear-to-br from-[#f97815] to-[#c2590a]",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-white text-[20px]",children:"hub"})}),(0,r.jsxs)("div",{className:"flex flex-col",children:[(0,r.jsx)("h1",{className:"text-lg font-semibold tracking-tight text-text-main",children:m.vQ.name}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["v",m.vQ.version]})]})]}),j&&(0,r.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,r.jsxs)("span",{className:"text-xs font-semibold text-green-600 dark:text-amber-500",children:["↑ New version available: v",j.latestVersion]}),(0,r.jsx)("code",{className:"text-[10px] text-green-600/80 dark:text-amber-400/70 font-mono select-all",children:"npm install -g 9router@latest"})]})]}),(0,r.jsxs)("nav",{className:"flex-1 px-4 py-2 space-y-1 overflow-y-auto custom-scrollbar",children:[h.map(t=>(0,r.jsxs)(o(),{href:t.href,onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k(t.href)?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k(t.href)?"fill-1":"group-hover:text-primary transition-colors"),children:t.icon}),(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label})]},t.href)),(0,r.jsxs)("div",{className:"pt-4 mt-2",children:[(0,r.jsx)("p",{className:"px-4 text-xs font-semibold text-text-muted/60 uppercase tracking-wider mb-2",children:"Debug"}),v&&(0,r.jsxs)(o(),{href:"/dashboard/translator",onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k("/dashboard/translator")?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k("/dashboard/translator")?"fill-1":"group-hover:text-primary transition-colors"),children:"translate"}),(0,r.jsx)("span",{className:"text-sm font-medium",children:"Translator"})]}),p.map(t=>(0,r.jsxs)(o(),{href:t.href,onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k(t.href)?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k(t.href)?"fill-1":"group-hover:text-primary transition-colors"),children:t.icon}),(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label})]},t.href))]}),(0,r.jsxs)("div",{className:"pt-4 mt-2",children:[(0,r.jsx)("p",{className:"px-4 text-xs font-semibold text-text-muted/60 uppercase tracking-wider mb-2",children:"System"}),f.map(t=>(0,r.jsxs)(o(),{href:t.href,onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k(t.href)?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k(t.href)?"fill-1":"group-hover:text-primary transition-colors"),children:t.icon}),(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label})]},t.href))]})]}),(0,r.jsxs)("div",{className:"p-3 border-t border-black/5 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"flex items-start gap-2 p-2 rounded-lg bg-surface/50 mb-2",children:[(0,r.jsx)("div",{className:"flex items-center justify-center size-6 rounded-md bg-blue-500/10 text-blue-500 shrink-0 mt-0.5",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"info"})}),(0,r.jsx)("div",{className:"flex flex-col",children:(0,r.jsx)("span",{className:"text-xs font-medium text-text-main leading-relaxed",children:"Service is running in terminal. You can close this web page. Shutdown will stop the service."})})]}),(0,r.jsx)(x.default,{variant:"outline",fullWidth:!0,icon:"power_settings_new",onClick:()=>l(!0),className:"text-red-500 border-red-200 hover:bg-red-50 hover:border-red-300",children:"Shutdown"})]})]}),(0,r.jsx)(u.ConfirmModal,{isOpen:s,onClose:()=>l(!1),onConfirm:w,title:"Close Proxy",message:"Are you sure you want to close the proxy server?",confirmText:"Close",cancelText:"Cancel",variant:"danger",loading:n}),b&&(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm",children:(0,r.jsxs)("div",{className:"text-center p-8",children:[(0,r.jsx)("div",{className:"flex items-center justify-center size-16 rounded-full bg-red-500/20 text-red-500 mx-auto mb-4",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"power_off"})}),(0,r.jsx)("h2",{className:"text-xl font-semibold text-white mb-2",children:"Server Disconnected"}),(0,r.jsx)("p",{className:"text-text-muted mb-6",children:"The proxy server has been stopped."}),(0,r.jsx)(x.default,{variant:"secondary",onClick:()=>globalThis.location.reload(),children:"Reload Page"})]})})]})}b.propTypes={onClose:n().func}},93308:(e,t,s)=>{s.d(t,{CL:()=>l,QC:()=>n,Xn:()=>a,YZ:()=>r});let r=["en","vi","zh-CN"],a="en",l="locale";function n(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":a}},94230:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(35497),o=s(11059);function d({isOpen:e,provider:t,onSuccess:s,onClose:l}){let[n,d]=(0,a.useState)("loading"),[c,m]=(0,a.useState)(""),[x,u]=(0,a.useState)(null),[h,p]=(0,a.useState)(""),[f,b]=(0,a.useState)(null),{copied:g,copy:j}=(0,o.C)();(0,a.useEffect)(()=>{e&&t&&(async()=>{try{b(null),d("loading");let e=await fetch(`/api/oauth/kiro/social-authorize?provider=${t}`),s=await e.json();if(!e.ok)throw Error(s.error);u(s),m(s.authUrl),d("input"),window.open(s.authUrl,"_blank")}catch(e){b(e.message),d("error")}})()},[e,t]);let y=async()=>{try{let e;b(null);try{e=new URL(h)}catch(e){throw Error("Invalid callback URL format")}let r=e.searchParams.get("code");e.searchParams.get("state");let a=e.searchParams.get("error");if(a)throw Error(e.searchParams.get("error_description")||a);if(!r)throw Error("No authorization code found in URL");let l=await fetch("/api/oauth/kiro/social-exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:r,codeVerifier:x.codeVerifier,provider:t})}),n=await l.json();if(!l.ok)throw Error(n.error);d("success"),s?.()}catch(e){b(e.message),d("error")}},v="google"===t?"Google":"GitHub";return(0,r.jsx)(i.aF,{isOpen:e,title:`Connect Kiro via ${v}`,onClose:l,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["loading"===n&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Initializing..."}),(0,r.jsxs)("p",{className:"text-sm text-text-muted",children:["Setting up ",v," authentication"]})]}),"input"===n&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:c,readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===g?"check":"content_copy",onClick:()=>j(c,"auth_url"),children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser address bar."}),(0,r.jsx)(i.pd,{value:h,onChange:e=>p(e.target.value),placeholder:"kiro://kiro.kiroAgent/authenticate-success?code=...",className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:y,fullWidth:!0,disabled:!h,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===n&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your Kiro account via ",v," has been connected."]}),(0,r.jsx)(i.$n,{onClick:l,fullWidth:!0,children:"Done"})]}),"error"===n&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:f}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:()=>d("input"),variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().oneOf(["google","github"]).isRequired,onSuccess:n().func,onClose:n().func.isRequired}},98542:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(95155),a=s(31474);function l({checked:e=!1,onChange:t,label:s,description:l,disabled:n=!1,size:i="md",className:o}){let d={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,r.jsxs)("div",{className:(0,a.cn)("flex items-center gap-3",n&&"opacity-50 cursor-not-allowed",o),children:[(0,r.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:n,onClick:()=>{!n&&t&&t(!e)},className:(0,a.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-1 focus:ring-primary/30",e?"bg-primary":"bg-black/10 dark:bg-white/20",d[i].track,n&&"cursor-not-allowed"),children:(0,r.jsx)("span",{className:(0,a.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?d[i].translate:"translate-x-0.5",d[i].thumb,"mt-0.5")})}),(s||l)&&(0,r.jsxs)("div",{className:"flex flex-col",children:[s&&(0,r.jsx)("span",{className:"text-sm font-medium text-text-main",children:s}),l&&(0,r.jsx)("span",{className:"text-xs text-text-muted",children:l})]})]})}}}]);
7
+ `,children:s?(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[11px]",children:"edit"}),e.name]}):e.name},e.id)})})]},e)),0===Object.keys(w).length&&0===k.length&&(0,r.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,r.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})}m.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onSelect:n().func.isRequired,selectedModel:n().string,activeProviders:n().arrayOf(n().shape({provider:n().string.isRequired})),title:n().string,modelAliases:n().object}},73006:(e,t,s)=>{s.d(t,{FE:()=>x,Tl:()=>d,wn:()=>u});var r=s(93308);let a={},l=r.Xn,n=[];function i(){if("u"<typeof document)return r.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${r.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):r.Xn;return(0,r.QC)(t)}async function o(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function d(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==l&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let s=t;for(;s;){if(s.hasAttribute&&s.hasAttribute("data-i18n-skip"))return;s=s.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let r=d(e._originalText);r!==e.nodeValue&&(e.nodeValue=r)}function m(e){let t;if(!e)return;let s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),r=[];for(;t=s.nextNode();)r.push(t);r.forEach(c)}async function x(){l=i(),await o(l),m(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?m(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function u(){l=i(),await o(l),n.forEach(e=>e()),m(document.body)}},74891:(e,t,s)=>{s.d(t,{default:()=>h});var r=s(95155),a=s(73321),l=s(12115),n=s(98500),i=s.n(n),o=s(5772),d=s(14051),c=s.n(d),m=s(35497),x=s(90620),u=s(73006);function h({onMenuClick:e,showMenuButton:t=!0}){let s=(0,a.usePathname)(),n=(0,a.useRouter)(),{title:d,description:c,breadcrumbs:h}=(0,l.useMemo)(()=>(e=>{if(!e)return{title:"",description:"",breadcrumbs:[]};let t=e.match(/\/providers\/([^/]+)$/);if(t){let e=t[1],s=x.zN[e]||x.fg[e];if(s)return{title:s.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:s.name,image:`/providers/${s.id}.png`}]}}return e.includes("/providers")?{title:"Providers",description:"Manage your AI provider connections",breadcrumbs:[]}:e.includes("/combos")?{title:"Combos",description:"Model combos with fallback",breadcrumbs:[]}:e.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",breadcrumbs:[]}:e.includes("/mitm")?{title:"MITM Proxy",description:"Intercept CLI tool traffic and route through 9Router",breadcrumbs:[]}:e.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",breadcrumbs:[]}:e.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:e.includes("/profile")?{title:"Settings",description:"Manage your preferences",breadcrumbs:[]}:e.includes("/translator")?{title:"Translator",description:"Debug translation flow between formats",breadcrumbs:[]}:e.includes("/console-log")?{title:"Console Log",description:"Live server console output",breadcrumbs:[]}:"/dashboard"===e?{title:"Endpoint",description:"API endpoint configuration",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(s),[s]),p=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&(n.push("/login"),n.refresh())}catch(e){console.error("Failed to logout:",e)}};return(0,r.jsxs)("header",{className:"flex items-center justify-between px-8 py-5 border-b border-black/5 dark:border-white/5 bg-bg/80 backdrop-blur-xl z-10 sticky top-0",children:[(0,r.jsx)("div",{className:"flex items-center gap-3 lg:hidden",children:t&&(0,r.jsx)("button",{onClick:e,className:"text-text-main hover:text-primary transition-colors",children:(0,r.jsx)("span",{className:"material-symbols-outlined",children:"menu"})})}),(0,r.jsx)("div",{className:"hidden lg:flex flex-col",children:h.length>0?(0,r.jsx)("div",{className:"flex items-center gap-2",children:h.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[t>0&&(0,r.jsx)("span",{className:"material-symbols-outlined text-text-muted text-base",children:"chevron_right"}),e.href?(0,r.jsx)(i(),{href:e.href,className:"text-text-muted hover:text-primary transition-colors",children:e.label}):(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[e.image&&(0,r.jsx)(o.default,{src:e.image,alt:e.label,width:28,height:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",sizes:"28px",onError:e=>{e.currentTarget.style.display="none"}}),(0,r.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:(0,u.Tl)(e.label)})]})]},`${e.label}-${e.href||"current"}`))}):d?(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-2xl font-semibold text-text-main tracking-tight",children:(0,u.Tl)(d)}),c&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:(0,u.Tl)(c)})]}):null}),(0,r.jsxs)("div",{className:"flex items-center gap-3 ml-auto",children:[(0,r.jsx)(m.c5,{}),(0,r.jsx)(m.UW,{}),(0,r.jsx)("button",{onClick:p,className:"flex items-center justify-center p-2 rounded-lg text-text-muted hover:text-red-500 hover:bg-red-500/10 transition-all",title:"Logout",children:(0,r.jsx)("span",{className:"material-symbols-outlined",children:"logout"})})]})]})}h.propTypes={onMenuClick:c().func,showMenuButton:c().bool}},81127:(e,t,s)=>{s.d(t,{ConfirmModal:()=>o,default:()=>i});var r=s(95155),a=s(12115),l=s(31474),n=s(92542);function i({isOpen:e,onClose:t,title:s,children:n,footer:i,size:o="md",closeOnOverlay:d=!0,showCloseButton:c=!0,className:m}){return((0,a.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,a.useEffect)(()=>{let s=s=>{"Escape"===s.key&&e&&t()};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[e,t]),e)?(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-black/30 backdrop-blur-sm",onClick:d?t:void 0}),(0,r.jsxs)("div",{className:(0,l.cn)("relative w-full bg-surface","border border-black/10 dark:border-white/10","rounded-xl shadow-2xl","animate-in fade-in zoom-in-95 duration-200",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[o],m),children:[(s||c)&&(0,r.jsxs)("div",{className:"flex items-center justify-between p-6 border-b border-black/5 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mr-4",children:[(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),s&&(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:s})]}),c&&(0,r.jsx)("button",{onClick:t,className:"p-1.5 rounded-lg text-text-muted hover:bg-black/5 dark:hover:bg-white/5 transition-colors",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,r.jsx)("div",{className:"p-6 max-h-[calc(80vh-140px)] overflow-y-auto",children:n}),i&&(0,r.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-black/5 dark:border-white/5",children:i})]})]}):null}function o({isOpen:e,onClose:t,onConfirm:s,title:a="Confirm",message:l,confirmText:o="Confirm",cancelText:d="Cancel",variant:c="danger",loading:m=!1}){return(0,r.jsx)(i,{isOpen:e,onClose:t,title:a,size:"sm",footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.default,{variant:"ghost",onClick:t,disabled:m,children:d}),(0,r.jsx)(n.default,{variant:c,onClick:s,loading:m,children:o})]}),children:(0,r.jsx)("p",{className:"text-text-muted",children:l})})}},84588:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(95155),a=s(31474);function l({children:e,title:t,subtitle:s,icon:l,action:n,padding:i="md",hover:o=!1,className:d,...c}){return(0,r.jsxs)("div",{className:(0,a.cn)("bg-surface","border border-black/5 dark:border-white/5","rounded-lg shadow-sm",o&&"hover:shadow-md hover:border-primary/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[i],d),...c,children:[(t||n)&&(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[l&&(0,r.jsx)("div",{className:"p-2 rounded-lg bg-bg text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:l})}),(0,r.jsxs)("div",{children:[t&&(0,r.jsx)("h3",{className:"text-text-main font-semibold",children:t}),s&&(0,r.jsx)("p",{className:"text-sm text-text-muted",children:s})]})]}),n]}),e]})}l.Section=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-4 rounded-lg","bg-black/[0.02] dark:bg-white/[0.02]","border border-black/5 dark:border-white/5",t),...s,children:e})},l.Row=function({children:e,className:t,...s}){return(0,r.jsx)("div",{className:(0,a.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-black/5 dark:border-white/5 last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]",t),...s,children:e})},l.ListItem=function({children:e,actions:t,className:s,...l}){return(0,r.jsxs)("div",{className:(0,a.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0","hover:bg-black/[0.02] dark:hover:bg-white/[0.02]","transition-colors",s),...l,children:[(0,r.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,r.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}},90085:(e,t,s)=>{s.d(t,{A:()=>i});var r=s(1934),a=s(31692),l=s(90620);function n(e){let t=document.documentElement,s=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?s:e)?t.classList.add("dark"):t.classList.remove("dark")}let i=(0,r.v)((0,a.Zr)((e,t)=>({theme:l.B2.defaultTheme,setTheme:t=>{e({theme:t}),n(t)},toggleTheme:()=>{let s="dark"===t().theme?"light":"dark";e({theme:s}),n(s)},initTheme:()=>{n(t().theme)}}),{name:l.B2.storageKey}))},90620:(e,t,s)=>{s.d(t,{Q2:()=>r.Q2,fg:()=>r.fg,vQ:()=>a,MA:()=>r.MA,UY:()=>n,zN:()=>r.zN,B2:()=>l});var r=s(52679);s(28777);let a={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.35"},l={storageKey:"theme",defaultTheme:"system"},n={maxLines:200,pollIntervalMs:1e3}},90882:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(35497),o=s(11059);function d({isOpen:e,provider:t,providerInfo:s,onSuccess:l,onClose:n}){let[d,c]=(0,a.useState)("waiting"),[m,x]=(0,a.useState)(null),[u,h]=(0,a.useState)(""),[p,f]=(0,a.useState)(null),[b,g]=(0,a.useState)(!1),[j,y]=(0,a.useState)(null),[v,N]=(0,a.useState)(!1),k=(0,a.useRef)(null),w=(0,a.useRef)(!1),{copied:C,copy:S}=(0,o.C)(),[T,M]=(0,a.useState)(!1),[$,R]=(0,a.useState)("/callback?code=..."),E=(0,a.useRef)(!1);(0,a.useEffect)(()=>{M("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),R(`${window.location.origin}/callback?code=...`)},[]);let L=(0,a.useCallback)(async(e,s)=>{if(m)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:m.redirectUri,codeVerifier:m.codeVerifier,state:s})}),a=await r.json();if(!r.ok)throw Error(a.error);c("success"),l?.()}catch(e){f(e.message),c("error")}},[m,t,l]),O=(0,a.useCallback)(async(e,s,r,a)=>{w.current=!1,N(!0);for(let n=0;n<60;n++){if(w.current){console.log("[OAuthModal] Polling aborted"),N(!1);return}if(await new Promise(e=>setTimeout(e,1e3*r)),w.current){console.log("[OAuthModal] Polling aborted after sleep"),N(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:s,extraData:a})}),i=await n.json();if(i.success){w.current=!0,c("success"),N(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){f(e.message),c("error"),N(!1);return}}f("Authorization timeout"),c("error"),N(!1)},[t,l]),I=(0,a.useCallback)(async()=>{if(t)try{let e;if(f(null),["github","qwen","kiro","kimi-coding","kilocode"].includes(t)){g(!0),c("waiting");let e=await fetch(`/api/oauth/${t}/device-code`),s=await e.json();if(!e.ok)throw Error(s.error);y(s);let r=s.verification_uri_complete||s.verification_uri;r&&window.open(r,"_blank");let a="kiro"===t?{_clientId:s._clientId,_clientSecret:s._clientSecret}:null;O(s.device_code,s.codeVerifier,s.interval||5,a);return}if("codex"===t)e="http://localhost:1455/auth/callback";else{let t=window.location.port||("https:"===window.location.protocol?"443":"80");e=`http://localhost:${t}/callback`}let s=await fetch(`/api/oauth/${t}/authorize?redirect_uri=${encodeURIComponent(e)}`),r=await s.json();if(!s.ok)throw Error(r.error);x({...r,redirectUri:e}),"codex"!==t&&T?(c("waiting"),k.current=window.open(r.authUrl,"oauth_popup","width=600,height=700"),k.current||c("input")):(c("input"),window.open(r.authUrl,"_blank"))}catch(e){f(e.message),c("error")}},[t,T,O]);(0,a.useEffect)(()=>{e&&t?(x(null),h(""),f(null),g(!1),y(null),N(!1),w.current=!1,I()):e||(w.current=!0)},[e,t,I]),(0,a.useEffect)(()=>{let e;if(!m)return;E.current=!1;let t=async e=>{if(E.current)return;let{code:t,state:s,error:r,errorDescription:a}=e;if(r){E.current=!0,f(a||r),c("error");return}t&&(E.current=!0,await L(t,s))},s=e=>{let s=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),r=e.origin===window.location.origin;(s||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",s);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let s=JSON.parse(e.newValue);t(s),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let s=JSON.parse(e);s.timestamp&&Date.now()-s.timestamp<3e4&&t(s),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",s),window.removeEventListener("storage",r),e&&e.close()}},[m,L]);let z=async()=>{try{f(null);let e=new URL(u),t=e.searchParams.get("code"),s=e.searchParams.get("state"),r=e.searchParams.get("error");if(r)throw Error(e.searchParams.get("error_description")||r);if(!t)throw Error("No authorization code found in URL");await L(t,s)}catch(e){f(e.message),c("error")}},P=(0,a.useCallback)(()=>{n()},[n]);return t&&s?(0,r.jsx)(i.aF,{isOpen:e,title:`Connect ${s.name}`,onClose:P,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["waiting"===d&&!b&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Waiting for Authorization"}),(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Complete the authorization in the popup window."}),(0,r.jsx)(i.$n,{variant:"ghost",onClick:()=>c("input"),children:"Popup blocked? Enter URL manually"})]}),"waiting"===d&&b&&j&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the URL below and enter the code:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Verification URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:j.verification_uri}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"verify_url"===C?"check":"content_copy",onClick:()=>S(j.verification_uri,"verify_url")})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:j.user_code}),(0,r.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===C?"check":"content_copy",onClick:()=>S(j.user_code,"user_code")})]})]})]}),v&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"input"===d&&!b&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:m?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===C?"check":"content_copy",onClick:()=>S(m?.authUrl,"auth_url"),children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser."}),(0,r.jsx)(i.pd,{value:u,onChange:e=>h(e.target.value),placeholder:$,className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:z,fullWidth:!0,disabled:!u,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:P,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===d&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",s.name," account has been connected."]}),(0,r.jsx)(i.$n,{onClick:P,fullWidth:!0,children:"Done"})]}),"error"===d&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:p}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:I,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:P,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired}},91450:(e,t,s)=>{s.d(t,{default:()=>i});var r=s(95155),a=s(14051),l=s.n(a),n=s(38587);function i({children:e}){return(0,r.jsxs)("div",{className:"min-h-screen flex flex-col relative bg-bg transition-colors duration-500 overflow-x-hidden selection:bg-primary/20 selection:text-primary",children:[(0,r.jsx)("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-primary/5 dark:bg-primary/5 rounded-full blur-[100px] pointer-events-none z-0"}),(0,r.jsx)("div",{className:"fixed bottom-0 right-0 w-[600px] h-[600px] bg-orange-200/20 dark:bg-orange-900/10 rounded-full blur-[120px] pointer-events-none z-0 translate-y-1/3 translate-x-1/3"}),(0,r.jsx)("div",{className:"absolute top-6 right-6 z-20",children:(0,r.jsx)(n.default,{variant:"card"})}),(0,r.jsx)("main",{className:"flex-1 flex flex-col items-center justify-center p-4 sm:p-6 z-10 w-full h-full",children:e})]})}i.propTypes={children:l().node.isRequired}},92173:(e,t,s)=>{s.d(t,{default:()=>c});var r=s(95155),a=s(98500),l=s.n(a),n=s(90620);let i=[{label:"Features",href:"#features"},{label:"Pricing",href:"#pricing"},{label:"Changelog",href:"#"}],o=[{label:"Documentation",href:"#"},{label:"API Reference",href:"#"},{label:"Help Center",href:"#"}],d=[{label:"About",href:"#"},{label:"Blog",href:"#"},{label:"Contact",href:"#"}];function c(){return(0,r.jsx)("footer",{className:"bg-bg border-t border-border pt-16 pb-12",children:(0,r.jsxs)("div",{className:"container mx-auto px-4 sm:px-6 lg:px-8",children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-10 mb-12",children:[(0,r.jsxs)("div",{className:"col-span-2 lg:col-span-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,r.jsx)("div",{className:"size-6 text-primary",children:(0,r.jsx)("svg",{className:"w-full h-full",fill:"currentColor",viewBox:"0 0 48 48",children:(0,r.jsx)("path",{clipRule:"evenodd",d:"M12.0799 24L4 19.2479L9.95537 8.75216L18.04 13.4961L18.0446 4H29.9554L29.96 13.4961L38.0446 8.75216L44 19.2479L35.92 24L44 28.7521L38.0446 39.2479L29.96 34.5039L29.9554 44H18.0446L18.04 34.5039L9.95537 39.2479L4 28.7521L12.0799 24Z",fillRule:"evenodd"})})}),(0,r.jsx)("span",{className:"text-xl font-bold text-text-main",children:n.vQ.name})]}),(0,r.jsx)("p",{className:"text-text-muted mb-6 max-w-sm font-light",children:"The unified interface for modern AI infrastructure. Secure, observable, and scalable."}),(0,r.jsxs)("div",{className:"flex gap-4",children:[(0,r.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"Twitter",children:(0,r.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{d:"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"})})}),(0,r.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"GitHub",children:(0,r.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0 0 22 12.017C22 6.484 17.522 2 12 2z"})})})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Product"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:i.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Resources"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:o.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Company"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:d.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]})]}),(0,r.jsxs)("div",{className:"border-t border-border pt-8 flex flex-col md:flex-row justify-between items-center gap-4",children:[(0,r.jsxs)("p",{className:"text-sm text-text-muted",children:["\xa9 ",new Date().getFullYear()," ",n.vQ.name," Inc. All rights reserved."]}),(0,r.jsxs)("div",{className:"flex gap-6 text-sm text-text-muted",children:[(0,r.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Privacy Policy"}),(0,r.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Terms of Service"})]})]})]})})}},92542:(e,t,s)=>{s.d(t,{default:()=>i});var r=s(95155),a=s(31474);let l={primary:"bg-gradient-to-b from-primary to-primary-hover text-white shadow-sm",secondary:"bg-white dark:bg-white/10 border border-black/10 dark:border-white/10 text-text-main hover:bg-black/5 dark:hover:bg-white/5",outline:"border border-black/15 dark:border-white/15 text-text-main hover:bg-black/5",ghost:"text-text-muted hover:bg-black/5 dark:hover:bg-white/5 hover:text-text-main",danger:"bg-red-500 text-white hover:bg-red-600 shadow-sm"},n={sm:"h-7 px-3 text-xs rounded-md",md:"h-9 px-4 text-sm rounded-lg",lg:"h-11 px-6 text-sm rounded-lg"};function i({children:e,variant:t="primary",size:s="md",icon:i,iconRight:o,disabled:d=!1,loading:c=!1,fullWidth:m=!1,className:x,...u}){return(0,r.jsxs)("button",{className:(0,a.cn)("inline-flex items-center justify-center gap-2 font-medium transition-all duration-200 cursor-pointer","active:scale-[0.99] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100",l[t],n[s],m&&"w-full",x),disabled:d||c,...u,children:[c?(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}):i?(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:i}):null,e,o&&!c&&(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:o})]})}},92622:(e,t,s)=>{s.d(t,{default:()=>b});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(98500),o=s.n(i),d=s(73321),c=s(31474),m=s(90620),x=s(92542),u=s(81127);let h=[{href:"/dashboard/endpoint",label:"Endpoint",icon:"api"},{href:"/dashboard/providers",label:"Providers",icon:"dns"},{href:"/dashboard/combos",label:"Combos",icon:"layers"},{href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{href:"/dashboard/quota",label:"Quota Tracker",icon:"data_usage"},{href:"/dashboard/mitm",label:"MITM",icon:"security"},{href:"/dashboard/cli-tools",label:"CLI Tools",icon:"terminal"}],p=[{href:"/dashboard/console-log",label:"Console Log",icon:"terminal"}],f=[{href:"/dashboard/profile",label:"Settings",icon:"settings"}];function b({onClose:e}){let t=(0,d.usePathname)(),[s,l]=(0,a.useState)(!1),[n,i]=(0,a.useState)(!1),[b,g]=(0,a.useState)(!1),[j,y]=(0,a.useState)(null),[v,N]=(0,a.useState)(!1);(0,a.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{e.enableTranslator&&N(!0)}).catch(()=>{})},[]),(0,a.useEffect)(()=>{fetch("/api/version").then(e=>e.json()).then(e=>{e.hasUpdate&&y(e)}).catch(()=>{})},[]);let k=e=>"/dashboard/endpoint"===e?"/dashboard"===t||t.startsWith("/dashboard/endpoint"):t.startsWith(e),w=async()=>{i(!0);try{await fetch("/api/shutdown",{method:"POST"})}catch(e){}i(!1),l(!1),g(!0)};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("aside",{className:"flex w-72 flex-col border-r border-black/5 dark:border-white/5 bg-vibrancy backdrop-blur-xl transition-colors duration-300",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-6 pt-5 pb-2",children:[(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FF5F56]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#FFBD2E]"}),(0,r.jsx)("div",{className:"w-3 h-3 rounded-full bg-[#27C93F]"})]}),(0,r.jsxs)("div",{className:"px-6 py-4 flex flex-col gap-2",children:[(0,r.jsxs)(o(),{href:"/dashboard",className:"flex items-center gap-3",children:[(0,r.jsx)("div",{className:"flex items-center justify-center size-9 rounded bg-linear-to-br from-[#f97815] to-[#c2590a]",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-white text-[20px]",children:"hub"})}),(0,r.jsxs)("div",{className:"flex flex-col",children:[(0,r.jsx)("h1",{className:"text-lg font-semibold tracking-tight text-text-main",children:m.vQ.name}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["v",m.vQ.version]})]})]}),j&&(0,r.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,r.jsxs)("span",{className:"text-xs font-semibold text-green-600 dark:text-amber-500",children:["↑ New version available: v",j.latestVersion]}),(0,r.jsx)("code",{className:"text-[10px] text-green-600/80 dark:text-amber-400/70 font-mono select-all",children:"npm install -g 9router@latest"})]})]}),(0,r.jsxs)("nav",{className:"flex-1 px-4 py-2 space-y-1 overflow-y-auto custom-scrollbar",children:[h.map(t=>(0,r.jsxs)(o(),{href:t.href,onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k(t.href)?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k(t.href)?"fill-1":"group-hover:text-primary transition-colors"),children:t.icon}),(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label})]},t.href)),(0,r.jsxs)("div",{className:"pt-4 mt-2",children:[(0,r.jsx)("p",{className:"px-4 text-xs font-semibold text-text-muted/60 uppercase tracking-wider mb-2",children:"Debug"}),v&&(0,r.jsxs)(o(),{href:"/dashboard/translator",onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k("/dashboard/translator")?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k("/dashboard/translator")?"fill-1":"group-hover:text-primary transition-colors"),children:"translate"}),(0,r.jsx)("span",{className:"text-sm font-medium",children:"Translator"})]}),p.map(t=>(0,r.jsxs)(o(),{href:t.href,onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k(t.href)?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k(t.href)?"fill-1":"group-hover:text-primary transition-colors"),children:t.icon}),(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label})]},t.href))]}),(0,r.jsxs)("div",{className:"pt-4 mt-2",children:[(0,r.jsx)("p",{className:"px-4 text-xs font-semibold text-text-muted/60 uppercase tracking-wider mb-2",children:"System"}),f.map(t=>(0,r.jsxs)(o(),{href:t.href,onClick:e,className:(0,c.cn)("flex items-center gap-3 px-4 py-2 rounded-lg transition-all group",k(t.href)?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface/50 hover:text-text-main"),children:[(0,r.jsx)("span",{className:(0,c.cn)("material-symbols-outlined text-[18px]",k(t.href)?"fill-1":"group-hover:text-primary transition-colors"),children:t.icon}),(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label})]},t.href))]})]}),(0,r.jsxs)("div",{className:"p-3 border-t border-black/5 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"flex items-start gap-2 p-2 rounded-lg bg-surface/50 mb-2",children:[(0,r.jsx)("div",{className:"flex items-center justify-center size-6 rounded-md bg-blue-500/10 text-blue-500 shrink-0 mt-0.5",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"info"})}),(0,r.jsx)("div",{className:"flex flex-col",children:(0,r.jsx)("span",{className:"text-xs font-medium text-text-main leading-relaxed",children:"Service is running in terminal. You can close this web page. Shutdown will stop the service."})})]}),(0,r.jsx)(x.default,{variant:"outline",fullWidth:!0,icon:"power_settings_new",onClick:()=>l(!0),className:"text-red-500 border-red-200 hover:bg-red-50 hover:border-red-300",children:"Shutdown"})]})]}),(0,r.jsx)(u.ConfirmModal,{isOpen:s,onClose:()=>l(!1),onConfirm:w,title:"Close Proxy",message:"Are you sure you want to close the proxy server?",confirmText:"Close",cancelText:"Cancel",variant:"danger",loading:n}),b&&(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm",children:(0,r.jsxs)("div",{className:"text-center p-8",children:[(0,r.jsx)("div",{className:"flex items-center justify-center size-16 rounded-full bg-red-500/20 text-red-500 mx-auto mb-4",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"power_off"})}),(0,r.jsx)("h2",{className:"text-xl font-semibold text-white mb-2",children:"Server Disconnected"}),(0,r.jsx)("p",{className:"text-text-muted mb-6",children:"The proxy server has been stopped."}),(0,r.jsx)(x.default,{variant:"secondary",onClick:()=>globalThis.location.reload(),children:"Reload Page"})]})})]})}b.propTypes={onClose:n().func}},93308:(e,t,s)=>{s.d(t,{CL:()=>l,QC:()=>n,Xn:()=>a,YZ:()=>r});let r=["en","vi","zh-CN"],a="en",l="locale";function n(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":a}},94230:(e,t,s)=>{s.d(t,{default:()=>d});var r=s(95155),a=s(12115),l=s(14051),n=s.n(l),i=s(35497),o=s(11059);function d({isOpen:e,provider:t,onSuccess:s,onClose:l}){let[n,d]=(0,a.useState)("loading"),[c,m]=(0,a.useState)(""),[x,u]=(0,a.useState)(null),[h,p]=(0,a.useState)(""),[f,b]=(0,a.useState)(null),{copied:g,copy:j}=(0,o.C)();(0,a.useEffect)(()=>{e&&t&&(async()=>{try{b(null),d("loading");let e=await fetch(`/api/oauth/kiro/social-authorize?provider=${t}`),s=await e.json();if(!e.ok)throw Error(s.error);u(s),m(s.authUrl),d("input"),window.open(s.authUrl,"_blank")}catch(e){b(e.message),d("error")}})()},[e,t]);let y=async()=>{try{let e;b(null);try{e=new URL(h)}catch(e){throw Error("Invalid callback URL format")}let r=e.searchParams.get("code");e.searchParams.get("state");let a=e.searchParams.get("error");if(a)throw Error(e.searchParams.get("error_description")||a);if(!r)throw Error("No authorization code found in URL");let l=await fetch("/api/oauth/kiro/social-exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:r,codeVerifier:x.codeVerifier,provider:t})}),n=await l.json();if(!l.ok)throw Error(n.error);d("success"),s?.()}catch(e){b(e.message),d("error")}},v="google"===t?"Google":"GitHub";return(0,r.jsx)(i.aF,{isOpen:e,title:`Connect Kiro via ${v}`,onClose:l,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["loading"===n&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Initializing..."}),(0,r.jsxs)("p",{className:"text-sm text-text-muted",children:["Setting up ",v," authentication"]})]}),"input"===n&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.pd,{value:c,readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===g?"check":"content_copy",onClick:()=>j(c,"auth_url"),children:"Copy"})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser address bar."}),(0,r.jsx)(i.pd,{value:h,onChange:e=>p(e.target.value),placeholder:"kiro://kiro.kiroAgent/authenticate-success?code=...",className:"font-mono text-xs"})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:y,fullWidth:!0,disabled:!h,children:"Connect"}),(0,r.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===n&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your Kiro account via ",v," has been connected."]}),(0,r.jsx)(i.$n,{onClick:l,fullWidth:!0,children:"Done"})]}),"error"===n&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:f}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(i.$n,{onClick:()=>d("input"),variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,r.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().oneOf(["google","github"]).isRequired,onSuccess:n().func,onClose:n().func.isRequired}},98542:(e,t,s)=>{s.d(t,{default:()=>l});var r=s(95155),a=s(31474);function l({checked:e=!1,onChange:t,label:s,description:l,disabled:n=!1,size:i="md",className:o}){let d={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,r.jsxs)("div",{className:(0,a.cn)("flex items-center gap-3",n&&"opacity-50 cursor-not-allowed",o),children:[(0,r.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:n,onClick:()=>{!n&&t&&t(!e)},className:(0,a.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-1 focus:ring-primary/30",e?"bg-primary":"bg-black/10 dark:bg-white/20",d[i].track,n&&"cursor-not-allowed"),children:(0,r.jsx)("span",{className:(0,a.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?d[i].translate:"translate-x-0.5",d[i].thumb,"mt-0.5")})}),(s||l)&&(0,r.jsxs)("div",{className:"flex flex-col",children:[s&&(0,r.jsx)("span",{className:"text-sm font-medium text-text-main",children:s}),l&&(0,r.jsx)("span",{className:"text-xs text-text-muted",children:l})]})]})}}}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>s});var n=r(12115);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,i={setState:n,getState:a,getInitialState:()=>s,subscribe:e=>(r.add(e),()=>r.delete(e))},s=t=e(n,a,i);return i},i=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},s=e=>e?i(e):i},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>s});var n=r(95155),a=r(12115),i=r(90085);function s({children:e}){let{initTheme:t}=(0,i.A)();return(0,a.useEffect)(()=>{t()},[t]),(0,n.jsx)(n.Fragment,{children:e})}},28777:(e,t,r)=>{"use strict";r.d(t,{KC:()=>n.KC,Xg:()=>n.Xg});var n=r(13097);Object.entries(r(52679).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})))},31692:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},a=(e,t)=>(r,a,i)=>{let s,o={storage:function(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;let n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(t=r.getItem(e))?t:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},l=!1,u=0,c=new Set,d=new Set,m=o.storage;if(!m)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),r(...e)},a,i);let f=()=>{let e=o.partialize({...a()});return m.setItem(o.name,{state:e,version:o.version})},h=i.setState;i.setState=(e,t)=>(h(e,t),f());let v=e((...e)=>(r(...e),f()),a,i);i.getInitialState=()=>v;let g=()=>{var e,t;if(!m)return;let i=++u;l=!1,c.forEach(e=>{var t;return e(null!=(t=a())?t:v)});let h=(null==(t=o.onRehydrateStorage)?void 0:t.call(o,null!=(e=a())?e:v))||void 0;return n(m.getItem.bind(m))(o.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===o.version)return[!1,e.state];else{if(o.migrate){let t=o.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(i!==u)return;let[n,l]=e;if(r(s=o.merge(l,null!=(t=a())?t:v),!0),n)return f()}).then(()=>{i===u&&(null==h||h(s,void 0),s=a(),l=!0,d.forEach(e=>e(s)))}).catch(e=>{i===u&&(null==h||h(void 0,e))})};return i.persist={setOptions:e=>{o={...o,...e},e.storage&&(m=e.storage)},clearStorage:()=>{null==m||m.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>g(),hasHydrated:()=>l,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},o.skipHydration||g(),s||v}},35154:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}},51743:()=>{},64206:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,35154,23)),Promise.resolve().then(r.t.bind(r,51743,23)),Promise.resolve().then(r.bind(r,94635)),Promise.resolve().then(r.bind(r,21110))},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>m,Tl:()=>u,wn:()=>f});var n=r(93308);let a={},i=n.Xn,s=[];function o(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function l(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function u(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==i&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let r=t;for(;r;){if(r.hasAttribute&&r.hasAttribute("data-i18n-skip"))return;r=r.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let n=u(e._originalText);n!==e.nodeValue&&(e.nodeValue=n)}function d(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(c)}async function m(){i=o(),await l(i),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function f(){i=o(),await l(i),s.forEach(e=>e()),d(document.body)}},73321:(e,t,r)=>{"use strict";var n=r(74645);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},90085:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(1934),a=r(31692),i=r(90620);function s(e){let t=document.documentElement,r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?r:e)?t.classList.add("dark"):t.classList.remove("dark")}let o=(0,n.v)((0,a.Zr)((e,t)=>({theme:i.B2.defaultTheme,setTheme:t=>{e({theme:t}),s(t)},toggleTheme:()=>{let r="dark"===t().theme?"light":"dark";e({theme:r}),s(r)},initTheme:()=>{s(t().theme)}}),{name:i.B2.storageKey}))},90620:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>n.Q2,fg:()=>n.fg,vQ:()=>a,MA:()=>n.MA,UY:()=>s,zN:()=>n.zN,B2:()=>i});var n=r(52679);r(28777);let a={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.34"},i={storageKey:"theme",defaultTheme:"system"},s={maxLines:200,pollIntervalMs:1e3}},93308:(e,t,r)=>{"use strict";r.d(t,{CL:()=>i,QC:()=>s,Xn:()=>a,YZ:()=>n});let n=["en","vi","zh-CN"],a="en",i="locale";function s(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":a}},94635:(e,t,r)=>{"use strict";r.d(t,{RuntimeI18nProvider:()=>o});var n=r(95155),a=r(12115),i=r(73321),s=r(73006);function o({children:e}){let t=(0,i.usePathname)();return(0,a.useEffect)(()=>{(0,s.FE)()},[]),(0,a.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,s.wn)()})})},[t]),(0,n.jsx)(n.Fragment,{children:e})}}},e=>{e.O(0,[6930,4495,8441,3794,7358],()=>e(e.s=64206)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1934:(e,t,r)=>{"use strict";r.d(t,{v:()=>s});var n=r(12115);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,i={setState:n,getState:a,getInitialState:()=>s,subscribe:e=>(r.add(e),()=>r.delete(e))},s=t=e(n,a,i);return i},i=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},s=e=>e?i(e):i},21110:(e,t,r)=>{"use strict";r.d(t,{ThemeProvider:()=>s});var n=r(95155),a=r(12115),i=r(90085);function s({children:e}){let{initTheme:t}=(0,i.A)();return(0,a.useEffect)(()=>{t()},[t]),(0,n.jsx)(n.Fragment,{children:e})}},28777:(e,t,r)=>{"use strict";r.d(t,{KC:()=>n.KC,Xg:()=>n.Xg});var n=r(13097);Object.entries(r(52679).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(n.vq).flatMap(([e,t])=>t.map(t=>({provider:e,model:t.id,name:t.name})))},31692:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a});let n=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>n(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>n(t)(e)}}},a=(e,t)=>(r,a,i)=>{let s,o={storage:function(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;let n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(t=r.getItem(e))?t:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},l=!1,u=0,c=new Set,d=new Set,m=o.storage;if(!m)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),r(...e)},a,i);let f=()=>{let e=o.partialize({...a()});return m.setItem(o.name,{state:e,version:o.version})},h=i.setState;i.setState=(e,t)=>(h(e,t),f());let v=e((...e)=>(r(...e),f()),a,i);i.getInitialState=()=>v;let g=()=>{var e,t;if(!m)return;let i=++u;l=!1,c.forEach(e=>{var t;return e(null!=(t=a())?t:v)});let h=(null==(t=o.onRehydrateStorage)?void 0:t.call(o,null!=(e=a())?e:v))||void 0;return n(m.getItem.bind(m))(o.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===o.version)return[!1,e.state];else{if(o.migrate){let t=o.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(i!==u)return;let[n,l]=e;if(r(s=o.merge(l,null!=(t=a())?t:v),!0),n)return f()}).then(()=>{i===u&&(null==h||h(s,void 0),s=a(),l=!0,d.forEach(e=>e(s)))}).catch(e=>{i===u&&(null==h||h(void 0,e))})};return i.persist={setOptions:e=>{o={...o,...e},e.storage&&(m=e.storage)},clearStorage:()=>{null==m||m.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>g(),hasHydrated:()=>l,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},o.skipHydration||g(),s||v}},35154:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}},51743:()=>{},64206:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,35154,23)),Promise.resolve().then(r.t.bind(r,51743,23)),Promise.resolve().then(r.bind(r,94635)),Promise.resolve().then(r.bind(r,21110))},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>m,Tl:()=>u,wn:()=>f});var n=r(93308);let a={},i=n.Xn,s=[];function o(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function l(e){if("en"===e){a={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);a=await t.json()}catch(e){console.error("Failed to load translations:",e),a={}}}function u(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==i&&a[t]||e}function c(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let r=t;for(;r;){if(r.hasAttribute&&r.hasAttribute("data-i18n-skip"))return;r=r.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let n=u(e._originalText);n!==e.nodeValue&&(e.nodeValue=n)}function d(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(c)}async function m(){i=o(),await l(i),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&c(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function f(){i=o(),await l(i),s.forEach(e=>e()),d(document.body)}},73321:(e,t,r)=>{"use strict";var n=r(74645);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},90085:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(1934),a=r(31692),i=r(90620);function s(e){let t=document.documentElement,r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?r:e)?t.classList.add("dark"):t.classList.remove("dark")}let o=(0,n.v)((0,a.Zr)((e,t)=>({theme:i.B2.defaultTheme,setTheme:t=>{e({theme:t}),s(t)},toggleTheme:()=>{let r="dark"===t().theme?"light":"dark";e({theme:r}),s(r)},initTheme:()=>{s(t().theme)}}),{name:i.B2.storageKey}))},90620:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>n.Q2,fg:()=>n.fg,vQ:()=>a,MA:()=>n.MA,UY:()=>s,zN:()=>n.zN,B2:()=>i});var n=r(52679);r(28777);let a={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.35"},i={storageKey:"theme",defaultTheme:"system"},s={maxLines:200,pollIntervalMs:1e3}},93308:(e,t,r)=>{"use strict";r.d(t,{CL:()=>i,QC:()=>s,Xn:()=>a,YZ:()=>n});let n=["en","vi","zh-CN"],a="en",i="locale";function s(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":a}},94635:(e,t,r)=>{"use strict";r.d(t,{RuntimeI18nProvider:()=>o});var n=r(95155),a=r(12115),i=r(73321),s=r(73006);function o({children:e}){let t=(0,i.usePathname)();return(0,a.useEffect)(()=>{(0,s.FE)()},[]),(0,a.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,s.wn)()})})},[t]),(0,n.jsx)(n.Fragment,{children:e})}}},e=>{e.O(0,[6930,4495,8441,3794,7358],()=>e(e.s=64206)),_N_E=e.O()}]);
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router-app",
3
- "version": "0.3.34",
3
+ "version": "0.3.35",
4
4
  "description": "9Router web dashboard",
5
5
  "private": true,
6
6
  "scripts": {
@@ -15,6 +15,47 @@ const HOSTS_FILE = IS_WIN
15
15
  ? path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts")
16
16
  : "/etc/hosts";
17
17
 
18
+ /**
19
+ * Execute elevated PowerShell script on Windows via Start-Process -Verb RunAs.
20
+ * Only UAC consent dialog appears, no CMD/PS window popup.
21
+ */
22
+ function executeElevatedPowerShell(psScriptPath, timeoutMs = 30000) {
23
+ const flagFile = path.join(os.tmpdir(), `ps_done_${Date.now()}.flag`);
24
+ const psSQ = (s) => s.replace(/'/g, "''");
25
+
26
+ let psContent = fs.readFileSync(psScriptPath, "utf8");
27
+ psContent += `\nSet-Content -Path '${psSQ(flagFile)}' -Value 'done' -Encoding UTF8\n`;
28
+ fs.writeFileSync(psScriptPath, psContent, "utf8");
29
+
30
+ const outerCmd = `Start-Process powershell -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-WindowStyle','Hidden','-File','${psSQ(psScriptPath)}' -Verb RunAs -WindowStyle Hidden`;
31
+
32
+ return new Promise((resolve, reject) => {
33
+ let settled = false;
34
+ const settle = (fn, arg) => { if (!settled) { settled = true; fn(arg); } };
35
+
36
+ exec(
37
+ `powershell -NoProfile -NonInteractive -WindowStyle Hidden -Command "${outerCmd}"`,
38
+ { windowsHide: true },
39
+ () => {}
40
+ );
41
+
42
+ const deadline = Date.now() + timeoutMs;
43
+ const poll = () => {
44
+ if (settled) return;
45
+ if (fs.existsSync(flagFile)) {
46
+ try { fs.unlinkSync(flagFile); fs.unlinkSync(psScriptPath); } catch { /* ignore */ }
47
+ return settle(resolve);
48
+ }
49
+ if (Date.now() > deadline) {
50
+ try { fs.unlinkSync(psScriptPath); } catch { /* ignore */ }
51
+ return settle(reject, new Error("Timed out waiting for UAC confirmation"));
52
+ }
53
+ setTimeout(poll, 500);
54
+ };
55
+ setTimeout(poll, 300);
56
+ });
57
+ }
58
+
18
59
  /**
19
60
  * Execute command with sudo password via stdin (macOS/Linux only)
20
61
  */
@@ -99,18 +140,37 @@ async function addDNSEntry(tool, sudoPassword) {
99
140
  try {
100
141
  if (IS_WIN) {
101
142
  const hostsPath = HOSTS_FILE.replace(/'/g, "''");
102
- const addLines = entriesToAdd.map(h =>
103
- `$hc = Get-Content -Path '${hostsPath}' -Raw -ErrorAction SilentlyContinue; if ($hc -notmatch '${h}') { Add-Content -Path '${hostsPath}' -Value '127.0.0.1 ${h}' -Encoding UTF8 }`
104
- ).join("; ");
105
- const psScript = `${addLines}; ipconfig /flushdns | Out-Null`;
106
- await new Promise((resolve, reject) => {
107
- const escaped = psScript.replace(/"/g, '\\"');
108
- exec(
109
- `powershell -NonInteractive -WindowStyle Hidden -Command "Start-Process powershell -ArgumentList '-NonInteractive -WindowStyle Hidden -Command \\"${escaped}\\"' -Verb RunAs -Wait"`,
110
- { windowsHide: true },
111
- (error) => { if (error) reject(new Error(`Failed to add DNS: ${error.message}`)); else resolve(); }
112
- );
113
- });
143
+
144
+ // Build PowerShell script with proper error handling
145
+ const scriptLines = [];
146
+ scriptLines.push(`$ErrorActionPreference = 'Stop'`);
147
+ scriptLines.push(`$hostsPath = '${hostsPath}'`);
148
+ scriptLines.push(`try {`);
149
+ scriptLines.push(` $hostsContent = Get-Content -Path $hostsPath -Raw -ErrorAction SilentlyContinue`);
150
+ scriptLines.push(` if (-not $hostsContent) { $hostsContent = '' }`);
151
+
152
+ for (const host of entriesToAdd) {
153
+ // Escape special regex chars in hostname
154
+ const escapedHost = host.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
155
+ scriptLines.push(` if ($hostsContent -notmatch '${escapedHost}') {`);
156
+ scriptLines.push(` Add-Content -Path $hostsPath -Value '127.0.0.1 ${host}' -Encoding UTF8 -ErrorAction Stop`);
157
+ scriptLines.push(` Write-Host "Added DNS entry: ${host}"`);
158
+ scriptLines.push(` } else {`);
159
+ scriptLines.push(` Write-Host "DNS entry already exists: ${host}"`);
160
+ scriptLines.push(` }`);
161
+ }
162
+
163
+ scriptLines.push(` ipconfig /flushdns | Out-Null`);
164
+ scriptLines.push(`} catch {`);
165
+ scriptLines.push(` Write-Error "Failed to add DNS: $_"`);
166
+ scriptLines.push(` exit 1`);
167
+ scriptLines.push(`}`);
168
+
169
+ const psScript = scriptLines.join("\n");
170
+ const tmpPs1 = path.join(os.tmpdir(), `mitm_dns_add_${Date.now()}.ps1`);
171
+ fs.writeFileSync(tmpPs1, psScript, "utf8");
172
+
173
+ await executeElevatedPowerShell(tmpPs1, 30000);
114
174
  } else {
115
175
  await execWithPassword(`echo "${entries}" >> ${HOSTS_FILE}`, sudoPassword);
116
176
  await flushDNS(sudoPassword);
@@ -139,23 +199,35 @@ async function removeDNSEntry(tool, sudoPassword) {
139
199
  if (IS_WIN) {
140
200
  const content = fs.readFileSync(HOSTS_FILE, "utf8");
141
201
  const filtered = content.split(/\r?\n/).filter(l => !entriesToRemove.some(h => l.includes(h))).join("\r\n");
142
- const tmpFile = path.join(os.tmpdir(), "hosts_filtered.tmp");
202
+ const tmpFile = path.join(os.tmpdir(), `hosts_filtered_${Date.now()}.tmp`);
143
203
  fs.writeFileSync(tmpFile, filtered, "utf8");
204
+
144
205
  const tmpEsc = tmpFile.replace(/'/g, "''");
145
206
  const hostsEsc = HOSTS_FILE.replace(/'/g, "''");
146
- const psScript = `Copy-Item -Path '${tmpEsc}' -Destination '${hostsEsc}' -Force; ipconfig /flushdns | Out-Null; Remove-Item '${tmpEsc}' -ErrorAction SilentlyContinue`;
147
- await new Promise((resolve, reject) => {
148
- const escaped = psScript.replace(/"/g, '\\"');
149
- exec(
150
- `powershell -NonInteractive -WindowStyle Hidden -Command "Start-Process powershell -ArgumentList '-NonInteractive -WindowStyle Hidden -Command \\"${escaped}\\"' -Verb RunAs -Wait"`,
151
- { windowsHide: true },
152
- (error) => {
153
- try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
154
- if (error) reject(new Error(`Failed to remove DNS: ${error.message}`));
155
- else resolve();
156
- }
157
- );
158
- });
207
+
208
+ // Build PowerShell script with proper error handling
209
+ const scriptLines = [];
210
+ scriptLines.push(`$ErrorActionPreference = 'Stop'`);
211
+ scriptLines.push(`try {`);
212
+ scriptLines.push(` Copy-Item -Path '${tmpEsc}' -Destination '${hostsEsc}' -Force -ErrorAction Stop`);
213
+ scriptLines.push(` Write-Host "Hosts file updated successfully"`);
214
+ scriptLines.push(` ipconfig /flushdns | Out-Null`);
215
+ scriptLines.push(` Write-Host "DNS cache flushed"`);
216
+ scriptLines.push(` Remove-Item '${tmpEsc}' -ErrorAction SilentlyContinue`);
217
+ scriptLines.push(`} catch {`);
218
+ scriptLines.push(` Write-Error "Failed to remove DNS: $_"`);
219
+ scriptLines.push(` Remove-Item '${tmpEsc}' -ErrorAction SilentlyContinue`);
220
+ scriptLines.push(` exit 1`);
221
+ scriptLines.push(`}`);
222
+
223
+ const psScript = scriptLines.join("\n");
224
+ const tmpPs1 = path.join(os.tmpdir(), `mitm_dns_remove_${Date.now()}.ps1`);
225
+ fs.writeFileSync(tmpPs1, psScript, "utf8");
226
+
227
+ await executeElevatedPowerShell(tmpPs1, 30000);
228
+
229
+ // Cleanup temp file if still exists
230
+ try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
159
231
  } else {
160
232
  for (const host of entriesToRemove) {
161
233
  const sedCmd = IS_MAC
@@ -191,6 +263,7 @@ module.exports = {
191
263
  removeDNSEntry,
192
264
  removeAllDNSEntries,
193
265
  execWithPassword,
266
+ executeElevatedPowerShell,
194
267
  checkDNSEntry,
195
268
  checkAllDNSStatus,
196
269
  };
@@ -5,7 +5,7 @@ const os = require("os");
5
5
  const net = require("net");
6
6
  const https = require("https");
7
7
  const crypto = require("crypto");
8
- const { addDNSEntry, removeDNSEntry, removeAllDNSEntries, checkAllDNSStatus } = require("./dns/dnsConfig");
8
+ const { addDNSEntry, removeDNSEntry, removeAllDNSEntries, checkAllDNSStatus, executeElevatedPowerShell, TOOL_HOSTS } = require("./dns/dnsConfig");
9
9
 
10
10
  const IS_WIN = process.platform === "win32";
11
11
  const { generateCert } = require("./cert/generate");
@@ -345,49 +345,23 @@ async function startServer(apiKey, sudoPassword) {
345
345
 
346
346
  // Step 2: Spawn server (Root CA already installed in Step 1.5)
347
347
  if (IS_WIN) {
348
- const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
349
- const flagFile = path.join(os.tmpdir(), `mitm_ready_${Date.now()}.flag`);
350
348
  const psSQ = (s) => s.replace(/'/g, "''");
351
349
  const nodePs = psSQ(process.execPath);
352
350
  const serverPs = psSQ(SERVER_PATH);
353
- const flagPs = psSQ(flagFile);
354
351
 
355
352
  const psScript = [
353
+ `$ErrorActionPreference = 'Stop'`,
356
354
  `$conn = Get-NetTCPConnection -LocalPort 443 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1`,
357
355
  `if ($conn -and $conn.OwningProcess -gt 4) { Stop-Process -Id $conn.OwningProcess -Force -ErrorAction SilentlyContinue }`,
358
356
  `Start-Sleep -Milliseconds 500`,
359
357
  `$nodeCmd = 'set ROUTER_API_KEY=${psSQ(apiKey)}&& set NODE_ENV=production&& "${nodePs}" "${serverPs}"'`,
360
358
  `Start-Process cmd -ArgumentList '/c',$nodeCmd -WindowStyle Hidden`,
361
359
  `Start-Sleep -Milliseconds 500`,
362
- `Set-Content -Path '${flagPs}' -Value 'ready' -Encoding UTF8`,
363
360
  ].join("\n");
364
361
 
365
362
  const tmpPs1 = path.join(os.tmpdir(), `mitm_start_${Date.now()}.ps1`);
366
363
  fs.writeFileSync(tmpPs1, psScript, "utf8");
367
- const vbs = [
368
- `Set oShell = CreateObject("Shell.Application")`,
369
- `Dim ps`,
370
- `ps = Chr(34) & "powershell.exe" & Chr(34)`,
371
- `Dim args`,
372
- `args = "-NoProfile -ExecutionPolicy Bypass -File " & Chr(34) & "${tmpPs1}" & Chr(34)`,
373
- `oShell.ShellExecute ps, args, "", "runas", 1`,
374
- ].join("\r\n");
375
- const tmpVbs = path.join(os.tmpdir(), `mitm_uac_${Date.now()}.vbs`);
376
- fs.writeFileSync(tmpVbs, vbs, "utf8");
377
- spawn("wscript.exe", [tmpVbs], { stdio: "ignore", windowsHide: true, detached: true }).unref();
378
-
379
- await new Promise((resolve, reject) => {
380
- const deadline = Date.now() + 90000;
381
- const poll = () => {
382
- if (fs.existsSync(flagFile)) {
383
- try { fs.unlinkSync(flagFile); fs.unlinkSync(tmpPs1); fs.unlinkSync(tmpVbs); } catch { /* ignore */ }
384
- return resolve();
385
- }
386
- if (Date.now() > deadline) return reject(new Error("Timed out waiting for UAC confirmation."));
387
- setTimeout(poll, 500);
388
- };
389
- poll();
390
- });
364
+ await executeElevatedPowerShell(tmpPs1, 90000);
391
365
 
392
366
  if (_updateSettings) await _updateSettings({ mitmCertInstalled: true }).catch(() => { });
393
367
  } else {
@@ -451,38 +425,27 @@ async function startServer(apiKey, sudoPassword) {
451
425
  * Stop MITM server — removes ALL tool DNS entries first, then kills server
452
426
  */
453
427
  async function stopServer(sudoPassword) {
454
- // Remove all DNS entries first (before killing server)
455
- console.log("[MITM] Removing all DNS entries before stopping server...");
456
- await removeAllDNSEntries(sudoPassword);
428
+ console.log("[MITM] Stopping server...");
457
429
 
430
+ // Kill server process
458
431
  const proc = serverProcess;
459
- if (proc && !proc.killed) {
460
- console.log("Stopping MITM server...");
461
- killProcess(proc.pid, false, sudoPassword);
462
- await new Promise(resolve => setTimeout(resolve, 1000));
463
- if (isProcessAlive(proc.pid)) killProcess(proc.pid, true, sudoPassword);
464
- serverProcess = null;
465
- serverPid = null;
466
- } else {
467
- try {
468
- if (fs.existsSync(PID_FILE)) {
469
- const savedPid = parseInt(fs.readFileSync(PID_FILE, "utf-8").trim(), 10);
470
- if (savedPid && isProcessAlive(savedPid)) {
471
- console.log(`Killing MITM server (PID: ${savedPid})...`);
472
- killProcess(savedPid, false, sudoPassword);
473
- await new Promise(resolve => setTimeout(resolve, 1000));
474
- if (isProcessAlive(savedPid)) killProcess(savedPid, true, sudoPassword);
475
- }
476
- }
477
- } catch { /* ignore */ }
478
- serverProcess = null;
479
- serverPid = null;
432
+ const pidToKill = proc && !proc.killed
433
+ ? proc.pid
434
+ : (() => { try { return parseInt(fs.readFileSync(PID_FILE, "utf-8").trim(), 10); } catch { return null; } })();
435
+
436
+ if (pidToKill && isProcessAlive(pidToKill)) {
437
+ console.log(`Killing MITM server (PID: ${pidToKill})...`);
438
+ killProcess(pidToKill, false, sudoPassword);
439
+ await new Promise(r => setTimeout(r, 1000));
440
+ if (isProcessAlive(pidToKill)) killProcess(pidToKill, true, sudoPassword);
480
441
  }
442
+ serverProcess = null;
443
+ serverPid = null;
481
444
 
482
445
  if (IS_WIN) {
446
+ // Single elevated script: clean DNS + flush — 1 UAC prompt only
483
447
  const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
484
448
  const psSQ = (s) => s.replace(/'/g, "''");
485
- const { TOOL_HOSTS } = require("./dns/dnsConfig");
486
449
  const allHosts = Object.values(TOOL_HOSTS).flat();
487
450
 
488
451
  let hostsContent = "";
@@ -490,41 +453,25 @@ async function stopServer(sudoPassword) {
490
453
  const filtered = hostsContent.split(/\r?\n/)
491
454
  .filter(l => !allHosts.some(h => l.includes(h)))
492
455
  .join("\r\n");
493
- const tmpHosts = path.join(os.tmpdir(), "mitm_hosts_clean.tmp");
456
+ const tmpHosts = path.join(os.tmpdir(), `mitm_hosts_clean_${Date.now()}.tmp`);
494
457
  fs.writeFileSync(tmpHosts, filtered, "utf8");
495
458
 
496
- const flagFile = path.join(os.tmpdir(), "mitm_stop_done.flag");
497
459
  const psScript = [
498
- `Copy-Item -Path '${psSQ(tmpHosts)}' -Destination '${psSQ(hostsFile)}' -Force`,
499
- `& ipconfig /flushdns | Out-Null`,
500
- `Remove-Item '${psSQ(tmpHosts)}' -ErrorAction SilentlyContinue`,
501
- `Set-Content -Path '${psSQ(flagFile)}' -Value 'done' -Encoding UTF8`,
460
+ `$ErrorActionPreference = 'Stop'`,
461
+ `try {`,
462
+ ` Copy-Item -Path '${psSQ(tmpHosts)}' -Destination '${psSQ(hostsFile)}' -Force -ErrorAction Stop`,
463
+ ` ipconfig /flushdns | Out-Null`,
464
+ ` Remove-Item '${psSQ(tmpHosts)}' -ErrorAction SilentlyContinue`,
465
+ `} catch {`,
466
+ ` Remove-Item '${psSQ(tmpHosts)}' -ErrorAction SilentlyContinue`,
467
+ `}`,
502
468
  ].join("\n");
503
- const tmpPs1 = path.join(os.tmpdir(), "mitm_stop.ps1");
504
- fs.writeFileSync(tmpPs1, psScript, "utf8");
505
469
 
506
- const vbs = [
507
- `Set oShell = CreateObject("Shell.Application")`,
508
- `Dim args`,
509
- `args = "-NoProfile -ExecutionPolicy Bypass -File " & Chr(34) & "${tmpPs1}" & Chr(34)`,
510
- `oShell.ShellExecute "powershell.exe", args, "", "runas", 1`,
511
- ].join("\r\n");
512
- const tmpVbs = path.join(os.tmpdir(), "mitm_stop_uac.vbs");
513
- fs.writeFileSync(tmpVbs, vbs, "utf8");
514
- spawn("wscript.exe", [tmpVbs], { stdio: "ignore", windowsHide: true, detached: true }).unref();
515
-
516
- await new Promise((resolve) => {
517
- const deadline = Date.now() + 30000;
518
- const poll = () => {
519
- if (fs.existsSync(flagFile)) {
520
- try { fs.unlinkSync(flagFile); fs.unlinkSync(tmpPs1); fs.unlinkSync(tmpVbs); } catch { /* ignore */ }
521
- return resolve();
522
- }
523
- if (Date.now() > deadline) return resolve();
524
- setTimeout(poll, 500);
525
- };
526
- poll();
527
- });
470
+ const tmpPs1 = path.join(os.tmpdir(), `mitm_stop_${Date.now()}.ps1`);
471
+ fs.writeFileSync(tmpPs1, psScript, "utf8");
472
+ await executeElevatedPowerShell(tmpPs1, 30000);
473
+ } else {
474
+ await removeAllDNSEntries(sudoPassword);
528
475
  }
529
476
 
530
477
  try { fs.unlinkSync(PID_FILE); } catch { /* ignore */ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router",
3
- "version": "0.3.34",
3
+ "version": "0.3.35",
4
4
  "description": "9Router CLI - Start and manage 9Router server",
5
5
  "bin": {
6
6
  "9router": "./cli.js"