n9router 0.3.87 → 0.3.89

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 (262) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  4. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  5. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  19. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  27. package/.next/standalone/.next/server/app/_not-found.rsc +10 -10
  28. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
  29. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  30. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
  31. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  32. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  33. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/callback.html +1 -1
  53. package/.next/standalone/.next/server/app/callback.rsc +12 -12
  54. package/.next/standalone/.next/server/app/callback.segments/_full.segment.rsc +12 -12
  55. package/.next/standalone/.next/server/app/callback.segments/_head.segment.rsc +4 -4
  56. package/.next/standalone/.next/server/app/callback.segments/_index.segment.rsc +5 -5
  57. package/.next/standalone/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  59. package/.next/standalone/.next/server/app/callback.segments/callback.segment.rsc +3 -3
  60. package/.next/standalone/.next/server/app/dashboard/basic-chat.html +1 -1
  61. package/.next/standalone/.next/server/app/dashboard/basic-chat.rsc +12 -12
  62. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
  63. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +3 -3
  64. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  65. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  66. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +12 -12
  67. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +4 -4
  68. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
  69. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  70. package/.next/standalone/.next/server/app/dashboard/cli-tools.html +1 -1
  71. package/.next/standalone/.next/server/app/dashboard/cli-tools.rsc +12 -12
  72. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +3 -3
  73. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +3 -3
  74. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  75. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  76. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +12 -12
  77. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +4 -4
  78. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
  79. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  80. package/.next/standalone/.next/server/app/dashboard/combos.html +1 -1
  81. package/.next/standalone/.next/server/app/dashboard/combos.rsc +13 -13
  82. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +4 -4
  83. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +3 -3
  84. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  85. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  86. package/.next/standalone/.next/server/app/dashboard/combos.segments/_full.segment.rsc +13 -13
  87. package/.next/standalone/.next/server/app/dashboard/combos.segments/_head.segment.rsc +4 -4
  88. package/.next/standalone/.next/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
  89. package/.next/standalone/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  90. package/.next/standalone/.next/server/app/dashboard/endpoint.html +1 -1
  91. package/.next/standalone/.next/server/app/dashboard/endpoint.rsc +12 -12
  92. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  93. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +3 -3
  94. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  95. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  96. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +12 -12
  97. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +4 -4
  98. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
  99. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  100. package/.next/standalone/.next/server/app/dashboard/mitm.html +1 -1
  101. package/.next/standalone/.next/server/app/dashboard/mitm.rsc +12 -12
  102. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
  103. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +3 -3
  104. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  105. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  106. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +12 -12
  107. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +4 -4
  108. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -5
  109. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  110. package/.next/standalone/.next/server/app/dashboard/profile.html +1 -1
  111. package/.next/standalone/.next/server/app/dashboard/profile.rsc +13 -13
  112. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +4 -4
  113. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +3 -3
  114. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  115. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  116. package/.next/standalone/.next/server/app/dashboard/profile.segments/_full.segment.rsc +13 -13
  117. package/.next/standalone/.next/server/app/dashboard/profile.segments/_head.segment.rsc +4 -4
  118. package/.next/standalone/.next/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
  119. package/.next/standalone/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  120. package/.next/standalone/.next/server/app/dashboard/providers/new.html +1 -1
  121. package/.next/standalone/.next/server/app/dashboard/providers/new.rsc +13 -13
  122. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +4 -4
  123. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +3 -3
  124. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +3 -3
  125. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  126. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  127. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +13 -13
  128. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +4 -4
  129. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
  130. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  131. package/.next/standalone/.next/server/app/dashboard/providers.html +1 -1
  132. package/.next/standalone/.next/server/app/dashboard/providers.rsc +13 -13
  133. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +4 -4
  134. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +3 -3
  135. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  136. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  137. package/.next/standalone/.next/server/app/dashboard/providers.segments/_full.segment.rsc +13 -13
  138. package/.next/standalone/.next/server/app/dashboard/providers.segments/_head.segment.rsc +4 -4
  139. package/.next/standalone/.next/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
  140. package/.next/standalone/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  141. package/.next/standalone/.next/server/app/dashboard/proxy-pools.html +1 -1
  142. package/.next/standalone/.next/server/app/dashboard/proxy-pools.rsc +13 -13
  143. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +4 -4
  144. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +3 -3
  145. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  146. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  147. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +13 -13
  148. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +4 -4
  149. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
  150. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  151. package/.next/standalone/.next/server/app/dashboard/quota.html +2 -2
  152. package/.next/standalone/.next/server/app/dashboard/quota.rsc +13 -13
  153. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +4 -4
  154. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +3 -3
  155. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  156. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  157. package/.next/standalone/.next/server/app/dashboard/quota.segments/_full.segment.rsc +13 -13
  158. package/.next/standalone/.next/server/app/dashboard/quota.segments/_head.segment.rsc +4 -4
  159. package/.next/standalone/.next/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
  160. package/.next/standalone/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  161. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/dashboard/settings/pricing.html +1 -1
  163. package/.next/standalone/.next/server/app/dashboard/settings/pricing.rsc +12 -12
  164. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +12 -12
  165. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +4 -4
  166. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
  167. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  168. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  169. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +3 -3
  170. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +3 -3
  171. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +3 -3
  172. package/.next/standalone/.next/server/app/dashboard/translator.html +1 -1
  173. package/.next/standalone/.next/server/app/dashboard/translator.rsc +13 -13
  174. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +4 -4
  175. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +3 -3
  176. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  177. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  178. package/.next/standalone/.next/server/app/dashboard/translator.segments/_full.segment.rsc +13 -13
  179. package/.next/standalone/.next/server/app/dashboard/translator.segments/_head.segment.rsc +4 -4
  180. package/.next/standalone/.next/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
  181. package/.next/standalone/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  182. package/.next/standalone/.next/server/app/dashboard/usage.html +1 -1
  183. package/.next/standalone/.next/server/app/dashboard/usage.rsc +13 -13
  184. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +4 -4
  185. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +3 -3
  186. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  187. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  188. package/.next/standalone/.next/server/app/dashboard/usage.segments/_full.segment.rsc +13 -13
  189. package/.next/standalone/.next/server/app/dashboard/usage.segments/_head.segment.rsc +4 -4
  190. package/.next/standalone/.next/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
  191. package/.next/standalone/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  192. package/.next/standalone/.next/server/app/dashboard.html +1 -1
  193. package/.next/standalone/.next/server/app/dashboard.rsc +12 -12
  194. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
  195. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  196. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  197. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +12 -12
  198. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +4 -4
  199. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +5 -5
  200. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  201. package/.next/standalone/.next/server/app/index.html +1 -1
  202. package/.next/standalone/.next/server/app/index.rsc +10 -10
  203. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  204. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +10 -10
  205. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  206. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +5 -5
  207. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/landing.html +1 -1
  210. package/.next/standalone/.next/server/app/landing.rsc +12 -12
  211. package/.next/standalone/.next/server/app/landing.segments/_full.segment.rsc +12 -12
  212. package/.next/standalone/.next/server/app/landing.segments/_head.segment.rsc +4 -4
  213. package/.next/standalone/.next/server/app/landing.segments/_index.segment.rsc +5 -5
  214. package/.next/standalone/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  215. package/.next/standalone/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
  216. package/.next/standalone/.next/server/app/landing.segments/landing.segment.rsc +3 -3
  217. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/login.html +1 -1
  219. package/.next/standalone/.next/server/app/login.rsc +12 -12
  220. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +12 -12
  221. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +4 -4
  222. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +5 -5
  223. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  224. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  225. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +3 -3
  226. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.yvcis._.js +1 -1
  228. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0148t9m._.js +1 -1
  229. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b802lh._.js +1 -1
  230. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kpc-o6._.js +1 -1
  231. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lc~.sk._.js +1 -1
  232. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lp_pm5._.js +1 -1
  233. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pwrfp1._.js +1 -1
  234. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uw3x8s._.js +1 -1
  235. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y.reft._.js +1 -1
  236. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y5ae.7._.js +1 -1
  237. package/.next/standalone/.next/server/chunks/_0itng60._.js +1 -1
  238. package/.next/standalone/.next/server/chunks/ssr/_00c58qj._.js +1 -1
  239. package/.next/standalone/.next/server/chunks/ssr/src_0_xhepz._.js +1 -1
  240. package/.next/standalone/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_providers_[id]_page_0-3xvzc.js +1 -1
  241. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  242. package/.next/standalone/.next/server/pages/404.html +1 -1
  243. package/.next/standalone/.next/server/pages/500.html +1 -1
  244. package/.next/standalone/.next/static/chunks/0b285gqd-hcvu.js +1 -0
  245. package/.next/standalone/.next/static/chunks/{0fic3ew7j~9an.js → 0hgyabetclndg.js} +1 -1
  246. package/.next/standalone/mitm/paths.js +17 -0
  247. package/.next/standalone/package-lock.json +2 -2
  248. package/.next/standalone/package.json +1 -1
  249. package/.next/standalone/scripts/publish-npm.sh +2 -0
  250. package/.next/standalone/src/app/(dashboard)/dashboard/providers/[id]/page.js +2 -1
  251. package/.next/standalone/src/mitm/paths.js +17 -0
  252. package/.next/static/chunks/0b285gqd-hcvu.js +1 -0
  253. package/.next/static/chunks/{0fic3ew7j~9an.js → 0hgyabetclndg.js} +1 -1
  254. package/package.json +1 -1
  255. package/.next/standalone/.next/static/chunks/09g0cm09ynuao.js +0 -1
  256. package/.next/static/chunks/09g0cm09ynuao.js +0 -1
  257. /package/.next/standalone/.next/static/{p9jVbJQhFsaISYB4CfDfF → XSoZ0BJFg1b0W2IGyybf7}/_buildManifest.js +0 -0
  258. /package/.next/standalone/.next/static/{p9jVbJQhFsaISYB4CfDfF → XSoZ0BJFg1b0W2IGyybf7}/_clientMiddlewareManifest.js +0 -0
  259. /package/.next/standalone/.next/static/{p9jVbJQhFsaISYB4CfDfF → XSoZ0BJFg1b0W2IGyybf7}/_ssgManifest.js +0 -0
  260. /package/.next/static/{p9jVbJQhFsaISYB4CfDfF → XSoZ0BJFg1b0W2IGyybf7}/_buildManifest.js +0 -0
  261. /package/.next/static/{p9jVbJQhFsaISYB4CfDfF → XSoZ0BJFg1b0W2IGyybf7}/_clientMiddlewareManifest.js +0 -0
  262. /package/.next/static/{p9jVbJQhFsaISYB4CfDfF → XSoZ0BJFg1b0W2IGyybf7}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,99165,e=>{"use strict";var t=e.i(43476),i=e.i(71645),a=e.i(45009),s=e.i(18566),l=e.i(22016),r=e.i(57688);e.i(38730);var o=e.i(96521),n=e.i(39114),d=e.i(51916),c=e.i(95541),p=e.i(85011),u=e.i(50832),m=e.i(10444),x=e.i(29852),x=x,h=e.i(30115),h=h,f=e.i(27927),f=f,y=e.i(59497),y=y,g=e.i(75634),b=e.i(4539),v=e.i(85035);e.i(4565);var j=e.i(55937),N=e.i(29370);let k=new Map,C={"openrouter-free":e=>e.filter(e=>e.pricing?.prompt==="0"&&e.pricing?.completion==="0"&&e.context_length>=2e5).map(e=>({id:e.id,name:e.name,contextLength:e.context_length})).sort((e,t)=>t.contextLength-e.contextLength)};async function w(e){if(!e?.url||!e?.type)return[];let t=k.get(e.url);if(t&&Date.now()<t.expiresAt)return t.data;try{let t=await fetch(e.url);if(!t.ok)return[];let i=await t.json(),a=i.data??i.models??i,s=C[e.type],l=s?s(Array.isArray(a)?a:[]):[];return k.set(e.url,{data:l,expiresAt:Date.now()+6e5}),l}catch{return[]}}function S({model:e,fullModel:i,alias:a,copied:s,onCopy:l,testStatus:r,isCustom:o,isFree:n,onDeleteAlias:d,onTest:c,isTesting:p}){let u="ok"===r?"#22c55e":"error"===r?"#ef4444":void 0;return(0,t.jsx)("div",{className:`group px-3 py-2 rounded-lg border ${"ok"===r?"border-green-500/40":"error"===r?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-base",style:u?{color:u}:void 0,children:"ok"===r?"check_circle":"error"===r?"cancel":"smart_toy"}),(0,t.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:i}),c&&(0,t.jsxs)("div",{className:"relative group/btn",children:[(0,t.jsx)("button",{onClick:c,disabled:p,className:`p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-opacity ${p?"opacity-100":"opacity-0 group-hover:opacity-100"}`,children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",style:p?{animation:"spin 1s linear infinite"}:void 0,children:p?"progress_activity":"science"})}),(0,t.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:p?"Testing...":"Test"})]}),(0,t.jsxs)("div",{className:"relative group/btn",children:[(0,t.jsx)("button",{onClick:()=>l(i,`model-${e.id}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:s===`model-${e.id}`?"check":"content_copy"})}),(0,t.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:s===`model-${e.id}`?"Copied!":"Copy"})]}),o&&(0,t.jsx)("button",{onClick:d,className:"p-0.5 hover:bg-red-500/10 rounded text-text-muted hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity ml-auto",title:"Remove custom model",children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})})]})})}function A({modelId:e,fullModel:i,copied:a,onCopy:s,onDeleteAlias:l,onTest:r,testStatus:o,isTesting:n}){let d="ok"===o?"#22c55e":"error"===o?"#ef4444":void 0;return(0,t.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===o?"border-green-500/40":"error"===o?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",style:d?{color:d}:void 0,children:"ok"===o?"check_circle":"error"===o?"cancel":"smart_toy"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("p",{className:"text-sm font-medium truncate",children:e}),(0,t.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,t.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:i}),isFree&&(0,t.jsx)("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-green-500/10 text-green-600 dark:text-green-400",children:"Free"}),(0,t.jsxs)("div",{className:"relative group/btn",children:[(0,t.jsx)("button",{onClick:()=>s(i,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:a===`model-${e}`?"check":"content_copy"})}),(0,t.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:a===`model-${e}`?"Copied!":"Copy"})]}),r&&(0,t.jsxs)("div",{className:"relative group/btn",children:[(0,t.jsx)("button",{onClick:r,disabled:n,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",style:n?{animation:"spin 1s linear infinite"}:void 0,children:n?"progress_activity":"science"})}),(0,t.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:n?"Testing...":"Test"})]})]})]}),(0,t.jsx)("button",{onClick:l,className:"p-1 hover:bg-red-50 rounded text-red-500",title:"Remove model",children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:"delete"})})]})}function P({providerStorageAlias:e,providerDisplayAlias:a,modelAliases:s,copied:l,onCopy:r,onSetAlias:o,onDeleteAlias:d,connections:c,isAnthropic:p}){let[u,m]=(0,i.useState)(""),[x,h]=(0,i.useState)(!1),[f,y]=(0,i.useState)(!1),[g,b]=(0,i.useState)(null),[v,j]=(0,i.useState)({}),N=async t=>{if(!g){b(t);try{let i=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${e}/${t}`})}),a=await i.json();j(e=>({...e,[t]:a.ok?"ok":"error"}))}catch{j(e=>({...e,[t]:"error"}))}finally{b(null)}}},k=Object.entries(s).filter(([,t])=>t.startsWith(`${e}/`)).map(([t,i])=>({modelId:i.replace(`${e}/`,""),fullModel:i,alias:t})),C=t=>{let i,l=`${e}/${t}`;if(Object.values(s).includes(l))return null;let r=(i=t.split("/"))[i.length-1];if(!s[r])return r;let o=`${a}-${r}`;return s[o]?null:o},w=async()=>{if(!u.trim()||x)return;let t=u.trim(),i=C(t);if(!i)return void alert("All suggested aliases already exist. Please choose a different model or remove conflicting aliases.");h(!0);try{await o(t,i,e),m("")}catch(e){console.log("Error adding model:",e)}finally{h(!1)}},S=async()=>{if(f)return;let t=c.find(e=>!1!==e.isActive);if(t){y(!0);try{let i=await fetch(`/api/providers/${t.id}/models`),a=await i.json();if(!i.ok)return void alert(a.error||"Failed to import models");let s=a.models||[];if(0===s.length)return void alert("No models returned from /models.");let l=0;for(let t of s){let i=t.id||t.name||t.model;if(!i)continue;let a=C(i);a&&(await o(i,a,e),l+=1)}0===l&&alert("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{y(!1)}}},T=c.some(e=>!1!==e.isActive);return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsxs)("p",{className:"text-sm text-text-muted",children:["Add ",p?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),(0,t.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,t.jsxs)("div",{className:"flex-1 min-w-[240px]",children:[(0,t.jsx)("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID"}),(0,t.jsx)("input",{id:"new-compatible-model-input",type:"text",value:u,onChange:e=>m(e.target.value),onKeyDown:e=>"Enter"===e.key&&w(),placeholder:p?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]}),(0,t.jsx)(n.Button,{size:"sm",icon:"add",onClick:w,disabled:!u.trim()||x,children:x?"Adding...":"Add"}),(0,t.jsx)(n.Button,{size:"sm",variant:"secondary",icon:"download",onClick:S,disabled:!T||f,children:f?"Importing...":"Import from /models"})]}),!T&&(0,t.jsx)("p",{className:"text-xs text-text-muted",children:"Add a connection to enable importing models."}),k.length>0&&(0,t.jsx)("div",{className:"flex flex-col gap-3",children:k.map(({modelId:e,fullModel:i,alias:s})=>(0,t.jsx)(A,{modelId:e,fullModel:`${a}/${e}`,copied:l,onCopy:r,onDeleteAlias:()=>d(s),onTest:c.length>0?()=>N(e):void 0,testStatus:v[e],isTesting:g===e},i))})]})}function T({until:e}){let[a,s]=(0,i.useState)("");return((0,i.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void s("");let i=Math.floor(t/1e3);if(i<60)s(`${i}s`);else if(i<3600)s(`${Math.floor(i/60)}m ${i%60}s`);else{let e=Math.floor(i/3600),t=Math.floor(i%3600/60);s(`${e}h ${t}m`)}};t();let i=setInterval(t,1e3);return()=>clearInterval(i)},[e]),a)?(0,t.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",a]}):null}function R({connection:e,proxyPools:a,isOAuth:s,isFirst:l,isLast:r,onMoveUp:o,onMoveDown:n,onToggleActive:c,onUpdateProxy:p,onEdit:u,onDelete:m}){let[x,h]=(0,i.useState)(!1),[f,y]=(0,i.useState)(!1),b=(0,i.useRef)(null),v=new Map((a||[]).map(e=>[e.id,e])),j=e.providerSpecificData?.proxyPoolId||null,N=j?v.get(j):null,k=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,C=!!j||k,w=N?`Pool: ${N.name}`:j?`Pool: ${j} (inactive/missing)`:k?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",S="";if(N?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=N?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);S=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{S=t}}let A=N?.noProxy||e.providerSpecificData?.connectionNoProxy||"",P="default";N?.isActive===!0?P="success":(j||k)&&(P="error"),(0,i.useEffect)(()=>{if(!x)return;let e=e=>{b.current&&!b.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[x]);let I=async e=>{y(!0);try{await p("__none__"===e?null:e)}finally{y(!1),h(!1)}},O=s?e.name||e.email||e.displayName||"OAuth Account":e.name,[$,E]=(0,i.useState)(!1),_=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,i.useEffect)(()=>{let t=()=>{E(!!Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>e&&new Date(e).getTime()>Date.now()).sort()[0])};t();let i=_?setInterval(t,1e3):null;return()=>{i&&clearInterval(i)}},[_]);let D="unavailable"!==e.testStatus||$?e.testStatus:"active";return(0,t.jsxs)("div",{className:`group flex items-center justify-between p-3 rounded-lg hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors ${!1===e.isActive?"opacity-60":""}`,children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("button",{onClick:o,disabled:l,className:`p-0.5 rounded ${l?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_up"})}),(0,t.jsx)("button",{onClick:n,disabled:r,className:`p-0.5 rounded ${r?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_down"})})]}),(0,t.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",children:s?"lock":"key"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("p",{className:"text-sm font-medium truncate",children:O}),(0,t.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,t.jsx)(d.Badge,{variant:!1===e.isActive?"default":"active"===D||"success"===D?"success":"error"===D||"expired"===D||"unavailable"===D?"error":"default",size:"sm",dot:!0,children:!1===e.isActive?"disabled":D||"Unknown"}),C&&(0,t.jsx)(d.Badge,{variant:P,size:"sm",children:"Proxy"}),$&&!1!==e.isActive&&(0,t.jsx)(T,{until:_}),e.lastError&&!1!==e.isActive&&(0,t.jsx)("span",{className:"text-xs text-red-500 truncate max-w-[300px]",title:e.lastError,children:e.lastError}),(0,t.jsxs)("span",{className:"text-xs text-text-muted",children:["#",e.priority]}),e.globalPriority&&(0,t.jsxs)("span",{className:"text-xs text-text-muted",children:["Auto: ",e.globalPriority]})]}),C&&(0,t.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,t.jsx)("span",{className:"text-[11px] text-text-muted truncate max-w-[420px]",title:w,children:w}),S&&(0,t.jsx)("code",{className:"text-[10px] font-mono bg-black/5 dark:bg-white/5 px-1 py-0.5 rounded text-text-muted",children:S}),A&&(0,t.jsxs)("span",{className:"text-[11px] text-text-muted truncate max-w-[320px]",title:A,children:["no_proxy: ",A]})]})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("div",{className:"flex gap-1",children:[(a||[]).length>0&&(0,t.jsxs)("div",{className:"relative",ref:b,children:[(0,t.jsxs)("button",{onClick:()=>h(e=>!e),className:`flex flex-col items-center px-2 py-1 rounded hover:bg-black/5 dark:hover:bg-white/5 transition-colors ${C?"text-primary":"text-text-muted hover:text-primary"}`,disabled:f,children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:f?"progress_activity":"lan"}),(0,t.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),x&&(0,t.jsxs)("div",{className:"absolute right-0 top-full mt-1 z-50 bg-bg border border-border rounded-lg shadow-lg py-1 min-w-[160px]",children:[(0,t.jsx)("button",{onClick:()=>I("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!j?"text-primary font-medium":"text-text-main"}`,children:"None"}),(a||[]).map(e=>(0,t.jsx)("button",{onClick:()=>I(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${j===e.id?"text-primary font-medium":"text-text-main"}`,children:e.name},e.id))]})]}),(0,t.jsxs)("button",{onClick:u,className:"flex flex-col items-center px-2 py-1 rounded hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,t.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,t.jsxs)("button",{onClick:m,className:"flex flex-col items-center px-2 py-1 rounded hover:bg-red-500/10 text-red-500",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,t.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,t.jsx)(g.Toggle,{size:"sm",checked:e.isActive??!0,onChange:c,title:e.isActive??!0?"Disable connection":"Enable connection"})]})]})}function I({isOpen:e,provider:a,providerName:s,isCompatible:l,isAnthropic:r,proxyPools:o,onSave:u,onClose:m}){let x="__none__",[h,f]=(0,i.useState)({name:"",apiKey:"",priority:1,proxyPoolId:x}),[y,g]=(0,i.useState)(!1),[v,j]=(0,i.useState)(null),[N,k]=(0,i.useState)(!1),C=async()=>{g(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a,apiKey:h.apiKey})}),t=await e.json();j(t.valid?"success":"failed")}catch{j("failed")}finally{g(!1)}},w=async()=>{if(a&&h.apiKey){k(!0);try{let e=!1;try{g(!0),j(null);let t=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a,apiKey:h.apiKey})});e=!!(await t.json()).valid,j(e?"success":"failed")}catch{j("failed")}finally{g(!1)}await u({name:h.name,apiKey:h.apiKey,priority:h.priority,proxyPoolId:h.proxyPoolId===x?null:h.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:void 0})}finally{k(!1)}}};return a?(0,t.jsx)(p.Modal,{isOpen:e,title:`Add ${s||a} API Key`,onClose:m,children:(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(c.Input,{label:"Name",value:h.name,onChange:e=>f({...h,name:e.target.value}),placeholder:"Production Key"}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(c.Input,{label:"API Key",type:"password",value:h.apiKey,onChange:e=>f({...h,apiKey:e.target.value}),className:"flex-1"}),(0,t.jsx)("div",{className:"pt-6",children:(0,t.jsx)(n.Button,{onClick:C,disabled:!h.apiKey||y||N,variant:"secondary",children:y?"Checking...":"Check"})})]}),v&&(0,t.jsx)(d.Badge,{variant:"success"===v?"success":"error",children:"success"===v?"Valid":"Invalid"}),l&&(0,t.jsx)("p",{className:"text-xs text-text-muted",children:r?`Validation checks ${s||"Anthropic Compatible"} by verifying the API key.`:`Validation checks ${s||"OpenAI Compatible"} via /models on your base URL.`}),(0,t.jsx)(c.Input,{label:"Priority",type:"number",value:h.priority,onChange:e=>f({...h,priority:Number.parseInt(e.target.value)||1})}),(0,t.jsx)(b.Select,{label:"Proxy Pool",value:h.proxyPoolId,onChange:e=>f({...h,proxyPoolId:e.target.value}),options:[{value:x,label:"None"},...(o||[]).map(e=>({value:e.id,label:e.name}))],placeholder:"None"}),0===(o||[]).length&&(0,t.jsx)("p",{className:"text-xs text-text-muted",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,t.jsx)("p",{className:"text-xs text-text-muted",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(n.Button,{onClick:w,fullWidth:!0,disabled:!h.name||!h.apiKey||N,children:N?"Saving...":"Save"}),(0,t.jsx)(n.Button,{onClick:m,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function O({isOpen:e,connection:a,proxyPools:s,onSave:l,onClose:r}){let[o,u]=(0,i.useState)({name:"",priority:1,apiKey:""}),[m,x]=(0,i.useState)(!1),[h,f]=(0,i.useState)(null),[y,g]=(0,i.useState)(!1),[b,j]=(0,i.useState)(null),[N,k]=(0,i.useState)(!1);(0,i.useEffect)(()=>{a&&(u({name:a.name||"",priority:a.priority||1,apiKey:""}),f(null),j(null))},[a]);let C=async()=>{if(a?.provider){x(!0),f(null);try{let e=await fetch(`/api/providers/${a.id}/test`,{method:"POST"}),t=await e.json();f(t.valid?"success":"failed")}catch{f("failed")}finally{x(!1)}}},w=async()=>{if(a?.provider&&o.apiKey){g(!0),j(null);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a.provider,apiKey:o.apiKey})}),t=await e.json();j(t.valid?"success":"failed")}catch{j("failed")}finally{g(!1)}}},S=async()=>{k(!0);try{let e={name:o.name,priority:o.priority};if(!A&&o.apiKey){e.apiKey=o.apiKey;let t="success"===b;if(!t)try{g(!0),j(null);let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:a.provider,apiKey:o.apiKey})});t=!!(await e.json()).valid,j(t?"success":"failed")}catch{j("failed")}finally{g(!1)}t&&(e.testStatus="active",e.lastError=null,e.lastErrorAt=null)}await l(e)}finally{k(!1)}};if(!a)return null;let A="oauth"===a.authType,P=(0,v.isOpenAICompatibleProvider)(a.provider)||(0,v.isAnthropicCompatibleProvider)(a.provider);return(0,t.jsx)(p.Modal,{isOpen:e,title:"Edit Connection",onClose:r,children:(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(c.Input,{label:"Name",value:o.name,onChange:e=>u({...o,name:e.target.value}),placeholder:A?"Account name":"Production Key"}),A&&a.email&&(0,t.jsxs)("div",{className:"bg-sidebar/50 p-3 rounded-lg",children:[(0,t.jsx)("p",{className:"text-sm text-text-muted mb-1",children:"Email"}),(0,t.jsx)("p",{className:"font-medium",children:a.email})]}),(0,t.jsx)(c.Input,{label:"Priority",type:"number",value:o.priority,onChange:e=>u({...o,priority:Number.parseInt(e.target.value)||1})}),!A&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(c.Input,{label:"API Key",type:"password",value:o.apiKey,onChange:e=>u({...o,apiKey:e.target.value}),placeholder:"Enter new API key",hint:"Leave blank to keep the current API key.",className:"flex-1"}),(0,t.jsx)("div",{className:"pt-6",children:(0,t.jsx)(n.Button,{onClick:w,disabled:!o.apiKey||y||N,variant:"secondary",children:y?"Checking...":"Check"})})]}),b&&(0,t.jsx)(d.Badge,{variant:"success"===b?"success":"error",children:"success"===b?"Valid":"Invalid"})]}),!P&&(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(n.Button,{onClick:C,variant:"secondary",disabled:m,children:m?"Testing...":"Test Connection"}),h&&(0,t.jsx)(d.Badge,{variant:"success"===h?"success":"error",children:"success"===h?"Valid":"Failed"})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(n.Button,{onClick:S,fullWidth:!0,disabled:N,children:N?"Saving...":"Save"}),(0,t.jsx)(n.Button,{onClick:r,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}function $({isOpen:e,node:a,onSave:s,onClose:l,isAnthropic:r}){let[o,u]=(0,i.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[m,x]=(0,i.useState)(!1),[h,f]=(0,i.useState)(""),[y,g]=(0,i.useState)(""),[v,j]=(0,i.useState)(!1),[N,k]=(0,i.useState)(null);(0,i.useEffect)(()=>{a&&u({name:a.name||"",prefix:a.prefix||"",apiType:a.apiType||"chat",baseUrl:a.baseUrl||(r?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[a,r]);let C=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){x(!0);try{let e={name:o.name,prefix:o.prefix,baseUrl:o.baseUrl};r||(e.apiType=o.apiType),await s(e)}finally{x(!1)}}},w=async()=>{j(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:o.baseUrl,apiKey:h,type:r?"anthropic-compatible":"openai-compatible",modelId:y.trim()||void 0})}),t=await e.json();k(t.valid?"success":"failed")}catch{k("failed")}finally{j(!1)}};return a?(0,t.jsx)(p.Modal,{isOpen:e,title:`Edit ${r?"Anthropic":"OpenAI"} Compatible`,onClose:l,children:(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(c.Input,{label:"Name",value:o.name,onChange:e=>u({...o,name:e.target.value}),placeholder:`${r?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),(0,t.jsx)(c.Input,{label:"Prefix",value:o.prefix,onChange:e=>u({...o,prefix:e.target.value}),placeholder:r?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!r&&(0,t.jsx)(b.Select,{label:"API Type",options:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],value:o.apiType,onChange:e=>u({...o,apiType:e.target.value})}),(0,t.jsx)(c.Input,{label:"Base URL",value:o.baseUrl,onChange:e=>u({...o,baseUrl:e.target.value}),placeholder:r?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${r?"Anthropic":"OpenAI"}-compatible API.`}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(c.Input,{label:"API Key (for Check)",type:"password",value:h,onChange:e=>f(e.target.value),className:"flex-1"}),(0,t.jsx)("div",{className:"pt-6",children:(0,t.jsx)(n.Button,{onClick:w,disabled:!h||v||!o.baseUrl.trim(),variant:"secondary",children:v?"Checking...":"Check"})})]}),(0,t.jsx)(c.Input,{label:"Model ID (optional)",value:y,onChange:e=>g(e.target.value),placeholder:"e.g. my-model-id",hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),N&&(0,t.jsx)(d.Badge,{variant:"success"===N?"success":"error",children:"success"===N?"Valid":"Invalid"}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(n.Button,{onClick:C,fullWidth:!0,disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||m,children:m?"Saving...":"Save"}),(0,t.jsx)(n.Button,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function E({isOpen:e,providerAlias:a,providerDisplayAlias:s,onSave:l,onClose:r}){let[o,d]=(0,i.useState)(""),[c,u]=(0,i.useState)(null),[m,x]=(0,i.useState)(""),[h,f]=(0,i.useState)(!1);(0,i.useEffect)(()=>{e&&(d(""),u(null),x(""))},[e]);let y=async()=>{if(o.trim()){u("testing"),x("");try{let e=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${a}/${o.trim()}`})}),t=await e.json();u(t.ok?"ok":"error"),x(t.error||"")}catch(e){u("error"),x(e.message)}}},g=async()=>{if(o.trim()&&!h){f(!0);try{await l(o.trim())}finally{f(!1)}}};return(0,t.jsx)(p.Modal,{isOpen:e,onClose:r,title:"Add Custom Model",children:(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("input",{type:"text",value:o,onChange:e=>{d(e.target.value),u(null),x("")},onKeyDown:e=>{"Enter"===e.key&&y()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),(0,t.jsx)(n.Button,{variant:"secondary",icon:"science",loading:"testing"===c,onClick:y,disabled:!o.trim()||"testing"===c,children:"testing"===c?"Testing...":"Test"})]}),(0,t.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Sent to provider as: ",(0,t.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:o.trim()||"model-id"})]})]}),"ok"===c&&(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-base",children:"check_circle"}),"Model is reachable"]}),"error"===c&&(0,t.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-base shrink-0",children:"cancel"}),(0,t.jsx)("span",{children:m||"Model not reachable"})]}),(0,t.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,t.jsx)(n.Button,{onClick:r,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,t.jsx)(n.Button,{onClick:g,fullWidth:!0,size:"sm",disabled:!o.trim()||h,children:h?"Adding...":"Add Model"})]})]})})}S.propTypes={model:a.default.shape({id:a.default.string.isRequired}).isRequired,fullModel:a.default.string.isRequired,alias:a.default.string,copied:a.default.string,onCopy:a.default.func.isRequired,testStatus:a.default.oneOf(["ok","error"]),isCustom:a.default.bool,isFree:a.default.bool,onDeleteAlias:a.default.func,onTest:a.default.func,isTesting:a.default.bool},a.default.string.isRequired,a.default.object.isRequired,a.default.string,a.default.func.isRequired,a.default.func.isRequired,a.default.func.isRequired,A.propTypes={modelId:a.default.string.isRequired,fullModel:a.default.string.isRequired,copied:a.default.string,onCopy:a.default.func.isRequired,onDeleteAlias:a.default.func.isRequired,onTest:a.default.func,testStatus:a.default.oneOf(["ok","error"]),isTesting:a.default.bool},P.propTypes={providerStorageAlias:a.default.string.isRequired,providerDisplayAlias:a.default.string.isRequired,modelAliases:a.default.object.isRequired,copied:a.default.string,onCopy:a.default.func.isRequired,onSetAlias:a.default.func.isRequired,onDeleteAlias:a.default.func.isRequired,connections:a.default.arrayOf(a.default.shape({id:a.default.string,isActive:a.default.bool})).isRequired,isAnthropic:a.default.bool},T.propTypes={until:a.default.string.isRequired},R.propTypes={connection:a.default.shape({id:a.default.string,name:a.default.string,email:a.default.string,displayName:a.default.string,modelLockUntil:a.default.string,testStatus:a.default.string,isActive:a.default.bool,lastError:a.default.string,priority:a.default.number,globalPriority:a.default.number}).isRequired,proxyPools:a.default.arrayOf(a.default.shape({id:a.default.string,name:a.default.string,proxyUrl:a.default.string,noProxy:a.default.string,isActive:a.default.bool})),isOAuth:a.default.bool.isRequired,isFirst:a.default.bool.isRequired,isLast:a.default.bool.isRequired,onMoveUp:a.default.func.isRequired,onMoveDown:a.default.func.isRequired,onToggleActive:a.default.func.isRequired,onUpdateProxy:a.default.func,onEdit:a.default.func.isRequired,onDelete:a.default.func.isRequired},I.propTypes={isOpen:a.default.bool.isRequired,provider:a.default.string,providerName:a.default.string,isCompatible:a.default.bool,isAnthropic:a.default.bool,proxyPools:a.default.arrayOf(a.default.shape({id:a.default.string,name:a.default.string})),onSave:a.default.func.isRequired,onClose:a.default.func.isRequired},O.propTypes={isOpen:a.default.bool.isRequired,connection:a.default.shape({id:a.default.string,name:a.default.string,email:a.default.string,priority:a.default.number,authType:a.default.string,provider:a.default.string,providerSpecificData:a.default.object}),proxyPools:a.default.arrayOf(a.default.shape({id:a.default.string,name:a.default.string})),onSave:a.default.func.isRequired,onClose:a.default.func.isRequired},$.propTypes={isOpen:a.default.bool.isRequired,node:a.default.shape({id:a.default.string,name:a.default.string,prefix:a.default.string,apiType:a.default.string,baseUrl:a.default.string}),onSave:a.default.func.isRequired,onClose:a.default.func.isRequired,isAnthropic:a.default.bool},E.propTypes={isOpen:a.default.bool.isRequired,providerAlias:a.default.string.isRequired,providerDisplayAlias:a.default.string.isRequired,onSave:a.default.func.isRequired,onClose:a.default.func.isRequired},e.s(["default",0,function(){let e=(0,s.useParams)(),a=(0,s.useRouter)(),d=e.id,[c,k]=(0,i.useState)([]),[C,A]=(0,i.useState)(!0),[T,_]=(0,i.useState)(null),[D,U]=(0,i.useState)([]),[q,K]=(0,i.useState)(!1),[B,M]=(0,i.useState)(!1),[L,F]=(0,i.useState)(!1),[J,z]=(0,i.useState)(!1),[V,W]=(0,i.useState)(!1),[H,G]=(0,i.useState)(!1),[Y,Q]=(0,i.useState)(!1),[X,Z]=(0,i.useState)(null),[ee,et]=(0,i.useState)(null),[ei,ea]=(0,i.useState)({}),[es,el]=(0,i.useState)(!1),[er,eo]=(0,i.useState)({}),[en,ed]=(0,i.useState)(""),[ec,ep]=(0,i.useState)(null),[eu,em]=(0,i.useState)(!1),[ex,eh]=(0,i.useState)([]),[ef,ey]=(0,i.useState)("__none__"),[eg,eb]=(0,i.useState)(!1),[ev,ej]=(0,i.useState)(null),[eN,ek]=(0,i.useState)(""),[eC,ew]=(0,i.useState)([]),[eS,eA]=(0,i.useState)([]),{copied:eP,copy:eT}=(0,N.useCopyToClipboard)(),eR=T?{id:T.id,name:T.name||("anthropic-compatible"===T.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===T.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===T.type?"AC":"OC",apiType:T.apiType,baseUrl:T.baseUrl,type:T.type}:v.OAUTH_PROVIDERS[d]||v.APIKEY_PROVIDERS[d]||v.FREE_PROVIDERS[d]||v.FREE_TIER_PROVIDERS[d],eI=!!v.OAUTH_PROVIDERS[d]||!!v.FREE_PROVIDERS[d],eO=(0,j.getModelsByProviderId)(d),e$=(0,v.getProviderAlias)(d),eE=(0,v.isOpenAICompatibleProvider)(d),e_=(0,v.isAnthropicCompatibleProvider)(d),eD=eE||e_,eU=eD?d:e$,eq=eD?T?.prefix||d:e$,eK=(0,i.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&ea(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]);(0,i.useEffect)(()=>{"kilocode"===d&&fetch("/api/providers/kilo/free-models").then(e=>e.json()).then(e=>{e.models?.length&&eA(e.models)}).catch(()=>{})},[d]);let eB=(0,i.useCallback)(async()=>{try{let[e,t,i,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),s=await e.json(),l=await t.json(),r=await i.json(),o=a.ok?await a.json():{};if(e.ok){let e=(s.connections||[]).filter(e=>e.provider===d);k(e)}i.ok&&U(r.proxyPools||[]);let n=(o.providerStrategies||{})[d]||{};if(ej(n.fallbackStrategy||null),ek(null!=n.stickyRoundRobinLimit?String(n.stickyRoundRobinLimit):"1"),t.ok){let e=(l.nodes||[]).find(e=>e.id===d)||null;if(!e&&eD)for(let t=0;t<3;t+=1){await new Promise(e=>setTimeout(e,150));let t=await fetch("/api/provider-nodes",{cache:"no-store"});if(t.ok&&(e=((await t.json()).nodes||[]).find(e=>e.id===d)||null))break}_(e)}}catch(e){console.log("Error fetching connections:",e)}finally{A(!1)}},[d,eD]),eM=async e=>{try{let t=await fetch(`/api/provider-nodes/${d}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),i=await t.json();t.ok&&(_(i.node),await eB(),W(!1))}catch(e){console.log("Error updating provider node:",e)}},eL=async(e,t)=>{try{let i=await fetch("/api/settings",{cache:"no-store"}),a=(i.ok?await i.json():{}).providerStrategies||{},s={};e&&(s.fallbackStrategy=e),"round-robin"===e&&""!==t&&(s.stickyRoundRobinLimit=Number(t)||3);let l={...a};0===Object.keys(s).length?delete l[d]:l[d]=s,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:l})})}catch(e){console.log("Error saving provider strategy:",e)}};(0,i.useEffect)(()=>{eB(),eK()},[eB,eK]),(0,i.useEffect)(()=>{let e=(v.OAUTH_PROVIDERS[d]||v.APIKEY_PROVIDERS[d]||v.FREE_PROVIDERS[d]||v.FREE_TIER_PROVIDERS[d])?.modelsFetcher;e&&w(e).then(ew)},[d]);let eF=async(e,t,i=e$)=>{let a=`${i}/${e}`;try{let e=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a,alias:t})});if(e.ok)await eK();else{let t=await e.json();alert(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},eJ=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await eK()}catch(e){console.log("Error deleting alias:",e)}},ez=async e=>{if(confirm("Delete this connection?"))try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&k(c.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}},eV=()=>{eB(),K(!1)},eW=async e=>{try{(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:d,...e})})).ok&&(await eB(),F(!1))}catch(e){console.log("Error saving connection:",e)}},eH=async e=>{try{(await fetch(`/api/providers/${ee.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await eB(),z(!1))}catch(e){console.log("Error updating connection:",e)}},eG=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&k(i=>i.map(i=>i.id===e?{...i,isActive:t}:i))}catch(e){console.log("Error updating connection status:",e)}},eY=async(e,t)=>{let i=[...c];[i[e],i[t]]=[i[t],i[e]],k(i);try{await Promise.all([fetch(`/api/providers/${i[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${i[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch(e){console.log("Error swapping priority:",e),await eB()}},eQ=c.filter(e=>ex.includes(e.id));c.length>0&&(ex.length,c.length),(0,i.useEffect)(()=>{eh(e=>e.filter(e=>c.some(t=>t.id===e)))},[c]);let eX=(()=>{if(0===eQ.length)return"";let e=new Set(eQ.map(e=>e.providerSpecificData?.proxyPoolId||"__none__"));if(1===e.size){let t=[...e][0];if("__none__"===t)return"All selected currently unbound";let i=D.find(e=>e.id===t);return`All selected currently bound to ${i?.name||t}`}return"Selected connections have mixed proxy bindings"})(),eZ=()=>{eg||G(!1)},e0=async()=>{if(0===ex.length)return;let e="__none__"===ef?null:ef;eb(!0);try{let t=[];for(let i of ex)try{let a=await fetch(`/api/providers/${i}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:e})});t.push(a.ok)}catch(e){console.log("Error applying bulk proxy pool for",i,e),t.push(!1)}let i=t.filter(e=>!e).length;i>0&&alert(`Updated with ${i} failed request(s).`),await eB(),eh([]),ey("__none__"),G(!1)}catch(e){console.log("Error applying bulk proxy pool:",e)}finally{eb(!1)}},e1=async()=>{Q(!0),Z(null);try{let e=await fetch("/api/antigravity-tools/import",{method:"POST"}),t=await e.json();e.ok?(Z(t),await eB()):Z({error:t.error||"Import failed"})}catch(e){Z({error:e.message})}Q(!1)},e5=(0,t.jsx)("div",{className:"flex flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]",children:c.map((e,i)=>(0,t.jsx)("div",{className:"flex items-stretch",children:(0,t.jsx)("div",{className:"flex-1 min-w-0",children:(0,t.jsx)(R,{connection:e,proxyPools:D,isOAuth:eI,isFirst:0===i,isLast:i===c.length-1,onMoveUp:()=>eY(i,i-1),onMoveDown:()=>eY(i,i+1),onToggleActive:t=>eG(e.id,t),onUpdateProxy:async t=>{try{(await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&k(i=>i.map(i=>i.id===e.id?{...i,providerSpecificData:{...i.providerSpecificData,proxyPoolId:t||null}}:i))}catch(e){console.log("Error updating proxy:",e)}},onEdit:()=>{et(e),z(!0)},onDelete:()=>ez(e.id)})})},e.id))}),e2=[{value:"__none__",label:"None"},...D.map(e=>({value:e.id,label:e.name}))],e4=0===ex.length?"Select one or more connections, then click Proxy Action.":eX,e3=ex.length>0&&!eg,e6=(0,t.jsx)(p.Modal,{isOpen:H,onClose:eZ,title:`Proxy Action (${ex.length} selected)`,children:(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)(b.Select,{label:"Proxy Pool",value:ef,onChange:e=>ey(e.target.value),options:e2,placeholder:"None"}),(0,t.jsx)("p",{className:"text-xs text-text-muted",children:e4}),(0,t.jsx)("p",{className:"text-xs text-text-muted",children:"Selecting None will unbind selected connections from proxy pool."}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(n.Button,{onClick:e0,fullWidth:!0,disabled:!e3,children:eg?"Applying...":"Apply"}),(0,t.jsx)(n.Button,{onClick:eZ,variant:"ghost",fullWidth:!0,disabled:eg,children:"Cancel"})]})]})}),e8=async e=>{if(!ec){ep(e);try{let t=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${eU}/${e}`})}),i=await t.json();eo(t=>({...t,[e]:i.ok?"ok":"error"})),ed(i.ok?"":i.error||"Model not reachable")}catch{eo(t=>({...t,[e]:"error"})),ed("Network error")}finally{ep(null)}}};return C?(0,t.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,t.jsx)(u.CardSkeleton,{}),(0,t.jsx)(u.CardSkeleton,{})]}):eR?(0,t.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)(l.default,{href:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[(0,t.jsx)("div",{className:"rounded-lg flex items-center justify-center",style:{backgroundColor:`${eR.color}15`},children:es?(0,t.jsx)("span",{className:"text-sm font-bold",style:{color:eR.color},children:eR.textIcon||eR.id.slice(0,2).toUpperCase()}):(0,t.jsx)(r.default,{src:eE&&eR.apiType?"responses"===eR.apiType?"/providers/oai-r.png":"/providers/oai-cc.png":e_?"/providers/anthropic-m.png":`/providers/${eR.id}.png`,alt:eR.name,width:48,height:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",sizes:"48px",onError:()=>el(!0)})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:eR.name}),(0,t.jsxs)("p",{className:"text-text-muted",children:[c.length," connection",1===c.length?"":"s"]})]})]})]}),eR.deprecated&&(0,t.jsxs)("div",{className:"flex items-start gap-2 px-3 py-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02] border border-black/[0.05] dark:border-white/[0.05]",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted mt-0.5 shrink-0",children:"info"}),(0,t.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:eR.deprecationNotice})]}),eR.notice&&!eR.deprecated&&(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-black/[0.02] dark:bg-white/[0.02] border border-black/[0.05] dark:border-white/[0.05]",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[16px] text-text-muted shrink-0",children:"info"}),(0,t.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:eR.notice.text}),eR.notice.apiKeyUrl&&(0,t.jsx)("a",{href:eR.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline shrink-0",children:"Get API Key →"})]}),eD&&T&&(0,t.jsxs)(o.Card,{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-lg font-semibold",children:e_?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,t.jsxs)("p",{className:"text-sm text-text-muted",children:[e_?"Messages API":"responses"===T.apiType?"Responses API":"Chat Completions"," · ",(T.baseUrl||"").replace(/\/$/,""),"/",e_?"messages":"responses"===T.apiType?"responses":"chat/completions"]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(n.Button,{size:"sm",icon:"add",onClick:()=>F(!0),disabled:c.length>0,children:"Add"}),(0,t.jsx)(n.Button,{size:"sm",variant:"secondary",icon:"edit",onClick:()=>W(!0),children:"Edit"}),(0,t.jsx)(n.Button,{size:"sm",variant:"secondary",icon:"delete",onClick:async()=>{if(confirm(`Delete this ${e_?"Anthropic":"OpenAI"} Compatible node?`))try{(await fetch(`/api/provider-nodes/${d}`,{method:"DELETE"})).ok&&a.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}},children:"Delete"})]})]}),c.length>0&&(0,t.jsx)("p",{className:"text-sm text-text-muted",children:"Only one connection is allowed per compatible node. Add another node if you need more connections."})]}),(0,t.jsxs)(o.Card,{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-xs text-text-muted font-medium",children:"Round Robin"}),(0,t.jsx)(g.Toggle,{checked:"round-robin"===ev,onChange:e=>{let t=e?"round-robin":null,i=e?eN||"1":eN;e&&!eN&&ek("1"),ej(t),eL(t,i)}}),"round-robin"===ev&&(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("span",{className:"text-xs text-text-muted",children:"Sticky:"}),(0,t.jsx)("input",{type:"number",min:1,value:eN,onChange:e=>{var t;ek(t=e.target.value),eL("round-robin",t)},placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]}),X&&(0,t.jsxs)("div",{className:`flex items-center justify-between gap-2 mb-3 px-3 py-2 rounded-lg text-xs ${X.error?"bg-red-500/5 border border-red-500/15 text-red-500":"bg-green-500/5 border border-green-500/15 text-green-600"}`,children:[(0,t.jsx)("span",{children:X.error?`✗ ${X.error}`:`✓ Imported ${X.imported}, updated ${X.updated}, skipped ${X.skipped}`}),(0,t.jsx)("button",{onClick:()=>Z(null),className:"text-current opacity-60 hover:opacity-100",children:"✕"})]}),0===c.length?(0,t.jsxs)("div",{className:"text-center py-12",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,t.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:eI?"lock":"key"})}),(0,t.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No connections yet"}),(0,t.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Add your first connection to get started"}),!eD&&(0,t.jsxs)("div",{className:"flex gap-2 justify-center",children:["iflow"===d&&(0,t.jsx)(n.Button,{icon:"cookie",variant:"secondary",onClick:()=>M(!0),children:"Cookie Auth"}),(0,t.jsx)(n.Button,{icon:"add",onClick:()=>eI?K(!0):F(!0),children:"iflow"===d?"OAuth":"Add Connection"}),"antigravity"===d&&(0,t.jsx)(n.Button,{icon:"download",variant:"secondary",onClick:e1,disabled:Y,children:Y?"Importing…":"Import from AGT"})]})]}):(0,t.jsxs)(t.Fragment,{children:[e5,!eD&&(0,t.jsxs)("div",{className:"flex gap-2 mt-4",children:["iflow"===d&&(0,t.jsx)(n.Button,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>M(!0),title:"Add connection using browser cookie",children:"Cookie"}),(0,t.jsx)(n.Button,{size:"sm",icon:"add",onClick:()=>eI?K(!0):F(!0),children:"Add"}),"antigravity"===d&&(0,t.jsx)(n.Button,{size:"sm",icon:"download",variant:"secondary",onClick:e1,disabled:Y,children:Y?"Importing…":"Import from AGT"})]})]})]}),(0,t.jsxs)(o.Card,{children:[(0,t.jsx)("div",{className:"flex items-center justify-between mb-4",children:(0,t.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"})}),!!en&&(0,t.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:en}),(()=>{let e,i;if(eD)return(0,t.jsx)(P,{providerStorageAlias:eU,providerDisplayAlias:eq,modelAliases:ei,copied:eP,onCopy:eT,onSetAlias:eF,onDeleteAlias:eJ,connections:c,isAnthropic:e_});let a=[...eO,...eS.filter(e=>!eO.some(t=>t.id===e.id))],s=Object.entries(ei).filter(([e,t])=>{let i=`${eU}/`;if(!t.startsWith(i))return!1;let a=t.slice(i.length);return eR.passthroughModels?!eO.some(e=>e.id===a):!eO.some(e=>e.id===a)&&e===a}).map(([e,t])=>({id:t.slice(`${eU}/`.length),alias:e,fullModel:t}));return(0,t.jsxs)("div",{className:"flex flex-wrap gap-3",children:[a.map(e=>{let i=`${eU}/${e.id}`,a=`${d}/${e.id}`,s=Object.entries(ei).find(([,e])=>e===i||e===a)?.[0];return(0,t.jsx)(S,{model:e,fullModel:`${eq}/${e.id}`,alias:s,copied:eP,onCopy:eT,onSetAlias:t=>eF(e.id,t,eU),onDeleteAlias:()=>eJ(s),testStatus:er[e.id],onTest:c.length>0?()=>e8(e.id):void 0,isTesting:ec===e.id,isFree:e.isFree},e.id)}),s.map(e=>(0,t.jsx)(S,{model:{id:e.id},fullModel:`${eq}/${e.id}`,alias:e.alias,copied:eP,onCopy:eT,onSetAlias:()=>{},onDeleteAlias:()=>eJ(e.alias),testStatus:er[e.id],onTest:c.length>0?()=>e8(e.id):void 0,isTesting:ec===e.id,isCustom:!0},e.id)),(0,t.jsxs)("button",{onClick:()=>em(!0),className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-dashed border-black/15 dark:border-white/15 text-xs text-text-muted hover:text-primary hover:border-primary/40 transition-colors",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-sm",children:"add"}),"Add Model"]}),eC.length>0&&(e=new Set(Object.values(ei)),0===(i=eC.filter(t=>!e.has(`${eU}/${t.id}`))).length?null:(0,t.jsxs)("div",{className:"w-full mt-2",children:[(0,t.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"Suggested free models (≥200k context):"}),(0,t.jsx)("div",{className:"flex flex-wrap gap-2",children:i.map(e=>(0,t.jsxs)("button",{onClick:async()=>{let t=e.id.split("/").pop();await eF(e.id,t,eU)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",title:`${e.name} \xb7 ${(e.contextLength/1e3).toFixed(0)}k ctx`,children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"add"}),e.id.split("/").pop()]},e.id))})]}))]})})()]}),e6,"kiro"===d?(0,t.jsx)(x.default,{isOpen:q,providerInfo:eR,onSuccess:eV,onClose:()=>K(!1)}):"cursor"===d?(0,t.jsx)(h.default,{isOpen:q,onSuccess:eV,onClose:()=>K(!1)}):"gitlab"===d?(0,t.jsx)(y.default,{isOpen:q,providerInfo:eR,onSuccess:eV,onClose:()=>K(!1)}):(0,t.jsx)(m.OAuthModal,{isOpen:q,provider:d,providerInfo:eR,onSuccess:eV,onClose:()=>K(!1)}),"iflow"===d&&(0,t.jsx)(f.default,{isOpen:B,onSuccess:()=>{eB(),M(!1)},onClose:()=>M(!1)}),(0,t.jsx)(I,{isOpen:L,provider:d,providerName:eR.name,isCompatible:eD,isAnthropic:e_,proxyPools:D,onSave:eW,onClose:()=>F(!1)}),(0,t.jsx)(O,{isOpen:J,connection:ee,proxyPools:D,onSave:eH,onClose:()=>z(!1)}),eD&&(0,t.jsx)($,{isOpen:V,node:T,onSave:eM,onClose:()=>W(!1),isAnthropic:e_}),!eD&&(0,t.jsx)(E,{isOpen:eu,providerAlias:eU,providerDisplayAlias:eq,onSave:async e=>{let t=eR?.passthroughModels?e.split("/").pop():e;await eF(e,t,eU),em(!1)},onClose:()=>em(!1)})]}):(0,t.jsxs)("div",{className:"text-center py-20",children:[(0,t.jsx)("p",{className:"text-text-muted",children:"Provider not found"}),(0,t.jsx)(l.default,{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]})}],99165)}]);