omniroute 2.1.2 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +46 -46
  3. package/app/.next/build-manifest.json +3 -3
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/required-server-files.json +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js +2 -2
  7. package/app/.next/server/app/(dashboard)/dashboard/a2a/page.js.nft.json +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js +2 -2
  10. package/app/.next/server/app/(dashboard)/dashboard/agents/page.js.nft.json +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  13. package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +2 -2
  16. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +2 -2
  19. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js +2 -2
  22. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page.js.nft.json +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +4 -4
  25. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  28. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +2 -2
  31. package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  34. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -2
  37. package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +2 -2
  40. package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +2 -2
  43. package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js +2 -2
  46. package/app/.next/server/app/(dashboard)/dashboard/mcp/page.js.nft.json +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/media/page.js +2 -2
  49. package/app/.next/server/app/(dashboard)/dashboard/media/page.js.nft.json +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
  52. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  55. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js +3 -3
  58. package/app/.next/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  61. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  64. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  67. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  70. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
  73. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  74. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
  76. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  77. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +3 -3
  79. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  80. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  82. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  83. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/.well-known/agent.json/route.js +1 -1
  85. package/app/.next/server/app/.well-known/agent.json/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/400/page.js +2 -2
  87. package/app/.next/server/app/400/page.js.nft.json +1 -1
  88. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/401/page.js +2 -2
  90. package/app/.next/server/app/401/page.js.nft.json +1 -1
  91. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/403/page.js +2 -2
  93. package/app/.next/server/app/403/page.js.nft.json +1 -1
  94. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/408/page.js +2 -2
  96. package/app/.next/server/app/408/page.js.nft.json +1 -1
  97. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/429/page.js +2 -2
  99. package/app/.next/server/app/429/page.js.nft.json +1 -1
  100. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/500/page.js +2 -2
  102. package/app/.next/server/app/500/page.js.nft.json +1 -1
  103. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/502/page.js +2 -2
  105. package/app/.next/server/app/502/page.js.nft.json +1 -1
  106. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/503/page.js +2 -2
  108. package/app/.next/server/app/503/page.js.nft.json +1 -1
  109. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/_global-error/page.js +3 -3
  111. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/_global-error.html +2 -2
  113. package/app/.next/server/app/_global-error.rsc +5 -5
  114. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +5 -5
  115. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  116. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  117. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  118. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +4 -4
  119. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  120. package/app/.next/server/app/_not-found/page.js +2 -2
  121. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  122. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/a2a/route.js +2 -2
  124. package/app/.next/server/app/a2a/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/a2a/status/route.js +1 -1
  126. package/app/.next/server/app/api/a2a/status/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route.js +1 -1
  128. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/a2a/tasks/[id]/route.js +1 -1
  130. package/app/.next/server/app/api/a2a/tasks/[id]/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/a2a/tasks/route.js +1 -1
  132. package/app/.next/server/app/api/a2a/tasks/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/acp/agents/route.js +1 -1
  134. package/app/.next/server/app/api/acp/agents/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/acp/agents/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/auth/login/route.js +1 -1
  137. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  140. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/auth/status/route.js +1 -1
  142. package/app/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  143. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/cache/route.js +1 -1
  145. package/app/.next/server/app/api/cache/route.js.nft.json +1 -1
  146. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/cache/stats/route.js +1 -1
  148. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  150. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  153. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
  155. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  157. package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  160. package/app/.next/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  161. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  163. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  165. package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  168. package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route.js +1 -1
  171. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  173. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  174. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route.js +1 -1
  176. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  178. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  181. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/api/cli-tools/status/route.js +2 -2
  183. package/app/.next/server/app/api/cli-tools/status/route.js.nft.json +1 -1
  184. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  186. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  187. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  189. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  190. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  192. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  193. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  194. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  195. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  196. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  197. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  198. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  199. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/api/combos/auto/route.js +1 -1
  201. package/app/.next/server/app/api/combos/auto/route_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/api/combos/metrics/route.js +1 -1
  203. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  204. package/app/.next/server/app/api/combos/route.js +1 -1
  205. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  206. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  207. package/app/.next/server/app/api/combos/test/route.js +1 -1
  208. package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  210. package/app/.next/server/app/api/compliance/audit-log/route.js +1 -1
  211. package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -1
  212. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  213. package/app/.next/server/app/api/db-backups/export/route.js +1 -1
  214. package/app/.next/server/app/api/db-backups/export/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  216. package/app/.next/server/app/api/db-backups/exportAll/route.js +1 -1
  217. package/app/.next/server/app/api/db-backups/exportAll/route.js.nft.json +1 -1
  218. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  219. package/app/.next/server/app/api/db-backups/import/route.js +1 -1
  220. package/app/.next/server/app/api/db-backups/import/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  222. package/app/.next/server/app/api/db-backups/route.js +1 -1
  223. package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
  224. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  225. package/app/.next/server/app/api/evals/[suiteId]/route.js +1 -1
  226. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  227. package/app/.next/server/app/api/evals/route.js +1 -1
  228. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  229. package/app/.next/server/app/api/fallback/chains/route.js +2 -2
  230. package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -1
  231. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  232. package/app/.next/server/app/api/init/route.js +1 -1
  233. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  235. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  236. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  237. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  238. package/app/.next/server/app/api/keys/route.js +1 -1
  239. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  240. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  241. package/app/.next/server/app/api/logs/console/route.js +1 -1
  242. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  243. package/app/.next/server/app/api/mcp/audit/route.js +2 -2
  244. package/app/.next/server/app/api/mcp/audit/route.js.nft.json +1 -1
  245. package/app/.next/server/app/api/mcp/audit/route_client-reference-manifest.js +1 -1
  246. package/app/.next/server/app/api/mcp/audit/stats/route.js +2 -2
  247. package/app/.next/server/app/api/mcp/audit/stats/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/mcp/audit/stats/route_client-reference-manifest.js +1 -1
  249. package/app/.next/server/app/api/mcp/sse/route.js +1 -1
  250. package/app/.next/server/app/api/mcp/sse/route.js.nft.json +1 -1
  251. package/app/.next/server/app/api/mcp/sse/route_client-reference-manifest.js +1 -1
  252. package/app/.next/server/app/api/mcp/status/route.js +1 -1
  253. package/app/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  254. package/app/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  255. package/app/.next/server/app/api/mcp/stream/route.js +1 -1
  256. package/app/.next/server/app/api/mcp/stream/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/mcp/stream/route_client-reference-manifest.js +1 -1
  258. package/app/.next/server/app/api/mcp/tools/route.js +1 -1
  259. package/app/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  260. package/app/.next/server/app/api/models/alias/route.js +1 -1
  261. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  262. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  263. package/app/.next/server/app/api/models/availability/route.js +1 -1
  264. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  265. package/app/.next/server/app/api/models/catalog/route.js +2 -2
  266. package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  267. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  268. package/app/.next/server/app/api/models/openrouter-catalog/route.js +1 -1
  269. package/app/.next/server/app/api/models/openrouter-catalog/route.js.nft.json +1 -1
  270. package/app/.next/server/app/api/models/openrouter-catalog/route_client-reference-manifest.js +1 -1
  271. package/app/.next/server/app/api/models/route.js +2 -2
  272. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  274. package/app/.next/server/app/api/monitoring/health/route.js +2 -2
  275. package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -1
  276. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  277. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  278. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  279. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  280. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +1 -1
  281. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  282. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  283. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  284. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  285. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  286. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  287. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  288. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  289. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  290. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  291. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  292. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  293. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  294. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  295. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  296. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  297. package/app/.next/server/app/api/policies/route.js +2 -2
  298. package/app/.next/server/app/api/policies/route.js.nft.json +1 -1
  299. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  300. package/app/.next/server/app/api/pricing/defaults/route.js +1 -1
  301. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  302. package/app/.next/server/app/api/pricing/models/route.js +1 -1
  303. package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
  304. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  305. package/app/.next/server/app/api/pricing/route.js +1 -1
  306. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  307. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  308. package/app/.next/server/app/api/provider-metrics/route.js +2 -2
  309. package/app/.next/server/app/api/provider-metrics/route.js.nft.json +1 -1
  310. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  311. package/app/.next/server/app/api/provider-models/route.js +1 -1
  312. package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
  313. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  314. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  315. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  316. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  317. package/app/.next/server/app/api/provider-nodes/route.js +2 -2
  318. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  319. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  321. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  322. package/app/.next/server/app/api/providers/[id]/models/route.js +2 -2
  323. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  324. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  325. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  326. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  327. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  328. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  329. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  330. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  331. package/app/.next/server/app/api/providers/client/route.js +1 -1
  332. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  333. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  334. package/app/.next/server/app/api/providers/route.js +2 -2
  335. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  336. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  337. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  338. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  339. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  340. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  341. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  342. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  343. package/app/.next/server/app/api/rate-limit/route.js +1 -1
  344. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  345. package/app/.next/server/app/api/rate-limits/route.js +1 -1
  346. package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
  347. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  348. package/app/.next/server/app/api/resilience/reset/route.js +1 -1
  349. package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -1
  350. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  351. package/app/.next/server/app/api/resilience/route.js +1 -1
  352. package/app/.next/server/app/api/resilience/route.js.nft.json +1 -1
  353. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  354. package/app/.next/server/app/api/restart/route.js +1 -1
  355. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  356. package/app/.next/server/app/api/sessions/route.js +1 -1
  357. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  358. package/app/.next/server/app/api/settings/background-degradation/route.js +1 -1
  359. package/app/.next/server/app/api/settings/background-degradation/route.js.nft.json +1 -1
  360. package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -1
  361. package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -1
  362. package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
  363. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  364. package/app/.next/server/app/api/settings/ip-filter/route.js +1 -1
  365. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  366. package/app/.next/server/app/api/settings/model-aliases/route.js +1 -1
  367. package/app/.next/server/app/api/settings/model-aliases/route.js.nft.json +1 -1
  368. package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -1
  369. package/app/.next/server/app/api/settings/proxy/route.js +1 -1
  370. package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
  371. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  372. package/app/.next/server/app/api/settings/proxy/test/route.js +1 -1
  373. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  374. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  375. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  376. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  377. package/app/.next/server/app/api/settings/route.js +1 -1
  378. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  379. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  380. package/app/.next/server/app/api/settings/system-prompt/route.js +1 -1
  381. package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
  382. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  383. package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -1
  384. package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
  385. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  386. package/app/.next/server/app/api/shutdown/route.js +1 -1
  387. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  388. package/app/.next/server/app/api/storage/health/route.js +1 -1
  389. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  390. package/app/.next/server/app/api/sync/cloud/route.js +1 -1
  391. package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
  392. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  393. package/app/.next/server/app/api/sync/initialize/route.js +1 -1
  394. package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
  395. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  396. package/app/.next/server/app/api/tags/route.js +1 -1
  397. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  398. package/app/.next/server/app/api/telemetry/summary/route.js +1 -1
  399. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  400. package/app/.next/server/app/api/token-health/route.js +1 -1
  401. package/app/.next/server/app/api/token-health/route.js.nft.json +1 -1
  402. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  403. package/app/.next/server/app/api/translator/detect/route.js +1 -1
  404. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  405. package/app/.next/server/app/api/translator/history/route.js +1 -1
  406. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  407. package/app/.next/server/app/api/translator/load/route.js +1 -1
  408. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  409. package/app/.next/server/app/api/translator/save/route.js +1 -1
  410. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  411. package/app/.next/server/app/api/translator/send/route.js +1 -1
  412. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  413. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  414. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  415. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  416. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  417. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -2
  418. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  419. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  420. package/app/.next/server/app/api/usage/analytics/route.js +1 -1
  421. package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
  422. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  423. package/app/.next/server/app/api/usage/budget/route.js +2 -2
  424. package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -1
  425. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  426. package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -1
  427. package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
  428. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  429. package/app/.next/server/app/api/usage/call-logs/route.js +1 -1
  430. package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
  431. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  432. package/app/.next/server/app/api/usage/history/route.js +1 -1
  433. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  434. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  435. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  436. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  437. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  438. package/app/.next/server/app/api/usage/proxy-logs/route.js +1 -1
  439. package/app/.next/server/app/api/usage/proxy-logs/route.js.nft.json +1 -1
  440. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  441. package/app/.next/server/app/api/usage/quota/route.js +1 -1
  442. package/app/.next/server/app/api/usage/quota/route.js.nft.json +1 -1
  443. package/app/.next/server/app/api/usage/quota/route_client-reference-manifest.js +1 -1
  444. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  445. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  446. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  447. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  448. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  449. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  450. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  451. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  452. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  453. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  454. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  455. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  456. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  457. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  458. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  459. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  460. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  461. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  462. package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
  463. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  464. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  465. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  466. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  467. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  468. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  469. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  470. package/app/.next/server/app/api/v1/models/route.js +1 -1
  471. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  472. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  473. package/app/.next/server/app/api/v1/moderations/route.js +1 -1
  474. package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
  475. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  476. package/app/.next/server/app/api/v1/music/generations/route.js +1 -1
  477. package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
  478. package/app/.next/server/app/api/v1/music/generations/route_client-reference-manifest.js +1 -1
  479. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -1
  480. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
  481. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  482. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
  483. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
  484. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  485. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
  486. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
  487. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  488. package/app/.next/server/app/api/v1/rerank/route.js +1 -1
  489. package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
  490. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  491. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  492. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  493. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  494. package/app/.next/server/app/api/v1/route.js +1 -1
  495. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  496. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  497. package/app/.next/server/app/api/v1/videos/generations/route.js +1 -1
  498. package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  499. package/app/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
  500. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  501. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  502. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  503. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  504. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  505. package/app/.next/server/app/callback/page.js +2 -2
  506. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  507. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  508. package/app/.next/server/app/docs/page.js +4 -4
  509. package/app/.next/server/app/docs/page.js.nft.json +1 -1
  510. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  511. package/app/.next/server/app/forbidden/page.js +2 -2
  512. package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
  513. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  514. package/app/.next/server/app/forgot-password/page.js +2 -2
  515. package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
  516. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  517. package/app/.next/server/app/landing/page.js +2 -2
  518. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  519. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  520. package/app/.next/server/app/login/page.js +2 -2
  521. package/app/.next/server/app/login/page.js.nft.json +1 -1
  522. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  523. package/app/.next/server/app/maintenance/page.js +2 -2
  524. package/app/.next/server/app/maintenance/page.js.nft.json +1 -1
  525. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  526. package/app/.next/server/app/offline/page.js +2 -2
  527. package/app/.next/server/app/offline/page.js.nft.json +1 -1
  528. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  529. package/app/.next/server/app/page.js +2 -2
  530. package/app/.next/server/app/page.js.nft.json +1 -1
  531. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  532. package/app/.next/server/app/privacy/page.js +2 -2
  533. package/app/.next/server/app/privacy/page.js.nft.json +1 -1
  534. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  535. package/app/.next/server/app/status/page.js +2 -2
  536. package/app/.next/server/app/status/page.js.nft.json +1 -1
  537. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  538. package/app/.next/server/app/terms/page.js +2 -2
  539. package/app/.next/server/app/terms/page.js.nft.json +1 -1
  540. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  541. package/app/.next/server/app-paths-manifest.json +46 -46
  542. package/app/.next/server/chunks/1960.js +1 -1
  543. package/app/.next/server/chunks/2050.js +1 -1
  544. package/app/.next/server/chunks/2767.js +2 -2
  545. package/app/.next/server/chunks/2910.js +1 -1
  546. package/app/.next/server/chunks/3061.js +2 -2
  547. package/app/.next/server/chunks/3366.js +1 -0
  548. package/app/.next/server/chunks/3648.js +2 -2
  549. package/app/.next/server/chunks/438.js +1 -1
  550. package/app/.next/server/chunks/4488.js +1 -1
  551. package/app/.next/server/chunks/5248.js +1 -0
  552. package/app/.next/server/chunks/5419.js +1 -1
  553. package/app/.next/server/chunks/6184.js +1 -0
  554. package/app/.next/server/chunks/6743.js +1 -1
  555. package/app/.next/server/chunks/7109.js +1 -1
  556. package/app/.next/server/chunks/7544.js +8 -6
  557. package/app/.next/server/chunks/7889.js +2 -0
  558. package/app/.next/server/chunks/8020.js +3 -3
  559. package/app/.next/server/chunks/8252.js +1 -1
  560. package/app/.next/server/chunks/8369.js +1 -1
  561. package/app/.next/server/chunks/8429.js +1 -1
  562. package/app/.next/server/chunks/8907.js +1 -1
  563. package/app/.next/server/chunks/9548.js +1 -1
  564. package/app/.next/server/chunks/9631.js +13 -0
  565. package/app/.next/server/chunks/9679.js +1 -1
  566. package/app/.next/server/chunks/9704.js +1 -1
  567. package/app/.next/server/middleware-build-manifest.js +1 -1
  568. package/app/.next/server/middleware.js +3 -3
  569. package/app/.next/server/next-font-manifest.js +1 -1
  570. package/app/.next/server/next-font-manifest.json +1 -1
  571. package/app/.next/server/pages/500.html +2 -2
  572. package/app/.next/server/server-reference-manifest.js +1 -1
  573. package/app/.next/server/server-reference-manifest.json +1 -1
  574. package/app/.next/static/chunks/1149-2a1a69d288a31ae5.js +1 -0
  575. package/app/.next/static/chunks/5846-15bfcc3b3b045982.js +2 -0
  576. package/app/.next/static/chunks/{647-b834a711585a924d.js → 647-f03a498577a57cbc.js} +2 -2
  577. package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-43d6fa6b75cca497.js +1 -0
  578. package/app/.next/static/chunks/app/(dashboard)/dashboard/agents/{page-4ec5a1458c077143.js → page-31a14de3e374fe92.js} +1 -1
  579. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-49ae846d72948391.js +1 -0
  580. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/{page-6ab7701da3357bb9.js → page-bef5c045e7eae657.js} +1 -1
  581. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-16f886b3711a6a50.js +1 -0
  582. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-e5bf8955e7b9a4f5.js +1 -0
  583. package/app/.next/static/chunks/app/(dashboard)/dashboard/auto-combo/{page-851063ded34ab7a6.js → page-8e609f4c9b26a901.js} +1 -1
  584. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-c4700101a54c8b28.js +15 -0
  585. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-8d4d2f071d114b90.js +1 -0
  586. package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/{page-8f6233f59f5277e9.js → page-7a233357dfbd2e05.js} +1 -1
  587. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-7b1037d65eef97a8.js +1 -0
  588. package/app/.next/static/chunks/app/(dashboard)/dashboard/health/{page-1e1eb2f79d606ab2.js → page-66ee4e631429e0d8.js} +1 -1
  589. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-c979e11de71281de.js +1 -0
  590. package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-95e4b5e0bf023d76.js → page-6e4bcb48b8731915.js} +1 -1
  591. package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-8e35334b9f393139.js +1 -0
  592. package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-fc10371ce5bdbce6.js +1 -0
  593. package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/{page-5378e9473a20cd6a.js → page-d424641c7e428be9.js} +1 -1
  594. package/app/.next/static/chunks/app/(dashboard)/dashboard/page-d75ccdb976b36258.js +1 -0
  595. package/app/.next/static/chunks/app/(dashboard)/dashboard/playground/{page-447998e91a92c56d.js → page-7a6b51b059e68468.js} +1 -1
  596. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-3c3feb78cfbe855c.js +1 -0
  597. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{error-a5ae03ba05400b04.js → error-0400f175dd1372fa.js} +1 -1
  598. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-9552383fd2e11282.js +1 -0
  599. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-d57908b59d4b482c.js +1 -0
  600. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-e8b8cb84b421b676.js → page-a3b2395f513e893f.js} +1 -1
  601. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{error-ec9643134a96bbcd.js → error-c39d18f10fb7d3f6.js} +1 -1
  602. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{loading-3519a633b514f31a.js → loading-b5faf05c78a2cc54.js} +1 -1
  603. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/{page-cbaa4b638a583fe9.js → page-6b38a30bfddf3b89.js} +1 -1
  604. package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-69eb8b0eb0e9de00.js → page-a4b8b03ffb39da1d.js} +1 -1
  605. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-10c186a0db5fde20.js → page-9168bf910743b2f5.js} +2 -2
  606. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9e20463252daf023.js +1 -0
  607. package/app/.next/static/chunks/app/(dashboard)/{layout-7ae0c66c22bee8a1.js → layout-6d0afc53f5f2a538.js} +1 -1
  608. package/app/.next/static/chunks/app/400/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  609. package/app/.next/static/chunks/app/401/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  610. package/app/.next/static/chunks/app/403/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  611. package/app/.next/static/chunks/app/408/{page-3b9079ea400ca287.js → page-3b77bf358909019a.js} +1 -1
  612. package/app/.next/static/chunks/app/429/page-3b77bf358909019a.js +1 -0
  613. package/app/.next/static/chunks/app/500/page-3b77bf358909019a.js +1 -0
  614. package/app/.next/static/chunks/app/502/page-3b77bf358909019a.js +1 -0
  615. package/app/.next/static/chunks/app/503/page-3b77bf358909019a.js +1 -0
  616. package/app/.next/static/chunks/app/callback/{page-0f0ebc0820dd18a5.js → page-585a53f7dc6a30f1.js} +1 -1
  617. package/app/.next/static/chunks/app/docs/{page-dc88e0a01d291518.js → page-9624e5fb8cabf7d8.js} +1 -1
  618. package/app/.next/static/chunks/app/{error-32c03f14529d3920.js → error-f7f595c541537e63.js} +1 -1
  619. package/app/.next/static/chunks/app/forbidden/page-b33079c1573b0bfa.js +1 -0
  620. package/app/.next/static/chunks/app/forgot-password/page-90cd6259c75badfc.js +1 -0
  621. package/app/.next/static/chunks/app/global-error-1dfd1c91ad5199fe.js +1 -0
  622. package/app/.next/static/chunks/app/landing/page-9d540ab1716f8e3e.js +1 -0
  623. package/app/.next/static/chunks/app/{layout-070972eb026af319.js → layout-108592eafb959363.js} +1 -1
  624. package/app/.next/static/chunks/app/{loading-da2f6e1471afc070.js → loading-e063375d5b12a2f7.js} +1 -1
  625. package/app/.next/static/chunks/app/login/{page-26d717c652d56032.js → page-cf6b82187b09a701.js} +1 -1
  626. package/app/.next/static/chunks/app/maintenance/page-3b77bf358909019a.js +1 -0
  627. package/app/.next/static/chunks/app/not-found-511518956bcae7bc.js +1 -0
  628. package/app/.next/static/chunks/app/offline/page-9d6ea493783a0219.js +1 -0
  629. package/app/.next/static/chunks/app/privacy/{page-dc88e0a01d291518.js → page-9624e5fb8cabf7d8.js} +1 -1
  630. package/app/.next/static/chunks/app/status/page-4e5e9b5a513aa474.js +1 -0
  631. package/app/.next/static/chunks/app/terms/{page-dc88e0a01d291518.js → page-9624e5fb8cabf7d8.js} +1 -1
  632. package/app/.next/static/chunks/{main-app-ae230f6bf51a5edb.js → main-app-c9da11a8061df107.js} +1 -1
  633. package/app/node_modules/@swc/helpers/package.json +228 -5
  634. package/app/package.json +6 -2
  635. package/app/server.js +1 -1
  636. package/app/src/mitm/server.ts +17 -3
  637. package/package.json +6 -2
  638. package/app/.env +0 -122
  639. package/app/.next/server/chunks/1909.js +0 -2
  640. package/app/.next/server/chunks/359.js +0 -1
  641. package/app/.next/server/chunks/4133.js +0 -1
  642. package/app/.next/server/chunks/7167.js +0 -1
  643. package/app/.next/server/chunks/9854.js +0 -9
  644. package/app/.next/static/chunks/1149-fefe7f95f0e9842f.js +0 -1
  645. package/app/.next/static/chunks/5846-d3aa3ba9dd16fa55.js +0 -2
  646. package/app/.next/static/chunks/app/(dashboard)/dashboard/a2a/page-ed1f5b1ae0e01c02.js +0 -1
  647. package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/loading-6a2bb3ad980b05b9.js +0 -1
  648. package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-027b3eb09d2d46e0.js +0 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-c9b98846b8479f3f.js +0 -1
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-ad968920ad7029fd.js +0 -15
  651. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-ac5dcffbe54f77f9.js +0 -1
  652. package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-36f33de29eb978a1.js +0 -1
  653. package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-65334129a8e63369.js +0 -1
  654. package/app/.next/static/chunks/app/(dashboard)/dashboard/mcp/page-d9b5c3282ec5d809.js +0 -1
  655. package/app/.next/static/chunks/app/(dashboard)/dashboard/media/page-adb79ef07d8dd6c5.js +0 -1
  656. package/app/.next/static/chunks/app/(dashboard)/dashboard/page-40d20c1273f57206.js +0 -1
  657. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-350aed2e86512c23.js +0 -1
  658. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/loading-7deaa9f550841465.js +0 -1
  659. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-3ef302da4b756e50.js +0 -1
  660. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-8c8f2d59d0cbb516.js +0 -1
  661. package/app/.next/static/chunks/app/429/page-3b9079ea400ca287.js +0 -1
  662. package/app/.next/static/chunks/app/500/page-3b9079ea400ca287.js +0 -1
  663. package/app/.next/static/chunks/app/502/page-3b9079ea400ca287.js +0 -1
  664. package/app/.next/static/chunks/app/503/page-3b9079ea400ca287.js +0 -1
  665. package/app/.next/static/chunks/app/forbidden/page-8d8e1709a1e32585.js +0 -1
  666. package/app/.next/static/chunks/app/forgot-password/page-d5c9b77748aa9deb.js +0 -1
  667. package/app/.next/static/chunks/app/global-error-5840b1caa830f2ec.js +0 -1
  668. package/app/.next/static/chunks/app/landing/page-75b0c988db383cfc.js +0 -1
  669. package/app/.next/static/chunks/app/maintenance/page-3b9079ea400ca287.js +0 -1
  670. package/app/.next/static/chunks/app/not-found-faf36d2a9a452506.js +0 -1
  671. package/app/.next/static/chunks/app/offline/page-bf68bf461af876a3.js +0 -1
  672. package/app/.next/static/chunks/app/status/page-29a433b40631ce12.js +0 -1
  673. package/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  674. /package/app/.next/static/{xYoMYiq2lWi73ieYn-e4s → QcfAPzrFrahcOIJTqWlXo}/_buildManifest.js +0 -0
  675. /package/app/.next/static/{xYoMYiq2lWi73ieYn-e4s → QcfAPzrFrahcOIJTqWlXo}/_ssgManifest.js +0 -0
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "2.1.2",
3
+ "version": "2.2.1",
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": {
@@ -84,6 +84,7 @@
84
84
  "bcryptjs": "^3.0.3",
