omniroute 1.5.0 → 1.6.0

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 (202) hide show
  1. package/README.md +22 -9
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +34 -34
  4. package/app/.next/build-manifest.json +2 -2
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/_global-error.html +2 -2
  30. package/app/.next/server/app/_global-error.rsc +1 -1
  31. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  32. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  33. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  34. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  35. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  36. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  37. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  44. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  46. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/api/cli-tools/backups/route.js +1 -1
  48. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  50. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  52. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  54. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  56. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  58. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js +1 -1
  60. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  62. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  64. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  66. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
  68. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/init/route.js +1 -1
  86. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/models/route.js +1 -1
  94. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  96. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/providers/route.js +1 -1
  118. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/settings/route.js +1 -1
  133. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  140. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  168. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  178. package/app/.next/server/app/docs/page.js +1 -1
  179. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  183. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  186. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  187. package/app/.next/server/app-paths-manifest.json +34 -34
  188. package/app/.next/server/chunks/5393.js +1 -1
  189. package/app/.next/server/chunks/6928.js +1 -0
  190. package/app/.next/server/instrumentation.js +1 -1
  191. package/app/.next/server/pages/500.html +2 -2
  192. package/app/.next/server/server-reference-manifest.js +1 -1
  193. package/app/.next/server/server-reference-manifest.json +1 -1
  194. package/app/.next/static/chunks/{5846-c6bffec2bf9757fa.js → 5846-4d550ce248336a0a.js} +1 -1
  195. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-ce332ffdb491a4d8.js → page-11e68927df2ceb77.js} +1 -1
  196. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/page-d424641c7e428be9.js +1 -0
  197. package/app/package.json +3 -3
  198. package/bin/omniroute.mjs +27 -14
  199. package/package.json +3 -3
  200. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/page-ec914ae79f085e6f.js +0 -1
  201. /package/app/.next/static/{XOdkUGO-Pm15MwsN4s6B3 → 8-doeVY8E2CPMK7rYufd5}/_buildManifest.js +0 -0
  202. /package/app/.next/static/{XOdkUGO-Pm15MwsN4s6B3 → 8-doeVY8E2CPMK7rYufd5}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9971],{4051:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>d});var r=s(95155),i=s(12115),a=s(73321),n=s(50910);let o=["welcome","security","provider","test","done"],c=["waving_hand","lock","dns","play_circle","check_circle"],l=[{id:"openai",name:"OpenAI",color:"#10A37F"},{id:"anthropic",name:"Anthropic",color:"#D97757"},{id:"google",name:"Google AI",color:"#4285F4"},{id:"openrouter",name:"OpenRouter",color:"#6B21A8"},{id:"groq",name:"Groq",color:"#F55036"},{id:"mistral",name:"Mistral",color:"#FF7000"}];function d(){let e=(0,a.useRouter)(),t=(0,n.c)("onboarding"),s=(0,n.c)("common"),[d,m]=(0,i.useState)(0),[x,p]=(0,i.useState)(!0),[u,h]=(0,i.useState)("http://localhost:20128/api/v1"),[g,b]=(0,i.useState)(""),[y,f]=(0,i.useState)(""),[j,v]=(0,i.useState)(!1),[w,N]=(0,i.useState)(null),[k,C]=(0,i.useState)(""),[P,S]=(0,i.useState)(""),[_,O]=(0,i.useState)(""),[T,A]=(0,i.useState)("idle"),[E,F]=(0,i.useState)("");(0,i.useEffect)(()=>{(async()=>{try{let s=await fetch("/api/settings");if(s.ok){var t;let r,i,a=await s.json();if(t=a?.apiPort,r=window.location.protocol,i=window.location.hostname,h(`${r}//${i}:${t||20128}/api/v1`),a.setupComplete)return void e.replace("/dashboard")}}catch{}p(!1)})()},[e]);let $=o.map((e,s)=>({id:e,title:t("done"===e?"ready":e),icon:c[s]})),q=$[d],D=d===$.length-1,R=()=>{d<$.length-1&&m(d+1)},[J,K]=(0,i.useState)(""),M=async()=>{if(j)return void R();if(g===y){K("");try{let e=await fetch("/api/settings/require-login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireLogin:!0,password:g})});if(!e.ok){let s=await e.json().catch(()=>({}));K(s.error||t("failedSetPassword"));return}R()}catch{K(t("connectionError"))}}},z=async()=>{if(w&&P){K("");try{let e=l.find(e=>e.id===w),s=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:w,name:_||e?.name||w,url:k||({openai:"https://api.openai.com",anthropic:"https://api.anthropic.com",google:"https://generativelanguage.googleapis.com",openrouter:"https://openrouter.ai/api",groq:"https://api.groq.com/openai",mistral:"https://api.mistral.ai"})[w]||"",apiKey:P,isActive:!0})});if(!s.ok){let e=await s.json().catch(()=>({}));K(e.error||t("failedAddProvider"));return}R()}catch{K(t("connectionError"))}}},G=async()=>{A("testing"),F(t("testingConnection"));try{let e=await fetch("/api/providers");if(!e.ok)throw Error("Failed to fetch");let s=await e.json(),r=s.connections?.[0];if(!r){A("error"),F(t("noProviderFound"));return}let i=await fetch(`/api/providers/${r.id}/test`,{method:"POST"});if(i.ok)A("success"),F(t("connectionSuccessful"));else{let e=await i.json().catch(()=>({}));A("error"),F(e.error||t("testFailed"))}}catch{A("error"),F(t("couldNotTest"))}},I=async()=>{try{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({setupComplete:!0})})}catch{}e.push("/dashboard")};return x?(0,r.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-bg",children:(0,r.jsx)("div",{className:"animate-pulse text-text-muted",children:s("loading")})}):(0,r.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-bg p-4",children:(0,r.jsxs)("div",{className:"w-full max-w-lg",children:[(0,r.jsx)("div",{className:"flex items-center justify-center gap-2 mb-8",children:$.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("div",{className:`w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold transition-all duration-300 ${t<d?"bg-green-500/20 text-green-400":t===d?"bg-primary/20 text-primary ring-2 ring-primary/40":"bg-white/5 text-text-muted"}`,children:t<d?(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"check"}):t+1}),t<$.length-1&&(0,r.jsx)("div",{className:`w-8 h-0.5 rounded-full transition-colors ${t<d?"bg-green-500/40":"bg-white/10"}`})]},e.id))}),(0,r.jsxs)("div",{className:"bg-surface rounded-2xl border border-white/[0.06] p-8 shadow-xl",children:[(0,r.jsxs)("div",{className:"text-center mb-6",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[48px] mb-3 block ${"done"===q.id?"text-green-400":"text-primary"}`,children:q.icon}),(0,r.jsx)("h2",{className:"text-2xl font-bold text-text-main mb-1",children:q.title})]}),(0,r.jsxs)("div",{className:"min-h-[200px]",children:["welcome"===q.id&&(0,r.jsxs)("div",{className:"text-center space-y-4",children:[(0,r.jsx)("p",{className:"text-text-muted",children:t("welcomeDesc")}),(0,r.jsx)("div",{className:"grid grid-cols-3 gap-3 mt-6",children:[{icon:"swap_horiz",label:t("multiProvider")},{icon:"monitoring",label:t("usageTracking")},{icon:"shield",label:t("apiKeyMgmt")}].map(e=>(0,r.jsxs)("div",{className:"bg-white/[0.03] rounded-xl p-3 text-center border border-white/[0.06]",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[24px] mb-1 block",children:e.icon}),(0,r.jsx)("span",{className:"text-xs text-text-muted",children:e.label})]},e.icon))})]}),"security"===q.id&&(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted text-center",children:t("securityDesc")}),(0,r.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer text-sm text-text-muted",children:[(0,r.jsx)("input",{type:"checkbox",checked:j,onChange:e=>v(e.target.checked),className:"accent-primary"}),t("skipPassword")]}),!j&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("input",{type:"password",placeholder:t("enterPassword"),value:g,onChange:e=>b(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"}),(0,r.jsx)("input",{type:"password",placeholder:t("confirmPasswordPlaceholder"),value:y,onChange:e=>f(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"}),g&&y&&g!==y&&(0,r.jsx)("p",{className:"text-xs text-red-400",children:t("passwordsMismatch")})]})]}),"provider"===q.id&&(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted text-center",children:t("providerDesc")}),(0,r.jsx)("div",{className:"grid grid-cols-3 gap-2",children:l.map(e=>(0,r.jsx)("button",{onClick:()=>{N(e.id),O(e.name)},className:`p-3 rounded-xl border text-center text-xs font-medium transition-all cursor-pointer ${w===e.id?"border-primary/60 bg-primary/10 text-primary":"border-white/10 bg-white/[0.03] text-text-muted hover:border-white/20"}`,children:e.name},e.id))}),w&&(0,r.jsxs)("div",{className:"space-y-3 mt-4",children:[(0,r.jsx)("input",{type:"password",placeholder:t("apiKeyRequired"),value:P,onChange:e=>S(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"}),(0,r.jsx)("input",{type:"text",placeholder:t("customUrlOptional"),value:k,onChange:e=>C(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"})]})]}),"test"===q.id&&(0,r.jsxs)("div",{className:"text-center space-y-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted",children:t("testDesc")}),"idle"===T&&(0,r.jsx)("button",{onClick:G,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors cursor-pointer",children:t("runTest")}),"testing"===T&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),(0,r.jsx)("span",{className:"text-sm",children:E})]}),"success"===T&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-green-400",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"check_circle"}),(0,r.jsx)("span",{className:"text-sm",children:E})]}),"error"===T&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-amber-400",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"warning"}),(0,r.jsx)("span",{className:"text-sm",children:E})]}),(0,r.jsx)("button",{onClick:G,className:"text-xs text-text-muted underline cursor-pointer",children:t("retry")})]})]}),"done"===q.id&&(0,r.jsxs)("div",{className:"text-center space-y-4",children:[(0,r.jsx)("p",{className:"text-text-muted",children:t("doneDesc")}),(0,r.jsxs)("div",{className:"bg-white/[0.03] rounded-xl p-4 border border-white/[0.06] text-left",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2 font-medium",children:t("yourEndpoint")}),(0,r.jsx)("code",{className:"text-sm text-primary",children:u})]})]})]}),(0,r.jsxs)("div",{className:"flex items-center justify-between mt-8 pt-6 border-t border-white/[0.06]",children:[(0,r.jsx)("div",{children:d>0&&!D&&(0,r.jsx)("button",{onClick:()=>{d>0&&m(d-1)},className:"px-4 py-2 text-sm text-text-muted hover:text-text-main transition-colors cursor-pointer",children:s("back")})}),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[!D&&d>0&&(0,r.jsx)("button",{onClick:R,className:"px-4 py-2 text-sm text-text-muted hover:text-text-main transition-colors cursor-pointer",children:t("skip")}),"welcome"===q.id&&(0,r.jsx)("button",{onClick:R,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors cursor-pointer",children:t("getStarted")}),"security"===q.id&&(0,r.jsx)("button",{onClick:M,disabled:!j&&(!g||g!==y),className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",children:j?t("skipAndContinue"):t("setPassword")}),"provider"===q.id&&(0,r.jsx)("button",{onClick:z,disabled:!w||!P,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",children:t("addProvider")}),"test"===q.id&&(0,r.jsx)("button",{onClick:R,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors cursor-pointer",children:"success"===T?t("continue"):t("skip")}),D&&(0,r.jsx)("button",{onClick:I,className:"px-6 py-2.5 bg-green-500 rounded-lg text-white font-medium text-sm hover:bg-green-500/90 transition-colors cursor-pointer",children:t("goToDashboard")})]})]})]}),!D&&(0,r.jsx)("div",{className:"text-center mt-4",children:(0,r.jsx)("button",{onClick:I,className:"text-xs text-text-muted/60 hover:text-text-muted transition-colors cursor-pointer",children:t("skipWizard")})})]})})}},50910:(e,t,s)=>{"use strict";s.d(t,{c:()=>a});var r=s(33418);function i(e,t){return(...e)=>{try{return t(...e)}catch{throw Error(void 0)}}}let a=i(0,r.c3);i(0,r.kc)},73321:(e,t,s)=>{"use strict";var r=s(74645);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},89848:(e,t,s)=>{Promise.resolve().then(s.bind(s,4051))}},e=>{e.O(0,[3418,8441,3794,7358],()=>e(e.s=89848)),_N_E=e.O()}]);
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "homepage": "https://omniroute.online",
44
44
  "scripts": {
45
- "dev": "next dev --webpack --port 20128",
45
+ "dev": "node scripts/run-next.mjs dev",
46
46
  "build": "next build --webpack",
47
47
  "build:cli": "node scripts/prepublish.mjs",
48
- "start": "next start --port 20128",
48
+ "start": "node scripts/run-next.mjs start",
49
49
  "lint": "eslint .",
50
50
  "test": "node --import tsx/esm --test tests/unit/*.test.mjs",
51
51
  "test:unit": "node --import tsx/esm --test tests/unit/*.test.mjs",
package/bin/omniroute.mjs CHANGED
@@ -30,18 +30,18 @@ if (args.includes("--help") || args.includes("-h")) {
30
30
 
31
31
  \x1b[1mUsage:\x1b[0m
32
32
  omniroute Start the server
33
- omniroute --port <port> Use custom port (default: 20128)
33
+ omniroute --port <port> Use custom API port (default: 20128)
34
34
  omniroute --no-open Don't open browser automatically
35
35
  omniroute --help Show this help
36
36
  omniroute --version Show version
37
37
 
38
38
  \x1b[1mAfter starting:\x1b[0m
39
- Dashboard: http://localhost:<port>
40
- API: http://localhost:<port>/v1
39
+ Dashboard: http://localhost:<dashboard-port>
40
+ API: http://localhost:<api-port>/v1
41
41
 
42
42
  \x1b[1mConnect your tools:\x1b[0m
43
43
  Set your CLI tool (Cursor, Cline, Codex, etc.) to use:
44
- \x1b[33mhttp://localhost:20128/v1\x1b[0m
44
+ \x1b[33mhttp://localhost:<api-port>/v1\x1b[0m
45
45
  `);
46
46
  process.exit(0);
47
47
  }
@@ -58,17 +58,26 @@ if (args.includes("--version") || args.includes("-v")) {
58
58
  process.exit(0);
59
59
  }
60
60
 
61
- // Parse --port
62
- let port = 20128;
61
+ function parsePort(value, fallback) {
62
+ const parsed = parseInt(String(value), 10);
63
+ return Number.isFinite(parsed) && parsed > 0 && parsed <= 65535 ? parsed : fallback;
64
+ }
65
+
66
+ // Parse --port (canonical/base port)
67
+ let port = parsePort(process.env.PORT || "20128", 20128);
63
68
  const portIdx = args.indexOf("--port");
64
69
  if (portIdx !== -1 && args[portIdx + 1]) {
65
- port = parseInt(args[portIdx + 1], 10);
66
- if (isNaN(port)) {
70
+ const cliPort = parsePort(args[portIdx + 1], null);
71
+ if (cliPort === null) {
67
72
  console.error("\x1b[31m✖ Invalid port number\x1b[0m");
68
73
  process.exit(1);
69
74
  }
75
+ port = cliPort;
70
76
  }
71
77
 
78
+ const apiPort = parsePort(process.env.API_PORT || String(port), port);
79
+ const dashboardPort = parsePort(process.env.DASHBOARD_PORT || String(port), port);
80
+
72
81
  const noOpen = args.includes("--no-open");
73
82
 
74
83
  // ── Banner ─────────────────────────────────────────────────
@@ -110,7 +119,10 @@ console.log(` \x1b[2m⏳ Starting server...\x1b[0m\n`);
110
119
 
111
120
  const env = {
112
121
  ...process.env,
113
- PORT: String(port),
122
+ OMNIROUTE_PORT: String(port),
123
+ PORT: String(dashboardPort),
124
+ DASHBOARD_PORT: String(dashboardPort),
125
+ API_PORT: String(apiPort),
114
126
  HOSTNAME: "0.0.0.0",
115
127
  NODE_ENV: "production",
116
128
  };
@@ -168,16 +180,17 @@ process.on("SIGTERM", shutdown);
168
180
 
169
181
  // ── On ready ───────────────────────────────────────────────
170
182
  async function onReady() {
171
- const url = `http://localhost:${port}`;
183
+ const dashboardUrl = `http://localhost:${dashboardPort}`;
184
+ const apiUrl = `http://localhost:${apiPort}`;
172
185
 
173
186
  console.log(`
174
187
  \x1b[32m✔ OmniRoute is running!\x1b[0m
175
188
 
176
- \x1b[1m Dashboard:\x1b[0m ${url}
177
- \x1b[1m API Base:\x1b[0m ${url}/v1
189
+ \x1b[1m Dashboard:\x1b[0m ${dashboardUrl}
190
+ \x1b[1m API Base:\x1b[0m ${apiUrl}/v1
178
191
 
179
192
  \x1b[2m Point your CLI tool (Cursor, Cline, Codex) to:\x1b[0m
180
- \x1b[33m ${url}/v1\x1b[0m
193
+ \x1b[33m ${apiUrl}/v1\x1b[0m
181
194
 
182
195
  \x1b[2m Press Ctrl+C to stop\x1b[0m
183
196
  `);
@@ -185,7 +198,7 @@ async function onReady() {
185
198
  if (!noOpen) {
186
199
  try {
187
200
  const open = await import("open");
188
- await open.default(url);
201
+ await open.default(dashboardUrl);
189
202
  } catch {
190
203
  // open is optional — if not available, just skip
191
204
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "homepage": "https://omniroute.online",
44
44
  "scripts": {
45
- "dev": "next dev --webpack --port 20128",
45
+ "dev": "node scripts/run-next.mjs dev",
46
46
  "build": "next build --webpack",
47
47
  "build:cli": "node scripts/prepublish.mjs",
48
- "start": "next start --port 20128",
48
+ "start": "node scripts/run-next.mjs start",
49
49
  "lint": "eslint .",
50
50
  "test": "node --import tsx/esm --test tests/unit/*.test.mjs",
51
51
  "test:unit": "node --import tsx/esm --test tests/unit/*.test.mjs",
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9971],{4051:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>d});var r=s(95155),i=s(12115),a=s(73321),n=s(50910);let o=["welcome","security","provider","test","done"],c=["waving_hand","lock","dns","play_circle","check_circle"],l=[{id:"openai",name:"OpenAI",color:"#10A37F"},{id:"anthropic",name:"Anthropic",color:"#D97757"},{id:"google",name:"Google AI",color:"#4285F4"},{id:"openrouter",name:"OpenRouter",color:"#6B21A8"},{id:"groq",name:"Groq",color:"#F55036"},{id:"mistral",name:"Mistral",color:"#FF7000"}];function d(){let e=(0,a.useRouter)(),t=(0,n.c)("onboarding"),s=(0,n.c)("common"),[d,m]=(0,i.useState)(0),[x,u]=(0,i.useState)(!0),[p,h]=(0,i.useState)(""),[g,b]=(0,i.useState)(""),[y,f]=(0,i.useState)(!1),[j,v]=(0,i.useState)(null),[N,w]=(0,i.useState)(""),[k,C]=(0,i.useState)(""),[P,S]=(0,i.useState)(""),[_,O]=(0,i.useState)("idle"),[T,A]=(0,i.useState)("");(0,i.useEffect)(()=>{(async()=>{try{let t=await fetch("/api/settings");if(t.ok&&(await t.json()).setupComplete)return void e.replace("/dashboard")}catch{}u(!1)})()},[e]);let E=o.map((e,s)=>({id:e,title:t("done"===e?"ready":e),icon:c[s]})),F=E[d],q=d===E.length-1,D=()=>{d<E.length-1&&m(d+1)},[R,$]=(0,i.useState)(""),J=async()=>{if(y)return void D();if(p===g){$("");try{let e=await fetch("/api/settings/require-login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireLogin:!0,password:p})});if(!e.ok){let s=await e.json().catch(()=>({}));$(s.error||t("failedSetPassword"));return}D()}catch{$(t("connectionError"))}}},K=async()=>{if(j&&k){$("");try{let e=l.find(e=>e.id===j),s=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:j,name:P||e?.name||j,url:N||({openai:"https://api.openai.com",anthropic:"https://api.anthropic.com",google:"https://generativelanguage.googleapis.com",openrouter:"https://openrouter.ai/api",groq:"https://api.groq.com/openai",mistral:"https://api.mistral.ai"})[j]||"",apiKey:k,isActive:!0})});if(!s.ok){let e=await s.json().catch(()=>({}));$(e.error||t("failedAddProvider"));return}D()}catch{$(t("connectionError"))}}},M=async()=>{O("testing"),A(t("testingConnection"));try{let e=await fetch("/api/providers");if(!e.ok)throw Error("Failed to fetch");let s=await e.json(),r=s.connections?.[0];if(!r){O("error"),A(t("noProviderFound"));return}let i=await fetch(`/api/providers/${r.id}/test`,{method:"POST"});if(i.ok)O("success"),A(t("connectionSuccessful"));else{let e=await i.json().catch(()=>({}));O("error"),A(e.error||t("testFailed"))}}catch{O("error"),A(t("couldNotTest"))}},z=async()=>{try{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({setupComplete:!0})})}catch{}e.push("/dashboard")};return x?(0,r.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-bg",children:(0,r.jsx)("div",{className:"animate-pulse text-text-muted",children:s("loading")})}):(0,r.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-bg p-4",children:(0,r.jsxs)("div",{className:"w-full max-w-lg",children:[(0,r.jsx)("div",{className:"flex items-center justify-center gap-2 mb-8",children:E.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("div",{className:`w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold transition-all duration-300 ${t<d?"bg-green-500/20 text-green-400":t===d?"bg-primary/20 text-primary ring-2 ring-primary/40":"bg-white/5 text-text-muted"}`,children:t<d?(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"check"}):t+1}),t<E.length-1&&(0,r.jsx)("div",{className:`w-8 h-0.5 rounded-full transition-colors ${t<d?"bg-green-500/40":"bg-white/10"}`})]},e.id))}),(0,r.jsxs)("div",{className:"bg-surface rounded-2xl border border-white/[0.06] p-8 shadow-xl",children:[(0,r.jsxs)("div",{className:"text-center mb-6",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[48px] mb-3 block ${"done"===F.id?"text-green-400":"text-primary"}`,children:F.icon}),(0,r.jsx)("h2",{className:"text-2xl font-bold text-text-main mb-1",children:F.title})]}),(0,r.jsxs)("div",{className:"min-h-[200px]",children:["welcome"===F.id&&(0,r.jsxs)("div",{className:"text-center space-y-4",children:[(0,r.jsx)("p",{className:"text-text-muted",children:t("welcomeDesc")}),(0,r.jsx)("div",{className:"grid grid-cols-3 gap-3 mt-6",children:[{icon:"swap_horiz",label:t("multiProvider")},{icon:"monitoring",label:t("usageTracking")},{icon:"shield",label:t("apiKeyMgmt")}].map(e=>(0,r.jsxs)("div",{className:"bg-white/[0.03] rounded-xl p-3 text-center border border-white/[0.06]",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-primary text-[24px] mb-1 block",children:e.icon}),(0,r.jsx)("span",{className:"text-xs text-text-muted",children:e.label})]},e.icon))})]}),"security"===F.id&&(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted text-center",children:t("securityDesc")}),(0,r.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer text-sm text-text-muted",children:[(0,r.jsx)("input",{type:"checkbox",checked:y,onChange:e=>f(e.target.checked),className:"accent-primary"}),t("skipPassword")]}),!y&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("input",{type:"password",placeholder:t("enterPassword"),value:p,onChange:e=>h(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"}),(0,r.jsx)("input",{type:"password",placeholder:t("confirmPasswordPlaceholder"),value:g,onChange:e=>b(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"}),p&&g&&p!==g&&(0,r.jsx)("p",{className:"text-xs text-red-400",children:t("passwordsMismatch")})]})]}),"provider"===F.id&&(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted text-center",children:t("providerDesc")}),(0,r.jsx)("div",{className:"grid grid-cols-3 gap-2",children:l.map(e=>(0,r.jsx)("button",{onClick:()=>{v(e.id),S(e.name)},className:`p-3 rounded-xl border text-center text-xs font-medium transition-all cursor-pointer ${j===e.id?"border-primary/60 bg-primary/10 text-primary":"border-white/10 bg-white/[0.03] text-text-muted hover:border-white/20"}`,children:e.name},e.id))}),j&&(0,r.jsxs)("div",{className:"space-y-3 mt-4",children:[(0,r.jsx)("input",{type:"password",placeholder:t("apiKeyRequired"),value:k,onChange:e=>C(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"}),(0,r.jsx)("input",{type:"text",placeholder:t("customUrlOptional"),value:N,onChange:e=>w(e.target.value),className:"w-full px-4 py-2.5 bg-white/[0.04] border border-white/10 rounded-lg text-text-main text-sm placeholder:text-text-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/40"})]})]}),"test"===F.id&&(0,r.jsxs)("div",{className:"text-center space-y-4",children:[(0,r.jsx)("p",{className:"text-sm text-text-muted",children:t("testDesc")}),"idle"===_&&(0,r.jsx)("button",{onClick:M,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors cursor-pointer",children:t("runTest")}),"testing"===_&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),(0,r.jsx)("span",{className:"text-sm",children:T})]}),"success"===_&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-green-400",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"check_circle"}),(0,r.jsx)("span",{className:"text-sm",children:T})]}),"error"===_&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-amber-400",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"warning"}),(0,r.jsx)("span",{className:"text-sm",children:T})]}),(0,r.jsx)("button",{onClick:M,className:"text-xs text-text-muted underline cursor-pointer",children:t("retry")})]})]}),"done"===F.id&&(0,r.jsxs)("div",{className:"text-center space-y-4",children:[(0,r.jsx)("p",{className:"text-text-muted",children:t("doneDesc")}),(0,r.jsxs)("div",{className:"bg-white/[0.03] rounded-xl p-4 border border-white/[0.06] text-left",children:[(0,r.jsx)("p",{className:"text-xs text-text-muted mb-2 font-medium",children:t("yourEndpoint")}),(0,r.jsx)("code",{className:"text-sm text-primary",children:"http://localhost:20128/api/v1"})]})]})]}),(0,r.jsxs)("div",{className:"flex items-center justify-between mt-8 pt-6 border-t border-white/[0.06]",children:[(0,r.jsx)("div",{children:d>0&&!q&&(0,r.jsx)("button",{onClick:()=>{d>0&&m(d-1)},className:"px-4 py-2 text-sm text-text-muted hover:text-text-main transition-colors cursor-pointer",children:s("back")})}),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[!q&&d>0&&(0,r.jsx)("button",{onClick:D,className:"px-4 py-2 text-sm text-text-muted hover:text-text-main transition-colors cursor-pointer",children:t("skip")}),"welcome"===F.id&&(0,r.jsx)("button",{onClick:D,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors cursor-pointer",children:t("getStarted")}),"security"===F.id&&(0,r.jsx)("button",{onClick:J,disabled:!y&&(!p||p!==g),className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",children:y?t("skipAndContinue"):t("setPassword")}),"provider"===F.id&&(0,r.jsx)("button",{onClick:K,disabled:!j||!k,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",children:t("addProvider")}),"test"===F.id&&(0,r.jsx)("button",{onClick:D,className:"px-6 py-2.5 bg-primary rounded-lg text-white font-medium text-sm hover:bg-primary/90 transition-colors cursor-pointer",children:"success"===_?t("continue"):t("skip")}),q&&(0,r.jsx)("button",{onClick:z,className:"px-6 py-2.5 bg-green-500 rounded-lg text-white font-medium text-sm hover:bg-green-500/90 transition-colors cursor-pointer",children:t("goToDashboard")})]})]})]}),!q&&(0,r.jsx)("div",{className:"text-center mt-4",children:(0,r.jsx)("button",{onClick:z,className:"text-xs text-text-muted/60 hover:text-text-muted transition-colors cursor-pointer",children:t("skipWizard")})})]})})}},50910:(e,t,s)=>{"use strict";s.d(t,{c:()=>a});var r=s(33418);function i(e,t){return(...e)=>{try{return t(...e)}catch{throw Error(void 0)}}}let a=i(0,r.c3);i(0,r.kc)},73321:(e,t,s)=>{"use strict";var r=s(74645);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},89848:(e,t,s)=>{Promise.resolve().then(s.bind(s,4051))}},e=>{e.O(0,[3418,8441,3794,7358],()=>e(e.s=89848)),_N_E=e.O()}]);