85
85
  "better-sqlite3": "^12.6.2",
86
86
  "bottleneck": "^2.19.5",
87
+ "dompurify": "^3.3.2",
87
88
  "express": "^5.2.1",
88
89
  "fetch-socks": "^1.3.2",
89
90
  "http-proxy-middleware": "^3.0.5",
@@ -127,7 +128,7 @@
127
128
  "tailwindcss": "^4",
128
129
  "typescript": "^5.9.3",
129
130
  "typescript-eslint": "^8.56.0",
130
- "vitest": "^3.2.4",
131
+ "vitest": "^4.0.18",
131
132
  "wait-on": "^9.0.4"
132
133
  },
133
134
  "lint-staged": {
@@ -138,5 +139,8 @@
138
139
  "*.{json,md,yml,yaml,css}": [
139
140
  "prettier --write"
140
141
  ]
142
+ },
143
+ "overrides": {
144
+ "@swc/helpers": "^0.5.19"
141
145
  }
142
146
  }
package/app/server.js CHANGED
@@ -15,7 +15,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
15
15
  const hostname = process.env.HOSTNAME || '0.0.0.0'
16
16
 
17
17
  let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
18
- const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":true},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":".","allowedDevOrigins":["192.168.*"],"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":23,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","turbopack":{"resolveAlias":{"next-intl/config":"./src/i18n/request.ts"},"root":"."},"serverExternalPackages":["better-sqlite3","zod"],"transpilePackages":["@omniroute/open-sse"],"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/chat/completions","destination":"/api/v1/chat/completions"},{"source":"/responses","destination":"/api/v1/responses"},{"source":"/models","destination":"/api/v1/models"},{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
18
+ const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":true},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":".","allowedDevOrigins":["192.168.*"],"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","turbopack":{"resolveAlias":{"next-intl/config":"./src/i18n/request.ts"},"root":"."},"serverExternalPackages":["better-sqlite3","zod"],"transpilePackages":["@omniroute/open-sse"],"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/chat/completions","destination":"/api/v1/chat/completions"},{"source":"/responses","destination":"/api/v1/responses"},{"source":"/models","destination":"/api/v1/models"},{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
19
19
 
20
20
  process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
21
21
 
@@ -45,12 +45,22 @@ const CHAT_URL_PATTERNS = [":generateContent", ":streamGenerateContent"];
45
45
  const LOG_DIR = path.join(__dirname, "../../logs/mitm");
46
46
  if (ENABLE_FILE_LOG && !fs.existsSync(LOG_DIR)) fs.mkdirSync(LOG_DIR, { recursive: true });
47
47
 
48
+ // Safe log filename: only alphanumeric + hyphens, anchored inside LOG_DIR
49
+ function safeLogPath(name) {
50
+ const safe = name.replace(/[^a-zA-Z0-9_\-]/g, "_").substring(0, 80);
51
+ const resolved = path.resolve(LOG_DIR, safe);
52
+ if (!resolved.startsWith(path.resolve(LOG_DIR) + path.sep)) {
53
+ throw new Error("Path traversal attempt detected in log filename");
54
+ }
55
+ return resolved;
56
+ }
57
+
48
58
  function saveRequestLog(url, bodyBuffer) {
49
59
  if (!ENABLE_FILE_LOG) return;
50
60
  try {
51
61
  const ts = new Date().toISOString().replace(/[:.]/g, "-");
52
62
  const urlSlug = url.replace(/[^a-zA-Z0-9]/g, "_").substring(0, 60);
53
- const filePath = path.join(LOG_DIR, `${ts}_${urlSlug}.json`);
63
+ const filePath = safeLogPath(`${ts}_${urlSlug}.json`);
54
64
  const body = JSON.parse(bodyBuffer.toString());
55
65
  fs.writeFileSync(filePath, JSON.stringify(body, null, 2));
56
66
  console.log(`💾 Saved request: ${filePath}`);
@@ -64,7 +74,7 @@ function saveResponseLog(url, data) {
64
74
  try {
65
75
  const ts = new Date().toISOString().replace(/[:.]/g, "-");
66
76
  const urlSlug = url.replace(/[^a-zA-Z0-9]/g, "_").substring(0, 60);
67
- const filePath = path.join(LOG_DIR, `${ts}_${urlSlug}_response.txt`);
77
+ const filePath = safeLogPath(`${ts}_${urlSlug}_response.txt`);
68
78
  fs.writeFileSync(filePath, data);
69
79
  console.log(`💾 Saved response: ${filePath}`);
70
80
  } catch {
@@ -156,6 +166,10 @@ function getMappedModel(model) {
156
166
  async function passthrough(req, res, bodyBuffer) {
157
167
  const targetIP = await resolveTargetIP();
158
168
 
169
+ // TLS validation is enabled by default. Set MITM_DISABLE_TLS_VERIFY=1 only
170
+ // in controlled local environments where the target uses a self-signed cert.
171
+ const rejectUnauthorized = process.env.MITM_DISABLE_TLS_VERIFY !== "1";
172
+
159
173
  const forwardReq = https.request(
160
174
  {
161
175
  hostname: targetIP,
@@ -164,7 +178,7 @@ async function passthrough(req, res, bodyBuffer) {
164
178
  method: req.method,
165
179
  headers: { ...req.headers, host: TARGET_HOST },
166
180
  servername: TARGET_HOST,
167
- rejectUnauthorized: false,
181
+ rejectUnauthorized,
168
182
  },
169
183
  (forwardRes) => {
170
184
  res.writeHead(forwardRes.statusCode, forwardRes.headers);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "2.1.2",
3
+ "version": "2.2.1",
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": {
@@ -84,6 +84,7 @@
84
84
  "bcryptjs": "^3.0.3",
85
85
  "better-sqlite3": "^12.6.2",
86
86
  "bottleneck": "^2.19.5",
87
+ "dompurify": "^3.3.2",
87
88
  "express": "^5.2.1",
88
89
  "fetch-socks": "^1.3.2",
89
90
  "http-proxy-middleware": "^3.0.5",
@@ -127,7 +128,7 @@
127
128
  "tailwindcss": "^4",
128
129
  "typescript": "^5.9.3",
129
130
  "typescript-eslint": "^8.56.0",
130
- "vitest": "^3.2.4",
131
+ "vitest": "^4.0.18",
131
132
  "wait-on": "^9.0.4"
132
133
  },
133
134
  "lint-staged": {
@@ -138,5 +139,8 @@
138
139
  "*.{json,md,yml,yaml,css}": [
139
140
  "prettier --write"
140
141
  ]
142
+ },
143
+ "overrides": {
144
+ "@swc/helpers": "^0.5.19"
141
145
  }
142
146
  }
package/app/.env DELETED
@@ -1,122 +0,0 @@
1
- # OmniRoute environment contract
2
- # This file reflects actual runtime usage in the current codebase.
3
-
4
- # Required
5
- JWT_SECRET=change-me-to-a-long-random-secret
6
- INITIAL_PASSWORD=123456
7
- DATA_DIR=$HOME/.omniroute
8
-
9
- # Storage (SQLite)
10
- STORAGE_DRIVER=sqlite
11
- STORAGE_ENCRYPTION_KEY=change-me-storage-encryption-key
12
- STORAGE_ENCRYPTION_KEY_VERSION=v1
13
- LOG_RETENTION_DAYS=90
14
- SQLITE_MAX_SIZE_MB=2048
15
- SQLITE_CLEAN_LEGACY_FILES=true
16
-
17
- # Recommended runtime variables
18
- PORT=20128
19
- NODE_ENV=production
20
- INSTANCE_NAME=omniroute
21
-
22
- # Recommended security and ops variables
23
- API_KEY_SECRET=endpoint-proxy-api-key-secret
24
- MACHINE_ID_SALT=endpoint-proxy-salt
25
- ENABLE_REQUEST_LOGS=true
26
- AUTH_COOKIE_SECURE=false
27
- REQUIRE_API_KEY=false
28
-
29
- # Cloud sync variables
30
- # Must point to this running instance so internal sync jobs can call /api/sync/cloud.
31
- # Server-side preferred variables:
32
- BASE_URL=http://localhost:20128
33
- CLOUD_URL=https://cloud.omniroute.online
34
- # Backward-compatible/public variables:
35
- NEXT_PUBLIC_BASE_URL=http://localhost:20128
36
- NEXT_PUBLIC_CLOUD_URL=https://cloud.omniroute.online
37
-
38
- # Optional outbound proxy variables for upstream provider calls
39
- # Lowercase variants are also supported: http_proxy, https_proxy, all_proxy, no_proxy
40
- # HTTP_PROXY=http://127.0.0.1:7890
41
- # HTTPS_PROXY=http://127.0.0.1:7890
42
- # ALL_PROXY=socks5://127.0.0.1:7890
43
- # NO_PROXY=localhost,127.0.0.1
44
- ENABLE_SOCKS5_PROXY=true
45
- NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true
46
- ENABLE_TLS_FINGERPRINT=true
47
-
48
- # Optional CLI runtime overrides (Docker/host integration)
49
- # CLI_MODE=auto
50
- # CLI_EXTRA_PATHS=/host-cli/bin
51
- # CLI_CONFIG_HOME=/root
52
- # CLI_ALLOW_CONFIG_WRITES=true
53
- # CLI_CLAUDE_BIN=claude
54
- # CLI_CODEX_BIN=codex
55
- # CLI_DROID_BIN=droid
56
- # CLI_OPENCLAW_BIN=openclaw
57
- # CLI_CURSOR_BIN=agent
58
- # CLI_CLINE_BIN=cline
59
- # CLI_ROO_BIN=roo
60
- # CLI_CONTINUE_BIN=cn
61
-
62
- # Currently unused by application runtime (kept as reference)
63
- # INSTANCE_NAME=omniroute
64
-
65
- # Provider OAuth Credentials (optional — override hardcoded defaults)
66
- # These can also be set via data/provider-credentials.json
67
- # CLAUDE_OAUTH_CLIENT_ID=
68
- # GEMINI_OAUTH_CLIENT_ID=
69
- GEMINI_OAUTH_CLIENT_SECRET=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
70
- # GEMINI_CLI_OAUTH_CLIENT_ID=
71
- GEMINI_CLI_OAUTH_CLIENT_SECRET=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
72
- # CODEX_OAUTH_CLIENT_ID=
73
- # CODEX_OAUTH_CLIENT_SECRET=
74
- # QWEN_OAUTH_CLIENT_ID=
75
- # IFLOW_OAUTH_CLIENT_ID=
76
- IFLOW_OAUTH_CLIENT_SECRET=4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW
77
- # ANTIGRAVITY_OAUTH_CLIENT_ID=
78
- ANTIGRAVITY_OAUTH_CLIENT_SECRET=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
79
-
80
- # Provider User-Agent Overrides (optional — customize per-provider User-Agent headers)
81
- # Format: {PROVIDER_ID}_USER_AGENT=custom-value
82
- CLAUDE_USER_AGENT=claude-cli/1.0.83 (external, cli)
83
- CODEX_USER_AGENT=codex-cli/0.92.0 (Windows 10.0.26100; x64)
84
- GITHUB_USER_AGENT=GitHubCopilotChat/0.26.7
85
- ANTIGRAVITY_USER_AGENT=antigravity/1.104.0 darwin/arm64
86
- KIRO_USER_AGENT=AWS-SDK-JS/3.0.0 kiro-ide/1.0.0
87
- IFLOW_USER_AGENT=iFlow-Cli
88
- QWEN_USER_AGENT=google-api-nodejs-client/9.15.1
89
- CURSOR_USER_AGENT=connect-es/1.6.1
90
- GEMINI_CLI_USER_AGENT=google-api-nodejs-client/9.15.1
91
-
92
- # API Key Providers (Phase 1 + Phase 4)
93
- # Add via Dashboard → Providers → Add API Key, or set here
94
- # DEEPSEEK_API_KEY=
95
- # GROQ_API_KEY=
96
- # XAI_API_KEY=
97
- # MISTRAL_API_KEY=
98
- # PERPLEXITY_API_KEY=
99
- # TOGETHER_API_KEY=
100
- # FIREWORKS_API_KEY=
101
- # CEREBRAS_API_KEY=
102
- # COHERE_API_KEY=
103
- # NVIDIA_API_KEY=
104
-
105
- # Embedding Providers (optional — used by /v1/embeddings)
106
- # NEBIUS_API_KEY=
107
- # Provider keys above (openai, mistral, together, fireworks, nvidia) also work for embeddings
108
-
109
- # Timeout settings
110
- # FETCH_TIMEOUT_MS=120000
111
- # STREAM_IDLE_TIMEOUT_MS=60000
112
-
113
- # CORS configuration (default: * allows all origins)
114
- # CORS_ORIGINS=*
115
-
116
- # Logging
117
- # LOG_LEVEL=info
118
- # LOG_FORMAT=text
119
- LOG_TO_FILE=true
120
- # LOG_FILE_PATH=logs/application/app.log
121
- # LOG_MAX_FILE_SIZE=50M
122
- # LOG_RETENTION_DAYS=7
@@ -1,2 +0,0 @@
1
- exports.id=1909,exports.ids=[1909],exports.modules={2143:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{LA:()=>g});var e=c(42971),f=a([e]);let h=(e=(f.then?(await f)():f)[0]).z.object({id:e.z.string().min(1),alias:e.z.string().min(1),name:e.z.string().min(1),icon:e.z.string().min(1),color:e.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:e.z.string().optional(),website:e.z.string().url().optional(),passthroughModels:e.z.boolean().optional()}),i=e.z.record(e.z.string(),h);function g(a,b){let c=i.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
2
- ${a}`),Error(`Provider validation failed for ${b}`)}}d()}catch(a){d(a)}})},3845:(a,b,c)=>{var d={"./ar.json":[48464,8464],"./bg.json":[60944,944],"./da.json":[18976,8976],"./de.json":[22372,2372],"./en.json":[31960,1960],"./es.json":[87011,7011],"./fi.json":[96118,6118],"./fr.json":[53911,3911],"./he.json":[51248,1248],"./hu.json":[50496,496],"./id.json":[16930,6930],"./in.json":[30708,708],"./it.json":[32594,2594],"./ja.json":[37650,7650],"./ko.json":[79837,9837],"./ms.json":[55752,3371],"./nl.json":[35097,5097],"./no.json":[88220,8220],"./phi.json":[28706,8706],"./pl.json":[99119,9119],"./pt-BR.json":[41990,1990],"./pt.json":[11623,1623],"./ro.json":[71880,1880],"./ru.json":[61526,1526],"./sk.json":[25945,5945],"./sv.json":[85094,5094],"./th.json":[55047,5047],"./uk-UA.json":[11584,1584],"./vi.json":[22214,2214],"./zh-CN.json":[65521,5521]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=3845,a.exports=e},8979:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/not-found.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/not-found.tsx","default")},14004:(a,b,c)=>{Promise.resolve().then(c.bind(c,81227))},14521:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},15336:(a,b,c)=>{Promise.resolve().then(c.bind(c,95127))},21280:(a,b,c)=>{"use strict";c.d(b,{S_:()=>o});var d=c(22901),e=c(87068);let f="[HealthCheck]",g=new Set(["1","true","yes","on"]);function h(a){let b=process.env[a];return!!b&&g.has(b.trim().toLowerCase())}let i=null,j=0,k=null;async function l(){if(h("OMNIROUTE_HIDE_HEALTHCHECK_LOGS"))return!0;let a=Date.now();return null!==i&&a-j<3e4?i:null!==k?k:k=(async()=>{try{let b=await (0,d.V7)();return i=!0===b.hideHealthCheckLogs,j=a,i}catch{return!1}finally{k=null}})()}function m(a,...b){l().then(c=>{c||console.log(a,...b)})}function n(a,...b){l().then(c=>{c||console.error(a,...b)})}function o(){i=null,j=0}let p=!1;async function q(){try{let a=await (0,d.getProviderConnections)({authType:"oauth"});if(!a||0===a.length)return;for(let b of a)try{await r(b)}catch(a){n(`${f} Error checking ${b.name||b.id}:`,a.message)}}catch(a){n(`${f} Sweep error:`,a.message)}}async function r(a){let b=a.healthCheckInterval??60;if(b<=0||!a.isActive||!a.refreshToken||"string"!=typeof a.refreshToken||"expired"===a.testStatus)return;if(!(0,e.Ny)(a.provider)){let b=new Date().toISOString();await (0,d.rj)(a.id,{lastHealthCheckAt:b}),m(`${f} Skipping ${a.provider}/${a.name||a.email||a.id} (refresh unsupported)`);return}let c=a.lastHealthCheckAt?new Date(a.lastHealthCheckAt).getTime():0;if(Date.now()-c<60*b*1e3)return;m(`${f} Refreshing ${a.provider}/${a.name||a.email||a.id} (interval: ${b}min)`);let g={refreshToken:a.refreshToken,accessToken:a.accessToken,expiresAt:a.tokenExpiresAt,providerSpecificData:a.providerSpecificData},h=await l(),i=await (0,e.iD)(a.provider,g,{info:(a,b)=>{h||console.log(`${f} [${a}] ${b}`)},warn:(a,b)=>{h||console.warn(`${f} [${a}] ${b}`)},error:(a,b,c)=>{h||console.error(`${f} [${a}] ${b}`,c||"")}}),j=new Date().toISOString();if((0,e.jT)(i)){await (0,d.rj)(a.id,{lastHealthCheckAt:j,testStatus:"expired",lastError:`Refresh token consumed (${i.error}). Please re-authenticate this account.`,lastErrorAt:j,lastErrorType:i.error,lastErrorSource:"oauth",errorCode:i.error,isActive:!1,refreshToken:null}),n(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} — Refresh token is permanently invalid (${i.error}). Connection deactivated. Re-authenticate to restore.`);return}if(i&&i.accessToken){let b={accessToken:i.accessToken,lastHealthCheckAt:j,testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null};i.refreshToken&&(b.refreshToken=i.refreshToken),i.expiresIn&&(b.tokenExpiresAt=new Date(Date.now()+1e3*i.expiresIn).toISOString()),await (0,d.rj)(a.id,b),m(`${f} ✓ ${a.provider}/${a.name||a.email||a.id} refreshed`)}else await (0,d.rj)(a.id,{lastHealthCheckAt:j,testStatus:"error",lastError:"Health check: token refresh failed",lastErrorAt:j,lastErrorType:"token_refresh_failed",lastErrorSource:"oauth",errorCode:"refresh_failed"}),function(a,...b){l().then(c=>{c||console.warn(a,...b)})}(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} refresh failed`)}h("OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK")||(p=!0,m(`${f} Starting proactive token health-check (tick every 60s)`),setTimeout(()=>{q(),setInterval(q,6e4)},1e4))},22746:(a,b,c)=>{"use strict";c.d(b,{CardSkeleton:()=>j,PageLoading:()=>h,Skeleton:()=>i,Spinner:()=>g,default:()=>k});var d=c(48249),e=c(31846);let f={sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"};function g({size:a="md",className:b,label:c="Loading"}){return(0,d.jsxs)("span",{role:"status","aria-live":"polite","aria-label":c,className:(0,e.cn)("inline-flex",b),children:[(0,d.jsx)("span",{className:"sr-only",children:c}),(0,d.jsx)("span",{"aria-hidden":"true",className:(0,e.cn)("material-symbols-outlined text-primary animate-spin motion-reduce:animate-none",f[a]),children:"progress_activity"})]})}function h({message:a="Loading...",className:b}){return(0,d.jsxs)("div",{className:(0,e.cn)("fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg px-6",b),role:"status","aria-live":"polite","aria-busy":"true",children:[(0,d.jsx)(g,{size:"xl"}),(0,d.jsx)("p",{className:"mt-4 text-text-muted text-center",children:a})]})}function i({className:a,...b}){return(0,d.jsx)("div",{"aria-hidden":"true",className:(0,e.cn)("animate-pulse motion-reduce:animate-none rounded-lg bg-border",a),...b})}function j(){return(0,d.jsxs)("div",{className:"p-6 rounded-xl border border-border bg-surface","aria-hidden":"true",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4 gap-4",children:[(0,d.jsx)(i,{className:"h-4 w-24"}),(0,d.jsx)(i,{className:"size-10 rounded-lg"})]}),(0,d.jsx)(i,{className:"h-8 w-16 mb-2"}),(0,d.jsx)(i,{className:"h-3 w-20"})]})}function k({type:a="spinner",className:b,message:c,size:e,label:f,...k}){switch(a){case"page":return(0,d.jsx)(h,{message:c,className:b});case"skeleton":return(0,d.jsx)(i,{className:b,...k});case"card":return(0,d.jsx)(j,{});default:return(0,d.jsx)(g,{size:e,className:b,label:f})}}},30758:a=>{"use strict";a.exports={rE:"2.1.2"}},30807:(a,b,c)=>{Promise.resolve().then(c.bind(c,62626)),Promise.resolve().then(c.bind(c,75146))},31846:(a,b,c)=>{"use strict";function d(...a){return a.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}c.d(b,{cn:()=>d})},32444:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/shared/components/ThemeProvider.tsx","ThemeProvider")},33314:(a,b,c)=>{Promise.resolve().then(c.bind(c,64385))},45300:(a,b,c)=>{Promise.resolve().then(c.bind(c,8979))},47508:(a,b,c)=>{Promise.resolve().then(c.bind(c,73857))},47695:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{A:()=>k,F:()=>j});var e=c(31417),f=c(300),g=c(51729),h=a([g]);g=(h.then?(await h)():h)[0];let i=(0,e.v)()((0,f.Zr)((a,b)=>({theme:g.B2.defaultTheme,colorTheme:"coral",customColor:"#3b82f6",setTheme:b=>{a({theme:b})},setColorTheme:c=>{a({colorTheme:c}),b().customColor},setCustomColorTheme:b=>{let c=function(a){let b=(a||"").trim(),c=b.startsWith("#")?b:`#${b}`;return/^#([0-9a-fA-F]{6})$/.test(c)?c.toLowerCase():"#3b82f6"}(b);a({colorTheme:"custom",customColor:c})},toggleTheme:()=>{let c=b().theme,d="dark"===c?"light":"dark";a({theme:d})},initTheme:()=>{let{theme:a,colorTheme:c,customColor:d}=b()}}),{name:g.B2.storageKey})),j={coral:"#e54d5e",blue:"#3b82f6",red:"#ef4444",green:"#22c55e",violet:"#8b5cf6",orange:"#f97316",cyan:"#06b6d4"},k=i;d()}catch(a){d(a)}})},47825:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{KC:()=>e.KC,Xg:()=>e.Xg});var e=c(97319),f=c(70689),g=a([f]);f=(g.then?(await g)():g)[0],Object.entries(f.Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(e.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),d()}catch(a){d(a)}})},49226:(a,b,c)=>{"use strict";c.d(b,{A:()=>l});var d=c(90357),e=c(22901);let{dashboardPort:f}=(0,c(83238).z)(),g=process.env.BASE_URL||"http://localhost:20128";class h{constructor(a=null,b=15){this.machineId=a,this.intervalMinutes=b,this.intervalId=null}async initializeMachineId(){this.machineId||(this.machineId=await (0,d.Xj)())}async start(){this.intervalId||(await this.initializeMachineId(),setTimeout(()=>{this.syncWithRetry().catch(()=>{})},3e4),this.intervalId=setInterval(()=>{this.syncWithRetry().catch(()=>{})},60*this.intervalMinutes*1e3))}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}async syncWithRetry(a=1){for(let b=1;b<=a;b++)try{return await this.sync()}catch(d){if(b===a)return null;let c=Math.min(1e3*Math.pow(2,b),1e4);await new Promise(a=>setTimeout(a,c))}}async sync(){if(!await (0,e.Nx)())return null;await this.initializeMachineId();let a=await fetch(`${g}/api/sync/cloud`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:this.machineId,action:"sync"})});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Sync failed");return await a.json()}isRunning(){return null!==this.intervalId}}let i=null;async function j(a=null,b=15){return i||(i=new h(a,b)),i}async function k(){try{await (0,e.bI)();let a=await j(null,15);return await a.start(),a}catch(a){throw console.error("[CloudSync] Error initializing scheduler:",a),a}}a=c.hmd(a),c.c[c.s]===a&&k().catch(a=>console.error("[CloudSync] init failed:",a));let l=k},50969:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},51466:(a,b,c)=>{Promise.resolve().then(c.bind(c,97507))},51729:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{B2:()=>j,MA:()=>f.MA,Q2:()=>f.Q2,fg:()=>f.fg,vQ:()=>i,zN:()=>f.zN});var e=c(30758),f=c(70689),g=c(47825),h=a([f,g]);[f,g]=h.then?(await h)():h;let i={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:e.rE},j={storageKey:"theme",defaultTheme:"system"};d()}catch(a){d(a)}})},61135:()=>{},62536:(a,b,c)=>{Promise.resolve().then(c.bind(c,65909))},64385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/error.tsx","default")},65909:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(48249),e=c(22746);function f(){return(0,d.jsx)(e.PageLoading,{message:"Loading OmniRoute..."})}},66740:(a,b,c)=>{Promise.resolve().then(c.bind(c,67045))},67045:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsx)("html",{lang:"en",children:(0,d.jsx)("body",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main font-[system-ui,-apple-system,sans-serif] text-center m-0",children:(0,d.jsxs)("main",{role:"alert","aria-live":"assertive",className:"flex flex-col items-center",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"⚠️"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-6",children:"An unexpected error occurred. This has been logged and our team will investigate."}),!1,(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-8 py-3 rounded-[10px] text-white border-none text-sm font-semibold cursor-pointer transition-transform duration-200 motion-reduce:transition-none motion-reduce:transform-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover focus:outline-2 focus:outline-offset-2 focus:outline-primary",children:"Try Again"}),(0,d.jsx)("a",{href:"/status",className:"px-8 py-3 rounded-[10px] text-sm font-semibold border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status",children:"System Status"})]})]})})})}},70559:(a,b,c)=>{Promise.resolve().then(c.bind(c,86392)),Promise.resolve().then(c.bind(c,32444))},70689:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DI:()=>o,IS:()=>k,JH:()=>n,MA:()=>q,Q2:()=>p,fg:()=>m,gb:()=>h,mq:()=>g,wG:()=>j,wb:()=>r,zN:()=>l,zt:()=>i});var e=c(2143),f=a([e]);e=(f.then?(await f)():f)[0];let k={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},l={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},"kimi-coding":{id:"kimi-coding",alias:"kmc",name:"Kimi Coding",icon:"psychology",color:"#1E40AF",textIcon:"KC"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},m={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com"},blackbox:{id:"blackbox",alias:"bb",name:"Blackbox AI",icon:"view_in_ar",color:"#1A1A2E",textIcon:"BB",website:"https://blackbox.ai"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://www.cerebras.ai"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",name:"Ollama Cloud",icon:"cloud",color:"#58A6FF",textIcon:"OC",website:"https://ollama.com/settings/api-keys"},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io"},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai"},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht"},inworld:{id:"inworld",alias:"inworld",name:"Inworld",icon:"voice_chat",color:"#7B2EF2",textIcon:"IW",website:"https://inworld.ai"},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui"},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI"}},n="openai-compatible-",o="anthropic-compatible-";function g(a){return"string"==typeof a&&a.startsWith(n)}function h(a){return"string"==typeof a&&a.startsWith(o)}let p={...k,...l,...m},q={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function i(a){for(let b of Object.values(p))if(b.alias===a||b.id===a)return b;return null}function j(a){let b=p[a];return b?.alias||a}Object.values(p).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(p).reduce((a,b)=>(a[b.id]=b.alias,a),{});let r=["antigravity","kiro","github","codex","claude"];(0,e.LA)(k,"FREE_PROVIDERS"),(0,e.LA)(l,"OAUTH_PROVIDERS"),(0,e.LA)(m,"APIKEY_PROVIDERS"),d()}catch(a){d(a)}})},73857:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(48249),e=c(2116),f=c.n(e);function g(){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main text-center",role:"main","aria-labelledby":"not-found-title",children:[(0,d.jsx)("div",{className:"text-[96px] font-extrabold leading-none mb-2 bg-gradient-to-br from-primary to-primary-hover bg-clip-text text-transparent","aria-hidden":"true",children:"404"}),(0,d.jsx)("h1",{id:"not-found-title",className:"text-2xl font-semibold mb-2",children:"Page not found"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-8",children:"The page you're looking for doesn't exist or has been moved."}),(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row items-center gap-3",children:[(0,d.jsx)(f(),{href:"/dashboard",className:"px-8 py-3 rounded-xl text-white text-sm font-medium no-underline transition-all duration-200 motion-reduce:transition-none shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover hover:shadow-elevated focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Return to dashboard",children:"Go to Dashboard"}),(0,d.jsx)(f(),{href:"/status",className:"px-8 py-3 rounded-xl text-sm font-medium no-underline border border-border hover:bg-bg-alt transition-colors duration-200 motion-reduce:transition-none focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Open system status page",children:"System Status"})]})]})}},75146:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ThemeProvider:()=>h});var e=c(48249);c(67484);var f=c(47695),g=a([f]);function h({children:a}){let{initTheme:b}=(0,f.A)();return(0,e.jsx)(e.Fragment,{children:a})}f=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},76537:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>m,metadata:()=>l});var d=c(5735),e=c(50609),f=c.n(e);c(61135);var g=c(32444);c(91057);var h=c(68625),i=c(62026),j=c(28440),k=c(83750);let l={title:"OmniRoute — AI Gateway for Multi-Provider LLMs",description:"OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.",icons:{icon:"/favicon.svg",apple:"/apple-touch-icon.svg"}};async function m({children:a}){let b=await (0,i.A)(),c=await (0,j.A)(),e=k.rB.includes(b);return(0,d.jsxs)("html",{lang:b,dir:e?"rtl":"ltr",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"})]}),(0,d.jsxs)("body",{className:`${f().variable} font-sans antialiased`,suppressHydrationWarning:!0,children:[(0,d.jsx)("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:absolute focus:top-2 focus:left-2 focus:z-50 focus:px-4 focus:py-2 focus:bg-[#6366f1] focus:text-white focus:rounded-lg focus:text-sm focus:font-semibold focus:shadow-lg",children:"Skip to content"}),(0,d.jsx)(h.A,{locale:b,messages:c,children:(0,d.jsx)(g.ThemeProvider,{children:a})})]})]})}},78335:()=>{},79803:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(29389),e=c(65573),f=c(83750);let g=(0,d.A)(async()=>{let a=await (0,e.UL)(),b=a.get(f.CL)?.value||"";b||(b=(await (0,e.b3)()).get("x-locale")||""),f.YZ.includes(b)||(b=f.Xn);let d=(await c(3845)(`./${b}.json`)).default;return{locale:b,messages:d}})},81227:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/global-error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/global-error.tsx","default")},83238:(a,b,c)=>{"use strict";function d(a,b){if(!a)return b;let c=Number.parseInt(String(a),10);return!Number.isFinite(c)||c<1||c>65535?b:c}function e(){let a=d(process.env.OMNIROUTE_PORT||process.env.PORT,20128),b=!!process.env.API_PORT,c=!!process.env.DASHBOARD_PORT;return{port:a,apiPort:d(process.env.API_PORT,a),dashboardPort:d(process.env.DASHBOARD_PORT,a),apiPortExplicit:b,dashboardPortExplicit:c}}c.d(b,{z:()=>e})},83750:(a,b,c)=>{"use strict";c.d(b,{CL:()=>g,Xn:()=>e,YZ:()=>d,rB:()=>f});let d=["en","pt-BR","es","fr","it","ru","zh-CN","de","in","th","uk-UA","ar","ja","vi","bg","da","fi","he","hu","id","ko","ms","nl","no","pt","ro","pl","sk","sv","phi"],e="en",f=["ar","he"],g="NEXT_LOCALE"},90357:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}},91057:(a,b,c)=>{"use strict";var d=c(49226);c(21280);let e=!1;(async function(){if(!e)try{await (0,d.A)(),e=!0}catch(a){console.error("[ServerInit] Error initializing cloud sync:",a)}return e})().catch(a=>console.error("[CloudSync] ensure failed:",a))},95127:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/diegosouzapw/dev/proxys/9router/src/app/loading.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/diegosouzapw/dev/proxys/9router/src/app/loading.tsx","default")},96487:()=>{},97319:(a,b,c)=>{"use strict";c.d(b,{Xg:()=>g,vq:()=>f,KC:()=>h});let d={claude:{id:"claude",alias:"cc",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/1.0.83 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.55.1","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":"arm64","X-Stainless-Os":"MacOS","X-Stainless-Timeout":"60"},oauth:{clientIdEnv:"CLAUDE_OAUTH_CLIENT_ID",clientIdDefault:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://console.anthropic.com/v1/oauth/token"},models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}]},gemini:{id:"gemini",alias:"gemini",format:"gemini",executor:"default",baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",urlBuilder:(a,b,c)=>`${a}/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"x-goog-api-key",oauth:{clientIdEnv:"GEMINI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"},{id:"gemini-3.1-flash",name:"Gemini 3.1 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3.0 Pro Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3.0 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}]},"gemini-cli":{id:"gemini-cli",alias:"gc",format:"gemini-cli",executor:"gemini-cli",baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",urlBuilder:(a,b,c)=>`${a}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"oauth",authHeader:"bearer",oauth:{clientIdEnv:"GEMINI_CLI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_CLI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"},{id:"gemini-3.1-flash",name:"Gemini 3.1 Flash"},{id:"gemini-3-flash-preview",name:"Gemini 3.0 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3.0 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}]},codex:{id:"codex",alias:"cx",format:"openai-responses",executor:"codex",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",headers:{Version:"0.92.0","Openai-Beta":"responses=experimental","User-Agent":"codex-cli/0.92.0 (Windows 10.0.26100; x64)"},oauth:{clientIdEnv:"CODEX_OAUTH_CLIENT_ID",clientIdDefault:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecretEnv:"CODEX_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://auth.openai.com/oauth/token"},models:[{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}]},qwen:{id:"qwen",alias:"qw",format:"openai",executor:"default",baseUrl:"https://portal.qwen.ai/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},oauth:{clientIdEnv:"QWEN_OAUTH_CLIENT_ID",clientIdDefault:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"}]},iflow:{id:"iflow",alias:"if",format:"openai",executor:"iflow",baseUrl:"https://apis.iflow.cn/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"iFlow-Cli"},oauth:{clientIdEnv:"IFLOW_OAUTH_CLIENT_ID",clientIdDefault:"10009311001",clientSecretEnv:"IFLOW_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"kimi-k2",name:"Kimi K2"},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3.2-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-v3.2-reasoner",name:"DeepSeek V3.2 Reasoner"},{id:"minimax-m2.1",name:"MiniMax M2.1"},{id:"glm-4.7",name:"GLM 4.7"}]},antigravity:{id:"antigravity",alias:"ag",format:"antigravity",executor:"antigravity",baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://cloudcode-pa.googleapis.com"],urlBuilder:(a,b,c)=>`${a}${c?"/v1internal:streamGenerateContent?alt=sse":"/v1internal:generateContent"}`,authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"antigravity/1.104.0 darwin/arm64"},oauth:{clientIdEnv:"ANTIGRAVITY_OAUTH_CLIENT_ID",clientIdDefault:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecretEnv:"ANTIGRAVITY_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3.1-flash",name:"Gemini 3.1 Flash"},{id:"gemini-3-flash",name:"Gemini 3.0 Flash"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}]},github:{id:"github",alias:"gh",format:"openai",executor:"github",baseUrl:"https://api.githubcopilot.com/chat/completions",responsesBaseUrl:"https://api.githubcopilot.com/responses",authType:"oauth",authHeader:"bearer",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.107.1","editor-plugin-version":"copilot-chat/0.26.7","user-agent":"GitHubCopilotChat/0.26.7","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},models:[{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",targetFormat:"openai-responses"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex",targetFormat:"openai-responses"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5 (Full ID)"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}]},kiro:{id:"kiro",alias:"kr",format:"kiro",executor:"kiro",baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",authType:"oauth",authHeader:"bearer",headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},oauth:{tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},models:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"}]},cursor:{id:"cursor",alias:"cu",format:"cursor",executor:"cursor",baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",authType:"oauth",authHeader:"bearer",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3",models:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"}]},openai:{id:"openai",alias:"openai",format:"openai",executor:"default",baseUrl:"https://api.openai.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"}]},anthropic:{id:"anthropic",alias:"anthropic",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01"},models:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}]},openrouter:{id:"openrouter",alias:"openrouter",format:"openai",executor:"default",baseUrl:"https://openrouter.ai/api/v1/chat/completions",authType:"apikey",authHeader:"bearer",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"},models:[{id:"auto",name:"Auto (Best Available)"}]},glm:{id:"glm",alias:"glm",format:"claude",executor:"default",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-4.5v",name:"GLM 4.5V (Vision)"},{id:"glm-4.5",name:"GLM 4.5"},{id:"glm-4.5-air",name:"GLM 4.5 Air"},{id:"glm-4-32b",name:"GLM 4 32B"}]},kimi:{id:"kimi",alias:"kimi",format:"openai",executor:"default",baseUrl:"https://api.moonshot.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}]},"kimi-coding":{id:"kimi-coding",alias:"kmc",format:"claude",executor:"default",baseUrl:"https://api.kimi.com/coding/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},oauth:{clientIdEnv:"KIMI_CODING_OAUTH_CLIENT_ID",clientIdDefault:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token",authUrl:"https://auth.kimi.com/api/oauth/device_authorization"},models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}]},kilocode:{id:"kilocode",alias:"kc",format:"openrouter",executor:"openrouter",baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",modelsUrl:"https://api.kilo.ai/api/openrouter/models",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{initiateUrl:"https://api.kilo.ai/api/device-auth/codes",pollUrlBase:"https://api.kilo.ai/api/device-auth/codes"},models:[{id:"openrouter/free",name:"Free Models Router"},{id:"qwen/qwen3-vl-235b-a22b-thinking",name:"Qwen3 VL 235B A22B Thinking"},{id:"qwen/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen/qwen3-vl-30b-a3b-thinking",name:"Qwen3 VL 30B A3B Thinking"},{id:"stepfun/step-3.5-flash:free",name:"StepFun Step 3.5 Flash"},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview"},{id:"openai/gpt-4o-mini",name:"GPT-4o Mini"},{id:"openai/gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"openai/gpt-5-nano",name:"GPT-5 Nano"},{id:"openai/gpt-5-mini",name:"GPT-5 Mini"},{id:"anthropic/claude-3-haiku",name:"Claude 3 Haiku"},{id:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"deepseek/deepseek-chat-v3.1",name:"DeepSeek V3.1"},{id:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-scout",name:"Llama 4 Scout"},{id:"meta-llama/llama-4-maverick",name:"Llama 4 Maverick"},{id:"qwen/qwen3-8b",name:"Qwen3 8B"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"qwen/qwen3-coder",name:"Qwen3 Coder 480B"},{id:"qwen/qwq-32b",name:"QwQ 32B"},{id:"mistralai/mistral-small-24b-instruct-2501",name:"Mistral Small 3"},{id:"mistralai/mistral-7b-instruct",name:"Mistral 7B"},{id:"x-ai/grok-code-fast-1",name:"Grok Code Fast 1"},{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"}],passthroughModels:!0},cline:{id:"cline",alias:"cl",format:"openai",executor:"openai",baseUrl:"https://api.cline.bot/api/v1/chat/completions",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh",authUrl:"https://api.cline.bot/api/v1/auth/authorize"},extraHeaders:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},models:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"}],passthroughModels:!0},minimax:{id:"minimax",alias:"minimax",format:"claude",executor:"default",baseUrl:"https://api.minimax.io/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",format:"claude",executor:"default",baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},deepseek:{id:"deepseek",alias:"ds",format:"openai",executor:"default",baseUrl:"https://api.deepseek.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}]},groq:{id:"groq",alias:"groq",format:"openai",executor:"default",baseUrl:"https://api.groq.com/openai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}]},blackbox:{id:"blackbox",alias:"bb",format:"openai",executor:"default",baseUrl:"https://api.blackbox.ai/v1/chat/completions",modelsUrl:"https://api.blackbox.ai/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"blackboxai",name:"Blackbox AI"},{id:"blackboxai-pro",name:"Blackbox AI Pro"}]},xai:{id:"xai",alias:"xai",format:"openai",executor:"default",baseUrl:"https://api.x.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}]},mistral:{id:"mistral",alias:"mistral",format:"openai",executor:"default",baseUrl:"https://api.mistral.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}]},perplexity:{id:"perplexity",alias:"pplx",format:"openai",executor:"default",baseUrl:"https://api.perplexity.ai/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}]},together:{id:"together",alias:"together",format:"openai",executor:"default",baseUrl:"https://api.together.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}]},fireworks:{id:"fireworks",alias:"fireworks",format:"openai",executor:"default",baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}]},cerebras:{id:"cerebras",alias:"cerebras",format:"openai",executor:"default",baseUrl:"https://api.cerebras.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}]},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",format:"openai",executor:"default",baseUrl:"https://api.ollama.com/v1/chat/completions",modelsUrl:"https://api.ollama.com/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"gemma3:27b",name:"Gemma 3 27B"},{id:"llama3.3:70b",name:"Llama 3.3 70B"},{id:"qwen3:72b",name:"Qwen3 72B"},{id:"devstral:24b",name:"Devstral 24B"},{id:"deepseek-r2:671b",name:"DeepSeek R2 671B"},{id:"phi4:14b",name:"Phi 4 14B"},{id:"mistral-small3.2:24b",name:"Mistral Small 3.2 24B"}],passthroughModels:!0},cohere:{id:"cohere",alias:"cohere",format:"openai",executor:"default",baseUrl:"https://api.cohere.com/v2/chat",authType:"apikey",authHeader:"bearer",models:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}]},nvidia:{id:"nvidia",alias:"nvidia",format:"openai",executor:"default",baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"deepseek-ai/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"}]},nebius:{id:"nebius",alias:"nebius",format:"openai",executor:"default",baseUrl:"https://api.tokenfactory.nebius.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}]},siliconflow:{id:"siliconflow",alias:"siliconflow",format:"openai",executor:"default",baseUrl:"https://api.siliconflow.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}]},hyperbolic:{id:"hyperbolic",alias:"hyp",format:"openai",executor:"default",baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}]}},e=new Map;for(let a of Object.values(d))a.alias&&a.alias!==a.id&&e.set(a.alias,a);let f=function(){let a={};for(let b of Object.values(d))if(b.models&&b.models.length>0){let c=b.alias||b.id;a[c]||(a[c]=b.models)}return a}(),g=function(){let a={};for(let b of Object.values(d))a[b.id]=b.alias||b.id;return a}();function h(a){return f[g[a]||a]||[]}},97507:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-[60vh] p-6 text-center",role:"alert","aria-live":"assertive",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"\uD83D\uDD27"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2 text-[var(--color-text-main)]",children:"Internal Server Error"}),(0,d.jsx)("p",{className:"text-[15px] text-[var(--color-text-muted)] max-w-[400px] leading-relaxed mb-2",children:"Something went wrong while processing your request. Our team has been notified and is working on a fix."}),a?.digest&&(0,d.jsxs)("p",{className:"text-xs text-[var(--color-text-muted)] mb-6 font-mono",children:["Error ID: ",a.digest]}),!1,(0,d.jsxs)("div",{className:"flex gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-6 py-2.5 rounded-lg text-white text-sm font-semibold cursor-pointer transition-all duration-200 motion-reduce:transition-none bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]",children:"Try Again"}),(0,d.jsx)("a",{href:"/dashboard",className:"px-6 py-2.5 rounded-lg text-[var(--color-text-main)] text-sm font-semibold cursor-pointer transition-all duration-200 motion-reduce:transition-none border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]","aria-label":"Return to dashboard",children:"Go to Dashboard"}),(0,d.jsx)("a",{href:"/status",className:"px-6 py-2.5 rounded-lg text-[var(--color-text-main)] text-sm font-semibold cursor-pointer transition-all duration-200 motion-reduce:transition-none border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]","aria-label":"Open system status",children:"System Status"})]})]})}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=359,exports.ids=[359],exports.modules={9415:(a,b,c)=>{c.d(b,{ux:()=>h,wR:()=>g});var d=c(55649),e=c(65573),f=c(22901);async function g(a){let b=a.headers.get("authorization");if(b?.startsWith("Bearer ")){let a=b.slice(7);try{let{validateApiKey:b}=await Promise.resolve().then(c.bind(c,80500));if(await b(a))return!0}catch{}}if(process.env.JWT_SECRET)try{let a=await (0,e.UL)(),b=a.get("auth_token")?.value;if(b){let a=new TextEncoder().encode(process.env.JWT_SECRET);return await (0,d.V)(b,a),!0}}catch{}return!1}async function h(){try{let a=await (0,f.V7)();if(!1===a.requireLogin||!a.password&&!process.env.INITIAL_PASSWORD)return!1;return!0}catch{return!0}}},55649:(a,b,c)=>{c.d(b,{V:()=>s});var d=c(56642),e=c(30121),f=c(48682),g=c(63952);async function h(a,b,c,d){let h=await (0,g.j)(a,b,"verify");(0,f.O)(a,h);let i=(0,e.B)(a,h.algorithm);try{return await crypto.subtle.verify(i,h,c,d)}catch{return!1}}var i=c(99129),j=c(73575),k=c(41842),l=c(36281),m=c(24762),n=c(80308),o=c(55956);async function p(a,b,c){let e,f;if(!(0,l.G)(a))throw new i.Ye("Flattened JWS must be an object");if(void 0===a.protected&&void 0===a.header)throw new i.Ye('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==a.protected&&"string"!=typeof a.protected)throw new i.Ye("JWS Protected Header incorrect type");if(void 0===a.payload)throw new i.Ye("JWS Payload missing");if("string"!=typeof a.signature)throw new i.Ye("JWS Signature missing or incorrect type");if(void 0!==a.header&&!(0,l.G)(a.header))throw new i.Ye("JWS Unprotected Header incorrect type");let g={};if(a.protected)try{let b=(0,d.D)(a.protected);g=JSON.parse(j.D0.decode(b))}catch{throw new i.Ye("JWS Protected Header is invalid")}if(!(0,k.f)(g,a.header))throw new i.Ye("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");let p={...g,...a.header},q=(0,n.n)(i.Ye,new Map([["b64",!0]]),c?.crit,g,p),r=!0;if(q.has("b64")&&"boolean"!=typeof(r=g.b64))throw new i.Ye('The "b64" (base64url-encode payload) Header Parameter must be a boolean');let{alg:s}=p;if("string"!=typeof s||!s)throw new i.Ye('JWS "alg" (Algorithm) Header Parameter missing or invalid');let t=c&&function(a,b){if(void 0!==b&&(!Array.isArray(b)||b.some(a=>"string"!=typeof a)))throw TypeError(`"${a}" option must be an array of strings`);if(b)return new Set(b)}("algorithms",c.algorithms);if(t&&!t.has(s))throw new i.Rb('"alg" (Algorithm) Header Parameter value not allowed');if(r){if("string"!=typeof a.payload)throw new i.Ye("JWS Payload must be a string")}else if("string"!=typeof a.payload&&!(a.payload instanceof Uint8Array))throw new i.Ye("JWS Payload must be a string or an Uint8Array instance");let u=!1;"function"==typeof b&&(b=await b(g,a),u=!0),(0,m.y)(s,b,"verify");let v=(0,j.xW)(void 0!==a.protected?(0,j.lF)(a.protected):new Uint8Array,(0,j.lF)("."),"string"==typeof a.payload?r?(0,j.lF)(a.payload):j.Rd.encode(a.payload):a.payload);try{e=(0,d.D)(a.signature)}catch{throw new i.Ye("Failed to base64url decode the signature")}let w=await (0,o.l)(b,s);if(!await h(s,w,e,v))throw new i.h2;if(r)try{f=(0,d.D)(a.payload)}catch{throw new i.Ye("Failed to base64url decode the payload")}else f="string"==typeof a.payload?j.Rd.encode(a.payload):a.payload;let x={payload:f};return(void 0!==a.protected&&(x.protectedHeader=g),void 0!==a.header&&(x.unprotectedHeader=a.header),u)?{...x,key:w}:x}async function q(a,b,c){if(a instanceof Uint8Array&&(a=j.D0.decode(a)),"string"!=typeof a)throw new i.Ye("Compact JWS must be a string or Uint8Array");let{0:d,1:e,2:f,length:g}=a.split(".");if(3!==g)throw new i.Ye("Invalid Compact JWS");let h=await p({payload:e,protected:d,signature:f},b,c),k={payload:h.payload,protectedHeader:h.protectedHeader};return"function"==typeof b?{...k,key:h.key}:k}var r=c(17347);async function s(a,b,c){let d=await q(a,b,c);if(d.protectedHeader.crit?.includes("b64")&&!1===d.protectedHeader.b64)throw new i.Dp("JWTs MUST NOT use unencoded payload");let e={payload:(0,r.k6)(d.protectedHeader,d.payload,c),protectedHeader:d.protectedHeader};return"function"==typeof b?{...e,key:d.key}:e}},81249:(a,b,c)=>{c.d(b,{Ct:()=>k,i2:()=>f,kP:()=>l});var d=c(42910);function e(){try{return(0,d.sm)()}catch{return null}}function f(a={}){let b=e();if(!b)return[];let c=[],d=[];a.action&&(c.push("action = ?"),d.push(a.action)),a.actor&&(c.push("actor = ?"),d.push(a.actor));let g=c.length>0?`WHERE ${c.join(" AND ")}`:"",h=a.limit||100,i=a.offset||0;return b.prepare(`SELECT * FROM audit_log ${g} ORDER BY timestamp DESC LIMIT ? OFFSET ?`).all(...d,h,i).map(a=>({...a,details:a.details?JSON.parse(String(a.details)):null}))}parseInt(process.env.LOG_RETENTION_DAYS||"90",10);let g=new Set,h=new Map,i=!1,j=!1;for(let a of(process.env.NO_LOG_API_KEY_IDS||"").split(",").map(a=>a.trim()).filter(Boolean))g.add(a);function k(a,b){b?g.add(a):g.delete(a),h.set(a,{value:b,timestamp:Date.now()})}function l(a){if(!a)return!1;if(g.has(a))return!0;let b=function(a){let b=e();if(!b||!a||!function(a){if(i)return j;try{j=a.prepare("PRAGMA table_info(api_keys)").all().some(a=>"no_log"===a.name)}catch{j=!1}return i=!0,j}(b))return!1;let c=h.get(a);if(c&&Date.now()-c.timestamp<3e4)return c.value;try{let c=b.prepare("SELECT no_log FROM api_keys WHERE id = ?").get(a),d=!!(c&&1===Number(c.no_log));return h.set(a,{value:d,timestamp:Date.now()}),d}catch{return!1}}(a);return b&&g.add(a),b}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=4133,exports.ids=[4133],exports.modules={17347:(a,b,c)=>{c.d(b,{cE:()=>m,k6:()=>l});var d=c(99129),e=c(73575),f=c(36281);let g=a=>Math.floor(a.getTime()/1e3),h=/^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;function i(a){let b,c=h.exec(a);if(!c||c[4]&&c[1])throw TypeError("Invalid time period format");let d=parseFloat(c[2]);switch(c[3].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":b=Math.round(d);break;case"minute":case"minutes":case"min":case"mins":case"m":b=Math.round(60*d);break;case"hour":case"hours":case"hr":case"hrs":case"h":b=Math.round(3600*d);break;case"day":case"days":case"d":b=Math.round(86400*d);break;case"week":case"weeks":case"w":b=Math.round(604800*d);break;default:b=Math.round(0x1e187e0*d)}return"-"===c[1]||"ago"===c[4]?-b:b}function j(a,b){if(!Number.isFinite(b))throw TypeError(`Invalid ${a} input`);return b}let k=a=>a.includes("/")?a.toLowerCase():`application/${a.toLowerCase()}`;function l(a,b,c={}){var h,j;let m,n;try{m=JSON.parse(e.D0.decode(b))}catch{}if(!(0,f.G)(m))throw new d.Dp("JWT Claims Set must be a top-level JSON object");let{typ:o}=c;if(o&&("string"!=typeof a.typ||k(a.typ)!==k(o)))throw new d.ie('unexpected "typ" JWT header value',m,"typ","check_failed");let{requiredClaims:p=[],issuer:q,subject:r,audience:s,maxTokenAge:t}=c,u=[...p];for(let a of(void 0!==t&&u.push("iat"),void 0!==s&&u.push("aud"),void 0!==r&&u.push("sub"),void 0!==q&&u.push("iss"),new Set(u.reverse())))if(!(a in m))throw new d.ie(`missing required "${a}" claim`,m,a,"missing");if(q&&!(Array.isArray(q)?q:[q]).includes(m.iss))throw new d.ie('unexpected "iss" claim value',m,"iss","check_failed");if(r&&m.sub!==r)throw new d.ie('unexpected "sub" claim value',m,"sub","check_failed");if(s&&(h=m.aud,j="string"==typeof s?[s]:s,"string"==typeof h?!j.includes(h):!(Array.isArray(h)&&j.some(Set.prototype.has.bind(new Set(h))))))throw new d.ie('unexpected "aud" claim value',m,"aud","check_failed");switch(typeof c.clockTolerance){case"string":n=i(c.clockTolerance);break;case"number":n=c.clockTolerance;break;case"undefined":n=0;break;default:throw TypeError("Invalid clockTolerance option type")}let{currentDate:v}=c,w=g(v||new Date);if((void 0!==m.iat||t)&&"number"!=typeof m.iat)throw new d.ie('"iat" claim must be a number',m,"iat","invalid");if(void 0!==m.nbf){if("number"!=typeof m.nbf)throw new d.ie('"nbf" claim must be a number',m,"nbf","invalid");if(m.nbf>w+n)throw new d.ie('"nbf" claim timestamp check failed',m,"nbf","check_failed")}if(void 0!==m.exp){if("number"!=typeof m.exp)throw new d.ie('"exp" claim must be a number',m,"exp","invalid");if(m.exp<=w-n)throw new d.n('"exp" claim timestamp check failed',m,"exp","check_failed")}if(t){let a=w-m.iat;if(a-n>("number"==typeof t?t:i(t)))throw new d.n('"iat" claim timestamp check failed (too far in the past)',m,"iat","check_failed");if(a<0-n)throw new d.ie('"iat" claim timestamp check failed (it should be in the past)',m,"iat","check_failed")}return m}class m{#a;constructor(a){if(!(0,f.G)(a))throw TypeError("JWT Claims Set MUST be an object");this.#a=structuredClone(a)}data(){return e.Rd.encode(JSON.stringify(this.#a))}get iss(){return this.#a.iss}set iss(a){this.#a.iss=a}get sub(){return this.#a.sub}set sub(a){this.#a.sub=a}get aud(){return this.#a.aud}set aud(a){this.#a.aud=a}set jti(a){this.#a.jti=a}set nbf(a){"number"==typeof a?this.#a.nbf=j("setNotBefore",a):a instanceof Date?this.#a.nbf=j("setNotBefore",g(a)):this.#a.nbf=g(new Date)+i(a)}set exp(a){"number"==typeof a?this.#a.exp=j("setExpirationTime",a):a instanceof Date?this.#a.exp=j("setExpirationTime",g(a)):this.#a.exp=g(new Date)+i(a)}set iat(a){void 0===a?this.#a.iat=g(new Date):a instanceof Date?this.#a.iat=j("setIssuedAt",g(a)):"string"==typeof a?this.#a.iat=j("setIssuedAt",g(new Date)+i(a)):this.#a.iat=j("setIssuedAt",a)}}},24762:(a,b,c)=>{c.d(b,{y:()=>i});var d=c(58287),e=c(75497),f=c(38192);let g=a=>a?.[Symbol.toStringTag],h=(a,b,c)=>{if(void 0!==b.use){let a;switch(c){case"sign":case"verify":a="sig";break;case"encrypt":case"decrypt":a="enc"}if(b.use!==a)throw TypeError(`Invalid key for this operation, its "use" must be "${a}" when present`)}if(void 0!==b.alg&&b.alg!==a)throw TypeError(`Invalid key for this operation, its "alg" must be "${a}" when present`);if(Array.isArray(b.key_ops)){let d;switch(!0){case"sign"===c||"verify"===c:case"dir"===a:case a.includes("CBC-HS"):d=c;break;case a.startsWith("PBES2"):d="deriveBits";break;case/^A\d{3}(?:GCM)?(?:KW)?$/.test(a):d=!a.includes("GCM")&&a.endsWith("KW")?"encrypt"===c?"wrapKey":"unwrapKey":c;break;case"encrypt"===c&&a.startsWith("RSA"):d="wrapKey";break;case"decrypt"===c:d=a.startsWith("RSA")?"unwrapKey":"deriveBits"}if(d&&b.key_ops?.includes?.(d)===!1)throw TypeError(`Invalid key for this operation, its "key_ops" must include "${d}" when present`)}return!0};function i(a,b,c){switch(a.substring(0,2)){case"A1":case"A2":case"di":case"HS":case"PB":((a,b,c)=>{if(!(b instanceof Uint8Array)){if(f.ll(b)){if(f.t9(b)&&h(a,b,c))return;throw TypeError('JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present')}if(!(0,e.P2)(b))throw TypeError((0,d.t)(a,b,"CryptoKey","KeyObject","JSON Web Key","Uint8Array"));if("secret"!==b.type)throw TypeError(`${g(b)} instances for symmetric algorithms must be of type "secret"`)}})(a,b,c);break;default:((a,b,c)=>{if(f.ll(b))switch(c){case"decrypt":case"sign":if(f.W2(b)&&h(a,b,c))return;throw TypeError("JSON Web Key for this operation must be a private JWK");case"encrypt":case"verify":if(f.M3(b)&&h(a,b,c))return;throw TypeError("JSON Web Key for this operation must be a public JWK")}if(!(0,e.P2)(b))throw TypeError((0,d.t)(a,b,"CryptoKey","KeyObject","JSON Web Key"));if("secret"===b.type)throw TypeError(`${g(b)} instances for asymmetric algorithms must not be of type "secret"`);if("public"===b.type)switch(c){case"sign":throw TypeError(`${g(b)} instances for asymmetric algorithm signing must be of type "private"`);case"decrypt":throw TypeError(`${g(b)} instances for asymmetric algorithm decryption must be of type "private"`)}if("private"===b.type)switch(c){case"verify":throw TypeError(`${g(b)} instances for asymmetric algorithm verifying must be of type "public"`);case"encrypt":throw TypeError(`${g(b)} instances for asymmetric algorithm encryption must be of type "public"`)}})(a,b,c)}}},30121:(a,b,c)=>{c.d(b,{B:()=>e});var d=c(99129);function e(a,b){let c=`SHA-${a.slice(-3)}`;switch(a){case"HS256":case"HS384":case"HS512":return{hash:c,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:c,name:"RSA-PSS",saltLength:parseInt(a.slice(-3),10)>>3};case"RS256":case"RS384":case"RS512":return{hash:c,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:c,name:"ECDSA",namedCurve:b.namedCurve};case"Ed25519":case"EdDSA":return{name:"Ed25519"};case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":return{name:a};default:throw new d.T0(`alg ${a} is not supported either by JOSE or your javascript runtime`)}}},36281:(a,b,c)=>{c.d(b,{G:()=>d});function d(a){if("object"!=typeof a||null===a||"[object Object]"!==Object.prototype.toString.call(a))return!1;if(null===Object.getPrototypeOf(a))return!0;let b=a;for(;null!==Object.getPrototypeOf(b);)b=Object.getPrototypeOf(b);return Object.getPrototypeOf(a)===b}},38192:(a,b,c)=>{c.d(b,{M3:()=>g,W2:()=>f,ll:()=>e,t9:()=>h});var d=c(36281);let e=a=>(0,d.G)(a)&&"string"==typeof a.kty,f=a=>"oct"!==a.kty&&("AKP"===a.kty&&"string"==typeof a.priv||"string"==typeof a.d),g=a=>"oct"!==a.kty&&void 0===a.d&&void 0===a.priv,h=a=>"oct"===a.kty&&"string"==typeof a.k},41842:(a,b,c)=>{c.d(b,{f:()=>d});function d(...a){let b,c=a.filter(Boolean);if(0===c.length||1===c.length)return!0;for(let a of c){let c=Object.keys(a);if(!b||0===b.size){b=new Set(c);continue}for(let a of c){if(b.has(a))return!1;b.add(a)}}return!0}},48682:(a,b,c)=>{c.d(b,{O:()=>d});function d(a,b){if(a.startsWith("RS")||a.startsWith("PS")){let{modulusLength:c}=b.algorithm;if("number"!=typeof c||c<2048)throw TypeError(`${a} requires key modulusLength to be 2048 bits or larger`)}}},55956:(a,b,c)=>{let d;c.d(b,{l:()=>k});var e=c(38192),f=c(56642),g=c(99129);async function h(a){if(!a.alg)throw TypeError('"alg" argument is required when "jwk.alg" is not present');let{algorithm:b,keyUsages:c}=function(a){let b,c;switch(a.kty){case"AKP":switch(a.alg){case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":b={name:a.alg},c=a.priv?["sign"]:["verify"];break;default:throw new g.T0('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(a.alg){case"PS256":case"PS384":case"PS512":b={name:"RSA-PSS",hash:`SHA-${a.alg.slice(-3)}`},c=a.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":b={name:"RSASSA-PKCS1-v1_5",hash:`SHA-${a.alg.slice(-3)}`},c=a.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":b={name:"RSA-OAEP",hash:`SHA-${parseInt(a.alg.slice(-3),10)||1}`},c=a.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new g.T0('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(a.alg){case"ES256":b={name:"ECDSA",namedCurve:"P-256"},c=a.d?["sign"]:["verify"];break;case"ES384":b={name:"ECDSA",namedCurve:"P-384"},c=a.d?["sign"]:["verify"];break;case"ES512":b={name:"ECDSA",namedCurve:"P-521"},c=a.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":b={name:"ECDH",namedCurve:a.crv},c=a.d?["deriveBits"]:[];break;default:throw new g.T0('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"OKP":switch(a.alg){case"Ed25519":case"EdDSA":b={name:"Ed25519"},c=a.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":b={name:a.crv},c=a.d?["deriveBits"]:[];break;default:throw new g.T0('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;default:throw new g.T0('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:b,keyUsages:c}}(a),d={...a};return"AKP"!==d.kty&&delete d.alg,delete d.use,crypto.subtle.importKey("jwk",d,b,a.ext??(!a.d&&!a.priv),a.key_ops??c)}var i=c(75497);let j=async(a,b,c,e=!1)=>{let f=(d||=new WeakMap).get(a);if(f?.[c])return f[c];let g=await h({...b,alg:c});return e&&Object.freeze(a),f?f[c]=g:d.set(a,{[c]:g}),g};async function k(a,b){if(a instanceof Uint8Array||(0,i.R7)(a))return a;if((0,i.D2)(a)){if("secret"===a.type)return a.export();if("toCryptoKey"in a&&"function"==typeof a.toCryptoKey)try{return((a,b)=>{let c,e=(d||=new WeakMap).get(a);if(e?.[b])return e[b];let f="public"===a.type,g=!!f;if("x25519"===a.asymmetricKeyType){switch(b){case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":break;default:throw TypeError("given KeyObject instance cannot be used for this algorithm")}c=a.toCryptoKey(a.asymmetricKeyType,g,f?[]:["deriveBits"])}if("ed25519"===a.asymmetricKeyType){if("EdDSA"!==b&&"Ed25519"!==b)throw TypeError("given KeyObject instance cannot be used for this algorithm");c=a.toCryptoKey(a.asymmetricKeyType,g,[f?"verify":"sign"])}switch(a.asymmetricKeyType){case"ml-dsa-44":case"ml-dsa-65":case"ml-dsa-87":if(b!==a.asymmetricKeyType.toUpperCase())throw TypeError("given KeyObject instance cannot be used for this algorithm");c=a.toCryptoKey(a.asymmetricKeyType,g,[f?"verify":"sign"])}if("rsa"===a.asymmetricKeyType){let d;switch(b){case"RSA-OAEP":d="SHA-1";break;case"RS256":case"PS256":case"RSA-OAEP-256":d="SHA-256";break;case"RS384":case"PS384":case"RSA-OAEP-384":d="SHA-384";break;case"RS512":case"PS512":case"RSA-OAEP-512":d="SHA-512";break;default:throw TypeError("given KeyObject instance cannot be used for this algorithm")}if(b.startsWith("RSA-OAEP"))return a.toCryptoKey({name:"RSA-OAEP",hash:d},g,f?["encrypt"]:["decrypt"]);c=a.toCryptoKey({name:b.startsWith("PS")?"RSA-PSS":"RSASSA-PKCS1-v1_5",hash:d},g,[f?"verify":"sign"])}if("ec"===a.asymmetricKeyType){let d=new Map([["prime256v1","P-256"],["secp384r1","P-384"],["secp521r1","P-521"]]).get(a.asymmetricKeyDetails?.namedCurve);if(!d)throw TypeError("given KeyObject instance cannot be used for this algorithm");"ES256"===b&&"P-256"===d&&(c=a.toCryptoKey({name:"ECDSA",namedCurve:d},g,[f?"verify":"sign"])),"ES384"===b&&"P-384"===d&&(c=a.toCryptoKey({name:"ECDSA",namedCurve:d},g,[f?"verify":"sign"])),"ES512"===b&&"P-521"===d&&(c=a.toCryptoKey({name:"ECDSA",namedCurve:d},g,[f?"verify":"sign"])),b.startsWith("ECDH-ES")&&(c=a.toCryptoKey({name:"ECDH",namedCurve:d},g,f?[]:["deriveBits"]))}if(!c)throw TypeError("given KeyObject instance cannot be used for this algorithm");return e?e[b]=c:d.set(a,{[b]:c}),c})(a,b)}catch(a){if(a instanceof TypeError)throw a}let c=a.export({format:"jwk"});return j(a,c,b)}if((0,e.ll)(a))return a.k?(0,f.D)(a.k):j(a,a,b,!0);throw Error("unreachable")}},56642:(a,b,c)=>{c.d(b,{D:()=>e,l:()=>f});var d=c(73575);function e(a){if(Uint8Array.fromBase64)return Uint8Array.fromBase64("string"==typeof a?a:d.D0.decode(a),{alphabet:"base64url"});let b=a;b instanceof Uint8Array&&(b=d.D0.decode(b)),b=b.replace(/-/g,"+").replace(/_/g,"/");try{var c=b;if(Uint8Array.fromBase64)return Uint8Array.fromBase64(c);let a=atob(c),d=new Uint8Array(a.length);for(let b=0;b<a.length;b++)d[b]=a.charCodeAt(b);return d}catch{throw TypeError("The input to be decoded is not correctly encoded.")}}function f(a){let b=a;return("string"==typeof b&&(b=d.Rd.encode(b)),Uint8Array.prototype.toBase64)?b.toBase64({alphabet:"base64url",omitPadding:!0}):(function(a){if(Uint8Array.prototype.toBase64)return a.toBase64();let b=[];for(let c=0;c<a.length;c+=32768)b.push(String.fromCharCode.apply(null,a.subarray(c,c+32768)));return btoa(b.join(""))})(b).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}},58287:(a,b,c)=>{function d(a,b,...c){if((c=c.filter(Boolean)).length>2){let b=c.pop();a+=`one of type ${c.join(", ")}, or ${b}.`}else 2===c.length?a+=`one of type ${c[0]} or ${c[1]}.`:a+=`of type ${c[0]}.`;return null==b?a+=` Received ${b}`:"function"==typeof b&&b.name?a+=` Received function ${b.name}`:"object"==typeof b&&null!=b&&b.constructor?.name&&(a+=` Received an instance of ${b.constructor.name}`),a}c.d(b,{X:()=>e,t:()=>f});let e=(a,...b)=>d("Key must be ",a,...b),f=(a,b,...c)=>d(`Key for the ${a} algorithm must be `,b,...c)},63952:(a,b,c)=>{c.d(b,{j:()=>g});let d=(a,b="algorithm.name")=>TypeError(`CryptoKey does not support this operation, its ${b} must be ${a}`);function e(a){return parseInt(a.name.slice(4),10)}var f=c(58287);async function g(a,b,c){if(b instanceof Uint8Array){if(!a.startsWith("HS"))throw TypeError((0,f.X)(b,"CryptoKey","KeyObject","JSON Web Key"));return crypto.subtle.importKey("raw",b,{hash:`SHA-${a.slice(-3)}`,name:"HMAC"},!1,[c])}return!function(a,b,c){switch(b){case"HS256":case"HS384":case"HS512":{if("HMAC"!==a.algorithm.name)throw d("HMAC");let c=parseInt(b.slice(2),10);if(e(a.algorithm.hash)!==c)throw d(`SHA-${c}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if("RSASSA-PKCS1-v1_5"!==a.algorithm.name)throw d("RSASSA-PKCS1-v1_5");let c=parseInt(b.slice(2),10);if(e(a.algorithm.hash)!==c)throw d(`SHA-${c}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if("RSA-PSS"!==a.algorithm.name)throw d("RSA-PSS");let c=parseInt(b.slice(2),10);if(e(a.algorithm.hash)!==c)throw d(`SHA-${c}`,"algorithm.hash");break}case"Ed25519":case"EdDSA":if("Ed25519"!==a.algorithm.name)throw d("Ed25519");break;case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":let f;if(f=a.algorithm,f.name!==b)throw d(b);break;case"ES256":case"ES384":case"ES512":{if("ECDSA"!==a.algorithm.name)throw d("ECDSA");let c=function(a){switch(a){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw Error("unreachable")}}(b);if(a.algorithm.namedCurve!==c)throw d(c,"algorithm.namedCurve");break}default:throw TypeError("CryptoKey does not support this operation")}if(c&&!a.usages.includes(c))throw TypeError(`CryptoKey does not support this operation, its usages must include ${c}.`)}(b,a,c),b}},73575:(a,b,c)=>{c.d(b,{D0:()=>e,Rd:()=>d,lF:()=>g,xW:()=>f});let d=new TextEncoder,e=new TextDecoder;function f(...a){let b=new Uint8Array(a.reduce((a,{length:b})=>a+b,0)),c=0;for(let d of a)b.set(d,c),c+=d.length;return b}function g(a){let b=new Uint8Array(a.length);for(let c=0;c<a.length;c++){let d=a.charCodeAt(c);if(d>127)throw TypeError("non-ASCII string encountered in encode()");b[c]=d}return b}},75497:(a,b,c)=>{c.d(b,{D2:()=>e,P2:()=>f,R7:()=>d});let d=a=>{if(a?.[Symbol.toStringTag]==="CryptoKey")return!0;try{return a instanceof CryptoKey}catch{return!1}},e=a=>a?.[Symbol.toStringTag]==="KeyObject",f=a=>d(a)||e(a)},80308:(a,b,c)=>{c.d(b,{n:()=>e});var d=c(99129);function e(a,b,c,e,f){let g;if(void 0!==f.crit&&e?.crit===void 0)throw new a('"crit" (Critical) Header Parameter MUST be integrity protected');if(!e||void 0===e.crit)return new Set;if(!Array.isArray(e.crit)||0===e.crit.length||e.crit.some(a=>"string"!=typeof a||0===a.length))throw new a('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');for(let h of(g=void 0!==c?new Map([...Object.entries(c),...b.entries()]):b,e.crit)){if(!g.has(h))throw new d.T0(`Extension Header Parameter "${h}" is not recognized`);if(void 0===f[h])throw new a(`Extension Header Parameter "${h}" is missing`);if(g.get(h)&&void 0===e[h])throw new a(`Extension Header Parameter "${h}" MUST be integrity protected`)}return new Set(e.crit)}},99129:(a,b,c)=>{c.d(b,{Dp:()=>j,Rb:()=>g,T0:()=>h,Ye:()=>i,h2:()=>l,ie:()=>e,n:()=>f});class d extends Error{static code="ERR_JOSE_GENERIC";code="ERR_JOSE_GENERIC";constructor(a,b){super(a,b),this.name=this.constructor.name,Error.captureStackTrace?.(this,this.constructor)}}class e extends d{static code="ERR_JWT_CLAIM_VALIDATION_FAILED";code="ERR_JWT_CLAIM_VALIDATION_FAILED";claim;reason;payload;constructor(a,b,c="unspecified",d="unspecified"){super(a,{cause:{claim:c,reason:d,payload:b}}),this.claim=c,this.reason=d,this.payload=b}}class f extends d{static code="ERR_JWT_EXPIRED";code="ERR_JWT_EXPIRED";claim;reason;payload;constructor(a,b,c="unspecified",d="unspecified"){super(a,{cause:{claim:c,reason:d,payload:b}}),this.claim=c,this.reason=d,this.payload=b}}class g extends d{static code="ERR_JOSE_ALG_NOT_ALLOWED";code="ERR_JOSE_ALG_NOT_ALLOWED"}class h extends d{static code="ERR_JOSE_NOT_SUPPORTED";code="ERR_JOSE_NOT_SUPPORTED"}class i extends d{static code="ERR_JWS_INVALID";code="ERR_JWS_INVALID"}class j extends d{static code="ERR_JWT_INVALID";code="ERR_JWT_INVALID"}class k extends d{[Symbol.asyncIterator];static code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";constructor(a="multiple matching keys found in the JSON Web Key Set",b){super(a,b)}}class l extends d{static code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";constructor(a="signature verification failed",b){super(a,b)}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=7167,exports.ids=[7167],exports.modules={15102:(a,b,c)=>{c.d(b,{Uk:()=>f,bV:()=>e,lw:()=>g});let d={openai:{id:"openai",baseUrl:"https://api.openai.com/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"gpt-image-1",name:"GPT Image 1"},{id:"dall-e-3",name:"DALL-E 3"},{id:"dall-e-2",name:"DALL-E 2"}],supportedSizes:["1024x1024","1024x1792","1792x1024","256x256","512x512"]},xai:{id:"xai",baseUrl:"https://api.x.ai/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"grok-2-image-1212",name:"Grok 2 Image"}],supportedSizes:["1024x1024"]},together:{id:"together",baseUrl:"https://api.together.xyz/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"black-forest-labs/FLUX.1.1-pro",name:"FLUX 1.1 Pro"},{id:"black-forest-labs/FLUX.1-schnell-Free",name:"FLUX 1 Schnell (Free)"},{id:"stabilityai/stable-diffusion-xl-base-1.0",name:"SDXL Base 1.0"}],supportedSizes:["1024x1024","512x512"]},fireworks:{id:"fireworks",baseUrl:"https://api.fireworks.ai/inference/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"accounts/fireworks/models/flux-1-dev-fp8",name:"FLUX 1 Dev FP8"},{id:"accounts/fireworks/models/stable-diffusion-xl-1024-v1-0",name:"SDXL 1024 v1.0"}],supportedSizes:["1024x1024","512x512"]},antigravity:{id:"antigravity",baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"oauth",authHeader:"bearer",format:"gemini-image",models:[{id:"gemini-2.5-flash-preview-image-generation",name:"Nano Banana"}],supportedSizes:["1024x1024"]},nebius:{id:"nebius",baseUrl:"https://api.tokenfactory.nebius.com/v1/images/generations",fallbackUrl:"https://api.studio.nebius.com/v1/images/generations",authType:"apikey",authHeader:"bearer",format:"openai",models:[{id:"black-forest-labs/flux-schnell",name:"FLUX.1 Schnell"},{id:"black-forest-labs/flux-dev",name:"FLUX.1 Dev"}],supportedSizes:["1024x1024","512x512"]},hyperbolic:{id:"hyperbolic",baseUrl:"https://api.hyperbolic.xyz/v1/image/generation",authType:"apikey",authHeader:"bearer",format:"hyperbolic",models:[{id:"SDXL1.0-base",name:"SDXL 1.0 Base"},{id:"SD2",name:"Stable Diffusion 2"},{id:"FLUX.1-dev",name:"FLUX.1 Dev"}],supportedSizes:["1024x1024","512x512"]},nanobanana:{id:"nanobanana",baseUrl:"https://api.nanobananaapi.ai/api/v1/nanobanana/generate",proUrl:"https://api.nanobananaapi.ai/api/v1/nanobanana/generate-pro",statusUrl:"https://api.nanobananaapi.ai/api/v1/nanobanana/record-info",authType:"apikey",authHeader:"bearer",format:"nanobanana",models:[{id:"nanobanana-flash",name:"NanoBanana Flash (Gemini 2.5 Flash)"},{id:"nanobanana-pro",name:"NanoBanana Pro (Gemini 3 Pro)"}],supportedSizes:["1024x1024","1024x1280","1024x1536","1536x1024","1280x1024"]},sdwebui:{id:"sdwebui",baseUrl:"http://localhost:7860/sdapi/v1/txt2img",authType:"none",authHeader:"none",format:"sdwebui",models:[{id:"stable-diffusion-v1-5",name:"Stable Diffusion v1.5"},{id:"sdxl-base-1.0",name:"SDXL Base 1.0"}],supportedSizes:["512x512","768x768","1024x1024"]},comfyui:{id:"comfyui",baseUrl:"http://localhost:8188",authType:"none",authHeader:"none",format:"comfyui",models:[{id:"flux-dev",name:"FLUX Dev"},{id:"sdxl",name:"SDXL"}],supportedSizes:["512x512","768x768","1024x1024"]}};function e(a){return d[a]||null}function f(a){if(!a)return{provider:null,model:null};for(let[b,c]of Object.entries(d))if(a.startsWith(b+"/"))return{provider:b,model:a.slice(b.length+1)};for(let[b,c]of Object.entries(d))if(c.models.some(b=>b.id===a))return{provider:b,model:a};return{provider:null,model:a}}function g(){let a=[];for(let[b,c]of Object.entries(d))for(let d of c.models)a.push({id:`${b}/${d.id}`,name:d.name,provider:b,supportedSizes:c.supportedSizes});return a}},39548:(a,b,c)=>{c.d(b,{k:()=>g});var d=c(15102),e=c(19704),f=c(92310);async function g({body:a,credentials:b,log:c,resolvedProvider:e=null}){let f,g;if(e){f=e;let b=a.model||"";g=b.startsWith(f+"/")?b.slice(f.length+1):b}else{let b=(0,d.Uk)(a.model);f=b.provider,g=b.model}if(!f)return{success:!1,status:400,error:`Invalid image model: ${a.model}. Use format: provider/model`};let j=(0,d.bV)(f);if(!j){if(!e)return{success:!1,status:400,error:`Unknown image provider: ${f}`};c&&c.info("IMAGE",`Custom model ${f}/${g} — using OpenAI-compatible handler`);let d={id:f,baseUrl:b?.baseUrl||"https://generativelanguage.googleapis.com/v1beta/openai/images/generations",authType:"apikey",authHeader:"bearer",format:"openai"};return i({model:g,provider:f,providerConfig:d,body:a,credentials:b,log:c})}return"gemini-image"===j.format?h({model:g,providerConfig:j,body:a,credentials:b,log:c}):"hyperbolic"===j.format?k({model:g,provider:f,providerConfig:j,body:a,credentials:b,log:c}):"nanobanana"===j.format?l({model:g,provider:f,providerConfig:j,body:a,credentials:b,log:c}):"sdwebui"===j.format?o({model:g,provider:f,providerConfig:j,body:a,log:c}):"comfyui"===j.format?p({model:g,provider:f,providerConfig:j,body:a,log:c}):i({model:g,provider:f,providerConfig:j,body:a,credentials:b,log:c})}async function h({model:a,providerConfig:b,body:c,credentials:d,log:f}){let g=Date.now(),h=`${b.baseUrl}/${a}:generateContent`,i="antigravity",j={model:c.model,prompt:"string"==typeof c.prompt?c.prompt.slice(0,200):String(c.prompt??"").slice(0,200),size:c.size||"default",n:c.n||1},k={contents:[{parts:[{text:c.prompt}]}],generationConfig:{responseModalities:["TEXT","IMAGE"]}},l=d.accessToken||d.apiKey,m={"Content-Type":"application/json",Authorization:`Bearer ${l}`};if(f){let b="string"==typeof c.prompt?c.prompt.slice(0,60):String(c.prompt??"").slice(0,60);f.info("IMAGE",`antigravity/${a} (gemini) | prompt: "${b}..." | format: gemini-image`)}try{let b=await fetch(h,{method:"POST",headers:m,body:JSON.stringify(k)});if(!b.ok){let c=await b.text();return f&&f.error("IMAGE",`antigravity error ${b.status}: ${c.slice(0,200)}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:b.status,model:`antigravity/${a}`,provider:i,duration:Date.now()-g,error:c.slice(0,500),requestBody:j}).catch(()=>{}),{success:!1,status:b.status,error:c}}let d=await b.json(),l=[];for(let a of d.candidates||[]){let b=a.content?.parts||[];for(let a of b)a.inlineData&&l.push({b64_json:a.inlineData.data,revised_prompt:b.find(a=>a.text)?.text||c.prompt})}return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`antigravity/${a}`,provider:i,duration:Date.now()-g,tokens:{prompt_tokens:0,completion_tokens:0},requestBody:j,responseBody:{images_count:l.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:l}}}catch(b){return f&&f.error("IMAGE",`antigravity fetch error: ${b.message}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`antigravity/${a}`,provider:i,duration:Date.now()-g,error:b.message,requestBody:j}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${b.message}`}}}async function i({model:a,provider:b,providerConfig:c,body:d,credentials:f,log:g}){let h=Date.now(),i={model:d.model,prompt:"string"==typeof d.prompt?d.prompt.slice(0,200):String(d.prompt??"").slice(0,200),size:d.size||"default",n:d.n||1,quality:d.quality||void 0},k={model:a,prompt:d.prompt};void 0!==d.n&&(k.n=d.n),void 0!==d.size&&(k.size=d.size),void 0!==d.quality&&(k.quality=d.quality),void 0!==d.response_format&&(k.response_format=d.response_format),void 0!==d.style&&(k.style=d.style);let l={"Content-Type":"application/json"},m=f.apiKey||f.accessToken;if("bearer"===c.authHeader?l.Authorization=`Bearer ${m}`:"x-api-key"===c.authHeader&&(l["x-api-key"]=m),g){let c="string"==typeof d.prompt?d.prompt.slice(0,60):String(d.prompt??"").slice(0,60);g.info("IMAGE",`${b}/${a} | prompt: "${c}..." | size: ${d.size||"default"}`)}let n=JSON.stringify(k),o=await j(c.baseUrl,l,n,b,g);return!o.success&&c.fallbackUrl&&[404,410,502,503].includes(o.status)&&(g&&g.info("IMAGE",`${b}: primary URL failed (${o.status}), trying fallback...`),o=await j(c.fallbackUrl,l,n,b,g)),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:o.status||(o.success?200:502),model:`${b}/${a}`,provider:b,duration:Date.now()-h,tokens:{prompt_tokens:0,completion_tokens:0},error:o.success?null:"string"==typeof o.error?o.error.slice(0,500):null,requestBody:i,responseBody:o.success?{images_count:o.data?.data?.length||0}:null}).catch(()=>{}),o}async function j(a,b,c,d,e){try{let f=await fetch(a,{method:"POST",headers:b,body:c});if(!f.ok){let a=await f.text();return e&&e.error("IMAGE",`${d} error ${f.status}: ${a.slice(0,200)}`),{success:!1,status:f.status,error:a}}let g=await f.json();return{success:!0,data:{created:g.created||Math.floor(Date.now()/1e3),data:g.data||[]}}}catch(a){return e&&e.error("IMAGE",`${d} fetch error: ${a.message}`),{success:!1,status:502,error:`Image provider error: ${a.message}`}}}async function k({model:a,provider:b,providerConfig:c,body:d,credentials:f,log:g}){let h=Date.now(),i=f.apiKey||f.accessToken,[j,k]=(d.size||"1024x1024").split("x").map(Number),l={model_name:a,prompt:d.prompt,height:k||1024,width:j||1024,backend:"auto"};if(g){let c=String(d.prompt??"").slice(0,60);g.info("IMAGE",`${b}/${a} (hyperbolic) | prompt: "${c}..."`)}try{let f=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify(l)});if(!f.ok){let c=await f.text();return g&&g.error("IMAGE",`${b} error ${f.status}: ${c.slice(0,200)}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:f.status,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.slice(0,500)}).catch(()=>{}),{success:!1,status:f.status,error:c}}let j=((await f.json()).images||[]).map(a=>({b64_json:a.image,revised_prompt:d.prompt}));return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-h,responseBody:{images_count:j.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:j}}}catch(c){return g&&g.error("IMAGE",`${b} fetch error: ${c.message}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${c.message}`}}}async function l({model:a,provider:b,providerConfig:c,body:d,credentials:f,log:g}){let h=Date.now(),i=f.apiKey||f.accessToken,j="nanobanana-pro"===a,k=j&&c.proUrl?c.proUrl:c.baseUrl,l=c.statusUrl,o="string"==typeof d.aspectRatio?d.aspectRatio:"string"==typeof d.aspect_ratio?d.aspect_ratio:function(a){if("string"!=typeof a)return null;let[b,c]=a.split("x"),d=Number(b),e=Number(c);if(!Number.isFinite(d)||!Number.isFinite(e)||d<=0||e<=0)return null;let f=(a,b)=>0===b?a:f(b,a%b),g=f(Math.round(d),Math.round(e));return`${Math.round(d/g)}:${Math.round(e/g)}`}(d.size)||"1:1",p="string"==typeof d.resolution?d.resolution:function(a){if("string"!=typeof a)return null;let[b,c]=a.split("x"),d=Number(b),e=Number(c);if(!Number.isFinite(d)||!Number.isFinite(e)||d<=0||e<=0)return null;let f=Math.max(d,e);return f<=1024?"1K":f<=2048?"2K":"4K"}(d.size)||"1K";"hd"===d.quality&&"1K"===p&&(p="2K");let q=j?{prompt:d.prompt,resolution:p,aspectRatio:o,...Array.isArray(d.imageUrls)?{imageUrls:d.imageUrls}:{}}:{prompt:d.prompt,type:Array.isArray(d.imageUrls)&&d.imageUrls.length>0?"IMAGETOIAMGE":"TEXTTOIAMGE",numImages:Number.isFinite(d.n)?Math.max(1,Number(d.n)):1,image_size:o,...Array.isArray(d.imageUrls)?{imageUrls:d.imageUrls}:{}};if(g){let c=String(d.prompt??"").slice(0,60);g.info("IMAGE",`${b}/${a} (nanobanana ${j?"pro":"flash"}) | prompt: "${c}..."`)}try{let c=await fetch(k,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify(q)});if(!c.ok){let d=await c.text();return g&&g.error("IMAGE",`${b} submit error ${c.status}: ${d.slice(0,200)}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:c.status,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:d.slice(0,500)}).catch(()=>{}),{success:!1,status:c.status,error:d}}let f=await c.json();if(f?.image||Array.isArray(f?.images)||Array.isArray(f?.data)||f?.data?.[0]?.url||f?.data?.[0]?.b64_json){let c=function(a,b){let c=[];if(a.image)c.push({b64_json:a.image,revised_prompt:b});else if(Array.isArray(a.images))for(let d of a.images)c.push({b64_json:"string"==typeof d?d:d?.image||d?.data,revised_prompt:b});else if(Array.isArray(a.data))for(let b of a.data)b&&c.push(b);return{data:c.filter(Boolean)}}(f,d.prompt);return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-h,responseBody:{images_count:c.data?.length||0,mode:"sync"}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:c.data}}}let j=f?.data?.taskId||f?.taskId;if(!j){let c=`NanoBanana submit did not return taskId: ${JSON.stringify(f).slice(0,400)}`;return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c}).catch(()=>{}),{success:!1,status:502,error:c}}if(!l){let c="NanoBanana statusUrl is not configured";return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:500,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c}).catch(()=>{}),{success:!1,status:500,error:c}}let o=n(d.timeout_ms,n(process.env.NANOBANANA_POLL_TIMEOUT_MS,12e4)),p=n(d.poll_interval_ms,n(process.env.NANOBANANA_POLL_INTERVAL_MS,2500)),r=null,s=Date.now()+o;for(;Date.now()<s;){let c=await fetch(`${l}?taskId=${encodeURIComponent(j)}`,{method:"GET",headers:{Authorization:`Bearer ${i}`}});if(!c.ok){let a=await c.text();return g&&g.error("IMAGE",`${b} poll error ${c.status}: ${a.slice(0,200)}`),{success:!1,status:c.status,error:a}}let f=await c.json(),k=f?.data||f;r=k;let n=Number(k?.successFlag);if(1===n){let c=await m(k,d,g);return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-h,responseBody:{images_count:c.length,mode:"async",taskId:j}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:c}}}if(2===n||3===n){let c=k?.errorMessage||`NanoBanana task failed (successFlag=${String(n)})`;return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.slice(0,500),responseBody:{taskId:j,successFlag:n,errorCode:k?.errorCode??null}}).catch(()=>{}),{success:!1,status:502,error:c}}await function(a){return new Promise(b=>setTimeout(b,a))}(p)}let t=`NanoBanana task timeout after ${o}ms (taskId=${j}, successFlag=${String(r?.successFlag??"unknown")})`;return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:504,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:t,responseBody:{taskId:j,lastSuccessFlag:r?.successFlag??null}}).catch(()=>{}),{success:!1,status:504,error:t}}catch(c){return g&&g.error("IMAGE",`${b} fetch error: ${c.message}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${c.message}`}}}async function m(a,b,c){let d=a?.response||{},e=[d?.resultImageUrl,d?.originImageUrl,a?.resultImageUrl,a?.originImageUrl].filter(a=>"string"==typeof a&&a.length>0);if(Array.isArray(d?.resultImageUrls))for(let a of d.resultImageUrls)"string"==typeof a&&a.length>0&&e.push(a);let f=[d?.resultImageBase64,d?.resultImage,a?.resultImageBase64,a?.resultImage].filter(a=>"string"==typeof a&&a.length>0);if(Array.isArray(d?.resultImageBase64List))for(let a of d.resultImageBase64List)"string"==typeof a&&a.length>0&&f.push(a);if("b64_json"===b.response_format){if(f.length>0)return f.map(a=>({b64_json:a,revised_prompt:b.prompt}));if(e.length>0){let a=e[0],c=await fetch(a);if(!c.ok)throw Error(`Failed to fetch NanoBanana result image URL (${c.status})`);let d=await c.arrayBuffer();return[{b64_json:Buffer.from(d).toString("base64"),revised_prompt:b.prompt}]}}return e.length>0?e.map(a=>({url:a,revised_prompt:b.prompt})):f.length>0?f.map(a=>({b64_json:a,revised_prompt:b.prompt})):(c&&c.warn("IMAGE",`NanoBanana task completed without image payload: ${JSON.stringify(a).slice(0,240)}`),[])}function n(a,b){let c=Number(a);return!Number.isFinite(c)||c<=0?b:Math.floor(c)}async function o({model:a,provider:b,providerConfig:c,body:d,log:f}){let g=Date.now(),[h,i]=(d.size||"512x512").split("x").map(Number),j={prompt:d.prompt,negative_prompt:d.negative_prompt||"",width:h||512,height:i||512,steps:d.steps||20,cfg_scale:d.cfg_scale||7,sampler_name:d.sampler||"Euler a",batch_size:d.n||1,override_settings:{sd_model_checkpoint:a}};if(f){let c=String(d.prompt??"").slice(0,60);f.info("IMAGE",`${b}/${a} (sdwebui) | prompt: "${c}..."`)}try{let h=await fetch(c.baseUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)});if(!h.ok){let c=await h.text();return f&&f.error("IMAGE",`${b} error ${h.status}: ${c.slice(0,200)}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:h.status,model:`${b}/${a}`,provider:b,duration:Date.now()-g,error:c.slice(0,500)}).catch(()=>{}),{success:!1,status:h.status,error:c}}let i=((await h.json()).images||[]).map(a=>({b64_json:a,revised_prompt:d.prompt}));return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-g,responseBody:{images_count:i.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:i}}}catch(c){return f&&f.error("IMAGE",`${b} sdwebui error: ${c.message}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-g,error:c.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${c.message}`}}}async function p({model:a,provider:b,providerConfig:c,body:d,log:g}){let h=Date.now(),[i,j]=(d.size||"1024x1024").split("x").map(Number),k={3:{class_type:"KSampler",inputs:{seed:Math.floor(0x100000000*Math.random()),steps:d.steps||20,cfg:d.cfg_scale||7,sampler_name:"euler",scheduler:"normal",denoise:1,model:["4",0],positive:["6",0],negative:["7",0],latent_image:["5",0]}},4:{class_type:"CheckpointLoaderSimple",inputs:{ckpt_name:a}},5:{class_type:"EmptyLatentImage",inputs:{width:i||1024,height:j||1024,batch_size:d.n||1}},6:{class_type:"CLIPTextEncode",inputs:{text:d.prompt,clip:["4",1]}},7:{class_type:"CLIPTextEncode",inputs:{text:d.negative_prompt||"",clip:["4",1]}},8:{class_type:"VAEDecode",inputs:{samples:["3",0],vae:["4",2]}},9:{class_type:"SaveImage",inputs:{filename_prefix:"omniroute",images:["8",0]}}};if(g){let c=String(d.prompt??"").slice(0,60);g.info("IMAGE",`${b}/${a} (comfyui) | prompt: "${c}..."`)}try{let g=await (0,f.ep)(c.baseUrl,k),i=await (0,f.VA)(c.baseUrl,g),j=(0,f.AC)(i),l=[];for(let a of j){let b=await (0,f.Uh)(c.baseUrl,a.filename,a.subfolder,a.type),e=Buffer.from(b).toString("base64");l.push({b64_json:e,revised_prompt:d.prompt})}return(0,e.gK)({method:"POST",path:"/v1/images/generations",status:200,model:`${b}/${a}`,provider:b,duration:Date.now()-h,responseBody:{images_count:l.length}}).catch(()=>{}),{success:!0,data:{created:Math.floor(Date.now()/1e3),data:l}}}catch(c){return g&&g.error("IMAGE",`${b} comfyui error: ${c.message}`),(0,e.gK)({method:"POST",path:"/v1/images/generations",status:502,model:`${b}/${a}`,provider:b,duration:Date.now()-h,error:c.message}).catch(()=>{}),{success:!1,status:502,error:`Image provider error: ${c.message}`}}}}};